无人机光流定点讲解

无人机光流定点

光流是测速算法,并不是直接定位的。简单理解,光流就是通过检测图像中光点和暗点的移动,来判断图像中像素点相对于飞行器的移动速度。如果地面是静止的,自然就可以得到飞行器相对于地面的移动速度啦。所谓光流定位,其实是利用光流测速再积分定位而已啦。
无人机做光流定点算法需要注意一下几点:
1、飞机在不同高度光流传感器所能测到的像素点是不一样的,无人机距离地面低的时候对距离的感知比距离地面高的时候要强,所以一般无人机光流定点都会跟一个测距传感器一起使用。
2、无人机发生倾斜的时候光流传感器也会有位移变化输出
3、光流传感器安装若不在无人机的中心位置则无人机发生倾斜时光流感知的位移是会有不一样的,这个也需要做一定的补偿。
下面我们根据程序代码进行光流数据的处理:

opFlow.pixSum[X] += pixelDx;
opFlow.pixSum[Y] += pixelDy;

光流相当于速度信息,对其积分得到位移信息。

float coeff = RESOLUTION * height;//采样无人机距离地面的高度
  float tanRoll = tanf(state->attitude.roll * DEG2RAD);
  float tanPitch = tanf(state->attitude.pitch * DEG2RAD);
  //记录无人机进行俯仰横滚的偏移量,后面用作偏移量补偿
  opFlow.pixComp[X] = 480.f * tanPitch; 
  opFlow.pixComp[Y] = 480.f * tanRoll;
  //俯仰横滚的偏移量补偿
  opFlow.pixValid[X] = (opFlow.pixSum[X] + opFlow.pixComp[X]); 
  opFlow.pixValid[Y] = (opFlow.pixSum[Y] + opFlow.pixComp[Y]);  
  
  if(height < 0.05f)
  {
   coeff = 0.0f;
  }
  opFlow.deltaPos[X] = coeff * (opFlow.pixValid[X] - opFlow.pixValidLast[X]); 
  opFlow.deltaPos[Y] = coeff * (opFlow.pixValid[Y] - opFlow.pixValidLast[Y]); 
  //不同高度转化其像素点使无人机真正的位移在不同高度近似相等
  opFlow.pixValidLast[X] = opFlow.pixValid[X]; 
  opFlow.pixValidLast[Y] = opFlow.pixValid[Y];
  opFlow.deltaVel[X] = opFlow.deltaPos[X] / dt;
  opFlow.deltaVel[Y] = opFlow.deltaPos[Y] / dt;
  //计算无人机的速度

以上是对光流数据进行的处理,得到的速度值,位移值就可以进行下一步的融合运算了,一般来说,不同质量的光流传感器实际上很难做到真正的像素点跟实际位移的一一对应的,多少会有误差
比如不同环境的误差:光流传感器在纹理清晰的地面进行识别跟光滑的地面进行识别是由很大的差距的,这个要跟实际情况去调整参数。
融合部分跟我前面的博客原理是一样的,可以参考一下https://blog.csdn.net/u014694105/article/details/98983930。另附一张自己的光流定点照片,定点效果还可以,没办法附上视频请见谅。在这里插入图片描述
生活照有点乱

  • 15
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值