完整的运动模型校准解决方案,包含MCU自动测试程序和Python数据分析工具。
核心文件:
- STM32H743/APL/motion_calibration_task.c/h - 自动校准任务
- STM32H743/APL/运动模型校准使用说明.md - MCU端使用说明
功能特性:
- ✅ 自动化测试序列(48秒完成)
- ✅ 多档位直线加速/巡航测试
- ✅ 多强度转向测试
- ✅ 制动响应测试
- ✅ 20Hz高频数据采集
- ✅ SBUS CH8安全保护(<1500运行,≥1500紧急停止)
- ✅ CH7自动触发(>1800启动)
测试序列:
| 状态 | PWM | 时长 | 说明 |
|------|-----|------|------|
| WARMUP | 1500/1500 | 2s | 预热 |
| ACCEL_LOW | 1600/1500 | 3s | 低速加速 |
| CRUISE_LOW | 1600/1500 | 5s | 低速巡航 |
| ACCEL_MID | 1700/1500 | 3s | 中速加速 |
| CRUISE_MID | 1700/1500 | 5s | 中速巡航 |
| ACCEL_HIGH | 1800/1500 | 3s | 高速加速 |
| CRUISE_HIGH | 1800/1500 | 5s | 高速巡航 |
| TURN_LEFT_LIGHT | 1600/1600 | 4s | 轻左转 |
| TURN_RIGHT_LIGHT | 1600/1400 | 4s | 轻右转 |
| TURN_LEFT_HEAVY | 1600/1700 | 4s | 重左转 |
| TURN_RIGHT_HEAVY | 1600/1300 | 4s | 重右转 |
| BRAKE | 1500/1500 | 2s | 制动 |
核心文件:
- python/tools/calibration_logger.py - 数据记录工具
- python/tools/calibration_analyzer.py - 数据分析工具
- python/tools/校准工具使用说明.md - Python工具使用说明
功能特性:
- ✅ 实时串口数据记录
- ✅ 自动检测测试结束
- ✅ GPS/IMU数据解析
- ✅ ENU坐标转换
- ✅ 差速运动模型拟合
- ✅ 多维度可视化(速度曲线、轨迹图、PWM关系图等)
- ✅ JSON格式参数输出
- ✅ 推荐配置自动生成
安装Python依赖:bash pip install pyserial numpy scipy matplotlib
编译烧录固件:
ls /dev/ttyUSB*)# 启动数据记录
python python/tools/calibration_logger.py -p COM5
# 触发校准(在车辆上)
# 1. CH8拨到 < 1500
# 2. CH7拨到 > 1800
# 3. MCU自动执行48秒测试序列
# 4. 全程监控,必要时CH8≥1500紧急停止
# 记录完成后会生成:calibration_YYYYMMDD_HHMMSS.log
# 分析日志文件
python python/tools/calibration_analyzer.py calibration_20251126_143000.log
# 查看输出目录:calibration_results/
# - calibration_parameters.json (JSON参数文件)
# - velocity_time.png (速度-时间曲线)
# - trajectory.png (运动轨迹图)
# - pwm_relationships.png (PWM关系图)
# - acceleration.png (加速度特性)
calibration_parameters.jsonrecommended_config 中的参数STM32H743/FML/motion_config.h示例配置:c #define MC_CFG_FORWARD_K (0.13767502f) #define MC_CFG_FORWARD_BIAS (-0.23053784f) #define MC_CFG_STEERING_K (0.00698132f) #define MC_CFG_MAX_ACCELERATION (1.00000000f) #define MC_CFG_RESPONSE_DELAY_MS (50)
$CAL,seq,time_ms,state,throttle_pwm,steering_pwm,lat,lon,alt,hdg,pitch,roll,gx,gy,gz,ax,ay,az
示例: $CAL,0,1000,WARMUP,1500,1500,39.831867,116.280907,47.50,90.00,0.10,-0.05,12,-5,3,0,1,-1000 $CAL,1,1050,WARMUP,1500,1500,39.831867,116.280907,47.50,90.01,0.11,-0.06,13,-4,2,1,2,-999
{
"metadata": { ... },
"differential_drive_model": {
"forward_model": {
"pwm_to_velocity": {
"k": 0.137675,
"bias": -0.230538,
"formula": "v = 0.137675 * (pwm - 1500) + -0.230538"
},
"acceleration": { ... }
},
"steering_model": {
"pwm_to_yaw_rate": {
"k": 0.00698132,
"formula": "ω = 0.00698132 * (steering_pwm - 1500)"
}
},
"delays": {
"throttle_response_delay_ms": 50.0
}
},
"recommended_config": { ... }
}
前向模型: v = k_forward * (throttle_pwm - 1500) + bias
转向模型: ω = k_steering * (steering_pwm - 1500)
参数意义:
- k_forward: PWM到速度的增益 (m/s per PWM)
- bias: 速度偏置(补偿死区)
- k_steering: PWM到角速度的增益 (rad/s per PWM)
✅ 良好数据:
- 总样本数 > 800
- GPS定位质量 ≥ 4(固定解)
- 卫星数 ≥ 8
- 巡航速度方差 < 0.1 m/s
❌ 需重新测试:
- GPS跳点
- 速度突变
- 转向角速度异常
建议在不同条件下测试3次以上:
- 不同地面材质(水泥/草地/土地)
- 不同天气(干燥/潮湿)
- 不同坡度(平地/上坡/下坡)
- 不同负载(空载/满载)
记录每次测试的环境信息,取平均参数。
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 无法启动校准 | CH8≥1500或CH7<1800 | 检查遥控器通道位置 |
| 数据记录中断 | SBUS信号丢失 | 检查接收器连接 |
| 分析工具报错 | 日志文件格式错误 | 确认$CAL行完整 |
| 拟合结果异常 | GPS数据质量差 | 在GPS信号好的场地重测 |
Lawnmower_STM32H7/
├── STM32H743/
│ └── APL/
│ ├── motion_calibration_task.c/h # MCU校准任务
│ └── 运动模型校准使用说明.md # MCU使用说明
├── python/
│ └── tools/
│ ├── calibration_logger.py # 数据记录工具
│ ├── calibration_analyzer.py # 数据分析工具
│ ├── 校准工具使用说明.md # Python工具说明
│ └── test_calibration_data.log # 测试数据示例
└── README_运动模型校准.md # 本文件
编辑 motion_calibration_task.c:c #define CAL_PWM_LOW_THROTTLE (1600U) #define CAL_PWM_MID_THROTTLE (1700U) #define CAL_PWM_HIGH_THROTTLE (1800U)
#define CAL_DURATION_ACCEL (3000U) // 毫秒
#define CAL_DURATION_CRUISE (5000U)
#define CAL_TASK_PERIOD_MS (50U) // 50ms = 20Hz
for log in calibration_*.log; do
python python/tools/calibration_analyzer.py "$log" -o "results_$(basename $log .log)"
done
v1.0 (2025-11-26)
- 初始版本
- 完整的MCU自动校准任务
- Python数据记录与分析工具
- 差速运动模型拟合
- 多维度可视化
创建日期:2025-11-26