ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

用APM飞控和ArduPilot把遥控车改装成低成本无人车

2026/10/3 18:02:36 拓冰建站 浏览量
用APM飞控和ArduPilot把遥控车改装成低成本无人车 先说一个很多新手都会问的问题“我能不能用一台APM飞控把车模改成能遥控、能自动跑、还能按航点走的无人车”答案是能而且成本比你想的低不少。ArduPilot这套开源固件不止能飞它也有非常成熟的无人车分支搭配一块一百来块的APM飞控兼容版和一只普通有刷电调就能把一个几百块的玩具车底盘变成真正可编程、可规划路线的无人车。这篇博文就按我实际搭车的流程走一遍从选零件、接线、刷固件到第一次路测最后附带当前管理ArduPilot常用的工具和通过MAVLink给无人车下发航点的玩法。1. 先搞清楚方案边界这套低成本无人车能做什么1.1 它适合谁不适合谁我推荐这套方案给三类人一是想低成本入门ArduPilot生态的玩家买不起四轴或固定翼拿车练手不会炸机也不会飞丢二是搞教学或机器人比赛的学生需要一辆能自动循迹、按航点跑的样车三是做传感器验证、视觉算法测试的开发者需要一个稳定的移动底盘。不适合的情况也先说清楚如果你想让它跑碎石路、爬陡坡、拖重物那APM飞控不是瓶颈车架、电机和电调才是瓶颈这套低成本方案扛不住高强度越野如果你指望它像扫地机器人一样自己规划避障路径那需要额外加激光雷达或者深度相机飞控本身只负责底盘控制不负责复杂感知。先把预期放在“学习控制系统、跑通自动导航流程”这个层面后面玩起来才不失望。1.2 为什么是ArduPilot加APM飞控ArduPilot是目前开源飞控里生态最完整的一套代码它不是一个“玩具级”项目而是有十几年迭代、支持飞行器、无人车、船舶、潜艇多种载具的系统。无人车对应的是ArduRover固件代码里把导航、遥控、失效保护、航点任务这些模块都实现了你需要做的事只是把硬件接上、校准好然后调用。APM飞控兼容版现在价格很低我买的时候不到120元相当于一个普通开发板的钱。虽然它的处理器性能远不如Pixhawk系列但作为入门、跑一辆1/10比例小车完全够用而且配套教程多出了问题很好查资料。等玩熟了再升级Pixhawk也就几百块的事是一笔非常值得的投资。1.3 整条链路是怎么工作的从系统结构上理解这套无人车的工作链路分三条遥控链路遥控器发射信号 → 接收机 → APM飞控的RC输入口 → 飞控处理 → 输出PWM信号 → 转向舵机和有刷电调 → 电机转动。自动链路GPS/罗盘 → 飞控接收位置和姿态信息 → 按航点任务算出目标速度与转向角 → 通过PWM控制舵机和油门。监控链路飞控通过数传无线串口或USB连接地面站比如Mission Planner把所有遥测数据实时发给电脑电脑也能反向刷新参数、下发任务。记住一个关键概念在ArduRover里不管你是遥控操作还是自动驾驶最终执行动作的都是PWM输出通道。遥控模式是直接把接收机信号映射到PWM输出自动模式则是控制器计算目标信号再输出。理解这条链路后面调参、排错基本就有思路了。2. 配置清单拆解每个部件为什么这么选2.1 完整清单与预算我的目标是尽量用现成、通用、好买的东西避免改装量过大。下面是我实际使用的清单价格会随市场浮动但大致能控制在700元以内。部件推荐型号/规格数量参考价格无人车底盘二手1/10遥控车底盘带转向舵机和车轮1100-200元有刷电机540/550有刷电机13T以上120-40元有刷电调好盈QuicRun 106060A带5V BEC180-120元飞控APM 2.8兼容版含GPS支架1100-150元GPS/罗盘模块NEO-M8N GPS 外置罗盘160-90元数传模块3DR 433MHz数传或HC-06蓝牙140-80元遥控器富斯FS-i6 接收机六通道1150-200元电池2S 2200mAh 30C航模锂电150-60元电压报警器蜂鸣器式电压检测15-10元辅助材料XT60插头、硅胶线、扎带、3M双面胶、杜邦线若干20元2.2 选型的几个关键逻辑底盘二手1/10遥控车底盘是性价比最高的选择因为它的转向舵机、悬挂、差速结构都是现成的不用自己画图加工。买的时候注意两点一是确认转向舵机是标准舵机三根线而不是一体化的电子件二是尽量选带差速器的轴传动底盘四轮直驱或履带车在ArduRover里虽然也能跑但转向控制不如前轮转向直观。电调这里我再强调一次标题写的是“有刷电调”那就优先用航模有刷电调而不是那种TB6612或BTS7960电机驱动模块。航模有刷电调比如好盈1060接收的是标准RC PWM信号协议和舵机一样飞控输出通道直接插上就能用。BTS7960那种模块虽然便宜但它输入的是逻辑电平PWM需要手动处理频率、死区接APM能用但调起来很麻烦新手别一上来就踩这个坑。供电余量选电调要看电池电压和电机电流。540有刷电机在空转时电流只有2-5A但堵转瞬间可以冲到20A甚至更高。我配的是60A持续输出的有刷电调余量很大保护了电调不会被堵转瞬间打挂。2S 2200mAh电池的持续放电能力是2.2Ah×30C66A同样留足了余量跑半小时没有问题。2.3 哪些钱可以省哪些不能省可以省的飞控用兼容版GPS用二手M8N遥控器用入门款底盘用二手。不能省的电调尽量别买杂牌因为它直接控制电机一旦出问题轻则车不动重则过流烧板电池别买回收拆机电芯天上飞的模型炸机是小事地上跑的电池鼓包着火是大事舵机如果是老车底盘自带的最好先通电测试一下反应迟钝或者抖舵就换一个MG996R二三十块钱值得花。3. 组装接线最容易出事的供电和共地问题3.1 底盘动力改装二手遥控车底盘一般配的是有刷电机和电子调速器一体板很多还是玩具级的第一步就是把原来的电子调速器拆掉换成航模有刷电调。把电机两根线拆下来直接接到新电调的M/M-输出端注意先不要固定死通电测试电机转向后再用热缩管固定。如果底盘原来是油改电电机座可能尺寸不标准可能需要在电机座上垫一两个垫片找中心。这点不要急电机轴和传动齿之间的啮合要保证齿轮间隙合适太紧转不动太松容易扫齿。3.2 舵机和电调信号线接飞控接线前我们先明确APM 2.8的接口布局。APM 2.8的输入口是侧面一排8个引脚输出口是端面一排8个引脚。ArduRover默认的PWM输出方案是输出通道1SERVO1→ 转向舵机输出通道3SERVO3→ 油门电调这里有个容易懵的点为什么油门是通道3而不是通道2这是ArduPilot对多旋翼、固定翼、无人车统一规划输出通道的结果在Rover固件里固定的映射就是1和3。你不需要死记只需要在Mission Planner的Servo Output界面确认SERVO1_FUNCTION是Steering、SERVO3_FUNCTION是Throttle不对就在那里改。舵机信号线是三根红正极5V、黑负极、黄或白信号。接到飞控输出通道时信号线插最里侧或最外侧都行关键是让三根线的顺序和飞控上的丝印S//-对应起来。电调信号线同样需要信号线和负极但红线的处理要特别小心下面单独讲。3.3 飞控供电强烈建议你画一张小电路图再动手许多小车第一次路测就莫名其妙重启十有八九是供电方案不对。APM飞控需要5V左右供电而我使用的是2S锂电池7.4V需要经过稳压。有两个可行方案方案一利用有刷电调内置的BEC。像好盈1060这种电调自带5V/2A BEC它输出一根红色的5V线和黑色地线。你可以把这组5V电源接到飞控的任何输出通道正负极端子同时电调本身的信号线也接在飞控通道3上。这样飞控、舵机、接收机都由电调BEC供电线少简单。方案二用独立UBEC降压模块给飞控供电电调BEC只留着给舵机。多花15元但隔离性更好适合大舵机或大电流电调的情况能防止电机堵转时电压跌落把飞控拉死。两个方案都要求一个铁律所有电源的地线必须完全共地。如果电调、飞控、数传各用各的电源地线没有连在一起PWM信号会变得极不稳定轻则抖动重则烧IO口。排查“信号乱跳”问题时先量地线通不通这是我在多次调试里得出的第一条经验。另外APM 2.8的电源接口比较讲究飞控板上有一个POWER口官方做法是用APM电源模块PM接电池PM输出带稳压的5V到POWER口。如果没有PM模块不要把2S电池电压直接接到POWER口会烧板子。采用方案一时把电调BEC的红线接到输出通道的正极端子就是最稳妥的引脚供电方式。3.4 GPS、罗盘和数传模块GPS建议选择带外置罗盘的M8N模块插到APM的GPS专用接口上。安装位置很重要GPS模块尽量放在车顶或后部远离电机、电调和电池因为这些大电流线路会产生磁场影响磁罗盘。接线时注意GPS模块的引脚顺序和飞控丝印一致通常有方向防呆但仍然存在一些兼容板丝印印错的概率上电后如果GPS灯不亮优先检查TX/RX是否接反。数传模块我用的是433MHz 3DR数传接在飞控的TELEM接口上。如果不想买数传也可以用一个蓝牙模块HC-06接同一个接口配合手机端的Mission Planner或者QGC调试也够用距离近一点而已。USB线直连是最保底的方式一切问题先插USB看Mission Planner能不能连上。4. 固件与地面站设置Mission Planner完整配置流程4.1 装驱动、刷ArduRover固件APM 2.8兼容版连接到电脑后先看设备管理器里出现的是COM口还是未知设备。多数兼容版使用CP2102或CH340串口芯片两种驱动网上都能找到装好之后会多出一个COM口记下它的编号。打开Mission Planner右上角选择正确的COM口和波特率APM 2.8一般是115200点Connect。如果连接成功主界面会开始显示姿态数据。刷固件的步骤是先断开连接然后到初始设置页面里的“Install Firmware”标签页。APM 2.8要选择“APM2.x Rover”或者“ArduRover”对应的固件等它下载并写入完成。老板子容量有限近几年ArduPilot已经不再为APM 2.x提供新版本固件所以如果下载时选不到最新固件选能刷入的最后一个稳定版即可功能上完全够用。刷完会自动重启重新连接后确认右上角载具类型显示Rover。4.2 遥控器校准和通道确认校准遥控器前把遥控器的发射机和接收机对频确认各通道是“美国手”还是“日本手”配置。以富斯FS-i6为例默认模式下油门在左手摇杆上下转向在右手摇杆左右。对ArduRover来说我们真正关心两个通道CH1作为转向CH3作为油门。在Mission Planner的“初始设置 → 必要硬件 → Radio Calibration”中拨动摇杆到最大最小观察通道条是否跟随。注意一个非常常见的坑很多新手把转向接到遥控器的CH2因为固定翼模式下副翼是CH2但在无人车控制器里默认转向是CH1。可以在遥控器里换通道也可以在飞控的参数里设置映射我建议直接改遥控器把转向舵机接到接收机的CH1口这样以后换车调试最省事。校准电调时建议先把电调从飞控上拔下来用接收机直连完成电调行程校准避免中间隔着一层飞控逻辑。方法因电调而异好盈常见方法是遥控器油门拨到最高电调上电听到蜂鸣两下后油门拨到最低然后电调会完成行程确认。校准好后再把电调信号线插回飞控输出通道3。4.3 加速度计、罗盘和地面站基本设置加速度计校准在“Accel Calibration”里按地面站提示把车放在水平面、左右侧放、前后仰放、翻转每步点击一次完成后写入。车不像飞机对姿态那么敏感但校准一次只要两分钟不要跳过。罗盘校准选择“Compass Calibration”开始旋转整辆车尽量让每个面都朝各个方向转一圈。如果GPS带外置罗盘优先选择external compass。罗盘干扰问题在车上很突出电机和舵机离罗盘太近会导致航向漂移后面自动模式跑不直往往就是这个原因。载具框架在“Frame Type”里选择Rover无人车保存。低电压保护这是新手最容易漏的一项。ArduRover默认的低电压报警阈值是按3S锂电池算的10.5V左右我用的是2S电池满电8.4V如果不改一接电池飞控就觉得电压过低在地面站不断报警甚至直接触发保护。在参数列表里找到BATT_LOW_VOLT和BATT_CRT_VOLT分别改成7.2和6.8左右或者关闭电压保护配合一个蜂鸣式电压报警器使用省心。4.4 失控保护和急停设置ArduRover的失控保护逻辑和飞行器不太一样在地面车场景里我推荐设置油门信号失控保护。在“Failsafe”页面里把“Throttle Failsafe”打开行为选“Disabled”或“Hold”,这里需要根据你手上的固件版本看老版本习惯叫“Set Throttle to 0”我实际选择的是让油门立刻归零避免车继续溜。同时把“Ground Control Failsafe”设成“Disabled”防止误触发后车原地不动挡住路。还要确认一件在Rover里容易被忽略的事无人车也需要一个“急停”概念。在遥控器上预留一个两段开关把它映射到飞控的某个RC输入然后设置RCx_OPTION为“Motor Emergency Stop”或等效功能。这样遇到突发情况拨一下开关就能立刻切断油门比遥控器抢操作更快更明确。低成本改装车没有急停开关的话至少把遥控器油门通道的反向设置好确保往前推是前进往后拉是刹车或倒车。5. 第一次路测从空转到上路应该怎么调5.1 上电自检和空转测试所有接线都完成、Mission Planner能连上之后不要急着把车放到地上跑。先把车架空用几个砖头或支架把底抬高让车轮离地。上电顺序是先开遥控器再给电调和飞控上电。如果反过来接收机从上电到稳定的这段时间没有信号输出飞控可能把“无信号”误认为失控触发油门归零虽然不是大问题但容易让人误判。上电后检查三件事飞控状态灯是否正常闪烁Mission Planner的HUD里有没有姿态数据转动遥控器转向摇杆前轮是否随之摆动推动油门摇杆电机是否平滑加速、没有异响。注意ArduRover在遥控模式下的油门响应并不是“摇杆推多少就走多少”油门输出还要经过飞控的油门曲线和急停逻辑所以第一次空转推油门时如果电机不转不要立刻怀疑硬件先看Mission Planner的RC值是不是真的变到了再看Servo Output有没有输出值变化。逐级排查比盲拆电机要快得多。5.2 转向和油门的极性判断车放回地面第一件事不是踩油门而是先确认转向。往左打遥控器摇杆前轮应该往左偏如果往右偏说明转向极性反了。修改极性的位置在参数列表里常用的两个参数是RC1_REVERSED和RC3_REVERSED。RC1_REVERSED反转的是转向通道RC3_REVERSED反转的是油门通道。把它们从0改成1就能翻转输出信号方向。注意有些情况下转向极性改RC1_REVERSED还不够因为舵机中位可能有偏移配合SERVO1_TRIM参数微调让前轮完全居中。油门极性反过来如果推油门车竟然向后跑那也是把RC3_REVERSED翻转一下。很多新手会在这里陷入一个误区把遥控器本身的通道反向功能打开也能实现同样效果。确实如此但我不建议在遥控器上改因为这会改变遥控器的“肌肉记忆”下次换一台车又得重新适配。统一在飞控参数里设置至少在Mission Planner里所有东西可追溯。5.3 路测顺序与3个常见问题测试场地找空旷硬质地面周围没有行人、车辆。我把路测分成三轮第一轮只低速前进和倒车不转弯把油门线性跑顺第二轮低速绕桩观察转向响应有没有延迟或抖动第三轮让车跑直线观察是否自动跑偏顺手调SERVO1_TRIM把直线跑正。这轮跑完后我遇到的最典型的3个问题车跑起来一抖一抖。大概率不是飞控问题而是电调BEC供电能力不足舵机打方向瞬间电流拉低电压飞控复位。解决办法是换独立UBEC或确认电调BEC电流≥3A。我踩过这个坑当时症状是车一转弯就重启排查了半个多小时才发现是BEC供电不够。车能遥控但切到自动模式不走。这种情况先看GPS是否锁星、有没有设置Home点。ArduRover在自动模式下需要有效的位置信息锁星少于4颗或者罗盘没校准好导航计算机不会输出油门。解决方法是等GPS锁星在Mission Planner里确认Home位置已设置并且罗盘偏差小于100mGauss再试。低速推油门不走推过半才突然窜出去。这是电调行程和飞控PWM输出没对齐。可能原因电调没做行程校准或SERVO3_MIN、SERVO3_MAX设置得太极端。处理办法把油门摇杆慢慢往上推同时看Mission Planner的Servo Output数值确认PWM在1100-1900之间如果电调在中位附近有明显死区那就把SERVO3_MIN从默认的1100调高到1200左右减小死区范围。5.4 自动模式的一些经验第一次切自动模式时我建议先从“自动驾驶巡航”这种简单模式开始不要一上来就跑航点任务。在Mission Planner的飞行模式列表里把某一个遥控器开关位映射到“Auto”或“Guided”然后在地面站的Flight Plan里用鼠标画一段几百米的直线航线点Write上传。自动模式跑起来之后车会按它自己的控制器去转向和加速一开始很容易出现“左右蛇形”的现象。原因是转向P值太大或者转向中位不准。参数里最有用的两个是ATC_STR_RATIO_P和ATC_STR_RATIO_I我以每次10%的量减小P值观察蛇形是否收敛直到车能平滑地沿着直线行驶。如果蛇形很剧烈先检查机械方面前轮束角是否明显偏、转向拉杆是否松动再动参数。机械问题的参数补偿只是一时过两天又会偏。6. 进阶玩法MAVLink航点下发和日常管理工具6.1 航点下发是怎么回事ArduRover的自动任务基于MAVLink协议。MAVLink可以理解成无人机/无人车界的“串口通信语言”飞控和地面站之间所有参数、遥测、指令都是通过一条条MAVLink消息传输的。航点下发的典型流程是地面站向飞控发送MISSION_COUNT消息表示“我这里有N个航点要传给你”飞控收到后回一条MISSION_REQUEST表示“请把第0个航点发给我”地面站发送MISSION_ITEM_INT把一个航点的经纬度、高度、执行动作等数据传过去重复第2、3步直到所有航点传完飞控回MISSION_ACK告诉地面站“任务已经接收完毕”。在这个过程中如果哪一步超时或者校验失败航点上传就会失败地面站会报错。所以自己写的工具连不上时绝大概率是序号、目标系统ID、帧类型某一个对不上。6.2 用Dart通过MAVLink发航点的思路“dart 通过 mavlink 发送航点信息 给ardupilot”是一个很正常的开发需求在Dart里需要用到mavlink编解码库或者自己做字节打包。MISSION_ITEM_INT消息的关键字段列表如下target_system目标飞控的系统ID默认是1target_component目标组件ID默认是1seq航点序号从0开始frame坐标系无人车用MAV_FRAME_GLOBAL_RELATIVE_ALT值3最合适commandMAV_CMD_NAV_WAYPOINT值16current0或1当前航点标记autocontinue1表示自动跳转到下一个航点param1该航点停留时间秒param2-param4一般用0x纬度int32单位1e7度y经度int32单位1e7度z高度无人车场景给0即可。使用dart_mavlink这类库时大概思路是先建立到数传串口或UDP的通信通道然后创建一个MavlinkConnection对象按上面的字段填充MISSION_ITEM_INT最后按MISSION_COUNT → 逐个ITEM → 收到ACK的顺序循环发送。如果你只想快速验证可以先用MAVProxy连接飞控手动执行wp upload 文件命令把航点文件传进去再用Dart写遥控发送指令。6.3 ArduPilot日常管理工具怎么选这个问题几乎是每个从ArduPilot入门的人都会问的因为工具确实太多了。我根据自己的习惯列一张使用建议表场景推荐工具说明首次配置、参数调试、传感器校准Mission PlannerWindows首选功能最全社区教程最多跨平台地面站、飞行中监控QGroundControl界面现代Linux/macOS/Windows都支持命令行快速调试、脚本化操作MAVProxy通过命令控制飞控适合串口/数传场景二次开发、集成自己的程序MAVSDK官方开发库支持C/Python等Dart语言开发dart_mavlink等社区库适合做手机App、桌面工具集成很多人问Mission Planner和QGroundControl的差别其实对新手来说Mission Planner的“完整程度”更高很多底层参数直接有图形化界面不用手敲参数名。QGroundControl的优点是界面更干净、跨平台好我现在日常调参会开Mission Planner出去跑车监控用QGroundControl两个轮流用。如果只装一个那首选Mission Planner。命令行工具MAVProxy对我来说更像是“手术器具”写脚本批量改参数、批量下载日志非常好用。当你需要同时连接多台设备、做转发时可以再了解MAVLink Router这样的消息路由工具它能在一个进程里把多个MAVLink设备串起来批量开发阶段比地面站更灵活。6.4 从Rover固件出发你还能往哪个方向玩这辆车配置完整后可以做的方向非常多。最简单的是把摄像头加在车上通过树莓派或者NVIDIA Jetson跑视觉巡线把识别结果转换成转向指令发给飞控这就是一套非常典型的视觉导航无人车教学实验平台。稍微进阶一点可以用MAVSDK写一个简易调度程序让车按预定义路线每日巡逻或者用遥控器在特定位置标记兴趣点等回传后在地面站生成巡逻航线。如果对仿真感兴趣ArduPilot官方支持通过SIM_MAV或SIM_JSON连接到仿真器在Gazebo或Unreal环境里先跑通算法再实车验证。APM 2.8性能不够跑复杂仿真但如果只是熟悉Rover固件的航点逻辑也完全可以。最后补充几个我实际踩出来的小技巧一是螺丝胶一定要准备。车架震动大固定APM飞控板的铜柱螺母用不了几次就会松我在所有金属连接处都点了一点蓝色螺丝胶再也不怕跑完一圈螺丝找不到了。二是每换一次电调或者遥控器都重新做一次完整的遥控校准和电调行程校准别偷懒。这两个比任何一项参数调整都更容易出问题而且出问题后症状极其迷惑车子时好时坏很浪费时间。三是买一根延长USB线把飞控的USB口引到车身上方便调试。虽然平时靠数传无线连接但有时候Mission Planner怎么都连不上插USB直接看是串口驱动问题还是飞控死机能一步定位。四是前期调试一定带着Mission Planner的日志记录功能跑车。ArduRover会记录RC输入、输出、姿态、GPS状态路测回来直接下载日志回放很多“车自己会偏”“偶尔抖一下”这类模糊问题在日志里都有明确答案比盲猜参数高效得多。整台车从立项到能独立跑通航点任务我前后花了一个周末的时间排除中途拆装和等快递实际动手时间大概10小时。这个时间投入放在ArduPilot整个生态学习里非常划算因为Rover的代码结构、调参逻辑和空中无人机高度相似你把地上这辆车玩明白了之后想做四轴、固定翼、无人船思路几乎都是通的。希望这份清单和排坑记录能让你少走几段弯路。