拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ArduRover电调配置全解析:从差速底盘到Mission Planner实战

ArduRover电调配置全解析:从差速底盘到Mission Planner实战

把Ardupilot这名字念出来,大多数人第一反应都是无人机。但Ardupilot官方支持的遥控设备清单里,地面车Rover其实是一条非常成熟、也很少被好好讲清楚的分支。上个月我把一台两驱差速底盘配上Pixhawk兼容飞控,从零开始调成了一台能手动遥控、能一键自动航点巡航的ArduRover。整个项目里最让我意外的不是飞控本身,而是电调配置——底盘的电机驱动逻辑和四旋翼的电调驱动逻辑完全是两套思路。这篇记录我会把Rover底盘的电调选型、接线、校准、参数调优到实车测试的完整过程都拆开讲,适合刚入手ArduRover、手里正好有个差速底盘但不知道怎么接电调的朋友。

1. 项目背景与硬件选型:为什么值得做一台ArduRover

1.1 从“飞”到“跑”:Ardupilot在Rover上的意义

很多人手里已经有Pixhawk或者Cube这类飞控,之前可能一直在玩多旋翼。多旋翼要做电调配置,关注的是电机顺序、油门行程校准、DShot协议这些;但把同一块飞控刷上ArduRover固件之后,它管理的就不再是旋翼电机,而是地面车的转向和速度。地面车底盘有个天然优势:测试风险低、续航可以做得很大、载重能力强,很适合用来验证自主导航、路径规划、避障这类算法,不需要一上来就在天上飞。

ArduRover本身支持好几种底盘结构:两轮差速、四轮差速(滑移转向)、阿克曼转向、四轮独立转向等。我这次选的是最常见的两轮差速底盘,因为结构简单、成本低,而且正好能把“电调配置”这个核心问题讲透。两轮差速底盘的转向逻辑是:左侧电机和右侧电机转速不同,车子就会向转速低的一侧转弯;转速差越大,转弯越猛;左右完全反转,就能原地掉头。

所以关键点来了:要让这个转弯逻辑成立,左右两个轮子必须能独立调速,而且最好能倒转。这就直接决定了电调的选型方向。

1.2 底盘与电调选型的三个关键问题

做Rover之前,我踩过的最大的坑就是在电调选型上想当然。很多从航模转过来的玩家,手里存了一堆多旋翼电调,以为直接接到飞控输出口就能用。实际上普通航模电调(尤其是多旋翼电调)默认只支持单向输出,油门推到最低只是停止,并不能让电机反转,这让差速转向一开始就没法实现。

我在选型时考虑了三个问题:

  • 电调是否需要支持倒转:两轮差速底盘建议优先选支持正反转的电调,常见方案是带RC遥控车模式的双向电调,或者刷了BLHeli固件且开启双向模式的多旋翼电调。如果手里只有单向电调,也不是完全不能用,但转向只能靠单侧减速实现,灵活性差很多,倒车基本没戏。
  • 工作电流和电调规格:底盘电机的堵转电流通常不小,尤其是起步瞬间。电调规格必须留出至少1.5倍余量,比如电机峰值30A,就选45A或者50A以上的电调,否则起步就热保护。
  • 供电逻辑是否统一:底盘电机功率大,飞控和接收机需要独立的UBEC供电。不能指望电调内置BEC给全车供电,大电流下BEC电压跌落会直接导致飞控重启。

这次我用的电调是支持正反转的车模双向电调,输出能力标称60A,底盘是常见的1/10车模大小,两个550有刷电机,供电用3S锂电池。飞控选择的是Pixhawk 2.4.8兼容板,刷ArduRover最新稳定版。整套系统成本控制在一千多元,很适合作为入门地面机器人平台。

1.3 遥控、电源与安全附件的取舍

遥控器和接收机方面,我直接用之前飞固定翼剩下的乐迪AT9S,接收机给飞控提供了SBUS信号。Rover不需要太复杂的遥控通道,最少只需要油门通道和转向通道,但建议预留一个三段开关作为急停或模式切换。这样在自动导航测试时,能随时切回手动模式接管车辆。

电源部分我单独配了一块5V/3A的UBEC,从电池平衡头取电,给飞控和接收机供电。电机主电源直接从电池经过电调供电,和飞控供电完全隔离。这样即使电调端出现大电流波动,也不会把飞控拉崩。安全附件方面,我在电池正极串联了一个30A的船型开关,作为整车的主断电开关,调试时随时可以切断动力。这个小开关救了我好几次,强烈建议新手照做。

2. 电调配置核心原理:差速底盘靠什么跑起来

2.1 普通电调与双向电调的区别

电调的本质是把飞控输出的PWM脉宽信号,转换成驱动电机的电压或电流。普通多旋翼电调接收的PWM范围是1000-2000微秒,1000对应停止,2000对应满油门,只控制电机转速高低,不控制方向。双向电调则在中间设置了零速点,通常是1500微秒对应停止,小于1500反转,大于1500正转,PWM离开中心点越远,转速越高。

对Rover来说,这套逻辑非常关键。差速底盘用左右两个电调,只要飞控给出不同方向的PWM差值,车子就能灵活转向。实际ArduRover固件里的做法是:左侧电机接收一个PWM,右侧电机接收另一个PWM,方向舵摇杆输入会改变左右侧PWM的差值。如果电调不支持反转,这个差值最多只能从“正满”变到“零”,转向半径就会很大。

ArduRover里有个参数叫MOT_PWM_MIN和MOT_PWM_MAX,分别代表反转最大速度和正转最大速度对应的PWM值。对于双向电调,这两个值通常设为1200和1800,中心点1500校准为零速。对于单向电调,MOT_PWM_MIN要调成1500(即最低速为停止),MOT_PWM_MAX保持2000,但要接受没有倒车的现实。

我用的是支持正反转电调,所以直接按双向逻辑来校准。这里有个容易忽略的细节:很多双向电调出厂时中心点不是精确的1500,需要单独校准,否则会出现“明明推杆到中位,车还在慢慢爬”的讨厌现象。

2.2 校准的本质:PWM范围与最小启动值

电调校准这个东西,飞无人机的人应该很熟:把油门开到最大,电调上电,听到提示音后再把油门拉到最小,电调就会记住你的油门行程。但Rover电调校准有它的特殊性,因为用的是双向逻辑,校准过程不是为了记住“停止和最大”,而是为了记住“反转最大、中位、正转最大”三个点。

具体到我的双向电调,校准流程一般是这样的:先把飞控的油门输出通道通过Mission Planner设为手动模式并锁定满油,然后给电调上电,听到一声提示后马上把油门拉到最低,电调再响两声,表示三个点都记住了。之后电调会把1500微秒左右视为中位停止。如果你用Mission Planner的Motor Test功能,把输出设为1500,此时电机应该完全停住;设为1300,电机反转;设为1700,电机正转。

真正的坑在“最小启动值”。有刷电机和电调都有启动死区,PWM值偏离中心点太小时,电机只会有嗡嗡声但不转。ArduRover里面没有直接暴露“启动油门”参数,但你可以通过调整MOT_THST_MIN和MOT_THST_MAX来改善。MOT_THST_MIN表示飞控输出的最小油门百分比,默认可能是0,但对Rover底盘建议设为5到8,让飞控始终给一个微小的起步信号,避免电机在低速时抖动。

需要提醒的是,每次刷完固件或者更换电调,都必须重新做一次校准。我见过有人换了电调之后忘记校准,油门拉了一半车才突然冲出去,差点撞墙。校准不是可选项,是电调配置的第一步。

2.3 飞控参数里必须认识的一组变量

除开上面提到的MOT_PWM_MIN、MOT_PWM_MAX、MOT_THST_MIN、MOT_THST_MAX,ArduRover里还有几个参数对电调配置结果影响很大,第一次调试一定要逐个确认:

  • MOT_PWM_TYPE:PWM输出协议。默认是Normal,也就是普通50Hz PWM,绝大多数电调都能兼容。如果你的电调支持OneShot,可以改成OneShot来提高响应速度,但很多车模电调不认这个协议,改了反而没输出。
  • MOT_SLEW_RATE:油门变化速率限制。单位是每秒可以变化的百分比,默认值很激进,直接推满油门时,车速会瞬间猛冲。我建议先设成15到20,这个值的含义是“每秒最多让输出变化15%”,能明显抑制起步抬头,适合地面调试。
  • SERVO1_FUNCTION和SERVO3_FUNCTION:这两个是通道功能映射。在ArduRover里,左侧电机通常映射到伺服输出口1,右侧电机映射到伺服输出口2,具体要看机架类型。装好固件后第一件事就是打开Mission Planner的Manual测试,看看拨动摇杆时左右输出是否正确。
  • ENABLE_E_STOP和急停开关:如果遥控器有闲置通道,可以把这个通道设为急停功能,飞控收到信号后会直接切断电机输出。这个参数在地面测试时极其有用,强烈建议开启。

这些参数在Mission Planner的完整参数树里都能搜到。名字看着多,其实逻辑很清楚:PWM范围管的是电调认不认,油门阈值管的是车动不动的灵敏度,速率限制管的是起步柔不柔。把这组变量调好,电调配置的工作量就完成了八成。

3. 接线与通电检查:别急着插USB

3.1 信号线、地线与供电线的连接细节

电调和飞控之间的接线看起来简单,但细节决定成败。Pixhawk兼容飞控的伺服输出口一共有8路,每一路都是三根针:信号、5V、GND。电调三根线里,除了信号线,还有一根红线和一根黑线,分别对应BEC正极和负极。

如果用不带BEC的双向电调,接线最干净:电调信号线直接插飞控输出口信号针,电调的黑线插到GND针,红线空着不接。但很多车模电调内部自带BEC,即使你不需要,它的红线也会往外输出5V。这时候如果飞控已经通过其他途径供电(比如UBEC),电调红线再接上就会造成两路电源并联,轻则电压不稳,重则烧板。

我建议的做法是:把电调那根红色BEC线从插头里退出来,用绝缘胶带包好,只保留信号线和地线接飞控。这样电调和飞控之间只有信号关系,没有电源关系,供电统一走独立的UBEC。很多老玩家把这一步称为“剪红线”,其实不需要真剪,用取针器退出来就行,将来电调还能恢复原样。

信号线的接法也要注意顺序,Pixhawk的输出口信号针是靠近板边的那根,具体可以看板子上的丝印。接反了信号线通常不会有输出,但不会烧设备。第一次接线时,建议逐根确认。

3.2 通电前必须完成的四个检查

我在接完线后总结了一套通电前检查清单,按顺序执行,可以规避大部分硬件问题:

  1. 检查飞控输入电压:用万用表量UBEC输出是否有5V到5.3V,电压偏低容易导致飞控反复重启。
  2. 检查电调信号是否低电平默认:先不要接电池主电源,只给飞控通电。在Mission Planner里手动设置输出为1500,看电调是否能正常握手(一般会发出提示音),如果电调毫无反应,大概率是信号线没接对。
  3. 检查遥控器信号:打开遥控器,确认Mission Planner里的遥控通道数值能正常变化,特别是转向通道方向是否和车头一致,否则自动模式下转弯方向会完全反掉。
  4. 检查电调中位:接通主电源后,先把遥控器油门和转向都回中,此时两个电机都应该完全静止。如果发现某个电机低速转动,说明电调中位不准,需要重新校准或者微调遥控器的微调旋钮。

这些检查看着琐碎,但能省掉后面大量排查时间。我见过有人跳过前两步,直接上电后发现一个电机反转、一个正转,还以为是固件问题,结果只是两根信号线插反了。

3.3 电调校准的两种常用方式

ArduRover的电调校准有两种方式,一种是前面提到的“遥控器油门满行程校准”,一种是利用Mission Planner的“ESC Calibration”向导。

遥控器校准的优点是直观,不需要开Mission Planner,但前提是你的遥控器设置了正确的油门通道,而且油门通道的行程范围要和电调预期匹配。这个方法我一般只用来校准单向电调,双向电调因为要记住三个点,遥控器操作容易失误。

Mission Planner校准的步骤是:连接飞控后,进入Setup > Motor Test界面,先选择一个输出通道,把PWM设为最大值(比如2000),然后给电调上电,等待提示音,再把这个通道PWM设为最小值(比如1000),等待电调确认。如果是双向电调,还需要把PWM设到中位1500,让电调记住停止点。这个过程对每个电调要单独执行,操作上多一些步骤,但精度更高,尤其适合双向电调。

校准完一定要拨动遥控器或者用Mission Planner的滑条实际测试一遍,确认电调对正反转都有响应。注意测试时要架起车轮,不要落地测试,否则车可能会突然冲出去。

4. Mission Planner 配置实操:从固件刷写到差速转向

4.1 固件选择与刷写流程

给Pixhawk刷ArduPilot固件,最省事的方式是用Mission Planner自带的固件下载功能。连上飞控后,在“初始设置”里的“安装固件”页面,选择“ArduRover”版本,Mission Planner会自动匹配硬件,下载最新稳定版刷写进去。

如果你想自己编译固件,完全可以,后面的章节我会单独讲。但第一次接触Rover的朋友,我建议先直接刷官方稳定版,把整车跑通,再去折腾编译定制。这里重点提醒一点:Rover固件和多旋翼固件是两套不同的代码分支,刷之前一定要看清选的是ArduRover而不是ArduCopter。刷错固件的后果是Mission Planner里连“车架类型”的设置项都没有。

刷完固件后,飞控会重启并进入“需要加速度计校准”的提示。此时用Mission Planner的“初使设置”向导,按顺序做加速度计校准、磁罗盘校准、遥控器校准。这几个校准和无人机完全一样,照着界面提示操作即可。

重点差异出现在遥控器校准完成之后:接下来要做的是车架类型选择和电调输出映射,这决定了Rover能不能正常驱动。

4.2 车架模式、遥控通道与急停开关设置

ArduRover支持的车架模式很多,打开“初始设置”里的“车架类型”下拉菜单,能看到Skid Steer、Ackermann、Differential、Omni等几类。我的两轮差速底盘要选“Skid Steer”(滑移转向),选好后飞控会自动把左右电机映射到对应的伺服输出通道。

选错模式是新手常见错误。比如把两轮差速底盘选成Ackermann,飞控会把右前轮当作转向舵机输出,导致右侧电机没有驱动信号,车只会原地打转。如果发现“转向时只有一个轮子转、另一个不转”,先检查车架模式,再检查通道映射。

通道映射方面,Skid Steer模式下飞控默认使用伺服输出通道1和2,分别对应左电机和右电机。你可以在“Servo Output”页面看到SERVO1_FUNCTION和SERVO2_FUNCTION,正常情况下它们应该分别被指定为Motor1和Motor2。如果发现电机没反应,第一件事不是怀疑电调坏了,而是看一下通道功能对不对。

急停开关我建议优先配置:在“参数树”里搜索“E_STOP”相关项,把遥控器一个空闲的三段开关通道设为急停功能,并且在Mission Planner的“飞行模式”里确认该通道能正常切换飞行模式。这样自动导航测试时,遇到意外能一键切断电机动力。

4.3 手动/自动校准与首次动起来

完成上面的设置后,先不要放地上,把车架空,让四个轮子悬空。Mission Planner里切换到“手动”(Manual)模式,用遥控器给油门,观察左右电机转速。第一次推动油门时,我通常会把MOT_SLEW_RATE临时设得很低,这样即使遥控器油门推满,输出也是缓慢上升,方便观察。

如果发现左右电机方向相反,可以在Mission Planner中把对应通道的“反向”选项勾上,或者直接反转遥控器通道,不需要重新接线。如果是双向电调,还要注意中位是否正确:左右都回中时,轮子必须完全静止。

在电调配置完成后,建议做一个简单的“直线测试”:把车放到空旷地面,缓慢加油门,看车是否能走直线。如果明显跑偏,首先检查左右电机输出是否一致,其次检查两侧轮子轮胎气压和轴承阻力。很多时候跑偏不是电调的问题,而是机械阻力不一致。

首测通过后,就可以尝试“自动模式”了。切到Auto模式,用Mission Planner在地图上设置两个航点,让车自己跑一遍。你会明显感觉到自动模式对电调输出的控制更精细,因为飞控会通过闭环调节左右电机速度来纠正航向。

5. 实测遇到的那些坑:调试案例与排查速查表

5.1 典型故障:单侧转向无力、油门延迟、倒车失效

第一次实测时,我遇到了一个很典型的问题:向右转向正常,向左转向非常迟缓。排查下来发现是左侧电调没有正确校准,正转方向输出偏弱,导致两侧电机同步性差。重新用Mission Planner单独校准左侧电调后,问题立刻消失。这类“单侧无力”的问题,基本都是单侧电调行程没校准干净,优先重新校准。

“油门延迟”是另一个高频问题。表现为推油门后车要等半秒才有反应,起步很肉。原因通常是MOT_SLEW_RATE设得太低,我一度设成8,车响应就拖沓得不行。后来根据底盘实际手感调到25,起步响应明显改善。但注意别调太高,太高容易一冲一冲的,尤其是在低速转弯时。

“倒车失效”的问题也很常见。如果你用的双向电调,倒车需要PWM低于1500,但ArduRover默认在手动模式下,油门摇杆推到中位以下才输出倒车信号。假如遥控器校准没做好,摇杆物理中位对应的PWM不是1500,就会出现“倒车没反应”的假象。解决方法是重新校准遥控器,并把遥控器油门微调归零。

5.2 参数调整的先后顺序与口诀

电调配置相关的参数虽然多,但调整顺序很重要。我摸索出来一条比较顺的路径,按这个顺序来可以少走很多弯路:

  1. 先校硬件:电调行程校准、遥控器校准。
  2. 再设输出:车架类型、通道映射、方向。
  3. 再拉阈值:MOT_PWM_MIN/MAX、MOT_THST_MIN/MAX。
  4. 再调手感:MOT_SLEW_RATE、急停开关。
  5. 最后测试自动化:航点巡航、RTL等。

口诀就是:先调“有没有”,再调“顺不顺”。很多新手一上来就调MOT_SLEW_RATE,但电调根本没校准,怎么调都白搭,因为硬件层面就没有正确工作。

5.3 常见问题速查表

下面这张表是我实操中整理出来的,基本可以覆盖Rover电调配置的大部分报错和怪异现象。建议第一次调试的时候打印一份放在旁边。

现象可能原因处理建议
左右轮都不转动电调信号线接反或无信号检查SERVO通道功能及接线顺序
单侧轮不转车架类型错误或电调未校准确认Skid Steer模式下两个输出通道正确
油门中位时轮子偷转电调中位不准或遥控器微调偏了重新校准电调,遥控器油门微调归零
倒车无反应遥控器中位PWM不是1500重新校准遥控器,确认油门行程
起步猛冲MOT_SLEW_RATE过高调低油门变化速率到15左右
起步抖动无力MOT_THST_MIN过低适当提高最小油门百分比
走线不直左右机械阻力不一致检查轮胎轴承、驱动轴是否卡滞
自动模式跑偏严重电调输出未校准干净重新做双向电调三点校准

6. 进阶:自己编译ArduRover固件的意义与流程

6.1 为什么需要自己编译,而不是直接下载固件

官方固件虽然稳定,但如果你想改掉一些默认参数,或者想给ArduRover加一个专用的底盘运动学模型,直接下载固件就不够用了。我后来因为要支持一套非标四轮底盘,必须修改底盘电机输出逻辑,才开始研究自己编译固件。

自己编译还有一个好处,就是可以随时切换到最新的开发者分支,提前体验新功能。很多好用的参数和Bug修复,要到下一个稳定版发布才会包含,但开发分支里早就有了。对折腾派来说,自己编译其实是绕不开的一步。

编译ArduRover没有想象中那么难,本质上就是用waf构建系统,把ArduPilot源码里的Rover分支编译成对应硬件的固件文件,再用Mission Planner或QGroundControl刷入飞控。整个过程对电脑性能要求不高,甚至一台旧笔记本也能搞定。

6.2 Ubuntu环境下编译环境搭建(含老版本兼容)

编译环境我是在Ubuntu下做的。官方推荐的构建系统是waf,第一步是安装依赖包。这里引用一段ArduPilot官方工具链的常见做法,先用git克隆完整源码到本地:

git clone --recurse-submodules https://github.com/ArduPilot/ardupilot.git cd ardupilot

源码库比较大,包含所有飞控固件的代码。想看Rover相关代码,直接进入子目录:

cd Rover

安装编译依赖时,Ubuntu下最省事的方法是:

sudo apt-get update sudo apt-get install git build-essential python3-pip pip3 install -r requirements.txt

如果你用的还是老版本Ubuntu,比如网上很多人提到的Ubuntu 14.04,可能会遇到python版本和工具链兼容性问题。我的建议是:如果条件允许,尽量用较新的Ubuntu版本;如果只能使用旧系统,可以考虑用Docker跑一个干净的编译容器,比手动解决依赖冲突要省心得多。编译命令本身并不复杂:

./waf configure --board Pixhawk1 ./waf rover

编译完成后,固件会生成在build目录下,文件名类似“ardurover.apj”,用Mission Planner的“加载自定义固件”功能刷进去就行。

6.3 固件定制的小方向:电机输出逻辑与保护机制

自己编译的真正价值在于可以定制电机输出逻辑。比如原本固件默认双电机油门输出是线性映射,但某些底盘的电机在低速区存在严重非线性,此时你可以在代码里加入一段自定义映射逻辑,把PWM输出重新换算。

还有一个很实用的定制方向是电机保护机制。比如检测到两个电机转速差过大时,自动降低动力输出,防止车辆在复杂地形中失控翻车。这需要读取电机转速反馈,再结合飞控的姿态数据做判断。做这种改动时,一定要在架空状态下先充分测试,确认逻辑不会误触发。

从我的实际体会来看,先靠官方固件把电调配置跑通,理解清楚MOT_PWM_MIN、MOT_THST_MIN这些参数的作用,再去改代码,会顺利很多。源码里每个参数背后都有一行甚至几十行逻辑,不看懂就直接改,很容易把车调得没法开。建议至少把ArduRover源码里的“motor_skid_steer.cpp”相关文件通读一遍,再动手改。

最后再说一个我每次调试都会做的小事,也算是个保命习惯:测试前把车架空,测试中手里始终握着主断电开关的拉环。无论飞控逻辑多完美,电调多稳定,物理断电永远是最可靠的保险。电调配置这事,第一次做会觉得玄学,多调几次后就明白,其实每一步都有明确逻辑,只要按顺序来,人人都能把Rover底盘调到顺滑。

返回列表