ARTICLE DETAIL

资讯详情

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

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

ArduRover电调配置全解析:从差速底盘到Mission Planner实战 把Ardupilot这名字念出来大多数人第一反应都是无人机。但Ardupilot官方支持的遥控设备清单里地面车Rover其实是一条非常成熟、也很少被好好讲清楚的分支。上个月我把一台两驱差速底盘配上Pixhawk兼容飞控从零开始调成了一台能手动遥控、能一键自动航点巡航的ArduRover。整个项目里最让我意外的不是飞控本身而是电调配置——底盘的电机驱动逻辑和四旋翼的电调驱动逻辑完全是两套思路。这篇记录我会把Rover底盘的电调选型、接线、校准、参数调优到实车测试的完整过程都拆开讲适合刚入手ArduRover、手里正好有个差速底盘但不知道怎么接电调的朋友。1. 项目背景与硬件选型为什么值得做一台ArduRover1.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_MAXArduRover里还有几个参数对电调配置结果影响很大第一次调试一定要逐个确认MOT_PWM_TYPEPWM输出协议。默认是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. 接线与通电检查别急着插USB3.1 信号线、地线与供电线的连接细节电调和飞控之间的接线看起来简单但细节决定成败。Pixhawk兼容飞控的伺服输出口一共有8路每一路都是三根针信号、5V、GND。电调三根线里除了信号线还有一根红线和一根黑线分别对应BEC正极和负极。如果用不带BEC的双向电调接线最干净电调信号线直接插飞控输出口信号针电调的黑线插到GND针红线空着不接。但很多车模电调内部自带BEC即使你不需要它的红线也会往外输出5V。这时候如果飞控已经通过其他途径供电比如UBEC电调红线再接上就会造成两路电源并联轻则电压不稳重则烧板。我建议的做法是把电调那根红色BEC线从插头里退出来用绝缘胶带包好只保留信号线和地线接飞控。这样电调和飞控之间只有信号关系没有电源关系供电统一走独立的UBEC。很多老玩家把这一步称为“剪红线”其实不需要真剪用取针器退出来就行将来电调还能恢复原样。信号线的接法也要注意顺序Pixhawk的输出口信号针是靠近板边的那根具体可以看板子上的丝印。接反了信号线通常不会有输出但不会烧设备。第一次接线时建议逐根确认。3.2 通电前必须完成的四个检查我在接完线后总结了一套通电前检查清单按顺序执行可以规避大部分硬件问题检查飞控输入电压用万用表量UBEC输出是否有5V到5.3V电压偏低容易导致飞控反复重启。检查电调信号是否低电平默认先不要接电池主电源只给飞控通电。在Mission Planner里手动设置输出为1500看电调是否能正常握手一般会发出提示音如果电调毫无反应大概率是信号线没接对。检查遥控器信号打开遥控器确认Mission Planner里的遥控通道数值能正常变化特别是转向通道方向是否和车头一致否则自动模式下转弯方向会完全反掉。检查电调中位接通主电源后先把遥控器油门和转向都回中此时两个电机都应该完全静止。如果发现某个电机低速转动说明电调中位不准需要重新校准或者微调遥控器的微调旋钮。这些检查看着琐碎但能省掉后面大量排查时间。我见过有人跳过前两步直接上电后发现一个电机反转、一个正转还以为是固件问题结果只是两根信号线插反了。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 参数调整的先后顺序与口诀电调配置相关的参数虽然多但调整顺序很重要。我摸索出来一条比较顺的路径按这个顺序来可以少走很多弯路先校硬件电调行程校准、遥控器校准。再设输出车架类型、通道映射、方向。再拉阈值MOT_PWM_MIN/MAX、MOT_THST_MIN/MAX。再调手感MOT_SLEW_RATE、急停开关。最后测试自动化航点巡航、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底盘调到顺滑。
返回列表