# RS00 MIT 协议摘要

依据附件 `RS00使用说明书260428.pdf` 第 6 章整理。本文只记录本项目固件实际用到的部分。

## 1. 基本信息

- CAN 2.0 标准帧。
- 默认波特率 1Mbps。
- MIT 模式支持一帧下发位置、速度、Kp、Kd、前馈力矩。
- RS00 额定负载 5N.m，峰值负载 14N.m。
- 电机工作电压范围 24V-60V，额定 48V。

## 2. 使能、停止和清错

对目标电机 CAN ID 发送标准帧，数据区如下：

```text
使能: FF FF FF FF FF FF FF FC
停止: FF FF FF FF FF FF FF FD
清错: FF FF FF FF FF FF FF FB
```

本固件在收到主机 `ARM` 命令后会先发 MIT 模式设置，再发使能；收到 `DISARM`、`ESTOP` 或命令超时后发送停止帧。

## 3. MIT 动态控制帧

发送给目标电机 CAN ID，8 字节数据打包：

```text
Byte0~1: 目标角度 p，uint16，对应 -12.57rad ~ 12.57rad
Byte2 + Byte3[7:4]: 目标速度 v，uint12，对应 -33rad/s ~ 33rad/s
Byte3[3:0] + Byte4: Kp，uint12，对应 0 ~ 500
Byte5 + Byte6[7:4]: Kd，uint12，对应 0 ~ 5
Byte6[3:0] + Byte7: 前馈力矩 t，uint12，对应 -14N.m ~ 14N.m
```

本固件实现位置在：

```text
guguji_real_robot/firmware/esp32s3_espidf/main/rs00_mit.c
```

核心公式：

```text
uint = (value - min) * (2^bits - 1) / (max - min)
```

## 4. 反馈帧

电机反馈帧数据区：

```text
Byte0: 电机 CAN ID
Byte1~2: 当前角度，uint16，对应 -12.57rad ~ 12.57rad
Byte3 + Byte4[7:4]: 当前速度，uint12，对应 -33rad/s ~ 33rad/s
Byte4[3:0] + Byte5: 当前力矩，uint12，对应 -14N.m ~ 14N.m
Byte6[7:6]: 模式状态，0 Reset，1 Cali，2 Motor
Byte6[5]: 故障标志
Byte6[4]: 预警标志
Byte6[3:0] + Byte7: 温度，单位 0.1 摄氏度
```

固件会把反馈转换为仿真关节角，再通过 UDP 遥测回传给主机。

## 5. 与本项目相关的注意事项

- 手册明确说明关节运行时不要直接切换控制方式，切换前应先停止运行。
- 命令超时保护应打开或由上层实现。本项目固件侧默认 200ms 未收到 UDP 命令即停止全部电机。
- 真机测试前先悬空，低增益、低目标角变化率验证方向。
- 位置范围和仿真 URDF 临时关节范围不同步时，应优先保护真实机械限位。

## 6. 传感器资料来源

传感器寄存器初始化参考了公开数据手册：

- QMI8658A Datasheet: https://files.waveshare.com/upload/5/5f/QMI8658A_Datasheet_Rev_A.pdf
- QMC6309 Datasheet: https://uploadcdn.oneyac.com/attachments/files/brand_pdf/qst/26/AF/QMC6309.pdf
