帧定义实现,串口工具更新
This commit is contained in:
@@ -1,10 +0,0 @@
|
||||
# 控制指令的发送说明
|
||||
|
||||
在主机外接收的控制板中的控制协议是:
|
||||
|
||||
| 帧头1 | 帧头2 | 平动左右 | 平动前后 | 云台偏航 | 云台俯仰 | 拨弹轮 | 左拨杆 | 右拨杆 | CRC8 | 帧尾 |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| 1 | 1 | 2 | 2 | 2 | 2 | 2 | 0.5 | 0.5 | 1 | 1 |
|
||||
|
||||
|
||||
两个 ID 分别是云台和底盘的控制板,在处于进点/回家状态时不应开启小陀螺,发射弹丸需要**打开摩擦轮 同时 进弹**,因此只有在处于攻击状态时开启摩擦轮,此时可以将进弹视为扳机。
|
||||
39
docs/Transmit/ctrl_frame.md
Normal file
39
docs/Transmit/ctrl_frame.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# SRCP 通信协议帧结构
|
||||
|
||||
## 帧格式
|
||||
|
||||
| 字段 | 内容 | 长度 | 说明 |
|
||||
|------|------|------|------|
|
||||
| SOF | 0xBB 0x77 | 2 bytes | 帧头 |
|
||||
| x_move | -660~660 | 2 bytes | 平动左右 (小端序) |
|
||||
| y_move | -660~660 | 2 bytes | 平动前后 (小端序) |
|
||||
| yaw | -660~660 | 2 bytes | 云台偏航 (小端序) |
|
||||
| pitch | -660~660 | 2 bytes | 云台俯仰 (小端序) |
|
||||
| feed | -660~660 | 2 bytes | 拨弹轮 (小端序) |
|
||||
| key | 0~15 | 1 byte | 按键 |
|
||||
| crc8 | CRC8-MAXIM | 1 byte | 校验 |
|
||||
| EOF | 0xEE | 1 byte | 帧尾 |
|
||||
|
||||
## 帧长度
|
||||
|
||||
```
|
||||
SOF(2) + x_move(2) + y_move(2) + yaw(2) + pitch(2) + feed(2) + key(1) + crc8(1) + EOF(1) = 15 bytes
|
||||
```
|
||||
|
||||
**FRAME_LENGTH = 15**
|
||||
|
||||
## 字节序
|
||||
|
||||
- 所有 int16_t 类型字段(x_move, y_move, yaw, pitch, feed)使用 **小端序**
|
||||
|
||||
## 代码示例
|
||||
|
||||
```cpp
|
||||
constexpr int FRAME_LENGTH = 15; // 总帧长度
|
||||
|
||||
frame[0] = 0xBB; // SOF
|
||||
frame[1] = 0x77; // SOF
|
||||
frame[2] = x_move & 0xFF; // 低字节
|
||||
frame[3] = (x_move >> 8) & 0xFF; // 高字节
|
||||
// ... 其他字段
|
||||
frame[14] = 0xEE; // EOF
|
||||
87
docs/Transmit/usb_device_setup.md
Normal file
87
docs/Transmit/usb_device_setup.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# USB 串口设备权限设置指南
|
||||
|
||||
## 文件说明
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `99-usb-serial.rules` | udev 规则文件,固定设备名称和权限 |
|
||||
| `setup_usb_permissions.sh` | 自动化设置脚本 |
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 方法一:使用自动化脚本(推荐)
|
||||
|
||||
```bash
|
||||
cd ~/code/amadeus_26
|
||||
./setup_usb_permissions.sh
|
||||
```
|
||||
|
||||
### 方法二:手动设置
|
||||
|
||||
1. **识别设备 VID/PID**
|
||||
|
||||
```bash
|
||||
# 查看 CH340 设备信息
|
||||
udevadm info -a -n /dev/ttyUSB0 | grep -E "idVendor|idProduct"
|
||||
|
||||
# 查看 IMU 设备信息
|
||||
udevadm info -a -n /dev/ttyUSB1 | grep -E "idVendor|idProduct"
|
||||
```
|
||||
|
||||
2. **安装 udev 规则**
|
||||
|
||||
```bash
|
||||
sudo cp 99-usb-serial.rules /etc/udev/rules.d/
|
||||
sudo udevadm control --reload-rules
|
||||
sudo udevadm trigger
|
||||
```
|
||||
|
||||
3. **添加用户权限**
|
||||
|
||||
```bash
|
||||
sudo usermod -aG dialout $USER
|
||||
```
|
||||
|
||||
4. **生效**
|
||||
|
||||
- 重新插拔 USB 设备,或重启系统
|
||||
- 注销并重新登录,使权限生效
|
||||
|
||||
## 设备映射
|
||||
|
||||
设置完成后,设备将以固定名称出现:
|
||||
|
||||
| 设备 | 固定名称 | 原名称 |
|
||||
|------|----------|--------|
|
||||
| CH340 发送模块 | `/dev/ttyCH340` | `/dev/ttyUSB0` |
|
||||
| IMU 模块 | `/dev/ttyIMU` | `/dev/ttyUSB1` |
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
# 检查设备链接
|
||||
ls -la /dev/ttyCH340 /dev/ttyIMU
|
||||
|
||||
# 检查权限
|
||||
ls -la /dev/ttyUSB*
|
||||
```
|
||||
|
||||
## 使用
|
||||
|
||||
修改 launch 文件中的默认设备路径:
|
||||
|
||||
```python
|
||||
# launch/uart_transmitter.launch.py
|
||||
serial_port_arg = DeclareLaunchArgument(
|
||||
'serial_port',
|
||||
default_value='/dev/ttyCH340', # 使用固定名称
|
||||
description='CH340 串口设备路径'
|
||||
)
|
||||
```
|
||||
|
||||
运行节点:
|
||||
|
||||
```bash
|
||||
ros2 launch amadeus_26 uart_transmitter.launch.py
|
||||
# 或指定 IMU 设备
|
||||
ros2 launch amadeus_26 uart_transmitter.launch.py serial_port:=/dev/ttyIMU
|
||||
Reference in New Issue
Block a user