光流模块这东西,看着是个巴掌大的小板子,接上四根线就能用,但真正在项目里翻过车的人都知道,它能把一个飞得好好的四轴搞成"漂移怪"。我前后在三类机架上用过七八种光流方案,从最早的 PX4Flow 到现在的 PMW3901 系、再到集成测距的融合模组,室内的定点悬停、无卫星环境下的航线巡检、以及基于视觉感知的自主降落,每一种场景对光流的要求都不一样。标题叫"无人机光流模块的选择",但真正的难点从来不是"买哪个",而是先搞清楚你的无人机需不需要光流、需要到什么精度、以及选完之后怎么把它和飞控、测距、IMU 这几路数据拧成一股绳。这篇就按我自己的项目顺序,从需求判断、原理拆解、模块横向对比、接线安装、固件配置一直到故障排查,把踩过的坑和能直接抄的参数都摊开讲,新手可以照着选型,老手也能在里面找到几个容易被忽略的细节。
1. 选型之前先明确:你的无人机到底需不需要光流
很多人一上来就问"哪个光流模块最好",这个问题本身就是错的。光流不是万能的增强插件,它是一个有明确适用边界的传感器,用错了地方不但没用,还会污染状态估计,让飞控的卡尔曼滤波器输出更差的结果。所以在打开购物页面之前,先花十分钟把下面几个问题想清楚。
1.1 光流解决的是"没有卫星信号时的水平速度估计"
卫星定位模块给的是绝对位置,而光流给的是水平方向的运动速度,注意,是速度,不是位置。它的本质是:用一个朝下的摄像头或者光学传感器,看地面纹理在视野里的移动速度,再结合对地高度,反推出机体的水平速度。所以它天然依赖一个前提——地面得有纹理、得有光、而且飞控得知道当前离地多高。
这就意味着三件事。第一,光流无法单独工作,它必须搭配一个测距模块(超声波、激光、ToF 都行)才能把角速度换算成线速度。第二,光流给出的是相对速度,长时间积分会累积漂移,必须和 IMU、气压计、磁罗盘一起做多传感器融合,最终由 EKF(扩展卡尔曼滤波)或者 EKF3 这类状态估计器统一输出。第三,光流在纹理缺失、光照不足、地面是非刚性表面(水面、草地被风吹动的草尖)时会直接失效,而且失效往往是突然的,不是渐变的。
我见过最典型的翻车案例,是有人拿光流模块装在一台 250 级穿越机上,想着在室内做定点,结果地面是纯色环氧地坪,光流数据全是零,飞机一起飞就往前冲,他还以为是 PID 没调好,折腾了两天。所以第一句话:先确认你的飞行场地有没有可用纹理,再谈选型。
1.2 三类典型使用场景与需求差异
我把实际项目里遇到的光流需求大致分成三类,它们对模块的要求差别非常大。
第一类是室内小型无人机的定点悬停与低速航线,比如教室演示、室内编队、仓库盘点机。这类场景高度通常在 0.3 到 2 米,速度不超过 2 米每秒,对模块的极限性能要求不高,但对体积、重量、功耗极其敏感,尤其是 250 克以下的机架,多 5 克都影响悬停时间。这类场景首选的往往是 PMW3901 方案,因为它足够小、足够便宜。
第二类是无卫星环境下的工业级巡检或测绘,比如隧道、桥梁箱梁内部、大型厂房、地下管廊。这类场景飞行高度可能到 3 到 10 米,速度可能到 5 米每秒以上,对光流的动态范围、抗干扰能力、以及和飞控的深度融合要求都高得多。这时候 PMW3901 的角速度量程就可能不够了,需要考虑图像型的方案或者更高量程的传感器。
第三类是光流作为冗余备份,主定位还是卫星加 RTK,光流只在卫星信号劣化或者被遮挡的短暂窗口里顶上。这类应用对光流本身的绝对精度要求不高,但要求它不能在高空误导飞控,所以需要设置合理的融合高度上限,比如只在 3 米以下才允许光流参与融合。
场景理清楚了,选型的范围一下子就能收窄一半。
1.3 光流不能替代什么
有必要泼一盆冷水。光流不能给你绝对位置,不能在纯黑环境工作(除非是主动红外方案的特定型号且地面反射率合适),不能在水面、雪地、镜面地砖这些非漫反射或低纹理表面上工作,也不能在高速旋转的机架上稳定输出(转向角速度过大会让光流估计失真)。
另外要澄清一个常见误解:光流不等于"视觉定位"。真正的视觉定位系统(比如基于 ORB 特征点的 SLAM、正射拼接用的特征匹配)是另一套技术路线,它需要更完整的图像处理链路和更强的算力,通常跑在机载计算机上而不是飞控上。热词里出现的"ORB 算法的无人机正射拼接代码""无人机视觉感知"属于视觉测绘和感知范畴,和飞控用的光流模块不是一回事,选型时别被这些词带偏。飞控光流模块追求的是低延迟、高可靠性、低算力占用,而不是图像质量。
2. 光流定位原理拆解:参数背后的物理意义
选型看参数表,但如果不知道每个参数是怎么来的、在什么条件下会失效,那张表就是废纸。这一节把光流从像素到速度的完整链路拆开讲,讲完之后你再回头看那些 datasheet,会清楚很多。
2.1 从像素位移反推速度的完整链路
光流传感器的输出通常是一个角速度向量,单位是 rad/s,分 X、Y 两个轴向。它是怎么算出来的?以 PMW3901 这类硬件光流芯片为例,内部有一个低分辨率成像阵列(大约 30×30 像素),连续两帧图像做相关性匹配,得到整幅图像在 X、Y 方向上的平均像素位移量。再用这个像素位移除以帧间隔时间,得到像素变化率,最后通过标定好的像素-角度对应关系换算成角速度。
换算的关键桥梁是视场角和分辨率。以 PMW3901 为例,标称视场角约 42 度,成像阵列 30×30。粗略估算,单个像素对应的角度大约是 42 除以 30,也就是 1.4 度。这个数字很关键,它决定了传感器对微小运动的敏感程度。1.4 度在 1 米高度对应多大的地面位移?用三角形关系算:位移等于 2 乘以高度乘以 tan(半角),也就是 2×1×tan(0.7°)≈24 毫米。也就是说,飞机在 1 米高度横向移动 24 毫米,光流大约输出一个像素的位移。
再看量程上限。PMW3901 的最大可测角速度约 7.4 rad/s。在 1 米高度,这对应线速度 7.4 米每秒。听起来很充裕,但实际工程里我们通常只敢用到量程的 50% 到 70%,因为接近饱和时输出会非线性,甚至会翻转符号。所以 1 米高度的可靠速度上限大概在 3.7 到 5 米每秒。如果你需要飞 6 米每秒,那飞行高度就不能超过 1 米左右,否则光流会饱和。
注意:把"最大角速度 × 飞行高度 = 最大可测线速度"这个关系记牢,它是判断某个模块能否满足你项目的第一道门槛,比任何营销参数都实在。
2.2 尺度因子与测距模块的绑定关系
光流输出角速度,飞控要的是线速度,中间必须乘一个高度。这个高度从哪来?从测距模块来。所以测距模块的精度直接决定了光流的速度精度。如果你的测距模块在 2 米高度有 ±10 厘米的误差,那光流速度就会有约 5% 的系统性偏差。这个偏差在定点悬停时表现为缓慢漂移,在航线上表现为位置累积误差。
更麻烦的是高度源的切换。室内低空用测距,超量程后要切到气压计,而气压计和测距之间往往有几十厘米到一米的偏差。如果切换阈值设置不当,飞控在切换瞬间会认为高度突变,导致光流速度出现一个跳变,飞机就会抖一下。我的做法是:光流的融合高度上限设置得比测距可靠量程更保守一点,比如测距能到 6 米,但光流融合上限只设到 4 米,让高度源在光流退出融合之后再做切换,避免两个变量同时跳。
还有一个细节:测距模块的安装位置和光流的安装位置如果不在同一点,飞机有俯仰或横滚角时,两者测的不是同一个地面点。小角度影响不大,大角度或者测距离重心很远时,误差会明显放大。理想情况是把测距和光流尽量装在重心附近,或者至少在固件里把安装偏移量填准确。
2.3 特征点法、稠密光流与硬件光流的路线分野
从实现路线看,光流模块分成三大类,理解这个分类比记住具体型号更有用。
第一类是硬件光流芯片,代表是 PMW3901、PMW3360 这类鼠标芯片改造的方案。芯片内部集成了成像、匹配、输出全流程,主控只要通过 SPI 读数就行。优点是体积小、功耗低、延迟低、价格便宜;缺点是分辨率低、动态范围有限、算法是黑盒,没法调。
第二类是图像型光流模块,代表是 PX4Flow 这种。它带一个真实的图像传感器(比如 MT9V034 全局快门),在模块内的 MCU 上跑光流算法,输出角速度和图像质量指标。优点是分辨率高、可玩性好、能看到原始图像做调试;缺点是算力有限所以帧率偏低(典型 30Hz 左右),功耗和体积都更大,价格也更高。
第三类是融合型模组,代表是集成 ToF 或激光测距的一体化模块,像基于 PMW3901 加 VL53L1X/ToF 的组合,甚至直接输出 DroneCAN 或串口协议的对地速度。它的优势是出厂就帮你把光流和测距的空间关系、时序关系对齐好了,接线简单,参数少。缺点是一旦其中一个环节出问题,整个模组都得换,而且价格偏贵。
从算法层面,硬件光流芯片大多用的是块匹配或简化的相关算法,图像型模块常用 LK(Lucas-Kanade)稀疏光流。至于 ORB 特征点,它更适合做大范围视觉定位和正射拼接,用在飞控光流里属于杀鸡用牛刀,帧率和延迟都不划算。
3. 主流光流模块横向对比与选型决策
前面的原理铺垫完了,现在进入正题。我把手上用过和测过的模块整理成一张表,参数都是实测或官方标称的公开数据,差异点我会单独标注。
3.1 按技术路线分类的主流模块
目前能方便买到的飞控光流方案,主流的有这么几档。
入门档是PMW3901 裸芯片板,比如常见的 3901 小方板,通常是 SPI 接口,需要飞控有对应驱动。它的价格非常低,体积接近指甲盖,但没有任何辅助电路,接线和参数都要自己搞,适合有折腾意愿的玩家。
进阶梯队是PMW3901 加测距的官方式组合板,比如 Arduino 生态常见的 3901 加 VL53L0X 组合、以及国内常见的集成串口模组。这类板子把光流和测距做在一起,直接输出串口协议,接线省事,代价是测距量程通常只有 1 到 2 米(VL53L0X 约 2 米,VL53L1X 约 4 米)。
再往上是DroneCAN 光流模组,走 CAN 总线,抗干扰好、布线简单、支持多设备挂载,代价是需要飞控有 CAN 口并且正确配置,另外固件升级和 ID 管理会多一点学习成本。
最后是图像型光流,PX4Flow 是代表,现在还有基于它的若干变种。它在弱纹理和远距离上表现更好一些,但价格和体积都不占优,且需要外部超声波或激光测距配合。
3.2 关键参数实测与对比表
下面这张表是我整理的横向对比,重点关注量程、最小高度、接口和融合难度。表中的距离和速度是典型值,实际表现受光照和地面纹理影响,波动可能达到 20% 以上。
| 方案类型 | 典型视场角 | 分辨率 | 最大角速度 | 可靠高度范围 | 接口 | 是否内置测距 | 融合难度 | 适配场景 |
|---|---|---|---|---|---|---|---|---|
| PMW3901 裸板 | 约 42 度 | 30×30 | 约 7.4 rad/s | 0.08 到 1 米较稳 | SPI | 否 | 中 | 室内微型机定点 |
| 3901 + VL53L0X 组合 | 约 42 度 | 30×30 | 约 7.4 rad/s | 0.1 到 1.5 米 | 串口/I2C | 是(约 2 米) | 低 | 室内小四轴、演示机 |
| 3901 + VL53L1X 组合 | 约 42 度 | 30×30 | 约 7.4 rad/s | 0.1 到 3 米 | 串口/I2C/CAN | 是(约 4 米) | 低 | 室内外低空巡检 |
| DroneCAN 光流模组 | 约 42 度 | 30×30 | 约 7.4 rad/s | 0.1 到 3 米 | CAN | 通常内置 | 中 | 多传感器整机 |
| 图像型光流 | 可调 | 752×480 | 依算法而定 | 0.3 到 5 米 | I2C/串口 | 否(需外接) | 高 | 弱纹理、远距离 |
表格里最容易被忽视的一列是"可靠高度范围"。很多模块标称能到几米,但实际在 2 米以上的速度估计噪声会明显变大,因为同样的地面位移在更高处对应的像素位移更小,信噪比下降。所以"能用"和"好用"是两回事,我在项目里一般把融合高度上限设在标称量程的 60% 左右。
3.3 选型决策:不同场景怎么选
把场景和参数对上,决策其实很快。
如果你做的是室内 250 克以下的微型机,优先选 PMW3901 加 ToF 的组合板,重量控制在 3 克以内,串口输出,飞控参数少,调试快。不要在这个量级上去碰图像型方案,重量和功耗扛不住。
如果你做的是室内外兼顾的 450 级到 1 公斤级机型,建议选带 VL53L1X 或等效 4 米量程测距的集成模组,光流融合高度上限设到 3 米左右,室内外切换时用飞控的高度源优先级把过渡做平滑。
如果你做的是工业巡检类,速度可能超过 4 米每秒,那就要认真核算量程。按前面 70% 可用量程的保守原则,PMW3901 在 7.4 rad/s 下,1 米高度对应约 5.2 米每秒,2 米高度对应约 10.4 米每秒。所以只要飞得够高,量程是够的;真正的瓶颈反而是高处的信噪比和测距量程。这时候优先解决测距,而不是换更贵的光流。
如果你需要多路传感器冗余或者整机走 CAN 总线,直接上 DroneCAN 模组,布线干净,多设备管理也规范,长远看省心。
4. 安装、接口与硬件实操
光流模块装了不对,参数怎么调都白搭。这一节讲接线、安装位置和干扰处理,都是我在实际装配里反复验证过的。
4.1 接口与电气连接
光流模块常见三种接口:SPI、I2C、串口(UART),部分走 CAN。
SPI 的优点是速率高、延迟低,PMW3901 裸板基本都是 SPI,但飞控上 SPI 接口数量有限,而且很多飞控的 SPI 口是给 IMU 用的,外接 SPI 需要专门的引脚映射。我遇到过 SPI 时钟线走线太长导致读数不稳定的情况,解决办法是把模块尽量靠近飞控,线长控制在 10 厘米以内。
I2C 的问题是总线容易冲突。同一个 I2C 总线上挂光流、测距、磁罗盘时,任何一路拉低总线都可能让另外两路一起丢数据。我的经验是,光流尽量单独占一路 I2C 或者干脆用串口,别和磁罗盘挤在一起。如果非要用 I2C,务必确认上拉电阻阻值和总线速率,长距离时降低速率到 100kHz 反而更稳。
串口是最省事的,接线简单,抗干扰比 I2C 好,缺点是每个模块占一个串口,飞控串口不够的时候就得做取舍。走 CAN 的话,一根两芯线挂多设备,抗干扰最好,但需要配置终端电阻和节点 ID。
电源方面,绝大多数光流模组是 5V 供电,内部自稳压到 3.3V。要注意的是不要把光流和电机电调共用一条细线供电,电机启停瞬间的电流冲击很容易让光流复位。我给光流单独走一路从飞控分电板引出的 5V,线径不用粗,但要走短线。
4.2 安装位置与视场角计算
安装位置有三个硬性要求:朝下、尽量靠近重心、视野不被机架或起落架挡住。
朝下是必须的,但"朝下"和"垂直于机身"不完全等价。如果你的飞机在悬停时有一段固定的前倾角,那光流理论上也会跟着倾斜,导致 X 和 Y 轴之间出现耦合。严格做法是把安装角度填进固件参数,做倾斜补偿。不过对于轻微倾斜(5 度以内),飞控的融合算法基本能吸收,不必过分纠结。
视场角计算是很多人忽略的。以 42 度视场角为例,在 1 米高度,光流在地面上覆盖的圆形区域直径约为 2×1×tan(21°)≈0.77 米。在 0.3 米高度,直径只有约 0.23 米。这意味着低空时光流看到的是一小块地面,如果这一小块恰好是纯色区域,直接失效。所以在低空定点场景里,地面的纹理均匀性比在高空更关键。
注意:起落架的遮挡问题很隐蔽。有些机架的脚架正好在光流视场边缘,飞机稍微倾斜时脚架进入视野,光流会误判为一个巨大的位移,导致飞机突然向反方向冲。装完一定要在不同倾斜角下目视确认视野干净。
4.3 减震、遮挡与干扰处理
光流对高频振动非常敏感。振动会让相邻两帧图像之间产生额外的伪位移,光流输出噪声直接飙升。我的做法是在光流模块和机架之间垫一层薄泡棉(1 到 2 毫米厚),既不增加多少重量,又能把高频振动滤掉一部分。注意不要用太软的胶,否则模块在加速度下会晃动,反而更糟。
电磁干扰主要集中在两个位置:靠近电调电源线和靠近图传天线。光流模块尽量远离这两处,尤其别把模块贴在电调正上方。我实测过,模块离电调电源线 3 厘米以内时,数据丢包率明显上升,挪到 8 厘米以上就正常了。
还有一个容易忽略的点是散热。图像型光流模块和一些集成模组在连续工作十几分钟后会发热,个别型号热到一定程度输出会漂。给模块留一点通风空间,别用热缩管全包死。
5. 飞控固件配置与校准实操
硬件装好之后,配置才是真正见功夫的地方。下面分别说 PX4 和 ArduPilot 两条路线,参数我给的是常用值,具体编号以你所用固件版本的参数文档为准。
5.1 PX4 侧参数配置
PX4 里光流的融合由 EKF2 控制,核心参数分三组:传感器驱动、光流质量门限、高度源。
驱动部分,如果是 PMW3901,先确认固件里启用了对应驱动,位置一般在传感器使能参数里。串口或 I2C 地址要与实际接线一致。
# 在 QGC 的 MAVLink 控制台或通过 px4 参数工具设置 # 光流融合总开关 param set EKF2_OF_CTRL 1 # 光流最小质量门限,低于该值不融合,默认 1,实测可调到 0.5 放宽 param set EKF2_OF_QMIN 1 # 光流观测延迟,按模块实际处理延迟填,PMW3901 系常填 5 到 20 毫秒 param set EKF2_OF_DELAY 10 # 光流速度观测门限,单位约 rad/s,过大说明数据异常 param set EKF2_OF_GATE 0.5 # 光流可用高度下限与上限 param set SENS_FLOW_MINHGT 0.1 param set SENS_FLOW_MAXHGT 3.0 # 传感器最大角速度,PMW3901 填 7.4 param set SENS_FLOW_MAXR 7.4 # 高度源切到测距,保证光流有准确尺度 param set EKF2_HGT_MODE 2这几行里最关键的是SENS_FLOW_MAXHGT和EKF2_HGT_MODE。前者决定光流在哪个高度退出融合,后者决定高度源。如果高度源还用气压计,光流速度会有明显的系统性偏差,因为气压计在低空的绝对精度远不如测距。
另外要确认SENS_FLOW_ROT的朝向设置。如果你的模块安装时旋转了 90 度或 180 度,这个参数必须填对,否则光流输出的 X、Y 会和机体坐标错位,飞机一定点就画圈。
5.2 ArduPilot 侧参数配置
ArduPilot 的光流配置更细,参数也更多,但逻辑清晰:先告诉飞控光流是什么类型、装在哪,再告诉 EKF3 用光流作为速度源。
# 光流类型,按你的模块选对应编号,具体编号见当前固件参数表 param set FLOW_TYPE 5 # 光流的机体安装偏移(相对重心,米) param set FLOW_POS_X 0.0 param set FLOW_POS_Y 0.0 param set FLOW_POS_Z 0.05 # 安装朝向,模块正前方与机头夹角,单位度 param set FLOW_ORIENT_YAW 0 # 光流比例校准,单位是千分之一,用于修正速度尺度误差 param set FLOW_FXSCALER 0 param set FLOW_FYSCALER 0 # 测距模块类型,按你的型号填 param set RNGFND1_TYPE 25 param set RNGFND1_MIN_CM 10 param set RNGFND1_MAX_CM 300 # EKF3 速度源使用光流 param set EK3_SRC1_VELXY 5 # 高度源使用测距 param set EK3_SRC1_POSZ 2FLOW_FXSCALER和FLOW_FYSCALER是重头戏。出厂默认是 0,意味着不修正。但实际模块的尺度因子往往有百分之几到十几的偏差,表现出来就是"飞机悬停时缓慢向一个方向漂"。修正方法我在下一节讲。
5.3 校准与地面验证流程
我的验证流程分四步,缺一不可。
第一步是静态数据检查。飞机放平不动,在地面站看光流输出的 X、Y 角速度,正常应该在零附近小幅波动,噪声幅度不超过 0.02 rad/s。如果一直在跳或者偏大,先查振动和干扰,别急着调参数。
第二步是手推测试。保持飞机水平,沿机体前方匀速推着走,观察地面站里光流输出的 X 轴速度和实际推动速度是否方向一致、量级接近。这一步能发现朝向装反和尺度严重偏差的问题。推的时候尽量匀速,速度控制在 0.5 米每秒以内。
第三步是比例校准。手推测试如果发现输出速度比实际偏大 15%,就把FLOW_FXSCALER设成对应负值去修正,每次改 50 到 100(即 5% 到 10%),推几次迭代收敛。这一步急不得,改太猛容易过冲。
第四步是低空定点试飞。在 0.5 到 1 米高度做定点,观察漂移方向和速度。如果飞机持续向一个方向缓慢漂,说明还有残余尺度偏差或者测距有固定偏置,先查测距再调光流。
6. 常见问题排查速查
光流的问题表现五花八门,但根因其实就那么几类。这张速查表是我自己整理的,按现象找原因。
6.1 数据链路类问题
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 地面站完全看不到光流数据 | 接口类型或端口配错、驱动未启用 | 确认参数类型与实际接线一致,查串口占用 |
| 数据间歇性中断 | 供电不稳、I2C 冲突、线缆接触不良 | 单独供电、换串口、重新压接端子 |
| 数据一直为零 | 地面无纹理或光照不足、镜头被遮 | 换到有纹理地面、增加照明、检查镜头 |
| 数据方向明显错误 | 安装朝向参数填错、模块旋转未补偿 | 用 FLOW_ORIENT_YAW 或对应参数修正 |
数据链路类问题里,最坑的是"看起来有数据但全是噪声"。这种情况往往是供电纹波或者振动引起的,别去调算法,先把机械和供电搞定。
6.2 定位漂移与跳变类问题
漂移分两种,一种叫缓慢持续漂移,一种叫突然跳变。
缓慢持续漂移基本是尺度因子或者测距偏置造成的。判断方法:换个飞行高度,如果漂移速度随高度线性变化,那就是尺度因子问题;如果漂移速度不随高度变化,那更可能是测距有固定偏置或者 IMU 零偏。
突然跳变通常是几个原因:光流视场里出现了飞过的物体(比如你的手、地面的强反光)、测距量程切换、或者光流在接近饱和时输出翻转。排查时重点看跳变发生的时刻有没有对应的高度变化或者姿态突变。
还有一种会被误判的情况是磁罗盘干扰导致的航向漂移,它会让光流的机体坐标变换出错,表现出来像光流漂移。这种情况查光流是查不出来的,要看罗盘数据。
6.3 场景失效边界
我在下面这些场景里明确遇到过光流失效,列出来给大家做参考:
- 纯色环氧地坪、白色瓷砖、无花纹的塑料地板
- 静止水面和反光极强的地面
- 大面积积雪(纹理过于均匀)
- 光照低于约 50 勒克斯的暗环境(硬件光流对光照有一定要求)
- 高度超过模块可靠量程后,噪声急剧放大
- 高速横滚或俯仰机动时,地面像移过大导致饱和
- 地面被强风扬尘遮挡
这些边界不是"调参能救"的,只能靠改变场景或者增加额外的定位手段。工程上正确的做法是让飞控在光流质量下降时自动降低融合权重,而不是硬撑。
提示:很多飞控都支持光流质量指标的阈值判断,把质量门限设合理,让光流在不可靠时主动退出,比让它在边缘勉强工作要安全得多。
7. 我踩过的坑与调参心得
前面讲的都是方法和参数,这一节说几个反直觉的经验,都是真金白银换来的。
7.1 几个反直觉的经验
第一个,光流不一定要装得越低越好。低空时地面纹理在视野里的相对尺寸确实更大,理论上更利于匹配,但低空也意味着测距噪声、地面杂物的干扰、以及起落架遮挡的风险都更大。我最后稳定用的是 0.6 到 1.5 米这个区间,比贴着地面飞效果更好。
第二个,调光流之前先调测距。太多人一上来就改光流参数,结果测距的固定偏置一直是错的,光流怎么调都漂。测距正确了,光流往往不用怎么调就稳了。
第三个,比例校准的迭代方向要想清楚。如果光流输出的速度比实际大,说明尺度因子偏大,要往小修正。有人调反了方向,越调越差,还以为是模块坏了。每次改完记得重新推一次,别凭感觉。
7.2 参数调优的顺序
我把调优顺序固定下来,避免来回折腾:
- 机械安装与减震,确认视野干净
- 供电与接口稳定,确认数据不丢包
- 测距模块校准,确认高度准确
- 光流静态噪声检查,确认噪声在合理范围
- 朝向与偏移参数,用手推测试确认方向正确
- 比例因子校准,迭代到速度误差小于 5%
- 融合高度上限与质量门限设置
- 低空定点试飞,观察漂移
- 逐步提高飞行速度和高度,观察失效边界
这个顺序不能颠倒。我见过有人跳过前三步直接调融合门限,结果把噪声大的数据强行融合进去,飞机比不开光流还飘。
说到底,光流模块的选择从来不是选一块最好的板子,而是选一个和你场景、机架、飞控、算法链路都匹配的组合。便宜的 PMW3901 系列在它该用的场景里表现非常好,贵一倍的融合模组如果你不会配也是白花钱。我个人在室内小型项目里最常用的还是集成测距的 PMW3901 串口模组,接线快、参数少、翻车概率低;到了需要长距离和高速的工业场景,我会先算量程和信噪比,再决定是加高测距还是换图像型方案。真正决定成败的,是安装位置、减震、测距精度和参数校准这四件看起来最不起眼的事。