编辑 | blame | 历史 | 原始文档

硬件在环 (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

数据流流程图

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 模块中。