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

178 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 收发模块测试节点使用说明
## 功能概述
`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. 或者进行环路测试(自己发自己收)