add readme
This commit is contained in:
parent
9adee3edec
commit
9b0701fe6b
104
README.md
104
README.md
@ -135,3 +135,107 @@ make -C build/ -j$(nproc)
|
||||
```bash
|
||||
ls -l /dev/gimbal
|
||||
```
|
||||
|
||||
## 通信协议
|
||||
|
||||
### 1. CBoard 协议(CAN 总线)
|
||||
|
||||
通过 SocketCAN 与 RoboMaster C 型开发板通信,CAN ID 由 yaml 配置。
|
||||
|
||||
**发送帧 — 控制命令(CAN ID: 0xff)**
|
||||
|
||||
```
|
||||
8 bytes, Big-Endian
|
||||
[0] : control (uint8) 0=不控制, 1=控制
|
||||
[1] : shoot (uint8) 0=不射击, 1=射击
|
||||
[2-3] : yaw (int16) 缩放 1e4, 单位 rad
|
||||
[4-5] : pitch (int16) 缩放 1e4, 单位 rad
|
||||
[6-7] : horizon_distance (int16) 缩放 1e4(无人机专有)
|
||||
```
|
||||
|
||||
**接收帧1 — 四元数(CAN ID: 0x100 / 0x01)**
|
||||
|
||||
```
|
||||
8 bytes, Big-Endian
|
||||
[0-1] : x (int16) 缩放 1e4
|
||||
[2-3] : y (int16) 缩放 1e4
|
||||
[4-5] : z (int16) 缩放 1e4
|
||||
[6-7] : w (int16) 缩放 1e4
|
||||
四元数顺序: wxyz,验证 x²+y²+z²+w² ≈ 1
|
||||
```
|
||||
|
||||
**接收帧2 — 子弹速度和模式(CAN ID: 0x101 / 0x110)**
|
||||
|
||||
```
|
||||
8 bytes, Big-Endian
|
||||
[0-1] : bullet_speed (int16) 缩放 1e2, 单位 m/s
|
||||
[2] : mode (uint8) 0=idle, 1=auto_aim, 2=small_buff, 3=big_buff, 4=outpost
|
||||
[3] : shoot_mode (uint8) 0=left, 1=right, 2=both(哨兵专有)
|
||||
[4-5] : ft_angle (int16) 缩放 1e4, 单位 rad(无人机专有)
|
||||
```
|
||||
|
||||
### 2. Gimbal 协议(串口)
|
||||
|
||||
通过 USB 串口与达妙 MC02 通信,帧头 `{'S', 'P'}`,CRC16 校验。
|
||||
|
||||
**发送帧 — VisionToGimbal(29 bytes, packed)**
|
||||
|
||||
```
|
||||
[0-1] : head (uint8[2]) = {'S', 'P'}
|
||||
[2] : mode (uint8) 0=不控制, 1=控制不开火, 2=控制且开火
|
||||
[3-6] : yaw (float) rad
|
||||
[7-10] : yaw_vel (float) rad/s
|
||||
[11-14] : yaw_acc (float) rad/s²
|
||||
[15-18] : pitch (float) rad
|
||||
[19-22] : pitch_vel (float) rad/s
|
||||
[23-26] : pitch_acc (float) rad/s²
|
||||
[27-28] : crc16 (uint16) Little-Endian
|
||||
```
|
||||
|
||||
**接收帧 — GimbalToVision(43 bytes, packed)**
|
||||
|
||||
```
|
||||
[0-1] : head (uint8[2]) = {'S', 'P'}
|
||||
[2] : mode (uint8) 0=IDLE, 1=AUTO_AIM, 2=SMALL_BUFF, 3=BIG_BUFF
|
||||
[3-6] : q[0] (float) 四元数 w
|
||||
[7-10] : q[1] (float) 四元数 x
|
||||
[11-14] : q[2] (float) 四元数 y
|
||||
[15-18] : q[3] (float) 四元数 z
|
||||
[19-22] : yaw (float) rad
|
||||
[23-26] : yaw_vel (float) rad/s
|
||||
[27-30] : pitch (float) rad
|
||||
[31-34] : pitch_vel (float) rad/s
|
||||
[35-38] : bullet_speed (float) m/s
|
||||
[39-40] : bullet_count (uint16) 子弹累计发射次数
|
||||
[41-42] : crc16 (uint16) Little-Endian
|
||||
```
|
||||
|
||||
### 3. DM IMU 协议(串口)
|
||||
|
||||
达妙 IMU,串口 921600 bps,Modbus RTU 格式,57 bytes 三帧合一。
|
||||
|
||||
```
|
||||
帧1 [0-18] : 加速度 (accx, accy, accz) float, CRC16
|
||||
帧2 [19-37] : 角速度 (gyrox, gyroy, gyroz) float, CRC16
|
||||
帧3 [38-56] : 欧拉角 (roll, pitch, yaw) float, 单位°, CRC16
|
||||
|
||||
每帧结构: 帧头(0x55 0xAA) + slave_id(0x01) + reg + 3×float(uint32) + crc16 + 帧尾
|
||||
四元数由 ZYX 欧拉角生成: q = Rz(yaw) * Ry(pitch) * Rx(roll)
|
||||
```
|
||||
|
||||
### 4. ROS2 通信(哨兵专有)
|
||||
|
||||
| 方向 | 话题 | 消息类型 | 内容 |
|
||||
|------|------|----------|------|
|
||||
| 发布 | `auto_aim_target_pos` | `std_msgs/String` | CSV: "x,y,z,w" |
|
||||
| 订阅 | `enemy_status` | `sp_msgs/EnemyStatusMsg` | 无敌敌人 ID 列表 |
|
||||
| 订阅 | `autoaim_target` | `sp_msgs/AutoaimTargetMsg` | 目标敌人 ID 列表 |
|
||||
|
||||
### 5. 协议总览
|
||||
|
||||
| 协议 | 接口 | 速率 | 帧长 | 校验 | 适用设备 |
|
||||
|------|------|------|------|------|----------|
|
||||
| CBoard | CAN | 1Mbps | 8B | — | C 板 (STM32F407) |
|
||||
| Gimbal | 串口 | 可配置 | 29/43B | CRC16 | 达妙 MC02 (STM32H7) |
|
||||
| DM IMU | 串口 | 921600 | 57B | CRC16 | 达妙 IMU |
|
||||
| ROS2 | TCP/IP | — | 可变 | — | 导航系统 |
|
||||
|
||||
Loading…
Reference in New Issue
Block a user