refactor: replace vision error_x/y with measure/ref in 0xA5 frame

Change 0xA5 frame from 2-float (error_x, error_y) to 4-float
(measure_x, ref_x, measure_y, ref_y) so PIDCalculate receives
actual measurement and reference values internally computing error.
This commit is contained in:
2026-06-04 13:55:40 +08:00
parent fd2386d33a
commit c0f43940bd
6 changed files with 85 additions and 67 deletions
+7 -7
View File
@@ -67,7 +67,7 @@ main()
┌──────────────────────────────────────────────────────┐
│ application/cmd/robot_cmd.c (外环, 500Hz) │
│ │
│ AUTO: 上位机 0xA5 帧 → error_x/y → KF → vision PID│
│ AUTO: 上位机 0xA5 帧 → measure_x/y, ref_x/y → KF → vision PID│
│ → 角度增量 → 累计 angle ref │
│ MANUAL: 上位机 0xA6 帧 → yaw/pitch 角速度 → 角度增量积分 │
│ DEBUG: 上位机 0xA8 帧 → 实时更新 PID 参数 │
@@ -107,7 +107,7 @@ main()
| 帧头 | 长度 | 用途 |
|------|------|------|
| 0xA5 | 10 | 自动/视觉追踪数据帧 (error_x, error_y) |
| 0xA5 | 18 | 自动/视觉追踪数据帧 (measure_x, ref_x, measure_y, ref_y) |
| 0xA6 | 10 | 手动控制数据帧 (yaw_velocity, pitch_velocity) |
| 0xA7 | 3 | 命令帧 (模式切换, 激光) |
| 0xA8 | 50 | 调试调参帧 (12 个 float PID 参数) |
@@ -126,7 +126,7 @@ main()
| 模式 | 值 | 说明 |
|------|-----|------|
| AUTO | 0 | 视觉误差 → KF → vision PID → 角度增量 |
| AUTO | 0 | 视觉测量值 → KF → vision PID(measure, ref) → 角度增量 |
| MANUAL | 1 | 上位机下发角速度,固件积分累加角度参考 |
| DEBUG | 2 | 失能电机,接收 PID 参数实时调参 |
@@ -134,14 +134,14 @@ main()
```
上位机 USART10 → DecodeVision() → vision_data (全局结构体)
├── 0xA5 → auto_updated=1, error_x/y
├── 0xA5 → auto_updated=1, measure_x/y, ref_x/y
├── 0xA6 → manual_updated=1, yaw/pitch velocity
├── 0xA7 → cmd_pending=1, cmd
└── 0xA8 → debug_updated=1, 12 个 PID 参数
robot_cmd 每轮:
ProcessCommand() → 模式切换 / 激光
AUTO: vision_data.error_x/y → KF → vision PID → 角度增量
AUTO: vision_data.measure_x/y → KF → vision PID(measure, ref) → 角度增量
MANUAL: vision_data.yaw/pitch velocity → 角度增量积分
DEBUG: vision_data PID 参数 → 直接写入 vision PID, 发布 motor_pid 话题
PubPushMessage(gimbal_cmd) → gimbal 执行
@@ -292,7 +292,7 @@ DMMotorControl() @ 1kHz:
3. **伪 Pub-Sub** — 应用间通过 message_center 解耦
4. **Daemon 看门狗** — 每个外设模块独立 DaemonInstance,离线自动回调
5. **BSP 实例化注册** — CAN/串口不注册不初始化
6. **KF + PID 级联** — 视觉误差经 KF 平滑 → vision PID → 角度增量 → 内环角度 PID
6. **KF + PID 级联** — 视觉测量值经 KF 平滑 → vision PID(measure, ref) → 角度增量 → 内环角度 PID
7. **模式切换重置** — 切换到自动模式时重置 KF 状态 (x=0, P=diag(5,5)) 和 PID 积分项
8. **串口命令控制** — 模式切换、激光控制均通过 0xA7 命令帧触发
9. **output_reverse** — PID 输出方向统一通过单标志位控制
@@ -321,7 +321,7 @@ typedef struct {
// 上位机数据 (master_machine.h)
typedef struct {
float error_x, error_y; // 自动模式: 归一化误差
float measure_x, ref_x, measure_y, ref_y; // 自动模式: 测量值和参考值
uint8_t auto_updated;
float yaw_degree_velocity, pitch_degree_velocity; // 手动模式: 角速度
uint8_t manual_updated;