ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Ardupilot Rover四轮差速底盘电调配置与调试实战

Ardupilot Rover四轮差速底盘电调配置与调试实战 最近在折腾Ardupilot开源飞控时把一辆四轮差速底盘完整跑通了从刷固件、接电调、配参数到路试踩了不少坑也把整个流程摸透了。这篇文章就围绕Ardupilot Rover底盘 电调配置这条主线把从硬件选型到实际下地调试的全过程写清楚尤其把电调校准、电机映射、转向混控这些容易卡人的细节展开讲。无论你是准备给自制小车换“大脑”还是想用Pixhawk级别的飞控改一台无人车这篇内容都适合先通读一遍。需要说明的是整套配置思路不仅适用于轮式Rover对履带底盘、甚至部分差速转向的水面船也有参考价值因为Ardupilot的Rover固件本身就是按“差速转向”和“阿克曼转向”两套模型来设计的。1. 项目整体设计与方案选型1.1 Rover底盘到底需要什么Rover在Ardupilot体系里指的是所有非飞行类的移动平台常见的有四轮小车、履带车、带舵机转向的遥控车、以及水面无人船。它们有两个核心控制需求一个是对油门前后运动的控制一个是对转向左右转弯的控制。这两个动作在Ardupilot里被抽象成了“油门通道”和“转向通道”不论底盘长得像什么最终都要落到这两个通道上。我的这辆车是典型的四轮差速底盘四个轮子用两个有刷电调驱动左右各一个通过两个电机转速差实现转向。这种布局的好处是结构简单、转向半径小缺点是直线行驶时对两个电调的转速一致性要求很高这也是后期调试的重点。选Ardupilot而不是其他商业飞控方案主要是因为它的Rover固件是开源且非常成熟的参数体系清晰支持地面站调试、日志分析和丰富的扩展外设。而且Ardupilot社区里有大量现成的底盘配置文档和讨论帖真出问题的时候能找到人问。1.2 硬件平台搭建思路飞控我用了Pixhawk 2.4.8也就是网上最常见的Pixhawk开源飞控板。虽然市面上已经有更新型的Cube系列但2.4.8的资料最多、接口定义公开、价格便宜用在陆地车上完全够用。底盘的电机驱动部分用了两个双向有刷电调每个电调对应一侧的前后轮。这里说一句Rover用的电调和穿越机、固定翼用的电调在“油门行程”这个概念上是互通的但接线和配置方式有区别。穿越机那种四合一电调或者单独的电调一般通过PWM信号线接飞控的Main Output口电调的电源线接电池信号线接飞控。地面车的双向电调多了一个“方向控制”功能可以通过遥控器第三通道切换前进后退方向或者通过飞控直接发反向PWM值。整个系统的连接顺序是电池 → 电调 → 电机飞控 → 电调信号线遥控接收机 → 飞控数传模块 → 飞控。供电方面需要注意电调内部的BEC5V输出可以给飞控供电但如果你用的是大功率电调、且车上装了舵机等其他设备最好用独立的UBEC给飞控和接收机供电避免电调BEC电流不够导致飞控重启。2. Ardupilot固件编译与准备2.1 为什么建议自己编译一次固件Ardupilot官网提供编译好的稳定版固件直接用Mission Planner地面站或QGroundControl就能刷。我自己还是建议在Ubuntu环境里完整编译一次原因有几点一是等项目做到后期你肯定要修改一些默认参数或者添加自定义功能到时再临时搭编译环境会手忙脚乱二是编译过程能加深对Ardupilot工程结构的理解后面看日志、定位问题会轻松很多三是网上很多教程用的还是老版本参数自己编译最新稳定版能对齐参数名。我编译用的是Ubuntu 14.04.6 LTS这也是Ardupilot官方文档里历史版本最常用的编译系统。虽然这个系统版本比较老但Ardupilot的编译工具链对它支持一直很好整个环境搭建下来非常顺。2.2 编译环境搭建和参数对应关系Ardupilot的编译工具从早期的make迁移到了waf所以网上有些老教程还在用make编译的那是五六年前的做法了现在统一用waf。cd ~ git clone https://github.com/ArduPilot/ardupilot.git cd ardupilot git submodule update --init --recursive在Ubuntu 14.04上需要安装必要的编译依赖。Ardupilot官方提供了一个安装脚本cd ardupilot Tools/environment_install/install-prereqs-ubuntu.sh -y这个脚本会自动安装gcc-arm-none-eabi交叉编译工具链、Python环境以及各种依赖库。装完之后重新登录终端让PATH生效。编译Rover固件的具体命令cd ardupilot git checkout Rover-3.5.0 # 或者其他稳定分支 ./waf configure --board Pixhawk1 ./waf build --target bin/ardurover对于Pixhawk 2.4.8board对应的就是Pixhawk1编译完成后固件文件在build/Pixhawk1/bin/目录下文件名是ardurover.apj这个文件可以直接通过Mission Planner的地面站刷写功能写入飞控。这里有个细节Rover固件的名字叫ardurover固定翼叫arduplane多旋翼叫arducopter。三者共用一套Ardupilot底层代码但飞行器相关的传感器融合、姿态解算模块在不同固件里有差异Rover固件对加速度计的需求没那么高但GPS和罗盘依然重要。3. 电调配置从接线到行程校准3.1 电调信号线与飞控的对应关系Rover的电机控制不像多旋翼那样需要每个电机独立调速来做姿态稳定它只需要控制两个通道。在固件里左侧电机的输出口默认是Main Output 3右侧电机是Main Output 4方向舵如果有的话是Main Output 1。这里有一个非常容易踩的坑Pixhawk的Main Output口编号和机身上的丝印不一定是一一对应的。以Pixhawk 2.4.8为例Main Output 1到8口分别对应FMU端口上标注的MAIN 1到MAIN 8其中MAIN 3、MAIN 4在Rover固件里默认就是电机输出口。但不同版本的飞控尤其是那些兼容Pixhawk的第三方面板编号顺序可能不一样。所以第一次接线之前建议先把电调信号线接到某个口然后在地面站里测试通道输出确认是左电机还是右电机。电调接线方面三个引脚分别是电源正极、电源负极和PWM信号。绝大多数电调的PWM信号线是橘黄色或者白色正极是红色负极是棕色或黑色。飞控输出口的引脚定义是外侧引脚是信号中间是5V内侧是GND。有些电调不需要从飞控供电只接信号和负极就行但如果你的电调需要5V来驱动光耦隔离电路就需要把中间的5V引脚也接上。稳妥起见按电调说明书操作。3.2 电调行程校准实操流程电调行程校准本质上是让电调知道遥控器油门摇杆或者飞控输出的最小值和最大值分别对应多少PWM脉宽。校准之前飞控和电调之间只是“认识”校准之后才是“懂得对方的信号”。校准步骤是这样的确保飞控已经刷好Rover固件并且通过USB连上Mission Planner。断开电调的电机电源就是电调连接电池那根线不要插。把遥控器油门通道设置到最大值。如果是第一次插电很多电调默认进入校准模式的前提就是上电时检测到高油门信号。给飞控和接收机上电USB供电或者BEC供电均可然后给电调的电池线通电。等待电调发出提示音一般是“哔—哔—”两声然后快速把油门拉到最小值。电调再次发出确认音校准完成断电重新上电即可。在Ardupilot体系里更推荐的做法是直接通过飞控进行校准因为飞控输出的PWM是精确已知的。在Mission Planner的初始设置 → 电机测试页面中可以手动输出指定PWM值这样校准结果更加可控。我个人在实际操作中发现直接通过遥控器校准容易出现一个问题你对遥控器油门摇杆的物理行程和飞控输出的PWM范围并不是精确对应的尤其是当遥控器端设置了油门曲线或行程调整后电调记住的“最大”和“最小”可能与飞控实际输出的极限值不一致导致电机全速或怠速异常。通过飞控输出校准可以完美规避这个问题。3.3 电机使能、方向与PWM频率电调校准完成之后还要在参数列表里确认几个关键参数。首先是MOT_PWM_TYPE如果固件版本较旧则是MOT_PWM_FREQ参数。这个参数控制飞控输出给电调的PWM信号频率。默认值是正常PWM频率400Hz在老旧版本中默认可能是50Hz。有刷电调和大部分无刷电调都能兼容较高频率但需要注意你的电调是否支持如果不支持高频信号电调会发热严重、甚至无法正常启动电机。我的有刷电调用的是标准PWM模式没有改这个参数但如果你用的是某些型号的船用电调或者车用电调建议在电调说明书里查一下支持的PWM频率。然后是SERVO3_FUNCTION和SERVO4_FUNCTION新版本里可能叫SERVOn_FUNCTION。Rover固件里这两个输出口默认配置为“Throttle”油门和“Steering”转向但如果你刷完固件后直接上电测试电机不会转因为默认参数可能没有正确映射。在这里我建议把这个参数作为重点记录参数名默认值推荐值说明SERVO3_FUNCTION0730表示禁用73是ThrottleSERVO4_FUNCTION07474是SteeringMOT_PWM_TYPE000为正常PWM1为OneShot2为OneShot125MOT_PWM_MIN10001000电机最小PWMMOT_PWM_MAX20002000电机最大PWMATC_STR_RATIO_MAX00差速转向时最大转向比例在较新的Ardupilot版本中比如4.x系列电调配置相关参数统一改名为SERVOxx_FUNCTION但命名规则一直没变。如果你用的还是老版本固件3.x参数名可能是RC3_FUNCTION、RC4_FUNCTION含义相同。4. 转向混控与差速逻辑调整4.1 差速转向的原理和参数设置Rover的转向在Ardupilot里有一个专门的混控模型。对于差速转向底盘Ardupilot的输出不是简单地把方向通道直接映射到一个电机而是把方向信号叠加到左右两个电机的油门信号上。拿我的车举例左侧电机是Throttle输出SERVO3右侧电机是Steering输出SERVO4。默认情况下当你打方向时飞控会同时调整左右电机的输出向左打方向时左边降低转速右边提高转速实现左转。这就是经典的混控。控制这个混控强度的关键参数是ATC_STR_RATIO_MAX在旧版本里叫GROUND_STEER_RATIO默认值是0.6左右。这个值表示转向时左右电机的最大速度差比例。0.6意味着当你打满方向时一边电机可以比另一边快60%的转速。如果感觉转弯半径太大可以把这个值提高如果感觉转弯过于敏感可以降低。还有一个参数叫ATC_STR_RATIO_FF可以在转向时加入前馈让转向响应更快但调不好容易抖动新手建议先保持默认。4.2 我用参数实测的效果记录刚配完参数后我在小区空地上做了简单测试。第一次下地车直线行驶时严重跑偏判定是左侧电调行程和右侧电调行程不一致导致的。在Mission Planner里重新做了一次电调行程校准后跑偏现象明显减轻。接着测试转向反应初始默认ATC_STR_RATIO_MAX为0.6时原地转向半径还是偏大我把它调到0.8转向效果有明显改善但高速行驶时转向变得很贼车头会突然偏移。之后我又把ATC_STR_RATIO_FF从0调到了0.1加了一点前馈低速转向更灵敏了高速的表现也还能接受。这个调参思路和飞行器的PID调参有异曲同工之处先粗调比例再细调前馈最后根据实际路试效果微调。5. 遥控器校准与失控保护配置5.1 遥控器通道映射与失效保护在Ardupilot的Rover固件中遥控器的通道映射靠的是RCx_MIN、RCx_MAX、RCx_TRIM这几个参数。对于Rover来说RC1也就是通道1默认对应转向RC2通道2对应油门RC3通道3和RC4通道4在某些模式下也可以被映射。Mission Planner里的“遥控器校准”页面会自动读取当前遥控器各通道的PWM值你要做的就是拨动所有摇杆到极限位置让飞控记住最小值和最大值。这里有个经验油门通道的中间值一定要确保在1500附近如果偏差较大需要在遥控器端设置微调subtrim否则飞控会认为遥控器一直在半油门以上从而触发油门输出异常。失控保护是Rover安全运行的最后一道防线。Ardupilot允许设置“油门通道的信号丢失保护”当接收机与遥控器失去连接超过设定时间时飞控会自动让电机停止运转甚至执行返航程序。在FS_THR_ENABLE参数里选择“Enabled”即可同时还要检查FS_THR_VALUE油门通道触发失控保护的值。一般设置为小于RC3_MIN的值比如900。5.2 第一次通电安全检查流程建议任何人在通电测试之前都养成这个习惯车体架空轮子离地。先开遥控器再给飞控和电调上电。在遥控器上先测试转向舵机或转向通道确认方向正确。轻轻推油门确认电机缓慢旋转且方向正确。检查左右电机方向是否一致如果不一致多数情况下需要调换电调的电机输出相线或者把对应通道的SERVOn_REVERSED设为1。这一套流程做完后再下地可以避免至少90%的“通电就冲出去”或者“原地打转”事故。6. 常见问题与排查技巧实录6.1 电机不转的常见原因电机不转是最常见的问题我遇到过的情况有以下几种。第一种通道没映射。刷完固件后如果直接使用默认参数SERVO3_FUNCTION和SERVO4_FUNCTION很可能不是Throttle和Steering需要手动设置。第二种飞控处于“解锁失败”状态。Ardupilot的Rover同样需要解锁Arm才能输出油门。在地面站界面上如果状态栏显示“PreArm: RC not calibrated”或者“Bad GPS”说明飞控因为某个安全条件不满足而拒绝解锁。Rover固件通常不强制需要GPS信号但如果开启了GPS相关的安全检查而没有卫星信号时飞控会拒绝解锁。第三种电调没有完成行程校准。很多电调在上电时需要检测到最低油门信号才能正常工作如果你的遥控器油门微调没归零或者飞控输出值低于电调最小值电调会处于“待机”状态怎么推油门都不转。排查方法是打开Mission Planner的扩展调试页面查看当前输出值是否实时变化。如果输出值在变化但电机不转问题大概率出在电调或接线如果输出值不变那就是飞控参数或遥控器映射问题。6.2 方向反了、转向迟钝、油门中断方向反向的处理比较直接找到对应的SERVOn_REVERSED参数设置为1即可。但是在Ardupilot里转向反向还有一个更优雅的方式就是调整RC1_REVERSED或对应通道的极性这样遥控器端和飞控端的逻辑保持一致。转向迟钝的排查思路是先看机械部分确认转向机构没有卡阻再看参数确认ATC_STR_RATIO_MAX不要设置太低最后看转向模式如果你用的是阿克曼转向但底盘却是差速结构飞控输出的转向逻辑完全不同需要在地面站里切换转向模式MODE1为差速转向MODE2为阿克曼转向。油门中断的情况比较复杂。有一次我遇到“推油门时偶尔断电重启”排查了很久最终发现是电池电压在急加速时瞬间跌落飞控的BEC被拉低到5V以下导致重启。换用独立UBEC供电后问题彻底解决。这种情况在四轮车上并不少见只要电机功率稍大电调内部BEC的输出能力就不够用了。6.3 Ardupilot日志分析入门当问题不容易复现时最好的方法不是反复试而是通过日志分析。Ardupilot会把飞行/行驶过程中的所有传感器数据、遥控器输入、电机输出以二进制格式记录在飞控的SD卡上。在地面站里下载日志后重点查看这几个数据RCIN遥控器输入值排查遥控器信号是否正常。RCOU飞控输出值排查输出值是否达到了期望值。VFR空速、地速、高度用于判断是否因为速度过快把转向拉偏。THROUT油门输出值排查输出是否被限幅。CURR/VOLT电流和电压排查供电是否稳定。有一次Rover行驶中突然往左偏我通过日志发现右侧电机输出在某一时刻突然降到最低值而左侧电机输出不变这明显是左侧电调的信号线松脱了。因为右侧电调信号线接触不良导致PWM中断电调进入刹车状态。重新焊好信号线后再测试问题消失。7. 装调测试与后续扩展建议7.1 地面站调试中容易忽略的细节在Mission Planner中调整Rover参数时有几个人容易忽略的细节第一写完参数必须点击“写入参数”并且建议“全部参数表”页面里点写入不要只在单个参数框里改完就切走。Ardupilot的参数写入是整包写入的只改一个参数也要提交整个参数列表。第二如果开启了地理围栏FENCE要确保FENCE_ENABLE为0否则车跑出设定范围会触发自动停车很多新手会在测试时突然遇到“电机停转”的惊悚情况一查原来是触发了围栏保护。第三数传模块设置合理波特率。如果用数传实时调试建议使用57.6k或更低这样日志更稳定数据丢包更少。我用的是915MHz数传地面站无线连接很稳定但有时受干扰这时不要着急调参先确认连接质量再操作。7.2 整体效果与后续可扩展方向整套系统跑通之后这辆四轮差速Rover已经具备基础的遥控行驶能力。后续可以扩展的方向很多一个是加入自主导航。Ardupilot Rover支持通过Mission Planner规划航点任务让车辆按照预定路线自动驾驶这需要配合GPS和罗盘以及更高的安全冗余。另一个是加入视觉避障。通过在飞控上接入开源视觉模块或者雷达测距模块可以实现障碍物检测和自动绕行。还可以把逻辑推广到履带底盘。履带车的差速转向模型与四轮差速Rover几乎一致只是机械结构不同电调配置的流程和参数设置完全复用。我在实际测试中还发现一个有意思的现象Ardupilot的Rover固件对电调行程校准的容错率很高即使两个电调的行程有轻微差异飞控也能通过混控输出在一定程度上自适应的修正。但想要获得更好的直线行驶体验还是得像前面说的那样用飞控输出做一次标准的行程校准。这个项目做到后面最深的体会是开源飞控的配置流程并不难真正花时间的是“理解每一个参数为什么这样设置”。从电调的行程校准到转向混控的比率调整每一步都是在和物理世界打交道。当你理解了差速转向的数学原理、看懂了RCOU输出的变化规律再去调车就完全不一样了。最后再分享一个小技巧每次调完全部参数后及时用Mission Planner的“参数导出”功能保存一份参数文件。这样一旦某次测试把参数改乱了几分钟就能恢复到之前的可用状态我为此省下了大量重头排查的时间。
返回列表