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