1. 为什么ELRS加ArduPilot是当前远航与固定翼玩家的热门组合
如果你最近两年在航模圈里混,肯定绕不开两个词:ELRS和ArduPilot。一个是把遥控链路成本打到地板价、延迟压到毫秒级的开源高频头协议,另一个是能把一架泡沫机变成全自动巡航平台的开源飞控固件。把这俩凑一块儿,基本就是当前FPV远航和固定翼玩家的标配方案。
我自己从最早的FrSky接收机一路换到Crossfire,再到现在的ELRS,踩过的坑不算少。最开始用ELRS配ArduPilot的时候,遥控能控,但遥测数据死活回传不上来,地面站里一堆传感器显示不出来。后来才搞明白,问题出在CRSF协议和ArduPilot串口配置的对应关系上。这套东西文档散落在各个论坛和GitHub issue里,中文资料更是零零碎碎,所以我把从零配置到高级遥测显示的完整流程整理出来,给正在入坑或者卡在某个环节的朋友一个可复现的参考。
这篇内容适合三类人:刚买了ELRS高频头和接收机、准备配ArduPilot飞控的新手;已经能飞但遥测数据不全、想打通地面站显示的进阶玩家;以及想用ELRS做远航、需要稳定链路和完整遥测回传的老手。核心关键词就几个:ELRS、ArduPilot、CRSF、EdgeTX,我会围绕这几个点把配置逻辑、参数计算、实操步骤和排查经验全部讲透。
先说结论:ELRS和ArduPilot的搭配,核心难点不在硬件连接,而在协议理解和串口资源分配。只要把CRSF协议的双向通信机制搞清楚,剩下的就是按部就班的参数配置。下面我按实际配置顺序,从整体思路到细节实现一步步拆。
2. 整体方案设计与核心思路拆解
2.1 ELRS与ArduPilot的通信架构到底怎么走
很多人一开始会懵:ELRS高频头插在遥控器上,接收机装在飞机上,飞控又是另一套系统,这三者之间到底怎么通信?我用一个生活化的类比来解释。把遥控器想象成一部对讲机,ELRS高频头是对讲机的天线模块,接收机是另一部对讲机。飞控则是一个只会听说特定暗号的指挥官,它不直接跟对讲机对话,而是通过一个翻译官——也就是CRSF协议——来传递指令和回传数据。
具体链路是这样的:遥控器上的EdgeTX系统把摇杆动作打包成CRSF协议数据,通过ELRS高频头发射出去;飞机上的ELRS接收机收到后,通过一根串口线把CRSF数据送给ArduPilot飞控;飞控解析后执行动作,同时把姿态、GPS、电池等遥测数据按CRSF协议反向送回接收机,接收机再通过ELRS链路回传给高频头,最终显示在遥控器屏幕或地面站上。这条链路是双向全双工的,这也是CRSF相比老式PWM和SBUS协议最大的优势。
理解了这个架构,你就明白为什么配置的时候要同时关注遥控器端、接收机端和飞控端三个地方。任何一环的协议或波特率对不上,链路就断。
2.2 为什么选CRSF而不是SBUS或PWM
SBUS是Futaba搞的单向协议,只能下行控制,没有遥测回传,而且波特率固定、抗干扰能力一般。PWM更原始,一根线一个通道,接线繁琐。CRSF是Crossfire团队设计的双向协议,后来被ELRS全面采用,优势很明显:
- 双向通信:控制和遥测走同一条串口,省线省资源
- 高波特率:常见420000或115200,延迟低
- 通道多:支持最多16个通道,还能传LQ、RSSI、SNR等链路质量数据
- 标准化:ArduPilot原生支持CRSF,配置项清晰
我实测下来,同样一架远航机,SBUS方案地面站里看不到链路质量,飞远了心里没底;换成CRSF后,遥控器上实时显示LQ和RSSI,飞控也能拿到这些数据做失控保护判断,安全感完全不一样。
2.3 串口资源分配的核心逻辑
ArduPilot飞控一般有多个UART串口,比如Pixhawk系列通常有5到6个。每个串口要分配不同用途:GPS占一个、遥测数传占一个、CRSF接收机占一个,可能还有光流、避障等。这里的关键是SERIALx_PROTOCOL和SERIALx_BAUD两个参数。
CRSF协议在ArduPilot里对应的协议编号是23。波特率方面,ELRS接收机输出CRSF的波特率通常是420000,但有些固件版本或接收机型号可能不同,需要查接收机说明书。我遇到过接收机默认输出115200的情况,飞控设成420000就完全没反应,改成115200立刻正常。所以配置前一定要确认接收机端的CRSF波特率。
提示:ArduPilot的SERIALx_BAUD参数用的是编号而不是直接填波特率数值,比如57对应57600,115对应115200,420对应420000。填错这个参数是新手最常见的坑之一。
3. 核心细节解析与实操要点
3.1 ELRS接收机端的接线与协议设置
ELRS接收机的接线不复杂,但有个细节容易忽略。接收机一般有5根线:5V、GND、TX、RX、还有一根可能是用于SBUS或PWM输出的信号线。配ArduPilot用CRSF时,只需要接5V、GND、TX、RX四根。注意TX和RX要交叉接:接收机的TX接飞控的RX,接收机的RX接飞控的TX。我第一次接的时候没交叉,结果遥控完全没反应,查了半天才发现是TX/RX接反了。
接收机端的协议设置取决于具体型号。有些ELRS接收机出厂默认就是CRSF输出,有些需要通过遥控器或WiFi进接收机配置页面切换。比如常见的EP1、EP2接收机,默认CRSF,但如果你刷了PWM固件,就得改回来。我建议用ELRS配置器或者遥控器上的ELRS Lua脚本进接收机设置,确认输出协议是CRSF。
另外,ELRS接收机的固件版本要和发射端匹配。ELRS 3.x和2.x在协议细节上有差异,混用可能导致遥测数据不全。我一般把高频头和接收机都刷到同一个大版本的最新稳定版,省得折腾。
3.2 ArduPilot串口参数配置详解
假设你把CRSF接收机接在飞控的SERIAL2上(也就是TELEM2口),那么需要设置:
SERIAL2_PROTOCOL = 23(RCIN,即遥控输入)SERIAL2_BAUD = 420(对应420000波特率,如果接收机是115200就填115)
这里有个容易混淆的点:ArduPilot里RCIN协议编号是23,但有些老版本固件里CRSF对应的编号可能不同。我用的4.3以上版本都是23。设置完这两个参数后,重启飞控,在Mission Planner或QGroundControl的遥控器校准页面应该能看到通道条随摇杆动作。
如果通道条不动,先检查接线,再检查波特率,最后检查接收机是否真的在输出CRSF。可以用飞控的日志或者串口监视工具看有没有数据进来。
3.3 遥控器端EdgeTX的CRSF配置
遥控器这边,EdgeTX系统需要设置外部高频头为CRSF协议。进模型设置,找到External RF,协议选CRSF,波特率一般选420000或自动。然后绑定接收机,绑定成功后遥控器上应该能看到ELRS的Lua脚本入口,进去能看到接收机的信号质量。
这里有个实操心得:EdgeTX的CRSF波特率设置要和ELRS高频头匹配。有些高频头固件默认400000,有些是420000,设错了绑定都绑不上。我一般先用自动,绑不上再手动试420000。
通道映射也要注意。ArduPilot默认的通道顺序是AETR(副翼、升降、油门、方向),但EdgeTX默认可能是TAER或其他。在遥控器的通道映射里改成和飞控一致,或者在ArduPilot里用RCMAP参数重新映射。我习惯在遥控器端改,这样飞控端保持默认,换遥控器时不用重新配飞控。
3.4 遥测数据回传的协议打通
遥测回传是这套方案的精髓。CRSF协议回传的数据包括:GPS坐标、高度、速度、电池电压、电流、姿态角、链路质量LQ、RSSI、SNR等。这些数据要显示在遥控器上,需要EdgeTX的遥测页面配置;要显示在地面站上,需要飞控通过另一个串口把MAVLink数据传给数传模块。
这里有个关键点:CRSF遥测和MAVLink遥测是两条独立的路。CRSF遥测走接收机链路回遥控器,MAVLink遥测走数传电台回地面站。两者互不干扰,但都需要配置。很多人以为配了CRSF遥控,地面站就自动有数据了,其实不是,地面站数据还得靠数传。
遥控器上显示CRSF遥测,需要在EdgeTX的遥测页面添加传感器。ELRS接收机会自动上报一批传感器,你只需要在遥控器上发现新传感器,然后添加到显示页面。我一般把LQ、RSSI、电池电压、GPS速度放在首页,飞的时候一眼能看到关键信息。
4. 实操过程与核心环节实现
4.1 硬件连接与上电检查
先把接收机接到飞控上。以Pixhawk 6C为例,SERIAL2对应的物理接口是TELEM2,接线如下:
| 接收机引脚 | 飞控TELEM2引脚 | 说明 |
|---|---|---|
| 5V | 5V | 供电 |
| GND | GND | 共地 |
| TX | RX | 接收机发,飞控收 |
| RX | TX | 飞控发,接收机收 |
接好后先不要装桨,上电检查。飞控正常启动后,接收机指示灯应该常亮或慢闪,表示已绑定。如果接收机快闪,说明没绑定,需要重新绑定。
上电后进Mission Planner,连接飞控,进配置调试里的遥控器校准。如果通道条不动,先别急着改参数,用万用表量一下接收机TX脚有没有电压波动,或者用USB转串口工具直接接接收机TX和GND,用串口助手看有没有数据。这一步能快速定位是接收机没输出还是飞控没接收。
4.2 飞控参数逐项配置与验证
确认硬件没问题后,开始配参数。我按实际配置顺序列一下:
- 连接Mission Planner,进配置调试,全部参数表
- 搜索SERIAL2_PROTOCOL,设为23
- 搜索SERIAL2_BAUD,设为420(如果接收机是115200就设115)
- 搜索RC_PROTOCOLS,确认包含CRSF(一般默认全选,不用改)
- 写入参数,重启飞控
- 重新连接,进遥控器校准,看通道条
如果通道条正常,说明遥控链路通了。这时候可以校准遥控器,把每个通道的行程拉满,保存。
接下来配失控保护。ArduPilot的失控保护用FS_THR_ENABLE和FS_THR_VALUE。CRSF协议下,接收机会在失去信号时把油门通道降到预设值,飞控检测到后触发失控保护。我一般设FS_THR_ENABLE=1(启用),FS_THR_VALUE=975(略低于最低油门)。测试方法:关掉遥控器,看飞控是否进入失控保护模式(地面站会显示)。
4.3 遥控器遥测页面配置实操
遥控器这边,以EdgeTX 2.8为例:
- 进模型设置,确认External RF协议是CRSF
- 进遥测页面,点发现新传感器
- 等待几秒,应该能看到一批传感器,比如1RSS、2RSS、RQly、RSNR、RxBt、GSpd、GAlt等
- 把这些传感器添加到显示页面,设置单位和告警阈值
我一般这样布局:第一页显示LQ(RQly)、RSSI(1RSS)、电池电压(RxBt)、GPS速度(GSpd);第二页显示GPS高度、姿态角、飞行模式。LQ低于70%设语音告警,RSSI低于-100dBm设告警。这样飞远了能提前知道链路质量下降。
注意:ELRS的LQ是链路质量百分比,比RSSI更能反映实际链路状态。RSSI受发射功率和环境影响大,LQ更稳定。我主要看LQ,RSSI作参考。
4.4 地面站MAVLink遥测的独立配置
地面站数据走数传电台,和CRSF是两条路。数传电台一般接在SERIAL1或SERIAL3上,配置:
SERIAL1_PROTOCOL = 2(MAVLink2)SERIAL1_BAUD = 57(57600,根据数传波特率调整)
配好后,地面站应该能收到飞控的MAVLink数据,显示姿态、GPS、电池等。如果地面站没数据,检查数传的TX/RX是否交叉、波特率是否匹配、协议是否为MAVLink2。
这里有个经验:CRSF遥测和MAVLink遥测的数据来源是同一个飞控,但传输路径不同。CRSF遥测更新率受ELRS链路速率限制,一般几Hz到几十Hz;MAVLink数传更新率取决于数传带宽,一般也是几Hz。两者数据可能有轻微时间差,正常现象。
4.5 参数计算与波特率选择依据
为什么CRSF常用420000波特率?这是ELRS社区约定的标准,420000能提供足够的带宽传输16通道控制加遥测数据,同时保持低延迟。115200也能用,但通道数多或遥测数据量大时可能不够。
ArduPilot的SERIALx_BAUD参数编号对应关系:
| 编号 | 波特率 |
|---|---|
| 9 | 9600 |
| 19 | 19200 |
| 38 | 38400 |
| 57 | 57600 |
| 115 | 115200 |
| 230 | 230400 |
| 420 | 420000 |
| 921 | 921600 |
填420就是420000。这个编号是ArduPilot自定义的,不是标准波特率数值,新手容易填错。
5. 常见问题与排查技巧实录
5.1 遥控通道无反应的排查顺序
这是最常见的问题。我按排查效率从高到低列:
- 检查TX/RX是否交叉:接收机TX接飞控RX,接收机RX接飞控TX。接反了完全没数据。
- 检查波特率:SERIAL2_BAUD是否和接收机CRSF波特率一致。420和115都试一下。
- 检查协议编号:SERIAL2_PROTOCOL是否为23。
- 检查接收机输出协议:用ELRS配置器确认接收机输出是CRSF而不是PWM或SBUS。
- 检查接收机是否绑定:接收机灯常亮才是绑定状态。
- 检查飞控串口是否被占用:有些飞控的SERIAL2默认给别的用途,确认没冲突。
我遇到过一次,所有参数都对,就是没反应,最后发现是接收机固件版本太老,不支持CRSF双向。刷了新固件就好了。
5.2 遥测数据不全或显示异常的解决
遥测数据不全,通常是这几个原因:
- ELRS固件版本不匹配:高频头和接收机版本差异大,遥测传感器列表可能不全。统一刷到同版本。
- 遥控器遥测页面没发现新传感器:删掉旧传感器,重新发现。
- 传感器单位不对:EdgeTX里手动改单位,比如速度从m/s改成km/h。
- 数据更新率太低:ELRS链路速率设太低,进ELRS配置调高遥测比率。
我实测下来,ELRS 3.x配EdgeTX 2.8,遥测传感器基本都能正常发现。如果某个传感器一直不出来,先确认飞控有没有那个数据源,比如没接GPS就没有GPS传感器。
5.3 失控保护不触发的排查
失控保护不触发,先确认FS_THR_ENABLE设了1。然后测试:关遥控器,看地面站是否显示失控保护。如果不触发,可能是接收机在失去信号时没有把油门通道降到FS_THR_VALUE以下。进接收机配置,确认失控保护行为是“No Pulses”或“Set Position”,并设置正确的油门值。
CRSF协议下,接收机的失控保护由接收机自己处理,不是飞控。所以接收机端的失控保护设置很关键。我一般设成“No Pulses”,飞控检测到无脉冲后触发失控保护。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 遥控无反应 | TX/RX接反 | 交叉接线 |
| 遥控无反应 | 波特率不匹配 | 试420和115 |
| 遥控无反应 | 协议编号错 | SERIALx_PROTOCOL=23 |
| 遥测不全 | 固件版本不匹配 | 统一ELRS版本 |
| 遥测不全 | 传感器未发现 | 遥控器重新发现 |
| 失控保护不触发 | 接收机失控设置错 | 设No Pulses |
| 地面站无数据 | 数传未配置 | 配MAVLink2和波特率 |
| 链路质量差 | 发射功率低 | 调高ELRS功率 |
5.5 独家避坑经验分享
第一个坑:不要同时用CRSF和SBUS。有些飞控支持多协议输入,但CRSF和SBUS不能混用同一个串口。我试过把CRSF接收机和SBUS接收机接不同串口,结果飞控只认一个,另一个完全忽略。选一个用就行。
第二个坑:ELRS高频头固件和接收机固件要匹配。我有次高频头刷了3.0,接收机还是2.0,绑定能绑上,但遥测数据缺了一半。刷成同版本后全好了。
第三个坑:ArduPilot的串口编号和物理接口不一定对应。Pixhawk的SERIAL2是TELEM2,但有些飞控的SERIAL编号和丝印不一样。查飞控说明书确认。
第四个坑:遥控器通道映射和飞控不一致。EdgeTX默认TAER,ArduPilot默认AETR,不改的话油门和方向是反的。在遥控器端改通道映射,或者在飞控端用RCMAP改。
第五个坑:ELRS的遥测比率设太高会导致控制延迟增加。遥测比率和控制速率共享链路带宽,遥测占多了控制就慢。我一般设遥测比率1:64或1:128,控制优先。
6. 进阶玩法与链路优化建议
6.1 ELRS链路参数调优
ELRS的链路参数包括包速率、遥测比率、发射功率。包速率常见有50Hz、100Hz、150Hz、250Hz。远航一般用50Hz或100Hz,牺牲一点响应速度换更远的距离和更好的穿透。穿越机用250Hz,响应快但距离近。
遥测比率我前面说了,1:64或1:128比较平衡。发射功率根据飞行距离调,近距离100mW够用,远航可以到500mW或1W,但要注意散热和功耗。
我实测下来,100Hz包速率加1:64遥测比率,配500mW功率,固定翼飞个几公里链路质量还能保持在70%以上。再远就得降包速率或加功率。
6.2 ArduPilot日志分析与链路质量评估
ArduPilot的日志里会记录RC输入和链路质量数据。飞完后把日志下载下来,用Mission Planner的日志分析工具看RCIN和RSSI数据。如果发现某个时段RC输入有跳变或丢失,说明链路在那个位置有问题,下次飞的时候注意避开或调整天线。
日志里还能看飞控的失控保护触发记录,验证失控保护是否正常工作。我一般新机首飞后都会看日志,确认链路和保护逻辑没问题。
6.3 天线布局与安装要点
ELRS接收机的天线布局对链路质量影响很大。固定翼一般把接收机天线呈90度垂直摆放,避免和碳纤维、电池、电机线平行。天线远离飞控和数传,减少干扰。
我试过把接收机天线贴在机身侧面,结果飞远了链路质量掉得厉害。后来改成一根垂直一根水平,呈L形,链路质量明显改善。天线不要剪短或改装,原厂长度是调好的。
6.4 多机切换与模型配置管理
EdgeTX支持多模型配置,每架飞机的通道映射、遥测页面、ELRS绑定都可以独立保存。我一般给每架飞机建一个模型,绑定对应的接收机。切换飞机时直接切模型,不用重新配置。
ELRS的绑定信息存在高频头和接收机里,换模型不影响绑定。但如果换了高频头,需要重新绑定。我习惯把绑定短语设成固定值,这样换高频头后不用重新绑定接收机。
6.5 固件升级与版本管理
ELRS和ArduPilot都在持续更新,固件升级是常态。我的经验是:不要追最新版,用稳定版。升级前备份参数和模型配置。ELRS升级用配置器或WiFi,ArduPilot升级用Mission Planner。
升级后一定要重新检查关键参数,特别是串口协议和波特率,有时候升级会重置部分参数。我有次升级ArduPilot后SERIAL2_PROTOCOL被重置成默认值,遥控直接没反应,查了半天才发现。
这套ELRS加ArduPilot的方案,我从最初的一头雾水到现在能闭着眼配,中间踩的坑基本都写在这了。核心就一句话:协议理解到位,串口配置对号,剩下的就是耐心调试。遥测显示这块,先把CRSF链路打通,再配MAVLink数传,两条路各走各的,别混在一起想。最后分享一个小技巧:每次改完参数,先在地面测试所有功能,包括遥控、遥测、失控保护,确认没问题再飞。地面多花十分钟,天上少丢一架机。