简介
当目标物体在摄像机前运动或者摄像机在环境中移动时,目标图像是在发生变化的,图像灰度模式的表面运动就称为光流。简单理解,光流就是通过检测图像中光点和暗点的移动,来判断图像中像素点相对于飞行器的移动速度。
举个例子,当我们做火车时,可以看到窗外的树在不断地向后“流动”,通过树向后流动的速度,我们可以估计当前火车的速度。光流模块就是基于这个原理,检测两帧图像中“树”的相对位置,由于拍摄两帧图片的时间差是固定的,便可以计算出像素点的移动速度。若我们知道“树”和相机的距离,便可以计算当前的实际速度。
测距:对速度进行积分就可以得到位移。
定点:利用光流模块返回的位置信息或者速度信息,形成一个闭环控制,即可实现定点。
在光流理论中,前提是下面两个假设成立:
- 摄像头采集到的两帧图像之间的像素灰度不变;
- 相邻的两帧像素具有相对运动;
光流是测速算法,并不是直接定位的。简单理解,光流就是通过检测图像中光点和暗点的移动,来判断图像中像素点相对于飞行器的移动速度。如果地面是静止的,自然就可以得到飞行器相对于地面的移动速度啦。所谓光流定位,其实是利用光流测速再积分定位而已啦。
实物接线图
数据分析
通信方式为串口通信,数据特性:
- 8 位数据位、无校验位、1 位停止位、波特率 19200bps
- 通信频率:约 66fps 帧速率向主机发送数据
- 其他:如果连续两帧位移太小,会输出 0,然后再足够位移时再输出数据
数据说明:
- 包头为固定的两个字节:0xFE(包头)、0x04(字节数);
- DATA0、DATA1 是
flow_x
的低八位和高八位,即flow_x = (int16_t)(DATA1<<8)|(DATA0);
- DATA2、DATA3 是
flow_y
的低八位和高八位,即flow_y = (int16_t)(DATA3<<8)|(DATA2);
- 倒数第三个字节为校验字节,是 DATA0~DATA3 四个字节的累加值,即
SUM=DATA0+DATA1+DATA2+DATA3
; - 倒数第二个字节为地面环境质量,数值越大表示地面环境质量越高;
- 最后一个字节是包结束标识符:1)常规模式下固定是
0xAA
(Y 引脚高电平);2)偏航模式下固定是0xBB
(Y引脚低电平)。
机械特性
测试
下图为串口打印出来的直接读取数据
静止不动
0xFE | 0x04 | DATA0 | DATA1 | DATA2 | DATA3 | SUM | SQUAL | 0xAA/BB |
---|---|---|---|---|---|---|---|---|
254 | 4 | 0 | 0 | 0 | 0 | 0 | 111 | 170 |
移动
0xFE | 0x04 | DATA0 | DATA1 | DATA2 | DATA3 | SUM | SQUAL | 0xAA/BB |
---|---|---|---|---|---|---|---|---|
254 | 4 | 0 | 0 | 255 | 255 | 254 | 154 | 170 |