收发测试
This commit is contained in:
178
docs/TRANSMITTER_TEST.md
Normal file
178
docs/TRANSMITTER_TEST.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# 收发模块测试节点使用说明
|
||||
|
||||
## 功能概述
|
||||
|
||||
`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. 或者进行环路测试(自己发自己收)
|
||||
Reference in New Issue
Block a user