039、光流传感器原理与速度估计一、一次深夜炸机的教训去年做一款室内悬停无人机,光流模块用的PX4Flow,地面是浅灰色瓷砖带不规则纹理。飞起来一切正常,悬停精度±5cm,心里美滋滋。结果换到深色木地板上,飞机直接开始低频振荡,三秒后撞墙。拆下日志一看,光流输出的速度值在悬停状态下居然有0.3m/s的漂移,而且方向随机。当时第一反应是“光流坏了”,换模块、换排线、换主控,问题依旧。后来用示波器抓SPI总线,发现光流芯片的帧率从标称的400Hz掉到了120Hz,而且数据包里有大量CRC校验错误。这才意识到——光流传感器对光照强度和纹理对比度的敏感度远超我的想象。那次之后,我花了整整两周时间,把光流从“黑盒调用”变成了“逐行代码理解”。今天这篇笔记,就是当时踩坑的总结。二、光流到底在测什么很多人以为光流传感器是“小摄像头+测距”,其实核心原理很简单:检测图像中特征点的运动矢量。想象你坐在火车里看窗外,近处的树移动得快,远处的山移动得慢——这就是光流。但飞控用的光流传感器,通常只输出两个东西:像素位移(pixel displacement):单位时间内的像素移动量质量指标(quality):当前帧的特征点数量或匹配置信度注意,光流传感器本身不输出速度。速度是飞控根据像素位移、高度、焦距换算出来的。这个换算公式是:速度 = 像素位移 × 高度 / (焦距 ×