- 无人机
- 嵌入式
- 智能硬件
【免费下载链接】inav
INAV: Navigation-enabled flight control software
导读
本文围绕 INAV(Navigation-enabled flight control software)的测距仪(Rangefinder)功能展开,系统讲解其工作原理、支持的传感器类型、CLI 配置参数以及 Surface(地形跟随)模式等核心应用场景。通过阅读本文,你将掌握如何为多旋翼和固定翼选择并连接 ToF 激光、超声波、毫米波雷达等测距传感器,正确设置rangefinder_hardware、inav_max_surface_altitude等关键参数,并理解测距数据如何在高度估计与位置估计中发挥作用,从而在无 GPS 环境或自动降落场景中充分发挥测距仪的价值。
什么是测距仪
测距仪(Rangefinder)是一类用于测量飞行器相对地面正下方距离的设备,其测量结果即离地高度 AGL(Above Ground Level)。与气压计、GPS 提供的绝对海拔不同,AGL 直接反映"距离地面有多高",因此特别适合需要精确贴近地面飞行的场景。
在 INAV 源码中,测距仪数据由 sensors/rangefinder.c 统一管理,所有读数均以厘米(cm)为单位返回。驱动层对传感器的三种异常返回值做了标准化定义(见 drivers/rangefinder/rangefinder.h):
| 返回值 | 含义 |
|---|---|
RANGEFINDER_OUT_OF_RANGE (-1) | 超出量程,地面过远或超出检测锥 |
RANGEFINDER_HARDWARE_FAILURE (-2) | 传感器无响应 / 硬件故障 |
RANGEFINDER_NO_NEW_DATA (-3) | 本次无新测量数据(非错误) |
测距仪在 INAV 中的四大核心用途
根据官方文档,INAV 中的测距仪主要服务于以下场景:
- 着陆检测(Landing detection)——多旋翼:通过测距数据实现精确触地检测,配合自动降落流程,避免在着陆过程中过早或过晚收油门。
- 自动降落支持(Automated landing support)——固定翼:固定翼在进场着陆阶段利用测距仪实现平滑的下降控制,保证下滑曲线贴地且不撞地。
- 地形跟随 / Surface 模式——多旋翼:恒定保持离地高度飞行,适合在起伏地形上空贴地巡航。
- 位置估计(Position estimation)——与光流(Optical Flow)传感器配合时,测距仪提供 Z 轴高度信息,光流提供水平 X/Y 位移信息,从而在无 GPS 的室内环境中实现悬停与位置保持。
支持的测距仪硬件类型
从源码枚举 sensors/rangefinder.h 可见,INAV 共定义了 12 种测距仪类型(RANGEFINDER_NONE到RANGEFINDER_NANORADAR),与官方文档的硬件分类一一对应。
Time-of-Flight(ToF)激光传感器(I2C)
| 传感器 | 厂商 | 量程 | 接口 |
|---|---|---|---|
| VL53L0X | STMicroelectronics | 0–75 cm | I2C |
| VL53L1X | STMicroelectronics | 0–400 cm | I2C |
| TOF10120 | 轻小激光传感器 | 0–200 cm | I2C |
| TERARANGER_EVO | TeraRanger Evo 系列 | 30–600 cm(视型号而定) | I2C/UART |
ToF 传感器通过测量光脉冲往返时间计算距离,受环境光影响小、响应快,适合短距精确测高。VL53L0X / VL53L1X / TOF10120 / TERARANGER_EVO 均挂载在飞控 I2C 总线上,配置后自动检测。对应驱动位于 drivers/rangefinder/rangefinder_vl53l0x.c、rangefinder_vl53l1x.c、rangefinder_tof10120_i2c.c、rangefinder_teraranger_evo.c。
超声波传感器(I2C / UART)
| 传感器 | 厂商 | 量程 | 接口 |
|---|---|---|---|
| SRF10 | Devantech | 0–600 cm | I2C |
| US42 | Maxbotix US-42 | 0–645 cm | I2C |
| USD1_V0 | USD1 超声波变体 | — | UART |
超声波方案成本低、量程大,但受温度、风场和地面材质影响。SRF10 与 US42 驱动分别见 rangefinder_srf10.c 与 rangefinder_us42.c。
毫米波雷达传感器(UART)
INAV 支持 NanoRadar NRA15 / NRA24 毫米波雷达。此类传感器固件可选US-D1_V0或NRA两种协议,对应配置器中的名称不同:
| 雷达型号 | 协议 | 量程与分辨率 | 配置器名称 |
|---|---|---|---|
| NRA15 | US-D1_V0 | 0–30 m(±4 cm) | USD1_V0 |
| NRA15 | NRA | 0–30 m(±4 cm) | NRA |
| NRA15 | NRA | 0–100 m(±10 cm) | NRA |
| NRA24 | US-D1_V0 | 0–50 m(±4 cm) | USD1_V0 |
| NRA24 | US-D1_V0 | 0–200 m(±10 cm) | USD1_V0 |
| NRA24 | NRA | 0–50 m(±4 cm) | NRA |
| NRA24 | NRA | 0–200 m(±10 cm) | NRA |
选择协议时需确认传感器刷写的固件版本,并在rangefinder_hardware中选择与之匹配的名称(USD1_V0或NRA)。
串口 / 外部传感器(UART)
- MSP:通过 MSP 协议接入外部测距设备(UART/MSP)。
- BENEWAKE:Benewake 系列激光雷达模块(如 TFmini),走串口协议(UART)。
这两类在源码中均通过虚拟驱动表virtualRangefinderDetect()挂接(见 sensors/rangefinder.c)。
开发 / 测试传感器
- FAKE:纯软件模拟的测距仪,用于无硬件环境下的功能验证,常见于 SITL(Software In The Loop)测试。它同样通过
rangefinderFakeVtable虚拟驱动实现。
配置指南
启用测距仪
在 CLI 中执行:
set rangefinder_hardware = VL53L0X # 或你的传感器类型 saverangefinder_hardware的可选值定义在 fc/settings.yaml 的rangefinder_hardware表格中,完整列表为:
NONE, SRF10, VL53L0X, MSP, BENEWAKE, VL53L1X, US42, TOF10120_I2C, FAKE, TERARANGER_EVO, USD1_V0, NRA默认值为NONE。参数存储在rangefinderConfig_t结构体(PG_RANGEFINDER_CONFIG)中,对应字段定义见 sensors/rangefinder.h。
中值滤波平滑读数
set rangefinder_median_filter = ON save该参数默认值为OFF。官方设置描述为"3-point median filtering for rangefinder readouts",而从 sensors/rangefinder.c 的实现看,实际采用的是5 个样本的滑动中值滤波(DISTANCE_SAMPLES_MEDIAN 5,使用quickMedianFilter5),且只在读数处于量程内(大于RANGEFINDER_OUT_OF_RANGE)时才纳入样本。开启后能明显抑制单点跳变,适合地面纹理不均匀、螺旋桨气流干扰等场景。
位置估计权重参数
以下参数控制测距数据在 INAV 高度估计(卡尔曼融合)中的权重,定义于 fc/settings.yaml:
set inav_max_surface_altitude = 200 # 测距数据允许参与融合的最大高度(cm) set inav_w_z_surface_p = 3.5 # 位置(高度)估计权重 set inav_w_z_surface_v = 6.1 # 爬升率(垂直速度)估计权重| 参数 | 默认值 | 取值范围 | 说明 |
|---|---|---|---|
inav_max_surface_altitude | 200 | 0–1000 | 允许测距仪参与表面跟随的最大高度(cm),应设为传感器可靠量程而非标称最大量程 |
inav_w_z_surface_p | 3.5 | 0–100 | 测距数据在估计高度中的权重(固定翼与多旋翼均生效,需开启 Surface 模式) |
inav_w_z_surface_v | 6.1 | 0–100 | 测距数据在估计爬升率中的权重(同上) |
inav_w_z_surface_p/v同时作用于固定翼与多旋翼(前提是安装了测距仪并启用 Surface 模式),权重越高,估计越信任测距数据而非气压计/加速度积分,但过高权重会在测距失效时放大误差,因此需要与inav_max_surface_altitude配合设置。
高度估计的倾斜校正原理
从源码可以印证"倾斜角过大时测距失效"这一约束:在 sensors/rangefinder.c 中,最终高度计算为calculatedAltitude = rawAltitude * cosTiltAngle,即用机身倾角余弦对原始读数做斜距投影校正;同时rangefinderInit()会依据传感器驱动上报的检测锥角detectionConeExtendedDeciDegrees预计算最大允许倾角maxTiltCos。当cosTiltAngle < maxTiltCos(倾角超出检测锥)或读数异常时,输出被置为RANGEFINDER_OUT_OF_RANGE,测距数据即被判定无效。
Surface 模式(地形跟随)
Surface 模式让多旋翼以恒定离地高度飞行(相对高度),而非气压计的绝对高度,是测距仪最典型的导航应用。
启用方式:通过遥控器开关激活SURFACE模式(前提是测距仪已正确配置并输出有效数据)。
兼容的导航模式:
- ALTHOLD——按离地高度保持高度
- POSHOLD——以地形相对高度保持位置
- CRUISE——带地形跟随的速度控制
关键设置:
set nav_max_terrain_follow_alt = 100 # Surface 模式允许的最大离地高度(cm)nav_max_terrain_follow_alt定义于 fc/settings.yaml,默认值 100,最大 1000,单位 cm。
重要安全规则:必须将nav_max_terrain_follow_alt设为小于inav_max_surface_altitude,避免在传感器可靠量程之外触发地形跟随。示例:若测距仪可靠量程为 200 cm,则设置inav_max_surface_altitude = 200、nav_max_terrain_follow_alt = 100(或更低)。
注意:Surface 模式不支持固定翼,固定翼请使用自动降落相关的测距支持。
连接与接线
I2C 测距仪
VL53L0X、VL53L1X、TOF10120、SRF10、US42、TERARANGER_EVO 等 I2C 传感器直接连接到飞控的 I2C 端口(通常与气压计/罗盘共用总线或独立 I2C 焊盘),配置rangefinder_hardware后由rangefinderDetect()自动检测挂载(见 sensors/rangefinder.c)。
要点:
- 确认电源电压匹配传感器要求(3.3 V 或 5 V,参考具体型号手册);
- 确认 I2C 地址无冲突(同一总线上若有其他同地址设备需处理);
- 不同 I2C 测距仪任务周期不同,驱动检测成功后会自动重排调度任务(如 VL53L0X、VL53L1X 各自的
TASK_PERIOD_MS)。
串口(UART)测距仪
MSP、BENEWAKE、NRA、USD1_V0 等基于 UART 的传感器需要:
- 在 Configurator 的Ports(端口)选项卡中为传感器分配一个 UART 端口;
- 配置
rangefinder_hardware为对应类型; - 按传感器要求设置正确的波特率(参考 docs/Serial.md 中的串口配置说明)。
光流(Optical Flow)集成
测距仪与光流传感器组合时:
- 测距仪提供**垂直方向(Z 轴)**高度信息;
- 光流提供**水平方向(X/Y 轴)**位移信息;
- 两者融合后可在无 GPS 的室内实现位置保持与低速导航。
从设置文件可见配套参数inav_w_xy_flow_p(位置权重,默认 1.0)与inav_w_xy_flow_v(速度权重,默认 2.0)控制光流在水平估计中的权重,与inav_w_z_surface_p/v在垂直通道配合工作。完整配置流程可参考 docs/Sensors.md 中关于光学流量传感器的章节。
约束与限制
不支持以下设备:
- HC-SR04 超声波传感器
- US-100 超声波传感器
(这两类常见 Arduino 超声波模块不在 INAV 驱动支持列表中。)
固有限制:
- Surface 模式仅限多旋翼(固定翼不支持);
- 倾斜角限制:当机身倾角超出传感器检测锥时,测距数据将被判定无效(原理见上文"倾斜校正"小节);
- 量程边界:
inav_max_surface_altitude应设置为传感器的可靠量程,而非标称最大量程,避免在边缘精度不足区域融合不可靠数据。
故障排除
无测距读数
- 核对
rangefinder_hardware是否选择了正确的传感器类型; - 检查接线与供电(3.3 V 或 5 V,视传感器而定);
- 确保 I2C 地址唯一(无地址冲突);
- 确保传感器正对地面且无遮挡、有清晰的视线。
读数跳动 / 不稳定
- 开启
rangefinder_median_filter = ON; - 检查振动——传感器需刚性安装,避免松动;
- 确认传感器不受螺旋桨下洗气流干扰;
- 确保地面纹理足够(平滑、强反光地面会导致激光/超声回波异常)。
Surface 模式不工作
- 确认遥控器开关已激活 SURFACE 模式;
- 检查测距仪是否输出有效数据(可在 CLI 中查看传感器状态);
- 确认当前离地高度低于
nav_max_terrain_follow_alt(操作上限); - 确认高度处于传感器可靠量程内(由
inav_max_surface_altitude约束); - 确认机型为多旋翼(固定翼不支持 Surface 模式)。
此外,源码中的健康监测逻辑(sensors/rangefinder.c)定义了一个 500 ms 的硬件超时窗口(RANGEFINDER_HARDWARE_TIMEOUT_MS):若超过 500 ms 未收到有效响应,rangefinderIsHealthy()将判定测距仪不健康,可用于排查线缆接触不良、总线故障等间歇性问题。
相关源码与文档索引
- 传感器核心实现:src/main/sensors/rangefinder.c、src/main/sensors/rangefinder.h
- 驱动层接口与返回值定义:src/main/drivers/rangefinder/rangefinder.h
- 各传感器驱动目录:src/main/drivers/rangefinder/
- 参数定义与默认值:src/main/fc/settings.yaml
- 通用传感器文档:docs/Sensors.md
- 参数总览:docs/Settings.md
- 无人机
- 嵌入式
- 智能硬件
【免费下载链接】inav
INAV: Navigation-enabled flight control software
相关推荐
INAV Terrain AGL Hold:固定翼地形跟随模式的原理、配置与飞行安全指南
INAV Terrain AGL Hold:固定翼地形跟随模式的原理、配置与飞行安全指南 Terrain AGL Hold 是 INAV 为固定翼提供的 地形跟
无人机嵌入式智能硬件PX4-Autopilot 地形跟随与地形保持(Terrain Following / Terrain Hold)完整配置与实现解析
PX4 Autopilot 地形跟随与地形保持(Terrain Following / Terrain Hold)完整配置与实现解析 本文以 PX4 Autop
嵌入式物联网机器人自动驾驶智能硬件INAV 仪表盘显示(DASHBOARD)完整指南:I2C OLED 显示屏配置、页面机制与硬件改造
INAV 仪表盘显示(DASHBOARD)完整指南:I2C OLED 显示屏配置、页面机制与硬件改造 INAV(Navigation enabled fligh
无人机嵌入式智能硬件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考