第一次把Pixhawk 2.4.8装到差速无人车底盘上那天,我一度怀疑自己买到了坏板子。固件刷好了、电调接好了、Mission Planner也连上了,可油门推到底,两个轮子纹丝不动。折腾到后半夜,最后发现元凶只是一行参数:SERVO1_FUNCTION默认根本不是电机输出,必须手动改成差速电机模式。这种“看似简单、做起来全是坑”的事情,在这套方案里几乎无处不在。
这套“Pixhawk 2.4.8 + Mission Planner + 差速底盘”的组合,可以说是开源无人车入门最便宜、最顺手的一条路。2.4.8虽然已经是十年前的硬件设计,但胜在便宜、资料多、ArduPilot固件生态成熟,差速转向逻辑在ArduRover里本身就内置好了,不需要自己写控制算法。这篇内容就是把我踩过的坑按完整流程写出来,从硬件选型、接线、刷固件、传感器校准,到差速参数配置、解锁下地、问题排查,尽量做到一个完全没碰过Pixhawk的新手,也能按着顺序把底盘跑起来。
1. 为什么选Pixhawk 2.4.8做差速底盘
1.1 这块老板子到底能干什么
Pixhawk 2.4.8属于Pixhawk第一代开源硬件的成熟改版,核心是STM32F427芯片,运行ArduPilot或者PX4固件。它原本是为多旋翼、固定翼设计的飞控,但它对车、船这类地面载具的支持也意外地完善,ArduRover固件里专门有一套叫Skid Steering的操作逻辑,翻译过来就是“滑移转向”。
差速无人车底盘,说白了就是车上没有转向舵机,左右两个轮子各自独立驱动,靠两侧轮速差实现转弯。飞控要做的运算其实不复杂:接收遥控器的油门和转向信号,按照差速转向算法换算出左电机和右电机各自的转速指令,再从Pixhawk的MAIN OUT输出口输出两路PWM信号,驱动电调带动电机。Pixhawk 2.4.8做这件事绰绰有余,八个输出通道只用了两个,处理器完全谈不上压力。
这块板子真正的短板,也就是新手最容易踩的第一个坑:它的5V供电电路不皮实,对电源质量比较敏感,而且市面上大量2.4.8是兼容板或者二手板,焊接和元器件用料参差不齐。我在后面接线部分会专门说供电的处理方式,这一步处理好了,后面能省掉很多莫名其妙的问题。
1.2 差速底盘是怎么被“控制”起来的
理解差速控制逻辑,有助于后面调参数。假设你用的是美国手遥控器,左手油门杆控制前进后退,右手转向杆控制左右转弯。差速模式下,飞控不会直接把油门信号原封不动送给电机,而是会做一个混控计算:
- 油门杆在中位,转向杆也中位:左右轮转速相同且为零。
- 油门杆推向前,转向杆中位:左右轮同速正转,车直线前进。
- 油门杆推向前,转向杆向右:右轮减速、左轮加速,车向右转弯。
- 油门杆拉到后,转向杆向右:右轮反转更多,车在倒车中向右转,转弯半径会更小。
这个混控算法在ArduRover里已经把细节封装好了,我们要做的事情,是告诉飞控“哪个输出口是左电机,哪个输出口是右电机”。这就是SERVO_FUNCTION参数存在的意义,也是我在开头说到的那个坑。很多人电机不转,不是硬件坏了,而是飞控根本不知道那几个输出口应该输出电机控制信号。
1.3 硬件清单与选型建议
做差速底盘,硬件上不需要追求高端,符合“够用且皮实”的原则就行。我比较推荐给新手的组合如下:
| 部件 | 建议方案 | 备注 |
|---|---|---|
| 主控 | Pixhawk 2.4.8(兼容版即可) | 注意买回来先检查3.3V电压,仿板翻车率高 |
| 底盘 | 双电机橡胶轮底盘,1:16攀爬车改装也行 | 带编码器的底盘先不接编码器,纯遥控用不到 |
| 电机 | 直流减速电机(有刷),带霍尔编码器那种 | 便宜、力矩够、不容易坏 |
| 电调 | 两个双向有刷电调,或一个双路有刷电调 | 必须支持正反转,普通航模单向电调不能倒车 |
| 电池 | 2S或3S锂电池,容量2000mAh以上 | 电压不要超过飞控输入限制,接法是转接后进电源模块 |
| 电源模块 | PM06/PM07这类带低压检测的PM | 给飞控提供干净5V,同时还能监测电压 |
| 遥控器 | 富斯i6X/i6、天地飞等四通道以上 | 接收机尽量选带SBUS或PPM输出,接线少 |
| GPS/数传 | 新手可以先不买 | 纯遥控模式不依赖GPS |
有一点必须单独强调:电调一定要买双向的,也就是支持正转和反转。很多玩航模的人手里剩下的电调是单向的,油门最低对应停止,推油门只能往前转。这种电调装到差速车上,车只能前进不能倒车,转向也会特别别扭,因为你根本无法让一侧车轮反转。我自己第一版就是用两个旧的单向电调凑合,结果车能往前冲,倒车全靠手推。
2. 接线与供电:顺序不对可能烧板
2.1 把接线拆成三块来理
Pixhawk 2.4.8的接口看着密密麻麻,其实对差速底盘来说,需要接的只有三部分。我建议你在动手之前,先在纸上把这三条线画清楚,比直接上手插线稳得多。
第一块是动力线:电池通过XT60头接到电源模块的输入端,电源模块的输出端并联给两个电调供电,电调的输出端分别接左右电机。这部分是大电流通路,用的线要粗,接头要结实,尤其电调和电池之间的连接一定不能虚接,否则跑起来电流一大,接口发热烧掉不是开玩笑的事。
第二块是飞控供电与信号线:电源模块上有一根六芯排线,插到Pixhawk的POWER接口,给飞控提供稳定的5V,同时把电池电压信息传给飞控。两个电调的信号线,分别接到MAIN OUT 1和MAIN OUT 2,其中MAIN OUT 1对应左电机,MAIN OUT 2对应右电机,这个对应关系要记住,后面调方向会用到。
第三块是遥控线:接收机的SBUS或者PPM输出口,接到Pixhawk的RC IN接口。如果接收机只支持独立PWM输出,还需要先接一个PPM编码器,否则线会非常多,新手容易插错。所以我强烈建议买带SBUS输出的接收机,三根线搞定,省心。
2.2 供电红线问题:别让两个电源打架
Pixhawk 2.4.8供电这块,是我见过新手烧板子最多的地方。这里把规则说死:飞控的5V供电,只用电源模块输出的那一路。电调如果带BEC功能,信号线里的红色正极线不要插到Pixhawk的输出排针上,只插黑色地线和白色信号线就行。
为什么不插红线?因为电调的BEC也是一路5V电源,如果和电源模块同时给飞控供电,两路电源之间会有电势差,轻则异常重启,重则烧毁飞控的稳压芯片甚至主控。Pixhawk 2.4.8的电源电路本来就不是为双电源设计的,听话,红线的“火”别引到板子里。
我包里常年备着几根三根杜邦线改成的两芯信号线,就是把红色芯抽出,只用黑白两芯。有些电调出厂就带独立的BEC引出线,那更简单,直接把红黑两根BEC输出线剪掉或者包好绝缘胶带,留着给下一台车用都行。
还有个很容易忽略的点:如果你用USB连接Mission Planner调参时,一定要先把电池接上,或者至少保证电源模块已经给飞控供电。只靠USB口给2.4.8供电,某些兼容板的板载稳压性能差,会出现连接不稳定、校准过程中突然断开的问题。正确做法是电池上电,再插USB线。
2.3 遥控器接收机怎么接
遥控接收机接RC IN,这个接口需要一根转接线。以富斯iA6B接收机为例,SBUS口输出的三根线,信号线接Pixhawk RC IN排针的中间那根信号针,正负极对应排针的5V和GND。Pixhawk的RC IN接口可以给接收机供电,但电流有限,如果接收机外加了高压陀螺仪之类的外设,建议单独供电,否则可能出现接收机供电不足,导致遥控距离缩短甚至失控。
接完之后先做一件事:打开遥控器,看接收机指示灯是否正常,然后在Mission Planner的“无线电校准”页面里,确认摇杆通道是否有数值变化。这一步放在刷固件之后来做更合理,但接线顺序上可以先确认硬件通路。
3. 刷固件:版本选错,折腾一晚上
3.1 ArduRover还是ArduCopter
Pixhawk可以刷多种ArduPilot固件,做差速车必须刷ArduRover。这个Rover就是专门给陆地载具用的,里面才有Skid Steering差速转向逻辑。如果刷成ArduCopter,虽然也能让电机转,但没有差速车操控逻辑,油门和转向的混控会非常别扭,没人会用这个状态去玩车。
更关键的是固件版本选择。2.4.8是FMUv2架构,ArduRover新版固件对FMUv2的支持逐年收紧,体积也越来越大。我在2.4.8上试过直接刷最新版,结果刷完连上Mission Planner后出现参数缺失,个别功能页面打不开。后来老老实实换回ArduRover 3.6.12,所有问题都没了。如果你用的是兼容板或老板子,我更推荐ArduRover 3.6.12或者4.0.7这类相对稳定、中文资料多的版本,不要追新。差速底盘用到的那几个功能,老版本固件早就有了,完全够用。
3.2 Mission Planner安装与驱动
Mission Planner是ArduPilot生态里最常用的地面站软件,下载安装后第一次插上Pixhawk,Windows系统会识别到一个未知设备。这时候打开Mission Planner安装目录下的驱动安装工具,安装PX4驱动,一般就能识别出COM口。要注意的是,现在很多电脑用的是USB 3.0口,个别2.4.8兼容板的USB转串口芯片兼容性一般,插在USB 3.0口上反而识别不到,换到机身侧面的USB 2.0口就正常了。
如果电脑死活不识别,先换一根能传数据的USB线。这个话题我见得太多了,不少“连不上飞控”的求助帖,最后发现是那根线只能充电,不能传数据。USB线看起来都差不多,但里面是不是接了数据线,只有试了才知道。
3.3 刷固件完整过程
打开Mission Planner,把Pixhawk用USB连上电脑,选择正确的COM口,波特率默认115200,点连接。连接成功后,进入“初始设置 -> 安装固件”页面,注意不要选错,下拉列表里找ArduRover(载具图标是一个车),点一下,地面站会自动下载固件并刷写到飞控。整个过程大概一到三分钟,期间不要拔线、不要断电。
如果你下载固件的时候卡住或者失败,极有可能是网络原因。这时候可以手动下载ArduRover固件文件,然后在“安装固件”页面选择“加载自定义固件”,选择本地文件,Mission Planner会自动完成刷写。刷完之后,飞控会重新启动,此时安全开关上的LED会快速闪烁,属于正常现象。
这里提醒一下,2.4.8刷完ArduRover后,因为固件占用空间较大,要避免反复擦写刷机。有些兼容板的Flash芯片寿命一般,频繁刷机可能会导致奇奇怪怪的问题。一次刷好,后面尽量就用Mission Planner在线改参数,不要动不动重刷。
4. 校准流程:跑起来之前必须做的事
刷完固件之后,飞控内部还是一张白纸,需要经过几个传感器校准,它才知道自己的姿态状态和遥控器行程。这些校准是硬门槛,跳过去后面基本没法正常跑。
4.1 加速度计校准
在Mission Planner连接飞控后,进入“初始设置 -> 必要硬件 -> 加速度计校准”。点击“校准加速度计”按钮,屏幕会出现一个飞行器姿态图,提示你把飞控以不同的朝向放平。注意,这里校准的是飞控本体,不是整个车。如果你把飞控装在底盘上了,校准的时候整个车都要跟着调整姿态,这一步最好在装车之前完成,或者至少把底盘抬起来操作。
我习惯是把飞控先放桌上单独校准,装车后再做一次完整的六面校准。装车后校准的好处是,飞控的安装朝向和底盘的实际水平关系会被记录下来,后续跑直线更稳。动作要点是:每一个面都要放平,等屏幕上的进度条走完再换下一个面,不要图快。家里有水平仪最好,没有就找个标准桌面,大致水平问题都不大。
4.2 罗盘校准与干扰问题
差速车上电机电流很大,尤其大油门起步瞬间,电流冲击会严重影响Pixhawk 2.4.8内置罗盘。内置罗盘一受干扰,飞控会认为车辆在旋转,解锁时出现“罗盘未通过健康检查”的报错,甚至跑起来后姿态数据乱跳。
解决思路其实很简单:如果你和我一样,初期只玩遥控,不搞GPS自动导航,那罗盘完全可以用不到。直接把罗盘禁掉,把COMPASS_ENABLE参数改为0,省去一堆干扰烦恼。等以后加了外置GPS模块带罗盘,再把外置罗盘设为首选罗盘,把内置罗盘禁掉。
如果一定要用罗盘,那就尽量用外置罗盘,比如GPS模块上集成的M8N罗盘,安装时让罗盘远离电机和电调的电源线,尽量往车顶或者GPS支架上放。校准的时候,在Mission Planner的“罗盘校准”页面里,点击开始后拿着整个车,按照屏幕提示的方向,把车辆前后左右上下六个面的姿态都转一遍,速度不用快,但每个方向都要覆盖到。校准完成后,观察“磁场”读数是否稳定,数值乱跳就说明干扰源没避开。
4.3 遥控器校准与通道方向
遥控器校准这一步的目的,是让飞控知道你的遥控杆量程范围。进入“必要硬件 -> 无线电校准”,Mission Planner会显示所有通道的柱状图。动遥控器,要能看到RC1转向通道和RC3油门通道的柱状条跟着变化。
校准之前,先把遥控器上的所有微调拨杆归零,再把油门和转向的D/R大小舵都设为100%。然后点击校准按钮,按照页面提示,把每个摇杆都推到极限位置,保持几秒,它会自动识别最小值、中间值、最大值。校准完成后,观察RC1和RC3的实际数值范围,正常应该是在1000到2000之间,中位在1500附近,误差不要超过±10。
如果遥控器摇杆往上推的时候,Mission Planner里数值从2000变成1000,说明通道方向反了。可以在遥控器上把该通道的REV开关拨到另一边,或者在Mission Planner里把RC1_REVERSED和RC3_REVERSED参数改成1。对于差速车,我建议油门通道设置成“摇杆向上为前进”,转向通道设置成“摇杆向右为右转”,这样最符合直觉。
5. 差速底盘核心参数:关键在于让输出口变成电机口
这个章节是整篇博文最核心的部分。前面所有准备,都是为了让这一步的参数设置能顺利生效。不要嫌参数多,实际要改的就那么几个,改对了,车就能动了。
5.1 参数在哪里改
Mission Planner连接飞控后,进入“配置 -> 全部参数表”。这个页面是ArduPilot所有参数的集合,可以在搜索框直接输入参数名。差速底盘需要改的参数主要分布在SERVO、MOT、THR、STEER这几个前缀下面,搜索名称就能快速定位。
修改参数的方法很简单:双击参数值,输入新值,回车。修改后可以点页面右侧的“写入参数”保存。初次设置时建议一次性把下面这张表的所有参数都改完再保存,省得改一个重启一次。
5.2 一套亲测可用的差速参数组合
下面这组参数,是我在2.4.8 + ArduRover 3.6.12环境下实跑过的组合,适用于“左电机接MAIN OUT 1、右电机接MAIN OUT 2、双向有刷电调、2S/3S电池”这种最常见配置:
| 参数名 | 设置值 | 作用 |
|---|---|---|
| SERVO1_FUNCTION | 73 | 把MAIN OUT 1定义为左电机 |
| SERVO2_FUNCTION | 74 | 把MAIN OUT 2定义为右电机 |
| STEER_TYPE | 2 | 使能差速转向(Skid Steering) |
| MOT_PWM_TYPE | 0 | 普通PWM输出,适配绝大多数电调 |
| MOT_PWM_MIN | 1000 | 电机PWM最低值,对应电调停止/反转 |
| MOT_PWM_MAX | 2000 | 电机PWM最高值,对应电调全速 |
| THR_MIN | -100 | 允许倒车,油门摇杆往下是倒车 |
| THR_MAX | 100 | 允许前进,油门摇杆往上是前进 |
你可能注意到,这里面没有看到“油门通道”的设置。这是因为ArduRover默认的油门通道就是RC3,转向通道是RC1,不需要额外指定。我们真正要做的,是把两个输出口定义成电机输出。
SERVO1_FUNCTION=73和SERVO2_FUNCTION=74这两个值,是ArduRover里专门为差速转向预留的电机输出定义。设置之后,差速混控算法会自动把左右电机的转速指令送到这两个输出口。如果你不设置这一步,输出口默认是普通舵机输出,你用电机测试页面推油门,它也不会输出有意义的PWM给电调。这就是我开头那个“电机不转”问题的根本原因。
STEER_TYPE这个参数也很关键,默认值可能是1,对应普通的舵机转向车,必须改成2,也就是差速转向模式。改完之后,左右电机才能在转向指令下产生转速差。你可以把STEER_TYPE理解为告诉飞控“我要用的是两轮差速车,不是四轮转向车”。
THR_MIN改成-100,是为了让油门杆中位以下区域变成倒车区。如果保持默认的0,油门杆往下拉只会让车停下来,不会倒车。对于差速底盘这种需要原地转向和倒车的车型,-100几乎必须改。
5.3 输出方向反了怎么办
参数设置完后,电机还没接,先不急着测试。先思考一个场景:假设你拨动转向杆向右,飞控的逻辑是右轮减速、左轮加速。但如果因为电机接线或者电调信号方向的问题,实际结果是右轮加速、左轮减速,车就会往相反方向转。这种问题在差速车上非常常见,解决方法是设置输出反向参数:
- 如果左电机方向反了,把SERVO1_REVERSED参数改为1。
- 如果右电机方向反了,把SERVO2_REVERSED参数改为1。
注意,这跟遥控器通道方向反向不是一回事。遥控器通道反向改的是“转向指令本身”,输出反向改的是“某个电机对转速指令的响应方向”。如果两个方向都反了,也没关系,可以同时改。判断方法很简单:先把车架起来,开遥控器、解锁、推一点油门,观察两个轮子的旋转方向是否一致、是否符合前进方向。
6. 电机测试、解锁与第一次下地
6.1 安全开关和解锁
Pixhawk有一个安全开关机制,上电后飞控并不会立刻允许电机输出,必须按下安全开关,让系统进入“可解锁”状态,然后才能执行解锁动作。新手第一次操作,往往不知道还有这一步,以为插上电就可以转。
完整的顺序是:先打开遥控器,再给电池上电,等飞控启动完成后,按下安全开关,安全开关上的LED和飞控上的LED会从快速闪烁变为缓慢闪烁,此时飞控允许解锁。解锁操作最简单的办法,是在Mission Planner飞行数据界面的顶部点“Arm/Disarm”按钮。点下去之后,如果一切正常,飞控会发出解锁提示音,同时LED状态变化。
如果点击Arm后飞控拒绝解锁,页面顶部会显示红色英文错误信息,比如“Gyro not healthy”“Compass not healthy”之类的。先读一下这条提示,80%的问题都能从提示里找到方向。常见的解锁失败原因包括:加速度计没校准、罗盘干扰严重、遥控器油门不在最低位、GPS信号等因素。对纯遥控车来说,把罗盘禁掉、把油门杆拉到最低,一般就能解锁。
6.2 用电机测试页面验证接线
解锁之后先不要推油门,直接进Mission Planner的“电机测试”页面。这个页面可以手动给某个输出通道指定PWM值,非常实用。
把OUT1的PWM值设为1500,点击测试,左电机应该转起来。再把OUT2设为1500,右电机也应该转。1500在电调这里通常对应中位,如果电调中位设置正确,1500应该是电机停转。然后再分别测试1000和2000,观察两个电机的转向和转速变化。注意,测试时车轮离地,远离衣服和线缆,我见过有人测试时手指伸进轮胎缝里被夹到,那滋味不好受。
如果1500时电机还在一顿一顿地转,说明电调中位没校准;如果1000到2000区间里电机转速变化方向不对,说明电调方向或者SERVO_REVERSED参数需要调整。电机测试页面是排查问题最快的地方,一定要学会用。
6.3 第一次路试的正确姿势
路试的第一次,我建议做到“三不”:不猛加油、不在人群密集的地方试、不在室内狭窄通道试。先把车架起来空转测试一遍,确认两个轮子的方向和加减速都正常,再放地上。
放地上之后,用遥控器从最小油门开始,慢慢推。如果发现车走直线时总往一侧偏,可能是左右电机转速特性有差异,或者路面不平。ArduRover里有TRIM_AUTO参数,可以用来自动配平,但新手更简单的办法是先在遥控器上用转向微调补偿。跑起来顺手了,再考虑去细调参数。
转向灵敏度如果觉得太贼或者太钝,可以动STEER2SRV_RATE这个参数,值越大转向越灵敏。差速车本身转弯半径小,转向响应快,我一般会稍微留一点线性余量,让转向不要太突兀,否则低速原地转起来非常容易失控。
7. 常见问题排查速查表
把我在实际调试中遇到的典型问题整理成一张表,每一条都是真金白银换来的经验。
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 电机完全不动 | 未解锁、安全开关未按、SERVO1_FUNCTION未设置 | 先解锁,再检查参数表,最后用电机测试页验证 |
| 只有一侧电机转 | 另一路输出接线松、SERVO2_FUNCTION未设置 | 检查MAIN OUT 2接线,重新确认参数 |
| 两个轮子对着转 | 一个电机接线反了 | 互换该电机两根线,或把对应SERVO_REVERSED设为1 |
| 推油门没反应,但电机测试能转 | 遥控器通道没校准、油门通道方向反了 | 重做无线电校准,检查RC3数值是否正确 |
| 解锁失败提示罗盘错误 | 罗盘干扰 | 禁用内置罗盘,或改用外置罗盘并重新校准 |
| 能前进不能倒车 | THR_MIN还是0 | 把THR_MIN改成-100 |
| USB连不上 | 驱动问题、线只能充电、USB 3.0口兼容性 | 装驱动、换线、换USB 2.0口 |
| 刷完固件起不来 | 固件版本太新、Flash空间不足 | 刷回ArduRover 3.6.12或4.0.7 |
| 解锁后电机点动一下就停 | 电调中位不准 | 按电调说明书重新校准中位,用1500确认 |
这几个问题里,最危险的就是“解锁后电机点动一下就停”。这种情况通常是电调中位没对准,飞控输出1500作为停止信号,但电调以为这是某个速度指令,导致电机低速转动。飞控检测到异常后又会主动停止输出,表现出来就是电机一抽一抽。处理办法是先把电机测试页面的输出值设到1500,确认电调在1500时电机真的不转,然后再试1000和2000。如果电调说明书里写明了中位校准流程,一定要照做,别嫌麻烦。
还有一个特别想吐槽的坑:我第一台车用的电调是某品牌的“自动中位识别”功能,上电瞬间会读取当前PWM作为中位。问题是那时候Pixhawk刚上电,输出口的默认值可能不是1500,于是电调就把一个错误的值记成了中位,导致整个PWM行程全错。后来我先用Mission Planner把输出固定到1500,再给电调上电,问题才解决。所以当你发现电机转得莫名其妙时,先想想电调是什么时候上电的,中位是在什么状态下被记住的。
另外,螺丝和接线的松动也是差速车的隐形杀手。车在跑的时候都在震动,哪怕一开始接线很牢固,跑几圈之后也可能松脱。我在电机和电调之间使用了带锁扣的XT30接头,电调的电源线和信号线都用扎带固定在底盘上,飞控本身用3M双面胶加扎带双重固定。这种细节看着不起眼,却能避免很多“跑着跑着突然失控”的险情。
最后再分享一个个人习惯:每次调车之前,先把车架起来再上电。不管是改参数还是测试电机,只要轮子能转,就一定保证它们悬空。这个方法能让你避开绝大多数安全事故和意外损坏。我手里这台2.4.8到现在还在服役,偶尔还会拿出来当测试平台,玩熟了之后,加GPS、加数传、接机载电脑跑MAVROS做简单巡航,都是一路通。如果你正好卡在“电机不转”或者“方向不对”这个阶段,回到第5节,把参数表重新对一遍,多半就能解决。