Files
amadeus_26/docs/TRANSMITTER_TEST.md
2026-03-23 02:10:54 +08:00

4.6 KiB
Raw Permalink Blame History

收发模块测试节点使用说明

功能概述

transmitter_test_node 是一个用于测试 USB2CAN 收发模块功能的 ROS2 节点,主要功能包括:

  1. 设备初始化:自动查找并连接 USB2CAN 设备
  2. 定时发送:以指定频率发送测试控制指令
    • ID 0x149: 运动控制指令 (X/Y 平动、偏航、俯仰)
    • ID 0x189: 攻击控制指令 (拨弹盘、小陀螺、摩擦轮)
  3. 数据接收:接收并打印 CAN 总线上的数据
  4. 状态监控:发布连接状态到 ROS 话题
  5. 环路测试支持双通道环路测试通道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, 数据: ...

注意事项

  1. 设备权限:确保当前用户有权限访问 USB 设备

    sudo usermod -aG dialout $USER
    # 重新登录后生效
    
  2. udev 规则:设置 USB 设备权限规则

    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: 设置库文件路径:

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. 或者进行环路测试(自己发自己收)