无人机飞控之光流知识小结

要完成飞行器的定位,则必须要有位置的反馈数据。在户外,我们一般使用GPS作为位置传感器,然而,在室内,GPS无法使用,要完成定位功能,可以选用光流传感器。

本讲主要介绍如何通过下视摄像头估计飞行器的平移速度,即光流传感器。

光流传感器输出什么?

首先要知道光流传感器的输出是什么?光流传感器输出的是xy两个轴向的速度数据,注意,没有位置数据,而位置反馈可以通过速度积分获得,不可避免会产生漂移,但实际通过组合导航算法的处理,也可获得较为满意的使用效果。

光流算法的原理?

总体来看,光流算法分为两步:

  1. 通过下视摄像头获得图像数据,分析图像的不同时刻的帧数据,得到像素的移动速度;

  2. 将像素的移动速度转换成飞行器的移动速度;

那如何判定图像的运动?

选择对应的特征点,通过特征点的运动来判定图像的运动。

图中可以看出,摄像头在向右运动。

选择什么样的特征点?

简单来说就是能看出运动状态的。

例:

这个特征点选择,看不出运动

这个能看出左右,但看不出上下

这个就都可以能看出所有的运动。

完成特征点选择后,就该知道如何使用他们?首先如何根据前后两个像素点估计出运动?

图中由t时刻到t+1时刻,得到两个时刻的像素坐标后,如何知道运动?

这里引出光流算法的两个假设,即认为两个时刻的运动很小亮度恒定不变(上述等式才能成立)。

将上式右侧进行泰勒展开,忽略二阶无穷小项,则可以得到

该方程有两个未知数u,v。一个方程,两个未知数,所以无法得到确定的u和v。

此时需要引入另外的约束条件,从不同的角度引入约束条件,导致了不同光流场计算方法。这里介绍其中的一种,基于梯度的方法。利用时变图像灰度(或其滤波形式)的时空微分(即时空梯度函数)来计算像素的速度矢量。

LK光流法在光流法两个基本假设的基础上,增加了一个“空间一致”的假设,即所有的相邻像素有相似的行动。也即在目标像素周围m×m的区域内,每个像素均拥有相同的光流矢量。


图中A的部分能提供很多关于估计的信息。表示图像的梯度。

以上就是Lucas Kanade Optical Flow算法。

开源PX4的光流算法则是采用块匹配法进行光流定位,具体细节可参看其源码部分:

问题:

1、LK算法的约束条件即:小速度,亮度不变以及区域一致性都是较强的假设,并不很容易得到满足。如当物体运动速度较快时,假设不成立,那么后续的假设就会有较大的偏差,使得最终求出的光流值有较大的误差。对于其改进的相关理论,这里不做过多介绍;

对于亮度不变的假设,实际情况是光流场并不一定反映了目标的实际运动情况,光源与物体发生相对运动,就会有光流产生。因此可以说光流法对光线敏感, 光线变化极易影响识别效果

2、孔径问题,在进行光流计算时,我们是选取了一个小窗口进行判定的,这个窗口的选择大小也会对结果产生影响。

上图中可以看到目标是在向右移动,但是由于“观察窗口”过小我们无法观测到边缘也在下降。邻域大小的选取会影响到最终的效果;

得到像素速度u v后如何转换?

一般第二项可不考虑,则简单来说就是考虑焦距的变化,这样处理带来的问题是没有标准单位的速度输出,不过可以在后面进行标定的处理。

那得到光流输出的数据,飞控又如何使用?

具体的光流数据,如何应用到位置估计算法里,可以参考位置估计的算法原理,本文不再赘述。

这里就讲一下光流的数据在进融合算法前,常见的需要进行哪些预处理。

1、首先是与高度的关系,光流的数据一般在低空范围内有效,比如5m以内,超过一定高度,得到的数据精度就会比较差了,同时与高度有一个线性的关系,根据高度的大小,对光流得到的机体xy速度进行缩放;

一般来说,配合光流的高度数据主要来自超声波传感器,同样可以测得低空的高度,而且较气压计而言,精度较高,得到的相对高度比较准确(气压计有漂移,受风影响大,噪音也大)。

2、其次,需要进行姿态补偿

什么意思呢?假设一种情况,飞行器在原地晃动,比如左右摆动,此时光流会输出一个速度数据出来,而实际飞行器并未有位置上的变化,所以需要将这个误判的速度进行修正掉。

如何做?

由于这个误判的速度、距离信息与姿态角的变化有关,所以我们可以用角度的变化去提前标定这个补偿。

如上代码所示,先将光流的数据进行积分,得到位移。然后用角度乘以一个系数得到补偿量,这个是需要调试的部分,同时,因为角度的变化相对较快,所以我们需要进行大概的时间同步,然后减去补偿量,得到处理后的位移数据,再微分可得到速度数据,输入给位置估计算法。

如图所示,两个曲线分别是校正前的位移flow_ori_distance_x,位移补偿量flow_angle_fix_x,调至图中两者变化一致即可。

这里,对光流数据先积分再微分的处理,基于两个考虑:

  • 有一定的滤波效果;

  • 由于光流得到的速度并不是标准单位,而位移量是可以提前标定的,比如实际飞行器移动了1m,而测量值是1.2m,则可以进行校正处理,得到标准单位的数据;

3、最后还有一个yaw的旋转补偿。这个主要针对的是光流传感器并未放在飞行器中心位置,所以在原地yaw旋转运动时,xy会不对称的输出错误的数据,而这个数据是我们不需要的(实际飞行器并未运动)。

与Z轴的角速度有关,具体实现如下:

也是需要进行实现的参数调试,调至原地转圈时,得到的光流速度为0左右即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1527516.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AtCoder ABC 359 F 题解

本题要看出性质并进行验证,程序难度低。(官方 Editorial 似乎没有写证明过程?难道是过于显而易见了吗…) 题意 给你一个数组 a a a,对于一棵 n n n 个节点的树 T T T, d i d_i di​ 为每个节点的度&am…

Gitness 基础安装

文章目录 Docker 安装注册账户创建项目导入已有仓库配置 Github Token同步源代码仓库 官方链接 Gitness was the next step in the evolution of Drone, from continuous integration to source code hosting, bringing code management and pipelines closer together. Gitnes…

八、Maven总结

1.为什么要学习Maven? 2.Maven 也可以配华为云和腾讯云等。 3.IDEA整合Maven 4.IDEA基于Maven进行工程的构建 5.基于Maven进行依赖管理(重点) 6. Maven的依赖传递和依赖冲突 7. Maven工程继承和聚合 8.仓库及查找顺序

解决面板安装Node.js和npm后无法使用的问题

使用面板(BT)安装Node.js和npm后,可能会遇到如下问题:即使成功安装了Node.js和npm,服务器仍提示“未安装”,在命令行中使用 node -v 或 npm -v 也没有任何响应。这种问题通常是由于环境变量配置错误或路径问…

【Hot100】LeetCode—215. 数组中的第K个最大元素

目录 1- 思路快速选择 2- 实现⭐215. 数组中的第K个最大元素——题解思路 3- ACM实现 原题连接:215. 数组中的第K个最大元素 1- 思路 快速选择 第 k 大的元素的数组下标: int target nums.length - k 1- 根据 partition 分割的区间来判断当前处理方式…

使用Node-API进行线程安全开发

一、Node-API线程安全机制概述 Node-API线程安全开发主要用于异步多线程之间共享和调用场景中使用,以避免出现竞争条件或死锁。 1、适用场景 异步计算:如果需要进行耗时的计算或IO操作,可以创建一个线程安全函数,将计算或IO操作放…

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本,有图有真相: 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动:zram,我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑,完整梳理完这个逻辑将对Linux块设备驱…

旅拍景区收银系统+押金原路退回+服装租赁-SAAS本地化及未来之窗行业应用跨平台架构

一、景区旅拍一体化系统 序号系统说明1提成系统用于给照相馆介绍照相拉客的人自动计算提成2押金系统用于服装租赁(汉服租赁),设备租赁 ,支持押金原路退回3收银系统计算每天收银汇总,月度收银汇总,支出4提成…

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍…

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理

前言 在模型推理时,需要使用GPU加速,相关的CUDA和CUDNN安装好后,通过onnxruntime-gpu实现。 直接运行python程序是正常使用GPU的,如果使用PyInstaller将.py文件打包为.exe,发现只能使用CPU推理了。 本文分析这个问题…

流媒体与直播的基础理论(其一)

欢迎诸位来阅读在下的博文~ 在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力 文章目录 一、流媒体简介二、流媒体协议常见的流媒体协议 三、视频直播原理与流程通用的视频直播模型视频直播链路 一、流媒体简介…

隐私计算实训营:联邦学习在垂直场景的开发实践

纵向联邦学习 纵向联邦学习的参与方拥有相同样本空间、不同特征空间的数据,通过共有样本数据进行安全联合建模,在金融、广告等领域拥有广泛的应用场景。和横向联邦学习相比,纵向联邦学习的参与方之间需要协同完成数据求交集、模型联合训练和…

Openharmony 下载到rk3568实现横屏

前言: Openharmony 源码版本4.1 release 板子:rk3568 1.修改“abilities”中的“orientation”实现横竖屏 entyr->src->module.json5文件里面添加 "orientation": "landscape", 2.修改系统源码属性实现横竖屏切换 通过这…

以太网--TCP/IP协议(二)

上文中讲述了IP协议,本文主要来讲一下TCP协议。 TCP协议 (1)端到端通信 直接把源主机应用程序产生的数据传输到目的主机使用这 些数据的应用程序中,就是端到端通信。 (2)传输层端口 公认端口&#xff0…

ansible--role

简介 roles是ansible,playbooks的目录的组织结构,将代码或文件进行模块化,成为roles的文件目录组织结构。 易读,代码可冲哟美好,层次清晰 目录机构 mkdir roles/nginx/{files,handlers,tasks,templates,vars} -ptou…

Google Play结算防掉单方案

我们公司的产品主要是出海产品,使用的是Google Play支付,但是在上线以后,经常有客诉,说支付以后,权益没有到账,于是对整个Google支付体系做了研究了一下。 我们的整个支付流程图大概如下: 其中后端参考的文档地址为: https://developers.google.com/android-publishe…

GB35114 USC安防平台 中星微国密摄像机配置 流程

中星微国密摄像机配置介绍 如下以中星微VS-IPC8021S-Y-T4摄像机为例,需要先各自获取p10文件,并通过证书签发机构或者测试SM2证书签发获取证书。 网络配置如下: 摄像机的IP地址为192.168.1.108,国标ID为34020000001320000015 系统的IP地址…

C#/.NET/.NET Core推荐学习路线文档文章

前言 专门为C#/.NET/.NET Core推荐学习路线&文档&文章提供的一个Issues,各位小伙伴可以把自己觉得不错的学习路线、文档、文章相关地址分享出来🤞。 https://github.com/YSGStudyHards/DotNetGuide/issues/10 🏷️C#/.NET/.NET Cor…

【LVI-SAM】激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节

激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节 1. 特征提取实现过程总结1.0 特征提取过程小结1.1 类 FeatureExtraction 的整体结构与作用1.2 详细特征提取的过程1. 平滑度计算(calculateSmoothness())2. 标记遮挡点(markOcc…

nvm及nodejs安装相关

安装 1.清空文件夹,卸载nvm及nodejs 2.下载安装包 https://github.com/coreybutler/nvm-windows/releases (也下载有) 3.安装nvm 地址写D:/nvm和D:/nodejs 4.安装nodejs nvm ls available //查询版本 nvm install 16.20.2 //安装对应版…