# 上位机通信协议指南 ## 串口配置 | 参数 | 值 | |---|---| | 波特率 | 921600 | | 数据位 | 8 | | 停止位 | 1 | | 校验位 | None | ## 帧格式总览 所有帧通过帧头 (SOF) 区分类型,checksum = 帧头到数据末尾前一字节的所有字节累加和取低 8 位。 | 帧头 | 长度 | 用途 | |---|---|---| | 0xA5 | 18 | 自动/视觉追踪数据 | | 0xA6 | 10 | 手动控制数据 | | 0xA7 | 3 | 命令 | | 0xA8 | 50 | 调试调参数据 | --- ## 1. 自动/视觉追踪数据帧 0xA5 (18 字节) **用途**: 视觉识别完成后持续发送目标测量值和参考值。固件侧 PID 内部计算误差 (ref - measure)。 ``` [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 | X 轴参考值 (期望目标位置) | | 9 | 4 | float | Y 轴测量值 (视觉检测目标位置) | | 13 | 4 | float | Y 轴参考值 (期望目标位置) | | 17 | 1 | uint8 | checksum | **Python 写入示例**: ```python import struct 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(' int: return sum(data) & 0xFF # 所有字节累加取低 8 位 ``` 校验和覆盖范围:**帧头到数据末尾前一字节**的全部字节。接收端在收到数据后也应计算并比对校验和。