☰
INAV 测距仪(Rangefinder)完整配置指南:从硬件选型、AGL 高度测量到地形跟随
2026/10/4 10:49:49 网站建设 项目流程
  • 无人机
  • 嵌入式
  • 智能硬件

【免费下载链接】inav

INAV: Navigation-enabled flight control software

项目地址:https://gitcode.com/gh_mirrors/in/inav
点击查看免费下载

导读

本文围绕 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)

传感器厂商量程接口
VL53L0XSTMicroelectronics0–75 cmI2C
VL53L1XSTMicroelectronics0–400 cmI2C
TOF10120轻小激光传感器0–200 cmI2C
TERARANGER_EVOTeraRanger 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)

传感器厂商量程接口
SRF10Devantech0–600 cmI2C
US42Maxbotix US-420–645 cmI2C
USD1_V0USD1 超声波变体—UART

超声波方案成本低、量程大,但受温度、风场和地面材质影响。SRF10 与 US42 驱动分别见 rangefinder_srf10.c 与 rangefinder_us42.c。

毫米波雷达传感器(UART)

INAV 支持 NanoRadar NRA15 / NRA24 毫米波雷达。此类传感器固件可选US-D1_V0或NRA两种协议,对应配置器中的名称不同:

雷达型号协议量程与分辨率配置器名称
NRA15US-D1_V00–30 m(±4 cm)USD1_V0
NRA15NRA0–30 m(±4 cm)NRA
NRA15NRA0–100 m(±10 cm)NRA
NRA24US-D1_V00–50 m(±4 cm)USD1_V0
NRA24US-D1_V00–200 m(±10 cm)USD1_V0
NRA24NRA0–50 m(±4 cm)NRA
NRA24NRA0–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 # 或你的传感器类型 save

rangefinder_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_altitude2000–1000允许测距仪参与表面跟随的最大高度(cm),应设为传感器可靠量程而非标称最大量程
inav_w_z_surface_p3.50–100测距数据在估计高度中的权重(固定翼与多旋翼均生效,需开启 Surface 模式)
inav_w_z_surface_v6.10–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 的传感器需要:

  1. 在 Configurator 的Ports(端口)选项卡中为传感器分配一个 UART 端口;
  2. 配置rangefinder_hardware为对应类型;
  3. 按传感器要求设置正确的波特率(参考 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

项目地址:https://gitcode.com/gh_mirrors/in/inav
点击查看免费下载

相关推荐

上一篇:企业级工作流引擎FlyFlow快速部署指南:SpringBoot+Flowable+Vue3全栈配置实战
下一篇:Revery文件类型关联:系统级应用集成技巧

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询