2、直线运动偏差的成因分析
做差速底盘,最头疼的问题是什么?
我个人觉得,就是「明明给了直行的指令,车却跑偏了」。你想想看,一个简单的直线运动,背后藏着多少坑?今天我就把这五个最常见的偏差成因,一个一个掰开揉碎了讲清楚。
核心观点:直线运动偏差不是单一原因造成的,而是多个因素叠加的结果。理解每个成因的物理本质,是后续纠偏的基础。
2.1 左右轮径不一致
这是最直观的原因。两个轮子直径不一样,同样的转速下,大轮子跑的距离更远。说白了,就像两个人走路,一个腿长一个腿短,怎么可能走直线?
我在项目中遇到过一台AGV,出厂时跑直线没问题,用了三个月就开始偏。拆下来一量,左轮磨损了0.5mm。别小看这0.5mm,对于直径100mm的轮子来说,每转一圈就差了1.57mm。跑个10米,偏差就超过5厘米了。
实战建议:选型时尽量选耐磨的聚氨酯轮,定期用卡尺测量轮径。我习惯每500小时做一次轮径校准记录。
2.2 电机特性差异
就算是同一批次的电机,特性也不可能完全一致。为什么?
电机内部的磁钢强度、绕组电阻、轴承摩擦力,这些都有制造公差。两个电机接到同样的PWM信号,实际转速可能差个1%~3%。
我曾经调试过一台双轮平衡车,左右电机型号一模一样,但空载时转速差就有2%。装上负载后,这个差异还会被放大。你想想看,2%的转速差,对于要求高精度的应用场景,简直就是灾难。
| 电机参数 | 电机A | 电机B | 差异 |
|---|---|---|---|
| 空载转速(rpm) | 3000 | 2940 | 2% |
| 额定扭矩(Nm) | 0.5 | 0.48 | 4% |
| 绕组电阻(Ω) | 1.2 | 1.25 | 4.2% |
注意:电机特性差异会随温度变化而加剧。电机发热后,绕组电阻增大,扭矩下降。如果两个电机散热条件不同,偏差会越来越严重。
2.3 地面摩擦不均匀
这个因素经常被忽略,但实际影响非常大。
地面材质、平整度、是否有油污或水渍,都会影响轮胎与地面的摩擦系数。左轮在瓷砖上,右轮在木地板上,摩擦系数能差30%以上。结果就是:同样的驱动力,一个轮子打滑,另一个轮子抓地牢,车自然就跑偏了。
我记得有一次在工厂调试,地面刚打过蜡,AGV走直线时总是往左偏。排查了半天,最后发现是左轮刚好压在一道蜡痕上。擦掉蜡痕,问题立刻解决。
避坑指南:我曾经因为地面问题浪费了整整两天。后来我学乖了,调试前先用摩擦系数测试仪测一下地面。如果条件不允许,至少用脚踩一踩,感受一下左右两侧的摩擦力是否一致。
2.4 编码器分辨率误差
编码器是机器人的「眼睛」,但它也有局限性。
分辨率越低的编码器,测量误差越大。举个例子,一个每圈100线的编码器,角度分辨率是3.6度。而一个每圈1000线的编码器,分辨率是0.36度。差了整整10倍。
更隐蔽的问题是:编码器的安装偏心。如果编码器轴和电机轴不同心,每转一圈就会产生一个正弦波形的误差。这个误差在低速时尤其明显。
// 编码器误差模拟示例
// 假设编码器安装偏心0.1mm,轮径100mm
float encoder_error = 0.1 * sin(2 * PI * wheel_rotations);
float actual_distance = measured_distance + encoder_error;
// 每转一圈,最大误差可达0.2mm
// 跑100圈(约31.4米),累计误差可达20mm
我的经验:编码器选型时,分辨率至少要比控制精度高一个数量级。比如你要求定位精度1mm,编码器分辨率至少要做到0.1mm。另外,安装时一定要用千分表打同心度,偏差控制在0.02mm以内。
2.5 安装机械误差
最后这个,是很多新手容易踩的坑。
底盘安装时,左右轮轴不平行、轮距不一致、底盘重心偏移,这些都会导致直线运动偏差。机械误差是「硬伤」,软件再牛也救不回来。
我见过一个案例:某公司做的送餐机器人,出厂测试时直线度还行,但一上实际场景就偏。后来发现是底盘安装时,左轮轴比右轮轴前移了2mm。这个2mm的偏差,在转弯时会被放大,导致左右轮转弯半径不一致。
- 轮轴不平行:导致轮胎偏磨,长期运行后轮径差异加剧
- 轮距不一致:左右轮实际行驶路径不同,产生差速
- 重心偏移:导致左右轮正压力不同,摩擦力不一致
- 悬挂系统问题:左右悬挂刚度不同,负载变化时轮子接地力不同
警告:机械误差是「不可逆」的。软件纠偏只能补偿,不能根治。所以我的建议是:花80%的精力在机械装配上,剩下20%留给软件调参。别搞反了。
知识体系总览
下面这张图,把五个成因之间的关系梳理清楚了。你可以看到,有些因素是独立的,有些是相互影响的。比如轮径不一致和机械误差,会共同导致编码器读数失真。
嗯,这五个成因,每一个单独拿出来都能写一篇文章。但实际项目中,它们往往是同时存在的。比如轮径不一致加上地面摩擦不均匀,偏差会成倍放大。
所以我的建议是:先做机械排查,再做软件补偿。别一上来就调PID参数,先把轮子装正、把地面擦干净、把编码器装好。这些基础工作做好了,后面的纠偏工作会轻松很多。
下一节,我们会聊如何用传感器检测这些偏差。但在此之前,我建议你先把这五个成因对照自己的项目检查一遍。相信我,花这个时间绝对值得。