# 收发模块测试节点使用说明 ## 功能概述 `transmitter_test_node` 是一个用于测试 USB2CAN 收发模块功能的 ROS2 节点,主要功能包括: 1. **设备初始化**:自动查找并连接 USB2CAN 设备 2. **定时发送**:以指定频率发送测试控制指令 - ID 0x149: 运动控制指令 (X/Y 平动、偏航、俯仰) - ID 0x189: 攻击控制指令 (拨弹盘、小陀螺、摩擦轮) 3. **数据接收**:接收并打印 CAN 总线上的数据 4. **状态监控**:发布连接状态到 ROS 话题 5. **环路测试**:支持双通道环路测试(通道0发,通道1收) ## 编译 ```bash # 在工作空间根目录执行 colcon build --packages-select amadeus_26 ``` ## 运行 ### 方式一:直接运行 ```bash # 设置环境 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 文件 ```bash # 设置环境 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Ω 终端电阻**! ### 运行环路测试 ```bash 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, 数据: ... ``` ## 注意事项 1. **设备权限**:确保当前用户有权限访问 USB 设备 ```bash sudo usermod -aG dialout $USER # 重新登录后生效 ``` 2. **udev 规则**:设置 USB 设备权限规则 ```bash sudo cp lib/transmitter_sdk/50-usb2can.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo udevadm trigger ``` 3. **终端电阻**:CAN 总线必须在两端各加 120Ω 终端电阻 4. **波特率**:默认使用 1000000 bps (1Mbps),确保所有设备波特率一致 ## 常见问题 ### Q: 节点启动时提示 "未找到 USB2CAN 设备" A: 检查设备是否连接,使用 `lsusb` 查看设备是否存在 ### Q: 运行时报错 "cannot open shared object file" A: 设置库文件路径: ```bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/lib/transmitter_sdk/lib/linux/x64 ``` ### Q: 接收不到数据 A: 1. 确认 CAN 线正确连接(H-H, L-L) 2. 检查是否有 120Ω 终端电阻 3. 确认波特率设置正确 ### Q: 发送回调突然停止 A: 这是 CAN 协议的 ACK 机制。如果没有设备响应 ACK,发送会停止。确保: 1. 总线上至少有一个设备能响应 ACK 2. 或者进行环路测试(自己发自己收)