# 硬件在环 (HITL) 仿真概述 为了在 STM32H7 上验证运动控制算法,同时避免真实割草环境带来的风险,`python/hitl` 子目录负责实现电脑仿真 ↔ STM32H7 的闭环调试工具。核心目标: - **传感器仿真**:Python 端以 GPS 模块真实协议输出 `$GPFMI`(10 Hz)和 `$GPIMU`(100 Hz)数据,通过串口 2 输入到 STM32H7。 - **控制闭环**:STM32H7 在接收到仿真传感器数据后执行原有控制算法,并依照 `PythonLink` 协议(前进、转向两个量)通过串口 2 回传给 Python,驱动仿真器更新车辆状态。 - **日志采集**:STM32H7 通过串口 5(921600 bps)输出调试日志,Python 端实时解析与保存,为实车调试提供参考。 ## 串口与协议映射 | 功能 | STM32H7 串口 | 方向 | 协议/内容 | 频率 | | --- | --- | --- | --- | --- | | 传感器仿真输入 | UART2 (RX) | Python → STM32 | `$GPFMI`, `$GPIMU` | 10 Hz / 100 Hz | | 控制输出回传 | UART2 (TX) | STM32 → Python | `PythonLink` 控制帧(前进/转向) | ≈ 控制频率 | | 调试日志 | UART5 (TX) | STM32 → Python | 纯文本或协议日志 | 实时,921600 bps | ## 数据流流程图 ```mermaid flowchart LR subgraph PC仿真端 Sim[仿真器\n状态积分] GPFMI[GPFMI帧生成\n10 Hz] GPIMU[GPIMU帧生成\n100 Hz] CtrlRx[PythonLink控制帧接收] LogSink[串口5日志解析/保存] end subgraph STM32H7 UART2["UART2\n(GPS/IMU输入 & 控制输出)"] CtrlAlgo[运动控制算法\n(PID + 纯跟踪)] UART5["UART5\n(921600) 日志输出"] end Sim --> GPFMI --> |UART2 TX| UART2 Sim --> GPIMU --> |UART2 TX| UART2 UART2 --> CtrlAlgo CtrlAlgo --> |前进/转向控制帧| UART2 --> CtrlRx --> Sim CtrlAlgo --> |运行日志| UART5 --> |串口5 RX| LogSink ``` ## 后续实现要点 1. **协议复用**:严格复用现有 GPS `$GPFMI`/`$GPIMU` 输出格式与 `PythonLink` 控制帧,保证实车与仿真间可无缝切换。 2. **时间同步**:仿真器内部需维护 UTC 时间戳(Week/ToW 与 `hhmmss.ss`),让 STM32H7 逻辑保持一致。 3. **高频任务划分**:建议使用独立线程/异步任务分别发送 10 Hz 与 100 Hz 数据帧,并对控制回传、日志接收进行非阻塞处理。 4. **仿真模型**:后续可扩展为读取规划路径,利用 ENU 坐标系进行运动学积分,并把结果映射回经纬度/惯导量。 5. **数据持久化**:日志与仿真配置(路径、初始原点、串口号)应保存以便复现测试场景。 该 README 将作为 HITL 子系统的设计索引,具体实现位于同目录下的 Python 模块中。