【智能车心得】独轮车定位导航:从RTK厘米级定位到室内惯导的实战解析
1. RTK厘米级定位的硬核原理与实战调优
第一次接触RTK定位时,我被那个圆柱形天线搞懵了——这玩意儿真能实现厘米级定位?实测后发现,普通GPS模块的定位误差能到1-2米,而RTK模块在固定解状态下误差不超过3厘米,相当于一个乒乓球的大小。这种精度对智能车竞赛来说简直是降维打击。
RTK定位的核心在于差分算法。我拆解过逐飞科技的RTK套件,发现它包含两个关键部件:基站和移动站。基站需要架设在已知坐标点(我们直接用比赛场地的角点坐标),它会持续接收卫星信号并计算误差补偿数据。移动站装在车上,通过2.4GHz无线模块接收基站的修正数据。这里有个坑:基站天线高度必须离地1米以上,我们试过放在地上,结果定位误差直接翻倍。
数据处理环节最容易翻车。Aurix开发环境默认用float类型处理经纬度,但实际测试发现会导致路径计算出现"阶梯状"跳跃。必须改用double类型,同时要修改FPU设置。这里有个细节:所有三角函数都要加上f后缀(如sin改成sinf),否则会引发隐式类型转换错误。我们曾经因为漏改一个tan函数,导致整车平衡算法崩溃。
路径规划时,我们摸索出一套"三点定位法":
- 在目标板前1米处设虚拟点A
- 目标板正前方设点B
- 目标板后0.5米设点C 这样形成的S型路径既能保证撞击精度,又能避免急转导致翻车。实测显示,这种走法比直线冲击的成功率提升40%。
2. 从经纬度到控制指令的转化秘籍
拿到高精度坐标只是第一步,如何转化成车轮转向指令才是关键。我们开发了一套"北极角-陀螺仪"混合定位方案:
北极角定位法依赖两个RTK天线构成的基线。当天线连线与地理北极的夹角为θ时,车头方向就是θ±90°(具体符号取决于天线安装顺序)。这个方法在开阔场地很准,但遇到金属障碍物时信号会漂移。
陀螺仪辅助方案作为补充:用MPU6050的Z轴角速度积分得到Yaw角。这里要注意两点:一是必须用四元数法解算姿态,欧拉角会有万向锁问题;二是需要每5分钟用北极角做一次校准,消除积分漂移。
转向控制有个精妙的设计:我们不是直接计算当前点到目标点的绝对角度,而是实时计算角度差Δθ=β-α(β是目标方位角,α是当前车头角)。把这个差值输入到转向PID控制器,输出直接控制左右飞轮差速。实测发现,当Δθ>30°时需要用模糊控制算法,否则容易因飞轮扭矩饱和导致翻车。
坐标存储也有讲究。最初我们直接把double型坐标存Flash,结果发现写入速度跟不上定位更新频率。后来改用"整数位+小数位"分存法:将经度121.12345678存为[121,12345678]两个int32,读取时再拼接。这样存储空间节省50%,写入速度提升3倍。
3. 室内惯导的误差驯服之道
当车从室外进入场馆时,RTK信号会瞬间消失。这时惯性导航就成了唯一选择。我们的惯导系统由三部分组成:陀螺仪测量旋转角速度,编码器获取位移量,加速度计辅助姿态解算。这就像蒙眼走直线——全靠身体感觉。
坐标推算算法看似简单:
delta_x = speed * Δt * cos(yaw); delta_y = speed * Δt * sin(yaw);但实际调试时发现两个致命问题:一是yaw角积分会漂移,二是轮子打滑导致位移计算不准。我们通过三重补偿解决:
- 用磁力计每10秒校正一次yaw角
- 增加光学流传感器检测真实位移
- 在场馆角落布置AprilTag作为绝对位置参考
路径记忆的黄金法则是"慢采快放":人工推车采集路径时要保持0.2m/s匀速,而实际运行时可以用0.8m/s高速复现。我们开发了智能降速算法:当距离目标点0.5米时开始线性降速,到0.1米处速度降至0.2m/s。这样既保证定位精度,又提高比赛效率。
针对累积误差,我们发明了"软硬约束结合"的纠偏策略:
- 硬约束:必须到达目标点5cm范围内
- 软约束:若行驶距离达到理论值的120%则强制切点 配合"五点均值滤波"算法,最终将惯导的全程误差控制在3%以内。
4. 独轮车特有的控制难题破解
独轮车相比传统四轮车有个致命弱点:转向时容易因离心力失衡。我们通过大量实验总结出"动态重心调节法":
当检测到转向角速度>50°/s时:
- 降低飞轮转速20%
- 将车身倾斜5°-8°(利用重心偏移抵消离心力)
- 逐步恢复转速同时回正车身
这个过程中,PID参数需要动态调整:
if(turn_angle > 30){ PID.Kp *= 1.5; PID.Ki *= 0.8; }转向完成后还要加入"防摇摆算法":用卡尔曼滤波器预测车身摆动趋势,提前施加反向扭矩。实测显示,这套组合拳能让急转成功率从60%提升到92%。
另一个独门绝技是"倒地快速恢复"方案。当陀螺仪检测到倾角>45°时:
- 瞬间切断电机电源
- 记录当前Yaw角偏差值
- 扶正后自动将Yaw角归零
- 根据记录的偏差值补偿转向角度 整个过程不超过1秒,比人工干预快3倍。
5. 室外到室内的无缝切换方案
比赛最大的挑战是如何在RTK和惯导间平滑切换。我们设计的状态机包含3个关键阶段:
过渡期(5秒):
- 逐渐降低RTK定位权重
- 同步启动惯导初始化
- 比较两种定位的坐标差值
校准期(3秒):
- 以惯导坐标为中心建立新坐标系
- 将剩余路径点坐标批量转换
- 校验陀螺仪与最后已知方向的夹角
稳定期:
- 完全采用惯导数据
- 每2秒用视觉标签校正一次
- 动态调整编码器补偿系数
这套系统最妙的是"误差回溯"功能:当发现惯导累计误差超过阈值时,能自动回溯到切换点重新初始化。我们在决赛时靠这个功能成功挽救了一次险些出界的失误。
6. 那些只有实战才知道的细节
调车三个月,总结出这些血泪经验:
- RTK天线必须呈南北向安装,与车头夹角要精确测量(我们用激光测距仪校准)
- 陀螺仪要远离电机,最好加装磁屏蔽罩
- 编码器每100公里需要重新校准零位
- 室内比赛前要用热风枪给陀螺仪预热5分钟
- 飞轮差速的PID参数要分三段设置(小角度/中角度/大角度)
最让我得意的是一个土办法:在场馆墙壁贴反光条,用激光测距仪辅助定位。虽然看起来不高端,但在决赛关键时刻比惯导更可靠。这也印证了智能车竞赛的真谛——不管黑猫白猫,能完赛的就是好猫。
