关于INAV地面站自定义OSD元素
一、介绍
INAV 最强大也最实用的功能之一就是 编程框架(Programming Framework),它允许用户自定义飞行逻辑来满足各种需求。从 INAV 7.0.0 开始,官方进一步开放了 自定义 OSD 元素(Custom OSD Elements),使用户可以将编程框架中的变量或逻辑状态可视化展示在 OSD 上。
在 Configurator 的 OSD 选项卡 中设置(INAV 8.0.0 中布局略有变动)。每个自定义元素支持:
- INAV 7.x 中:3 个可配置字段(slots)
- INAV 8.0.0 中:扩展为 8 个字段

每个可配置字段的类型如下:
类型 | 描述 |
---|---|
None | 不使用该字段 |
Text | 显示固定文本(0-15字符,支持 [A-Z0-9^!.*],注意每个元素只能使用一次 text) |
Icon Static | 从 OSD 字体图标表中选择一个字符(数字索引)显示图标 |
ICON from Global Variable | 根据 Global Variable(全局变量)的数值显示对应图标 |
ICON from Logic Condition (INAV 8.0.0 新增) | 根据逻辑条件显示对应图标 |
Global Variable # | 显示指定编号的全局变量,支持格式:0000000, 000.0, 00.00 等等 |
Logic Condition # (INAV 8.0.0 新增) | 显示逻辑条件的状态,格式同上 |
VISIBILITY | 设置该元素的显示时机,可选择 “Always” 或基于某个 Global Variable / Logic 条件 |
注意事项
- 当前仅支持自定义 OSD 字符集中的前 255 个字符。
- 如果配置中使用了 Text,那么同一个元素中只能使用一次,因内存限制。
- Text、图标、变量等可任意组合,以达到你想要的可视化效果。
二、数值显示逻辑详解
在 INAV 的 自定义 OSD 元素 中,你可能已经注意到支持多种格式的数值显示。这些格式不仅有不同位数的整数,还有带小数点的显示形式。下面是这套系统背后的原理:
INAV 的数值计算没有浮点(小数)
INAV 的 编程框架(Programming Framework) 所有数据均为 整数(whole numbers), 不支持浮点数(即小数点)。
所以 OSD 上看到的小数,其实是通过数学运算“假装”出来的。
举例说明:
我们想在 OSD 上显示“距返航点的距离”,单位为 千米(km),并保留 两位小数。
但 INAV 返回的是整数的“米”(m)值,例如: 7243
(即 7243 米)。
正常计算(显示小数):
7243 ÷ 1000 = 7.243 km
但是由于 INAV 不支持小数点,无法直接处理 ÷ 1000
,怎么办?
替代方式(整数模拟小数):
- 如果要 显示两位小数(即 0.00 形式),我们只需要除以 10,得到 724。
- 然后 OSD 显示模块 会在适当位置插入小数点:7.24
计算技巧总结
想要显示 | 实际除数 | 示例值 | 显示结果 |
---|---|---|---|
显示整数 (km) | ÷ 1000 | 7243 | 7 |
显示 1 位小数 | ÷ 100 | 7243 | 72.4 |
显示 2 位小数 | ÷ 10 | 7243 | 7.24 |
显示 3 位小数 | 原值 | 7243 | 0.724 |
注意:只是显示出来是小数,背后仍是整数计算。
三、相关示例
3.1 简易失速警告提示
该逻辑用于检测潜在的失速情况。判断条件如下:
- 俯仰角(Pitch)大于 20°,且
- 虚拟空速(Virtual Airspeed)低于 35 km/h,或者
- 油门小于 48%
当满足以上任意组合条件时,触发 失速预警(STALL WARNING),提示飞行员注意飞行姿态,避免进入失速。

OSD 显示信息
当满足失速条件时,OSD 将显示:
- 文本:STALL WARNING
- 警告图标:字符代码 221
这项警告仅在触发条件满足时显示,不会一直常驻在屏幕上。

注意事项(非常重要)
- 失速并非由速度本身直接引起,而是由“作用在机翼上的气流过低”造成的。 这取决于空速 + 姿态(主要是仰角)
- OSD 警告为辅助工具,无法 100% 准确识别所有失速情况。
- 切勿依赖自动提示进行飞行安全保障 当降低油门以节能飞行时,尤其要注意飞行状态,确保不会无意中进入仰角过高 + 空速过低的失速区域。
3.2 开关状态显示
INAV 虽然自带基本的开关显示功能,但通过 自定义 OSD 元素 + 编程框架(Programming Framework),你可以获得更灵活和个性化的视觉展示效果。
编程逻辑配置:

- LC0:将你要显示的通道(如 AUX1)减去 1000,使其变成 0~1000 的范围。 例如:CH5 - 1000
- LC1:将范围 0~1000 映射成 3 个整数值:0、1、2,分别对应开关下、中、上的位置。
- LC2:将开关位置值加到图标编号上(208 为下、209 为中、210 为上),形成具体的图标编号。
- LC3(可选,仅 INAV 7.1.x 使用):将 LC2 的值赋值到一个全局变量(例如 GVAR 0)中。 在 INAV 8.0.0 后,不再需要 LC3,OSD 可以直接读取 LC2 的输出。
OSD 页面设置
- 图标设置: 如果是 INAV 7.1.x: 选择 “Icon from Global Variable” 绑定变量编号为 GVAR 0 如果是 INAV 8.0.0 或更新版本: 选择 “Icon from Logic Condition” 绑定到 LC2(即图标逻辑输出)
- 文字设置: 添加一行文字来说明这个开关的功能,比如 “模式切换” 或 “空投开关”
- 图标和文字位置对调: 想要左右调换显示顺序,只需把图标项和文字项的位置互换即可。

注意事项
- INAV 8.0.0 支持 OSD 自定义元素预览功能,但图标预览不能读取 GV 实际值。
- 上例中,若 GV 0 的值为 209,OSD 就会显示中间位置的图标。
- 图标编码: 208:开关置底 209:开关居中 210:开关置顶
3.3 不同的测量单位显示海拔
在本例中,我们的 OSD 设置为公制单位。但我们有一些飞友只理解英尺单位,因此我们打算做点贴心的事,在 OSD 上同时显示米和英尺两个单位的高度。
我们先用标准的 Altitude OSD 元素显示以米为单位的高度。现在我们要添加一个第二个自定义元素,用英尺显示高度。

步骤一:逻辑计算(Programming 页面)
第一个逻辑条件 LC0,将高度(单位为厘米)乘以 100,这样可以在后续除法中提升精度。
第二个逻辑条件 LC1,将 LC0 的结果除以 3048,得到以英尺为单位的高度。注意,这种做法可以提高精度,但最大显示值限制为 7045 英尺,实际飞行不会达到这个高度,因此这是可以接受的限制。
步骤二:添加自定义 OSD 元素
回到 OSD 页面,启用 Custom Element 1。
- 在第一个配置空间中,选择逻辑条件 LC1(用于计算英尺高度)。 因为我们知道数值不会超过 7045,所以我们可以选择显示 4 位数字精度。
- 在第二个配置空间中选择 Static Icon,字符编号输入 120(表示“英尺”单位的图标)。 现在你应该能在预览中看到 4 位数高度 + 英尺单位的图标。


步骤三:可视性设置(仅低于 400 英尺时显示)
如果你只想在飞行高度低于 400 英尺时显示这个英尺单位的 OSD 项目,可以在 Programming 页面中添加第三个逻辑条件 LC2:
- LC2 表示“当高度小于 400 英尺时”为真。
回到 OSD 页面:
- 将该自定义元素的 可视性 设置为基于 LC2 的逻辑条件。 这样,在低于 400 英尺时,这个元素才会在 OSD 上显示。

————本文引用至INAV官网: https://github.com/iNavFlight/inav/wiki/Custom-OSD-Elements