4.6 KiB
4.6 KiB
收发模块测试节点使用说明
功能概述
transmitter_test_node 是一个用于测试 USB2CAN 收发模块功能的 ROS2 节点,主要功能包括:
- 设备初始化:自动查找并连接 USB2CAN 设备
- 定时发送:以指定频率发送测试控制指令
- ID 0x149: 运动控制指令 (X/Y 平动、偏航、俯仰)
- ID 0x189: 攻击控制指令 (拨弹盘、小陀螺、摩擦轮)
- 数据接收:接收并打印 CAN 总线上的数据
- 状态监控:发布连接状态到 ROS 话题
- 环路测试:支持双通道环路测试(通道0发,通道1收)
编译
# 在工作空间根目录执行
colcon build --packages-select amadeus_26
运行
方式一:直接运行
# 设置环境
source install/setup.bash
# 运行节点(使用默认参数)
ros2 run amadeus_26 transmitter_test_node
# 或指定参数运行
ros2 run amadeus_26 transmitter_test_node --ros-args \
-p tx_channel:=0 \
-p rx_channel:=1 \
-p can_id_motion:=329 \
-p can_id_attack:=393
方式二:使用 Launch 文件
# 设置环境
source install/setup.bash
# 使用默认参数启动
ros2 launch amadeus_26 transmitter_test.launch.py
# 或指定参数启动
ros2 launch amadeus_26 transmitter_test.launch.py \
tx_channel:=0 \
rx_channel:=1 \
can_id_motion:=329 \
can_id_attack:=393 \
use_extended_frame:=false \
use_canfd:=false
参数说明
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
send_frequency |
double | 50.0 | CAN 发送频率 (Hz) |
tx_channel |
int | 0 | CAN 发送通道 (0 或 1) |
rx_channel |
int | 1 | CAN 接收通道 (0 或 1) |
can_id_motion |
int | 329 (0x149) | 运动控制 CAN ID |
can_id_attack |
int | 393 (0x189) | 攻击控制 CAN ID |
use_extended_frame |
bool | false | 是否使用扩展帧(29位ID) |
use_canfd |
bool | false | 是否使用 CANFD |
use_brs |
bool | false | CANFD 是否启用波特率切换 |
rx_filter_enabled |
bool | false | 是否启用接收 ID 过滤 |
rx_filter_id_min |
int | 0 | 接收过滤 ID 最小值 |
rx_filter_id_max |
int | 2047 | 接收过滤 ID 最大值 |
话题
发布的话题
/transmitter/connection_status(std_msgs/Bool): USB2CAN 连接状态
CAN 协议
运动控制 (ID: 0x149)
数据格式 (8 bytes):
[0-1]: X轴平动 (左右), 范围 [-660, 660]
[2-3]: Y轴平动 (前后), 范围 [-660, 660]
[4-5]: 云台偏航, 范围 [-660, 660]
[6-7]: 云台俯仰, 范围 [-660, 660]
攻击控制 (ID: 0x189)
数据格式 (8 bytes):
[0-1]: 拨弹盘 (660=进弹, 0=关闭, -660=退弹)
[2-3]: 小陀螺开关 (660=开启, 0=关闭)
[4-5]: 摩擦轮开关 (660=开启, 0=关闭)
[6-7]: 预留
环路测试
用于调试收发功能,将两个 CAN 端口连接在一起:
物理连接
USB2CAN 模块
├── 通道0 (CAN0) ──┐
│ - CAN_H │
│ - CAN_L ├── 短接在一起(H-H, L-L)
├── 通道1 (CAN1) ──┘
- CAN_H
- CAN_L
注意:需要在总线两端各加一个 120Ω 终端电阻!
运行环路测试
ros2 launch amadeus_26 transmitter_test.launch.py \
tx_channel:=0 \
rx_channel:=1
预期输出
[发送回调] ID: 0x149
[发送回调] ID: 0x189
[接收回调] 通道1 ID: 0x149, 长度: 8, 数据: ...
[接收回调] 通道1 ID: 0x189, 长度: 8, 数据: ...
注意事项
-
设备权限:确保当前用户有权限访问 USB 设备
sudo usermod -aG dialout $USER # 重新登录后生效 -
udev 规则:设置 USB 设备权限规则
sudo cp lib/transmitter_sdk/50-usb2can.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo udevadm trigger -
终端电阻:CAN 总线必须在两端各加 120Ω 终端电阻
-
波特率:默认使用 1000000 bps (1Mbps),确保所有设备波特率一致
常见问题
Q: 节点启动时提示 "未找到 USB2CAN 设备"
A: 检查设备是否连接,使用 lsusb 查看设备是否存在
Q: 运行时报错 "cannot open shared object file"
A: 设置库文件路径:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/lib/transmitter_sdk/lib/linux/x64
Q: 接收不到数据
A:
- 确认 CAN 线正确连接(H-H, L-L)
- 检查是否有 120Ω 终端电阻
- 确认波特率设置正确
Q: 发送回调突然停止
A: 这是 CAN 协议的 ACK 机制。如果没有设备响应 ACK,发送会停止。确保:
- 总线上至少有一个设备能响应 ACK
- 或者进行环路测试(自己发自己收)