收发测试

This commit is contained in:
2026-03-23 02:10:54 +08:00
parent 338ca9d2b7
commit f2ebd8e78a
7 changed files with 830 additions and 0 deletions

178
docs/TRANSMITTER_TEST.md Normal file
View 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. 或者进行环路测试(自己发自己收)