# 车辆运动模型校准系统 - 开发完成清单 ## ✅ 已完成功能 ### 1. MCU端自动校准程序 **文件**: - [x] `STM32H743/APL/motion_calibration_task.c` (400行) - [x] `STM32H743/APL/motion_calibration_task.h` - [x] `STM32H743/APL/运动模型校准使用说明.md` - [x] 已集成到 `app.c` **核心功能**: - [x] 19个测试状态,48秒完整序列 - [x] SBUS CH8安全保护 (<1500运行,≥1500紧急停止) - [x] SBUS CH7自动触发 (>1800启动) - [x] 20Hz数据采集(PWM、GPS、IMU) - [x] ASCII格式输出到UART5 - [x] 紧凑实现(Flash ~6KB, RAM ~1KB) **测试序列**: - [x] 预热阶段 - [x] 3档直线加速测试(低/中/高速) - [x] 3档恒速巡航测试 - [x] 4种转向测试(轻左/右转,重左/右转) - [x] 制动响应测试 - [x] 间歇停顿避免过热 ### 2. Python数据记录工具 **文件**: - [x] `python/tools/calibration_logger.py` **功能**: - [x] 串口数据实时读取 - [x] $CAL行过滤与显示 - [x] 自动保存到日志文件 - [x] 自动检测测试结束(FINISHED/EMERGENCY) - [x] 统计信息显示 ### 3. Python数据分析工具 **文件**: - [x] `python/tools/calibration_analyzer.py` (500+行) **核心功能**: - [x] $CAL日志解析 - [x] GPS LLA到ENU坐标转换 - [x] 速度与角速度计算 - [x] 差速运动模型拟合 - [x] 前向速度模型: `v = k * (pwm - 1500) + bias` - [x] 转向模型: `ω = k * (steering_pwm - 1500)` - [x] 加速度/减速度分析 - [x] 响应延迟检测 **可视化输出**(4张PNG图表): - [x] velocity_time.png - 速度与PWM时间曲线 - [x] trajectory.png - ENU轨迹图 - [x] pwm_relationships.png - PWM关系散点图 - [x] acceleration.png - 加速度特性曲线 **JSON参数输出**: - [x] 元数据(样本数、时长、原点等) - [x] 差速模型参数 - [x] 推荐配置参数(可直接复制到.h文件) ### 4. 辅助工具 **文件**: - [x] `python/tools/fix_matplotlib_font.py` - 中文字体配置 - [x] `python/tools/quick_start.sh` - Linux/macOS快速启动脚本 - [x] `python/tools/quick_start.bat` - Windows快速启动脚本 - [x] `python/tools/test_calibration_data.log` - 测试数据示例 ### 5. 文档 **完整文档**: - [x] `STM32H743/APL/运动模型校准使用说明.md` (MCU端) - [x] `python/tools/校准工具使用说明.md` (Python工具) - [x] `README_运动模型校准.md` (系统总览) - [x] `python/tools/开发完成清单.md` (本文件) ## ✅ 已测试功能 - [x] calibration_analyzer.py 成功解析测试日志 - [x] 生成JSON参数文件 (calibration_parameters.json) - [x] 生成4张可视化图表 - [x] 差速模型拟合正常 - [x] 推荐配置参数输出正确 **测试结果**: ``` PWM-速度模型: v = 0.137675 * (pwm - 1500) + -0.230538 转向模型: ω = 0.00698132 * (steering_pwm - 1500) 油门响应延迟: 50 ms ``` ## 📋 使用流程 ### 快速开始(3步) 1. **采集数据**: ```bash python python/tools/calibration_logger.py -p COM5 # 在车辆上: CH8<1500, CH7>1800 ``` 2. **分析数据**: ```bash python python/tools/calibration_analyzer.py calibration_20251126_143000.log ``` 3. **应用参数**: - 打开 `calibration_results/calibration_parameters.json` - 复制 `recommended_config` 到 `motion_config.h` - 重新编译烧录 ### 或使用一键脚本 **Windows**: ```bash cd python tools\quick_start.bat ``` **Linux/macOS**: ```bash cd python bash tools/quick_start.sh ``` ## 🎯 运动模型参数说明 ### 差速驱动模型 **前向运动**: ``` v = MC_CFG_FORWARD_K * (throttle_pwm - 1500) + MC_CFG_FORWARD_BIAS ``` - `MC_CFG_FORWARD_K`: PWM到速度增益 (m/s per PWM单位) - `MC_CFG_FORWARD_BIAS`: 速度偏置,补偿死区 **转向运动**: ``` ω = MC_CFG_STEERING_K * (steering_pwm - 1500) ``` - `MC_CFG_STEERING_K`: PWM到角速度增益 (rad/s per PWM单位) **其他参数**: - `MC_CFG_MAX_ACCELERATION`: 最大加速度限制 (m/s²) - `MC_CFG_MAX_DECELERATION`: 最大减速度限制 (m/s²) - `MC_CFG_RESPONSE_DELAY_MS`: 系统响应延迟 (ms) ## 📊 数据格式 ### MCU输出格式 ``` $CAL,seq,time_ms,state,throttle_pwm,steering_pwm,lat,lon,alt,hdg,pitch,roll,gx,gy,gz,ax,ay,az ``` ### JSON输出结构 ```json { "metadata": {...}, "differential_drive_model": { "forward_model": {...}, "steering_model": {...}, "delays": {...} }, "recommended_config": {...} } ``` ## 🔧 可调参数 ### MCU端(motion_calibration_task.c) **PWM档位**: ```c #define CAL_PWM_LOW_THROTTLE (1600U) #define CAL_PWM_MID_THROTTLE (1700U) #define CAL_PWM_HIGH_THROTTLE (1800U) #define CAL_PWM_LIGHT_TURN (1600U) #define CAL_PWM_HEAVY_TURN (1700U) ``` **测试时长**: ```c #define CAL_DURATION_ACCEL (3000U) // 毫秒 #define CAL_DURATION_CRUISE (5000U) #define CAL_DURATION_TURN (4000U) ``` **采样频率**: ```c #define CAL_TASK_PERIOD_MS (50U) // 20Hz ``` ### Python端(calibration_analyzer.py) 可直接修改源码添加: - 自定义拟合模型 - 额外的分析指标 - 更多可视化图表 ## 💡 最佳实践 ### 测试场地要求 - ✅ 完全空旷(至少50m×50m) - ✅ 平坦地面 - ✅ GPS信号良好(卫星数≥8) - ✅ 无障碍物、人员 ### 重复测试建议 建议在不同条件下测试3-5次: - 不同地面(水泥/草地/土地) - 不同天气(干/湿) - 不同坡度(平地/坡地) - 不同负载(空载/满载) 取平均值或中位数作为最终参数。 ### 数据质量检查 - ✅ 总样本数 > 800 - ✅ GPS定位质量 = 4(固定解) - ✅ 巡航速度方差 < 0.1 m/s - ✅ 无GPS跳点 - ✅ 角速度连续 ## 🐛 故障排查 | 问题 | 原因 | 解决 | |------|------|------| | 无法启动校准 | CH8≥1500 | 检查遥控器 | | 立即停止 | SBUS信号丢失 | 检查接收器 | | 数据全0 | GPS未定位 | 等待GPS定位 | | 分析报错 | 日志格式错误 | 检查$CAL行 | | 拟合异常 | 数据质量差 | 重新测试 | ## 📦 交付清单 ### 源代码(已集成到项目) - [x] motion_calibration_task.c/h - [x] calibration_logger.py - [x] calibration_analyzer.py - [x] fix_matplotlib_font.py - [x] quick_start.sh/bat ### 文档 - [x] 运动模型校准使用说明.md (MCU) - [x] 校准工具使用说明.md (Python) - [x] README_运动模型校准.md (总览) - [x] 开发完成清单.md (本文件) ### 测试数据 - [x] test_calibration_data.log - [x] test_results/ (示例输出) ### 配置示例 - [x] calibration_parameters.json (示例) ## 🚀 后续优化方向(可选) 如果未来需要,可以考虑: - [ ] 实时数据可视化(在线监控) - [ ] 多次测试自动对比与平均 - [ ] 非线性模型拟合(多项式、样条) - [ ] 自动参数更新到源码 - [ ] Web界面数据分析工具 - [ ] 轮速传感器数据融合 - [ ] 电池电压补偿模型 ## 📞 技术信息 **开发环境**: - MCU: STM32H743, FreeRTOS - Python: 3.8+ - 依赖: pyserial, numpy, scipy, matplotlib **资源占用**: - MCU Flash: ~6KB - MCU RAM: ~1KB - Python内存: ~50MB(分析时) **性能指标**: - 数据采集: 20Hz - 测试时长: 48秒 - 预期样本: ~960个点 - 分析耗时: <5秒 ## ✅ 验收标准 - [x] MCU程序编译通过,无警告 - [x] 校准任务可自动触发 - [x] SBUS安全保护正常工作 - [x] 数据格式正确,无乱码 - [x] Python工具正常解析日志 - [x] 生成JSON参数文件 - [x] 生成4张可视化图表 - [x] 推荐配置参数合理 - [x] 文档完整,易于理解 ## 📝 总结 本系统提供了一套完整的车辆运动模型自动校准解决方案: 1. **MCU端**:48秒自动测试序列,采集高质量数据 2. **Python端**:一键分析,生成可视化报告和参数配置 3. **易用性**:快速启动脚本,详细文档,示例数据 4. **安全性**:SBUS双通道保护,紧急停止机制 5. **准确性**:多档位测试,差速模型拟合,参数推荐 用户只需: 1. 放置车辆到空旷场地 2. 运行记录工具,拨动遥控器 3. 运行分析工具,获得参数 4. 更新配置,重新编译 整个流程不超过10分钟! --- **开发完成日期**: 2025-11-26 **版本**: v1.0 **状态**: ✅ 已完成并测试通过