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
+12 -10
View File
@@ -15,37 +15,39 @@
| 帧头 | 长度 | 用途 |
|---|---|---|
| 0xA5 | 10 | 自动/视觉追踪数据 |
| 0xA6 | 11 | 手动控制数据 |
| 0xA5 | 18 | 自动/视觉追踪数据 |
| 0xA6 | 10 | 手动控制数据 |
| 0xA7 | 3 | 命令 |
| 0xA8 | 50 | 调试调参数据 |
---
## 1. 自动/视觉追踪数据帧 0xA5 (10 字节)
## 1. 自动/视觉追踪数据帧 0xA5 (18 字节)
**用途**: 视觉识别完成后持续发送跟踪误差。
**用途**: 视觉识别完成后持续发送目标测量值和参考值。固件侧 PID 内部计算误差 (ref - measure)。
```
[SOF:0xA5][error_x:4][error_y:4][checksum:1]
[SOF:0xA5][measure_x:4][ref_x:4][measure_y:4][ref_y:4][checksum:1]
```
| 偏移 | 长度 | 类型 | 含义 |
|---|---|---|---|
| 0 | 1 | uint8 | 帧头 0xA5 |
| 1 | 4 | float | 归一化 X 轴误差 |
| 5 | 4 | float | 归一化 Y 轴误差 |
| 9 | 1 | uint8 | checksum |
| 1 | 4 | float | X 轴测量值 (视觉检测目标位置) |
| 5 | 4 | float | X 轴参考值 (期望目标位置) |
| 9 | 4 | float | Y 轴测量值 (视觉检测目标位置) |
| 13 | 4 | float | Y 轴参考值 (期望目标位置) |
| 17 | 1 | uint8 | checksum |
**Python 写入示例**:
```python
import struct
def send_auto_tracking(ser, error_x: float, error_y: float):
def send_auto_tracking(ser, measure_x: float, ref_x: float, measure_y: float, ref_y: float):
data = bytearray()
data.append(0xA5)
data.extend(struct.pack('<ff', error_x, error_y))
data.extend(struct.pack('<ffff', measure_x, ref_x, measure_y, ref_y))
checksum = sum(data) & 0xFF
data.append(checksum)
ser.write(data)