一起做激光反光板(六)-基于滑窗的EKF-SLAM及外参自动标定公式推导
在第四篇中已经提到,如果场景中反光板不够多,容易造成EKF系统效果不好的问题,且我们还想用上其他的点云信息,保证在反光板不够的情况下仍能够正确的收敛。
我们考虑扩充观测信息:
(1)角点和线段特征,加法和反光板加法类似,因此,不再详细展开,其中线段特征的提取,我们打算采用黄国权老师实验室github上的工程;
(2)激光前后帧的ICP:我们打算使用黄国权老师实验室改进的 libPointMatcher或者ROS自带的点线ICP,做帧间ICP,能够拿到当期帧和上一帧的相对位姿及协方差矩阵;
(3)当前激光帧的绝对位姿:我们可以通过利用cartographer的CSM方法来得到,即历史帧构建submap地图,然后,当前帧和submap地图做CSM匹配,得到绝对位姿,由于cartographer的CSM方法不能得到协方差矩阵,所以,你可以手动给定协方差矩阵,或者自己去求解该协方差矩阵。求解cartographer的CSM匹配的协方差矩阵的方法,有论文已经提及过,后续考虑加上,暂时还是手动给协方差矩阵。
因此,我们的观测共包含以上三类,此外,我们统称反光板、角点和线段特征为特征。由于我们使用ICP的相对观测,所以,我们需要在状态空间内维护至少2帧的位姿,所以这种方法很类似MSCKF。我们暂时只考虑前后两帧的滑窗。
滑窗EKF公式推导
状态空间至少包含9个自由度:机器人的前后实时位姿和激光雷达坐标系到车体坐标系的转换。
状态空间
假如当前的状态空间中有NNN个新增的特征(N>=0N>=0N>=0),此时,状态空间为:
Xk=[xk−1yk−1θk−1xkykθklbxklbyklbθkmx1my1...mxNmyN]9+2NTX_k=\begin{bmatrix}x_{k-1} & y_{k-1} &\theta_{k-1} & x_k & y_k &\theta_k &^b_lx_k&^b_ly_k&^b_l\theta_k & m_x^1 & m_y^1 &...& m_x^N & m_y^N\end{bmatrix}^T_{9+2N}Xk=[xk−1yk−1θk−1xkykθklbxklbyklbθkmx1my1...mxNmyN]9+2NT
运动模型-预测
(1)位姿预测:
第一帧和第二帧位姿直接填充状态空间。
运动方程可以写为:
Xt=AXt−1+BX_t = A X_{t-1} + BXt=AXt−1+B
A=[00010000...0000001000...0000000100...0000010000...0000001000...0000000100...0000000010...0000000001...0000000000...1000000000...01](2N+9)∗(2N+9)A = \begin{bmatrix}0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & ... &0 & 0\\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & ... &0 & 0\\0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & ... &0 & 0\\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & ... &0 & 0\\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & ... &0 & 0\\0 & 0 & 0 & 0 & 0 & 1& 0 & 0 & ... &0 & 0 \\ 0&0&0&0&0&0&1&0&...&0&0\\ 0&0&0&0&0&0&0&1&...&0&0 \\ 0&0&0&0&0&0&0&0&...&1&0 \\ 0&0&0&0&0&0&0&0&...&0&1 \end{bmatrix}_{(2N+9)*(2N+9)}A=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡00000000000000000000000000000010010000000100100000001001000000000010000000000100..............................00000000100000000001⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤(2N+9)∗(2N+9)
B=A∗[000vtΔtcos(θt−1+ωtΔt/2)vtΔtsin(θt−1+ωtΔt/2)ωtΔt00000...00]2∗N+9B = A * \begin{bmatrix}0 \\ 0 \\ 0 \\v_t\Delta t\cos(\theta_{t-1}+\omega_t\Delta t / 2) \\ v_t\Delta t\sin(\theta_{t-1}+\omega_t\Delta t / 2) \\ \omega_t\Delta t \\ 0 \\ 0 \\ 0 \\ 0 \\ 0\\...\\0\\0\end{bmatrix}_{2*N+9}B=A∗⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡000vtΔtcos(θt−1+ωtΔt/2)vtΔtsin(θt−1+ωtΔt/2)ωtΔt00000...00⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤2∗N+9
需要注意的是,我们在运动过程中是需要做边缘化操作的,因此,在当前更新中t−2t-2t−2到t−1t-1t−1时刻的预测,我们不再使用轮速计模型来预测。
(2)协方差预测
状态量在ttt时刻的协方差预测方程为:Σt=GtΣt−1GtT+GuΣuGuT\Sigma_{t} = G_{t}\Sigma_{t-1}G_{t}^T+G_u\Sigma_uG_u^TΣt=GtΣt−1GtT+GuΣuGuT
其中:
GtG_{t}Gt是运动模型关于状态Xt−1X _{t-1}Xt−1的雅克比:
Gt=∂Xt∂Xt−1=[03∗313∗303∗(2N+3)03∗3Gξ′03∗(2N+3)0(2N+3)∗30(2N+3)∗31(2N+3)∗(2N+3)](2∗N+9)∗(2∗N+9)G_{t} = \frac{\partial X_t}{\partial X_{t-1}}=\begin{bmatrix}0_{3*3} & 1_{3*3} & 0_{3*(2N+3)} \\ 0_{3*3} & G_\xi^{'} & 0_{3*(2N+3)} \\0_{(2N+3)*3} & 0_{(2N+3)*3}& 1_{(2N+3) * (2N+3)} \end{bmatrix}_{(2*N+9)*(2*N+9)}Gt=∂Xt−1∂Xt=⎣⎡03∗303∗30(2N+3)∗313∗3Gξ′0(2N+3)∗303∗(2N+3)03∗(2N+3)1(2N+3)∗(2N+3)⎦⎤(2∗N+9)∗(2∗N+9)
其中:Gξ′G_{\xi}^{'}Gξ′和第一篇文章中的GξG_{\xi}Gξ一样。
GuG_uGu是运动模型关于控制(轮速计线速度和角速度)u=[vtωt]Tu = \begin{bmatrix}v_t & \omega_t\end{bmatrix}^Tu=[vtωt]T的雅克比:
Gu=∂Xt∂u=[03∗2Gu′0(2N+3)∗2](2∗N+9)∗2G_u = \frac{\partial X_t}{\partial u}=\begin{bmatrix}0_{3*2} \\ G_u^{'} \\0_{(2N+3)*2} \end{bmatrix}_{(2*N+9)*2}Gu=∂u∂Xt=⎣⎡03∗2Gu′0(2N+3)∗2⎦⎤(2∗N+9)∗2
其中:Gu′G_{u}^{'}Gu′和第一篇文章中的GuG_{u}Gu一样。
观测模型
我们的观测模型可以写为:
h=[xcycθcxryrθrrx1ry1...rxiryi...rxKryK]6+2KTh = \begin{bmatrix} x_c & y_c & \theta_c & x_r & y_r & \theta_r & r_x^1 & r_y^1 & ...&r_x^i& r_y^i&... &r_x^K & r_y^K \end{bmatrix}^T_{6+2K}h=[xcycθcxryrθrrx1ry1...rxiryi...rxKryK]6+2KT
其中,前三项为scan-submap得到的绝对全局位姿,第二个三项为帧间ICP得到的当前帧和上一帧的相对位姿,后面的2K2K2K项为特征。
特征的H矩阵求解
假设当前激光帧中检测到KKK个特征[rx1ry1...rxiryi...rxKryK]2K∗1\begin{bmatrix}r_x^1 & r_y^1 & ...&r_x^i& r_y^i&... &r_x^K & r_y^K\end{bmatrix}_{2K*1}[rx1ry1...rxiryi...rxKryK]2K∗1,需要分为三种情况讨论:
(1)通过数据关联(欧式距离或马氏距离等手段),我们找到老地图中对应的k1k1k1个特征;
(2)通过数据关联,我们找到状态空间中对应的k2k2k2个特征;
(3)无法关联上的特征有k3=K−k1−k2k3=K-k1-k2k3=K−k1−k2个。
单个特征的观测方程可以写为相同的形式:一起做激光反光板(五)
关联上老地图的特征:
和之前一样,不再细述。
关联上状态空间上的特征
和上一个公式基本一样,需要注意的是,由于匹配的是状态空间上的特征,CiC_iCi是不一样的。
假如匹配的是状态空间内第jjj个特征,则有:
Ci=[02∗(j−1)WlR02∗(N−j)]2∗2NC_i = \begin{bmatrix} 0_{2*{(j-1)}}& ^l_WR & 0_{2 * (N-j)}\end{bmatrix}_{2*2N}Ci=[02∗(j−1)WlR02∗(N−j)]2∗2N
绝对位姿的H矩阵求解
观测:z=[xtytθt]z = \begin{bmatrix} x_t & y_t&\theta_t \end{bmatrix}z=[xtytθt]
Htc=[03∗313∗303∗(2N+3)]2∗(2N+9)H_t^c = \begin{bmatrix} 0_{3*3} & 1_{3*3} &0_{3*(2N+3)}\end{bmatrix}_{2*(2N+9)}Htc=[03∗313∗303∗(2N+3)]2∗(2N+9)
相对位姿的H矩阵求解
观测:z=21T=1WT−1∗2WT=[R1−1R2R1−1(t2−t1)01]z = ^1_2T = ^W_1T^{-1} * {}^W_2T =\begin{bmatrix} R_1^{-1}R_2 & R_1^{-1} (t_2-t_1) \\ 0 & 1\end{bmatrix} z=21T=1WT−1∗2WT=[R1−1R20R1−1(t2−t1)1]
Htr=[H3∗6p03∗(2N+3)]3∗(2N+9)H_t^r = \begin{bmatrix}H_{3*6}^p & 0_{3*(2N+3)}\end{bmatrix}_{3*(2N+9)}Htr=[H3∗6p03∗(2N+3)]3∗(2N+9)
其中:1WT=[cosθt−1−sinθt−1xt−1sinθt−1cosθt−1yt−1001]^W_1T = \begin{bmatrix} \cos\theta_{t-1} & -\sin\theta_{t-1} & x_{t-1} \\ \sin\theta_{t-1} & \cos\theta_{t-1} & y_{t-1} \\ 0&0&1 \end{bmatrix}1WT=⎣⎡cosθt−1sinθt−10−sinθt−1cosθt−10xt−1yt−11⎦⎤
2WT=[cosθt−sinθtxtsinθtcosθtyt001]^W_2T = \begin{bmatrix} \cos\theta_{t} & -\sin\theta_{t} & x_{t} \\ \sin\theta_{t} & \cos\theta_{t} & y_{t} \\ 0&0&1 \end{bmatrix}2WT=⎣⎡cosθtsinθt0−sinθtcosθt0xtyt1⎦⎤
Hp=[−cosθt−1−sinθt−1−(xt−xt−1)sinθt−1+(yt−yt−1)cosθt−1cosθt−1sinθt−10sinθt−1−cosθt−1−(xt−xt−1)cosθt−1−(yt−yt−1)sinθt−1−sinθt−1cosθt−1000−1001]H^p =\begin{bmatrix}-\cos \theta_{t-1}&-\sin \theta_{t-1}&-(x_t - x_{t-1})\sin\theta_{t-1} + (y_t - y_{t-1})\cos\theta_{t-1}& \cos \theta_{t-1}&\sin \theta_{t-1} & 0 \\ \sin \theta_{t-1} & -\cos \theta_{t-1} & -(x_t - x_{t-1})\cos\theta_{t-1} - (y_t - y_{t-1})\sin\theta_{t-1} & -\sin \theta_{t-1} & \cos \theta_{t-1} & 0 \\ 0 & 0 & -1 & 0 & 0 & 1 \end{bmatrix}Hp=⎣⎡−cosθt−1sinθt−10−sinθt−1−cosθt−10−(xt−xt−1)sinθt−1+(yt−yt−1)cosθt−1−(xt−xt−1)cosθt−1−(yt−yt−1)sinθt−1−1cosθt−1−sinθt−10sinθt−1cosθt−10001⎦⎤
所以,总的HHH矩阵为:
H=[HtcHtrH1H2...HK](6+2K)∗(9+2N)H = \begin{bmatrix} H_t^c \\ H_t^r \\ H_1 \\ H_2 \\ ...\\ H_K \end{bmatrix}_{(6+2K) * (9+2N)}H=⎣⎢⎢⎢⎢⎢⎢⎡HtcHtrH1H2...HK⎦⎥⎥⎥⎥⎥⎥⎤(6+2K)∗(9+2N)
其余的在之前的定位EKF公式推导都有所体现,所以,不再详细说明。
这样我们就通过EKF完成了以下的EKF公式推导:
(1)在线轮速计外参标定
(2)反光板、角点、线段等特征观测
(3)绝对位姿观测
(4)相对位姿观测
另外,需要强调的是:
(1)关于FEJ(First-Estimates Jacobian)的问题,请自行搜索相关文献,简单来说包括两个部分:一是线性化点的方式不同:在计算预测的雅克比矩阵GuG_uGu和Gξ,tG_{\xi,t}Gξ,t使用的是预测的值,而不是更新的值;二是使用第一次观测:在计算观测的雅克比矩阵HtH_tHt时,使用的是第一次观测值;
(2)关于栅格地图的构建,我们直接调用cartographer相关的类及函数来做;
(3)关于CSM方法的实现,同样是基于cartographer来做;
(4)畸变校正的原理比较简单,不再介绍,我们直接在代码中实现。
关于维护多帧位姿的滑窗,在本文就不再详细推导。后面就不再进行相关的公式推导,该专栏的相关内容后续会在github上更新相应的代码。
一起做激光反光板(六)-基于滑窗的EKF-SLAM及外参自动标定公式推导相关推荐
- 一起做激光反光板(四)-框架搭建
我们已经推导了基本的反光板建图和定位的基本公式,接下来,开始搭建一个框架,尝试进行反光板的建图定位的代码加进去. 首先,搭建一个ROS框架,在我的个人github的reflector_ekf_slam ...
- 基于滑窗捕获的伪卫星系统抗远近效应方法研究
[摘 要]通过滑窗捕获方法来对抗伪卫星系统中的远近效应,在伪卫星基站发射端进行分时隙发送信号,同时在接收端通过滑窗的方式增加一维时域的捕获.实验结果表明,在远近效应较强的情况下,滑窗捕获相关峰均比值 ...
- 一起做激光反光板(一)-EKF定位公式推导
前提:本文只考虑平面运动. EKF的公式及原理不再细述:EKF原理 观测:观测数据为反光板.反光板的检测暂时也不考虑.(一般来说,反光板的检测都是基于反射强度来做的,需要自己手写,如果有疑问留言). ...
- 一起做激光反光板(三)-EKF建图公式推导
继续EKF建图公式推导. 构建反光板地图和定位篇有很大部分的重复.因为上一篇其实也包含了建图. 如果已经有初始的反光板地图,且初始的反光板地图不允许优化,且允许添加新的反光板,则该公式和上一篇反光板定 ...
- 一起做激光反光板(二)-EKF定位公式推导-扩展状态空间
继续公式推导. 扩展状态空间的原因在上一篇EKF公式推导中已经提过,假如在实际操作中,很有可能会临时在某些场合增加反光板来增强定位系统的稳定性.因此,需要在定位过程中,将该状态空间扩展. 定位EKF公 ...
- 论文阅读笔记(六)——基于改进深度学习方法的股骨x线骨折自动检测与定位
Automatic detection and localization of thighbone fractures in X-ray based on improved deep learning ...
- 用Java实现Stream流处理中的滑窗
2019独角兽企业重金招聘Python工程师标准>>> 简单地说,滑窗算法是一种移动固定大小的窗口(子列表)来遍历数据结构的方法,主要是基于固定步骤的序列流数据. 如果我们想通过使用 ...
- r语言quantmond_R语言金融基础:tidyquant数据整理(滑窗建模)
原标题:R语言金融基础:tidyquant数据整理(滑窗建模) 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. ...
- seqkit:序列梳理神器-统计、格式转换、长度筛选、质量值转换、翻译、反向互补、抽样、去重、滑窗、拆分等30项全能...
写在前面 通过我几天的学习,我发现,seqkit十分好用,将序列的各种操作都囊括进去,加入多线程,我个人认为这将是非常好的胶水,在处理无论是基因组还是其他组学.定是一个必学神器.注意一下教程在0.15 ...
最新文章
- “我在苹果商店下载了一个诈骗 App,损失 60 万美金!”
- Spring 如何解决循环依赖?
- linux 内核 性能,Linux内核十个版本性能对比
- 总投资51亿元!长城汽车与宝马共同投资项目获批
- 创建表结构相同的表,表结构相同的表之间复制数据,Oracle 中 insert into XXX select from 的用法...
- java基础类的继承_JAVA核心技术I---JAVA基础知识(类的继承)
- MyBatis出现红色错误,已解决(Establishing SSL connection without)
- r语言 生成等差序列_使用序列模型生成自然语言
- 微软MediaCreationTool2004.exe免费下载(2020最新)
- MATLAB线性回归方程与非线性回归方程的相关计算
- 白+黑(白利用)漏洞加载木马技术解析
- centos7利用libreoffice将doc文件转换为pdf
- 关于边缘计算与区块链结合系统研究的综述
- c1语言学生综合测评,学生综合素质评语
- 没学历没基础怎么学IT?零基础学IT必须知道的事!
- 平价蓝牙耳机选哪个?盘点性价比高的无线蓝牙耳机
- 目标识别数据集扩充方法
- java blackjack card game_Java BlackJack Game Ace值
- 6、因子分解机FM介绍
- 技术人员需要了解的手机验证码登录风险
热门文章
- 96年阿里P7晒出工资单:狠补了这个,真香...
- 什么是Y4M文件格式
- 开学季·东莞理工学院
- 【接前篇】进阶的KMP
- java并发编程(三十五)——公平与非公平锁实战
- comsol 4.4 matlab,如何使用COMSOL with MATLAB的清单
- 在java中什么意思_在JAVA中,~是什么意思?
- 那些不蹭热点的硬核科技公司,却是元宇宙最好的投资对象?
- “好内卷”与“坏内卷”
- 利用Eviews进行格兰杰因果检验