相机IMU融合四部曲(一):D-LG-EKF详细解读
相机IMU融合四部曲(一):D-LG-EKF详细解读
极品巧克力
前言
前两篇文章《Google Cardbord的九轴融合算法》,《Madgwick算法详细解读》,讨论的都是在SO3上的传感器融合,即,输出的只是纯旋转的姿态。只有旋转,而没有位移,也就是目前的一些普通的VR盒子的效果。
而《相机IMU融合四部曲》要讨论的是,在SE3上面的传感器融合,在既有旋转又有位移的情况下,该如何对多传感器进行融合。也就是,工程实践中的,如何把基于相机算出来的位姿,与IMU的位姿融合在一起。既有旋转又有位移,可以反映玩家在三维空间中的运动,也就是目前的高端VR的效果,比如HTC Vive,Oculus以及微软的Hololens, MR头盔。
本系列文章分为四篇,分别从理论和实践层面进行详细阐述。
理论部分主要介绍相机和IMU在SE3上的融合,基于误差状态的卡尔曼滤波,IMU的在线标定,松耦合方法,紧耦合方法等。实践部分,则是这些理论的具体实现,在VR中的实际融合效果,以及针对实验结果的改进方案,实践中总结的经验等。
以下为第一篇,我结合参考文献《Discrete extended Kalman filter on lie groups》,对SE3的融合理论进行详细推导,总结成本文,与各位分享。
本文目标读者:传感器融合算法工程师。
一.基础理论
首先,有SE3上的伴随性质,这与《视觉SLAM十四讲》里面的公式4.48一样。伴随性质与BCH近似的目的一样,都是要让相乘的李代数融成一个李代数。
还可以转换成其它的形式。
然后是BCH公式。
另外一个公式。
关于的计算,参考《机器人状态估计》。
不过,我觉得,上面这个公式,作者可能写错了,比如,当很大,而
时,代入上式,得到
,这样就得到了
,这样就可以进一步得出
,所以上面的公式是有错误的。
所以,作者想表达的应该是,BCH近似公式。应该写成如下形式,当和
都为小量时,
然后,假设在均值0附近的李代数满足高斯分布,均值处的李群为。
又因为,参考《on-manifold详细解读》,把
的中的表示旋转的
的范围限制住,可以得出
和
是一一对应的关系,
,所以,
而,如果是在位姿的附近进行同样的误差分布呢,则可以表示为
,用公式表示如下,
还可以推导出,,
但不能认为,是绕着
进行高斯分布的。因为李代数也都是相对的,根据BCH公式,
因为不一定是个微小值,所以不能用BCH近似。所以,通过上面公式可以看出,如果没有的话,则
服从的分布和
一样,会是高斯分布。但是,在
的情况下,
会随着
值的改变而改变。在不同位置对高斯曲线会有不同的改变,所以,
也就不会服从高斯分布,并且对应的协方差也会随之改变。参考《李代数及其协方差都是相对的》。
二.D-LG-EKF
2.1系统模型
是第
时刻的状态,
是外界输入,
是噪声,则对下一个状态的预测为,
其中,表示的是,这个输入所造成的位姿变换的李代数。要注意的是,
并不直接代表
上的噪声,虽然它的来源是
上的噪声,它需要根据
上的噪声,通过
的实际表达式,转换出来。
因为和
都是已知的,假设只在
的作用下,状态
变成了
。则,
而所表示的就是,
因为和
都是已知的,所以可以通过这个状态变换,计算得到
。参考《视觉SLAM十四讲》的图4-1,可以将
转换为
。所以,
也就可以得到了。
测量方程。
2.2传播
假设在时刻的状态的后验概率分布服从,
。即,
如果没有噪声的话,则对下一个状态均值的预测为,
而根据之前的公式,对预测的分布满足,
所以,设下一个状态的误差分布为,则它要满足,
可以得出,
参考《李代数扰动的理解》,当时,
,所以,上式可以转换为,
要注意的是,,因为这里的
其实表示的是一种分布,
,所以,
,所以,原式还可以转换成,
上式的右边都是已知的,所以就是代表了从到
的变换关系。首先,根据伴随性质,得到,
再根据BCH近似公式,上式可以转换为,
令 ,则直接使用BCH公式,上式可以转换为,
又因为和
都是小量,所以
可以忽略掉,上式可以转换为,
所以, 与
的关系又可以表示为,
对上面的变换关系,在处进行线性化,也就是进行一阶泰勒展开,
则,
因为,所以
,代入上式,得到,
所以,最终得到,
而另外一个,
所以,
然后,根据实际的运动方程,的表达式,算出
的解析式,再求出
。(或者,也可以用数值扰动的方法,求
。),然后得到
。
继续之前的变换关系进行一阶泰勒展开,
其中,是一个微小量,可以忽略掉。所以,就得到了
与
之间的线性转换关系。
用表示
,得到,
再计算扰动的均值,
然后,再计算的协方差
。协方差的计算,参考《机器人状态估计》的第二章。
所以,最后得到,
2.3更新
对预测出来的扰动和实际测量出来的扰动,进行融合。
对测量值的处理,可以直接是传感器的测量值,比如加速度计的测量值,然后再考虑这个测量值上的高斯噪声。将预测出来的测量值与实际的测量值进行融合,然后再反馈给状态。
对测量值的处理,也可以转换成李代数的形式。就像是madgwick算法一样,以之前的姿态为初值,优化姿态,使得通过姿态计算出来的测量值与实际测量值最接近。而在本文中,采用的就是这种方法。(如果测量值只是加速度计或磁场计的测量向量的话,就更简单了,因为madgwick要优化出四元数,而本文只要李代数就可以了。以之前的姿态为初值,优化姿态,使得通过姿态计算出来的加速度计向量与实际加速度计向量最接近,而这两个向量之间的相对位姿变化,只需要叉乘一下就可以了,不需要通过优化。如果测量值是其它的,比如图像上的特征点位置,那就只能通过优化的方法,优化出测量位姿,或者采用上一种测量值融合的方法。或者,也可以与视觉SLAM结合起来,直接以图像计算出来的姿态或位姿为测量值。)
设第k时刻位姿的真实值为。
首先,有个预测的位姿,它的协方差为
。则意味着概率,
。
基于这个预测的位姿,预测出来的传感器的测量值,然后有传感器的实际测量值
。用
作为位姿初值,优化(或叉乘)出新的位姿,使得预测测量值与实际测量值
最接近。用
,表示优化出来的位姿相对于预测位姿的位姿。所以,实际测量值位姿可以表示为,
其中,是传感器的测量值
的噪声,传递到
之后,再分离到右边去。
可以通过这个过程中的变换,从实际传感器的测量值协方差,转换过来。
所以,这就意味着,
所以,综合目前的信息,可以得到,,就是要求一个
,使得
最大。
其中,是个未知数,用
,转换成用未知数
来表示。然后,上式就可以转换为,
但这样子也解不出来。参考《李代数高斯分布的求导》,对上式中的部分,在处进行线性化,一阶泰勒展开。则可以转换为,
同理,
其中,的计算,用数值扰动的方法。当然,也可以用解析的方法,把公式都展开来推导。(或者,参考《MSF详细解读》里面的方法,为了算H矩阵,直接就认为
,这样子算H矩阵很方便,其余的与原来方法一样。如果是上式的话,则
)。
接下来,为了转换成卡尔曼滤波的形式,用来表示。
所以,原式就可以表示为,
这样子,参考《从贝叶斯到卡尔曼滤波》,就可以转换成卡尔曼滤波的形式了。
所以,得到了融合后的扰动,
同时,满足,
所以,预测出来的位姿,乘以这个融合后的扰动均值
,就得到了融合后的位姿
,
所以,新的位姿的李代数为,
则新位姿附近的李代数扰动要满足,
所以,新的扰动的均值
和协方差
,
协方差,
所以,
三.总结
总结起来,流程就是,
四.参考文献
- Bourmaud G, Megret R, Giremus A, et al. Discrete Extended Kalman Filter on Lie groups[C]// Signal Processing Conference. EURASIP, 2013:1-5.
相机IMU融合四部曲(一):D-LG-EKF详细解读的更多相关文章
- 相机IMU融合四部曲(三):MSF详细解读与使用
相机IMU融合四部曲(三):MSF详细解读与使用 极品巧克力 前言 通过前两篇文章,<D-LG-EKF详细解读>和<误差状态四元数详细解读>,已经把相机和IMU融合的理论全部都 ...
- 相机IMU融合四部曲(二):误差状态四元数详细解读
相机IMU融合四部曲(二):误差状态四元数详细解读 极品巧克力 前言 上一篇文章,<D-LG-EKF详细解读>中,讲了理论上的SE3上相机和IMU融合的思想.但是,还没有涉及到实际的操作, ...
- 相机-imu外参校准总结
1. 研究背景及相关工作 1)研究背景 单目视觉惯性slam是一种旨在跟踪移动平台的增量运动并使用来自单个车载摄像头和imu传感器的测量结果同时构建周围环境地图的技术.视觉相机和惯性测量单元(imu) ...
- 相机imu外参标定
1. 第一步初始化imu外参(可以从参数文档中读取,也可以计算出),VINS中处理如下: # Extrinsic parameter between IMU and Camera. estimate_ ...
- VINS(四)初始化与相机IMU外参标定
和单目纯视觉的初始化只需要获取R,t和feature的深度不同,VIO的初始化话通常需要标定出所有的关键参数,包括速度,重力方向,feature深度,以及相机IMU外参$R_{c}^{b}$和$p_{ ...
- 视觉和imu融合的算法研究
融合方式概述 同SLAM发展过程类似,视觉融合IMU问题也可以分成基于滤波和基于优化两大类. 同时按照是否把图像特征信息加入状态向量来进行分类,可以分为松耦合和紧耦合两大类. 一.基于滤波的融合算法 ...
- 【项目实战】自备相机+IMU跑通Vins-Mono记录
前言 初次接触SLAM,公司要求用自己的设备来跑通vinsmono这个程序,虽然已经跑通了别人的数据包,但是真正自己上手来运行这个程序,发现真的是困难重重,特意在此记载下来整个过程,以供大家参考. 我 ...
- 解放双手——相机与IMU外参的在线标定
本文作者 沈玥伶,公众号:计算机视觉life,编辑部成员 一.相机与IMU的融合 在SLAM的众多传感器解决方案中,相机与IMU的融合被认为具有很大的潜力实现低成本且高精度的定位与建图.这是因为这两个 ...
- 相机标定:kalibr标定工具箱使用总结
1 多相机标定 1.1采集图像和IMU 1.2制作Bag包 1)组织文件结构 ~/kalibr_workspace/test/stereo_calib bagsrc cam0 (1+time(0))* ...
随机推荐
- Erlang generic standard behaviours -- gen_server hibernate
hibernate 主要用于在内存空闲时,通过整理进程的stack,回收进程的heap 来达到回收内存节省资源的效果. hibernate 可用于OTP 进程以及普通进程, hibernate 的官方 ...
- JVM内存管理之垃圾搜集器简介
引言 上一章我们已经探讨过GC的各个算法,那么垃圾搜集器是什么呢? 通俗的讲,使用编程语言将算法实现出来,产生的程序就是垃圾搜集器了.既然谈到了编程语言的实现,那么在讨论垃圾搜集器的时候,就已经涉及到 ...
- 学习 FPGA之前的基础知识
在学习一门技术之前往往应该从它的编程语言入手,比如学习单片机时,往往从汇编或者C语言入门.所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的.但小编认为,若能先结合& ...
- [转][c#]注册表经验集
在 win7 64位的系统中,为了将程序做成绿化版(单EXE文件),一些设置准备放到 regedit(注册表)中. 测试时发现网上的 demo 可以读,但写的值调试不报错,相应位置却不存在,困扰了许久 ...
- 1106 Lowest Price in Supply Chain
题意:略 思路:寻找树的叶结点中深度最低的,记录最低深度minDepth和具有相同最低深度的结点个数cnt. 代码: #include <cstdio> #include <cmat ...
- thinkphp 3.2.3 计划任务具体实现实例教程
thinkphp 3.2.3 计划任务具体实现实例教程 很多情况下,我们网站都会用到计划任务即定时更新做一些处理,类似Discuz后台的计划任务,比如更新每日发帖数目等等! 这里TP也是可以实现的,首 ...
- Linux系统命令与脚本开发
系统命令 # cat EFO cat >> file << EOF neirong EOF # 清空 >file 清空文件 [root@Poppy conf]# sed ...
- svm算法 最通俗易懂讲解
最近在学习svm算法,借此文章记录自己的学习过程,在学习很多处借鉴了z老师的讲义和李航的统计,若有不足的地方,请海涵:svm算法通俗的理解在二维上,就是找一分割线把两类分开,问题是如下图三条颜色都可以 ...
- Oracle IO问题解析(转)
http://www.hellodba.com/reader.php?ID=76〈=cn 数据库的作用就是实现对数据的管理和查询.任何一个数据库系统,必然存在对数据的大量读或者写或者两中操作都大量存在 ...
- oracle同义词详解
在Oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们, 我们也是能对数据库进行操作的,但是我们必须要已授权的表的名称 ...