☰
机器人小车跑偏?从底盘结构到PID参数的系统排查指南
2026/9/29 2:03:27 网站建设 项目流程

1. 问题初判:小车跑偏,先别急着怀疑硬件

做机器人小车调试的朋友基本都撞上过这个鬼问题——明明代码逻辑看着没问题,电机也转,轮子也转,但小车就是不走直线,走几步就往一边偏,稍微跑远一点直接能画出一个大圆。这时候不少人第一反应是“电机坏了”“底盘歪了”,然后一头扎进硬件堆里拆拆装装,折腾半天发现没啥用。

以我这些年调小车的经验,跑偏这事十有八九不是硬件损坏,而是几个基础环节没校准到位。硬件故障导致的跑偏一般非常明显——轮子卡死、电机不转、异响严重,这种一眼就能排除。真正让人头大的是那种“软偏”,就是一切硬件看着正常,但实际跑起来持续轻微偏航、越跑越远、转弯后角度明显不对。这类问题基本集中在下边四个环节:轮子与底盘结构、电机与驱动一致性、编码器与PID控制、以及PID参数本身有没有调对。

这篇文章就是把这几个环节拆开,从判断思路到具体排查方法,再到参数调整的实操细节,系统地过一遍。适合正在做智能车、ROS小车或者STM32驱动小车的朋友,也适合刚入门但即将面对跑偏问题的新手——看完你至少能知道该往哪个方向排查,而不是盲修瞎试。

2. 轮子结构和底盘:最基础也最容易被忽略的“硬伤”

先说物理层面的东西。很多时候跑偏根本轮不到电机的锅,是底盘和轮子本身就没做好。

2.1 两个致命细节:左右轮距不一致和轮子直径公差

小车跑直线的物理前提是左右驱动轮到车体中心线的距离相等,左右轮子直径一致。但实际情况里,很多入门底盘是拼装式的,螺丝孔位公差大,装完左右两边轴距差个一两毫米非常正常。别小看这一两毫米,换算到轮子转一圈的线位移,每圈就差零点几厘米,跑个几米之后偏航量就肉眼可见了。

轮子直径公差更隐蔽——你看着两个轮子一样大,但用卡尺量直径差个0.5毫米,跑一米左右就能偏出几厘米。而且橡胶轮在装载电机轴的时候,如果顶丝没锁紧在轴的正中央,或者轮毂套歪了,相当于单侧轮子半径发生了周期性变化,小车会跑出一种“忽左忽右”的蛇形轨迹。

2.2 怎么排查结构问题

有个特别直观的排查方法:把小车悬空架起来,手动推轮子转几圈,观察两个轮子在地面方向的切点是否在一个平面内。更简单的是拿直尺量轮子外侧到车架边缘的距离——左右两侧误差超过1毫米,基本就是结构问题。

另外一个常见但容易被忽略的点是轮子着地压力不均。常见于四轮底盘,其中某一个轮子悬空或承重过小导致驱动力分配不平衡,或者用的是差速转向底盘,前轮万向轮如果磨损不均匀,也会对跑直线产生“推偏”的干扰。

2.3 结构问题的处理建议

处理逻辑很明确:先结构,后控制。有偏差就调整安装位置、更换同批次轮子、拧紧所有紧固螺丝。如果结构上实在没法做到完全对称,那后面就要靠软件层面做补偿——输出补偿量来抵消固定偏差。但前提是你得先知道偏差有多大、方向向哪偏,这就需要下一步排查电机环节。

3. 电机与驱动一致性:两轮转速不一样是跑偏的最大根源

如果底盘结构测下来没问题,那跑偏最大嫌疑就落在电机和驱动上了。机器人小车跑直线,最理想的情况是两个驱动电机转速完全相同。但现实中,即便是同型号电机,由于内部绕组参数、磁铁强度、换向片磨损程度等存在公差,在同样电压下也达不到完全一致的转速。

3.1 直流电机的转速特性差异

普通直流减速电机转速受负载影响很大。同一个PWM占空比下,两个电机输出转速可能差上几十转,反映到轮子线速度上就是跑偏。这里要注意,电机转速差异不是恒定的,它会跟着电池电压变化而变化——电池满电时,两个电机转速差可能不大;电压降下来之后,电机特性曲线差异会被放大,偏航会更明显。这就是为什么很多小车满电时候跑偏不明显,跑一会儿电量稍降就开始明显画弧。

3.2 驱动板压降不一致

驱动板方面,如果用的是分立式电机驱动芯片,比如L298N、TB6612这类,两个H桥通道的内部MOS管导通电阻可能存在差异,导致两路输出电压不一样,进而产生转速差。这个可以在有示波器的情况下直接测两路PWM输出波形,但更简单的办法是看数据手册或者换通道测试——把两个电机的驱动信号交换一下,如果跑偏方向跟着电机换,说明是电机个体差异;如果跑偏方向不变,说明是驱动通道差异或者接线问题。

3.3 开环怎么测电机一致性

这里教大家一个开环测电机差异的土办法:将小车悬空,左右轮离地,给一个固定占空比(比如30%、50%、70%,分别测),用转速计或者简单在轮子上贴个小标记,用手机慢动作录像数圈数。测10秒,记下左右轮各自转了多少圈。如果左右差异超过2%,那么在开环控制里跑直线基本无解,一定要上闭环。

如果是带编码器的电机,那就更方便了,直接读取编码器反馈,在相同占空比下比较左右轮的实测速度值,把差值拉出来看看是不是恒定。若是恒定差值,说明是系统性差异,好补偿;若差值跳动剧烈,可能电机本身或者接线就有接触不良。

4. 编码器与PID控制:从“开环盲跑”到“闭环纠偏”的分水岭

想要让小车真正走直线,靠给定两路相同PWM的“开环”思路基本是死路,特别是电池电压波动、地面摩擦变化这些扰动场景,开环一点招架之力都没有。解决办法是给每个驱动轮装上编码器,读取实际转速,用PID控制闭环调速。

4.1 编码器的基本原理和安装注意

编码器测的是电机轴转了多少圈,一般分为霍尔编码器和光电编码器。霍尔式常见于带减速箱的直流电机,结构可靠,抗干扰好;光电式精度更高但容易受到灰尘遮挡影响,小车在尘多的地方用要注意防护。

编码器安装最怕的问题就几个:码盘松动、接线接触不良、A/B相接反。码盘装歪了或者固定螺丝没锁紧,会产生“丢码”现象,也就是实际转了一圈但编码器只计到半圈,反馈速度就会出现周期性跳变,PID调节器拿到跳变的数据会被带得来回震荡。

4.2 速度闭环的基本逻辑

速度闭环的思路很好理解:期望速度给一个目标值,编码器测出实际速度,两者做差得到误差,PID就根据这个误差去调整PWM占空比,使得实际速度逼近目标速度。想要小车走直线,一个最简单的策略是:左右两个轮子给同一个目标速度,各自独立闭环。如果两个轮子的PID都工作正常,左右实际速度都会稳定在目标值附近,跑偏自然就被解决了大半。

不过这里有个细节很多人容易踩坑:两个轮子PID参数如果不同,左右动态响应就会不一致,起步瞬间和加减速时会出现“抢跑”现象——一侧先冲出去,另一侧慢半拍,结果小车起跑就是一个急转弯。所以同型号电机建议两侧PID参数保持一致,如果电机个体差异太大导致控制效果不同,优先调整电机侧的补偿脚本,而不是单独把一侧PID调得很激进。

4.3 编码器计数值的换算

做速度闭环前需要先把编码器读数换算成实际速度。常见的计算方式是这样的:

设编码器单圈脉冲数为PPR,减速箱减速比为N,在时间Δt秒内读取到的编码器计数增量为ΔCount。

轮子转动的圈数 = ΔCount / (PPR * 4)

(如果启用的是4倍频计数模式;若无4倍频,则除以PPR)

轮子转速(转/秒)= 轮子转动圈数 / Δt

轮子的线速度 = 转速 × 2π × 轮子半径

换算这个动作很多人觉得无所谓,其实影响很大。电机目标速度如果直接拿“编码器原始计数”来写,不同轮子直径的差异就会被忽略,闭环只是把“计数速度”闭环了,没有把“实际线速度”闭环——结构偏差又回到了控制误差里。

4.4 闭环之后依然跑偏怎么办

如果确定编码器数据准确、左右轮均已完成速度闭环,且实际转速和线速度一致,小车依然跑偏,那极大概率是两侧PID参数中的比例系数或积分系数差异导致响应不一致,或者控制周期不同步。两个轮子的控制循环如果是两个独立定时器中断,中断周期略有差异,也会让采样频率不一致,导致两边控制效果有微妙区别。建议把左右轮的速度控制放到同一个定时器中断里做交叉采样和输出,保证完全同步。

5. PID参数调校实战:方向对了,剩下的就是耐心

闭环有了,PID参数不对,小车照样跑得歪歪扭扭。PID参数调试是跑偏问题里最具“玄学”色彩的部分,但其实思路摸清了也就那么回事。

5.1 先调P,再调I,最后动D

我自己的顺序是:先把I和D设为0,只留P值。P从小到大慢慢加,观察小车悬空时轮子转速是否稳定。

  • P太小:响应慢,实际速度离目标速度差得远,推力不足,轮子转速波动大。
  • P太大:速度会过冲,轮子出现“一顿一顿”的抖动,或者有震荡声。

找到一个“实际速度能快速贴近目标速度,且没有明显振荡”的P值后,再加入I。I的作用是消除稳态误差——如果实际速度和目标速度之间存在固定差值,I会把积分累积上去补足输出。但I过大会导致低频振荡,速度忽快忽慢,轮子出现周期性喘振。

D一般在小车这类系统里用得比较少,因为编码器测速本身有微分噪声,D会放大噪声导致抖动。如果系统响应慢、惯性大,可以适量加一点D;对于常见小型电机轮式底盘,不加D也完全能跑好。

5.2 用遥控/串口辅助快速判断参数是否合适

一个特别实用的调试方法:给小车接上一个无线串口模块,实时回传左右轮的目标速度和实际速度监控数据,同时把小车放地上跑直线。

  • 如果左轮实际速度稳定接近目标,右轮转速在目标值附近振荡,说明右侧PID参数需要考虑调整或者电机补偿。
  • 如果左右轮速都稳定,但小车还是偏,那就是线速度不匹配问题——重新检查轮子直径换算参数。

这个调试手法非常推荐,别闷头改参数后马上跑,要靠数据判断,不然容易陷入反复猜参数的坑。

5.3 注意PWM输出限幅和死区

PID输出最终是PWM占空比。如果计算出来的输出值超出了0-100%的范围,需要做限幅。另外直流电机在PWM过小时存在死区——占空比低于某个阈值,电机根本不转。死区会导致小PID输出时电机不动,累积误差一大才突然动起来,这种“滞涩”会让小车在低速时跑偏明显。

解决方案是:在代码里设置一个最小PWM起动值。例如PWM周期为20000,死区对应占空比在0-200之间,那么当PID计算输出小于200时,直接把PWM拉到一个能让电机转起来的最低值(比如400),让电机保持极慢但稳定的转动。死区是低速直线行驶的隐形杀手,一定不能忽略。

5.4 常见PID调参速查表

现象可能原因处理思路
轮速持续低于目标值,且伴随稳态误差P太小或I缺失增大P,或适量增加I
轮速在目标值附近高频振荡P太大或D过大放大噪声减小P,关掉D
轮速周期性忽高忽低,类似“喘振”I过大减小I
低速几乎不动,突然猛地转一下PWM死区未处理设置最小PWM起动补偿
直线跑偏且左右轮速度稳定但不一致轮径参数或转速单位换算错误复核编码器换算公式与代码参数
起步瞬间总向一侧抢偏两侧PID参数不一致或控制不同步统一两侧PID,同步控制周期

6. 实操案例:双轮差速小车从“跑弧线”到“跑直线”的完整过程

拿一个手头的双轮差速小车实例复盘一下,让大家体会完整的排查思路。

这台小车配置:STM32主控,两个直流减速电机带霍尔编码器,TB6612驱动,12V锂电池供电。现象是“满电时轻微跑偏,电量低于一定值后跑偏明显加剧”,而且“起步时能感觉到有一侧先动,跑一小段距离后偏航大约30度左右”。这个描述其实暴露了三个信息:结构对称性大致正常、开环状态、左右轮电机特性随电压变化不一致。

排查分了三步:

第一步,结构检查。拆下车轮,用游标卡尺量左右轮直径完全一致,确认轴距对称,排除了结构和轮胎公差问题。

第二步,开环测转速。悬空车轮,给定50%占空比,用编码器读数测左右轮实际转速:左轮约112转/分钟,右轮约96转/分钟,差异约14%。这个差异已经非常大,肉眼都能看出来左右轮转速不一样。降低到30%占空比重新测,差异略微变化。这说明电机个体差异和驱动通道差异都存在。

第三步,闭环调速。先用左右各200Hz的PWM频率,中断速率100Hz,采用同一个定时器执行左右轮PID。先把I、D清零,P从10开始往上加,最终P=80时速度稳定无振荡。然后加入I,I=5时速度误差几乎消失。测转速:左右轮实际速度都能稳定在目标速度±3转/分钟之内。

闭环之后小车跑直线实测验车,起步时偶尔还是会有一点点偏,但跑2米后偏航角度控制在2-3度以内,实际使用完全可接受。这个结果说明很大一部分跑偏都是可以通过速度闭环解决的,只要调试方法正确,效果立竿见影。

7. 几个容易忽略的“隐藏工程”经验

这些年在各种底盘上踩过不少坑,有几个细节非常值得单独拿出来提一嘴。

7.1 电池电压带来的干扰

直流有刷电机直接吃电池电压,电池放电曲线会影响电机特性。做PID调试时最好带上实际负载——悬空调好的参数,放地上可能因为负载不同、摩擦力和电流变大,出现新的振荡。而且实际跑的过程中电池电压波动较大,如果PID输出饱和或积分项饱和严重,会导致返回目标速度的能力变差。建议一定在代码里加积分限幅,防止积分项过大造成系统“卡死”在饱和状态。

7.2 万向轮的影响

双轮差速小车前端一般有一个万向球或万向轮,但这个从动轮的摩擦阻力其实会把小车“拖偏”。如果万向球卡滞或地面摩擦不均匀,会在小车前进过程中产生侧向干扰力,使小车慢慢偏向一个方向。这个在结构排查阶段一定要检查,不然你旋半天PID,万向轮那边一个轴承不良就全白调。

7.3 陀螺仪不是万能解

很多朋友一上来就想着加MPU6050陀螺仪来纠正跑偏。思路可以,但注意陀螺仪测的是角速度,需要积分得到角度,积分会漂移,而且MPU6050直接读取出来的角速度噪声不小,零偏校正没做好的话,纠偏方向可能是错的。陀螺仪适合做辅助修正,不应该替代电机速度闭环——先把速度闭环做好,再用陀螺仪做航向角闭环,这样分层控制逻辑才稳定。

7.4 代码里容易写错的细节

  • 编码器读取函数要加保护:防止在读取过程中被中断更新,导致读取高低16位不一致。
  • 速度计算周期要准确:计算实际速度的时间间隔如果不能用定时器精确计时,误差会直接传导给PID。
  • PWM频率别设太低:太低的PWM频率(比如几十Hz)会造成电机运转声音异常,低速时扭矩波动明显,也影响编码器测速稳定性。

8. 结语:调跑偏问题,本质上在调系统性误差

机器人小车跑偏不是一个单一故障,而是机械公差、电机一致性、反馈精度和控制参数共同作用的结果。好的排查习惯是从物理结构到电机驱动,从编码器反馈到PID参数,逐级往下定位问题,而不是一上来就乱改代码。

如果你正在被跑偏问题折磨,按照这几个环节逐一排查,绝大多数情况下都能找到根源。实在不行,就在代码里加“软补偿”——实测让小车跑个2米,测出左偏多少度,然后在左右轮PID目标速度上做一个固定偏置补偿,也能把偏航控制到可接受范围。

我个人调试这类小车的经验是:调PID不能急,一次只改一个参数,记录每次变化,是调好的唯一捷径。希望这篇内容能帮你少走点弯路,少拆几次车。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询