深蓝学院-视觉SLAM课程-第7讲笔记
课程Gitbug地址:https://github.com/wrk666/VSLAM-Course/tree/master
0. 内容
这讲来讲后端
之前的最小二乘的方法属于批量方法,较为简单,另一种方法是递归方法。
1. 递归方法
前端是实时的估计,抓取关键帧和特征点匹配,后端计算量较大,不要求实时,但是计算量也需要限定在一定的程度内。
保持当前状态,来新信息之后就更新,
运动方程对自己的位姿有一个大概的估计,但是存在不确定性,随着时间推移,不确定性会累积,而观测方程观测到路标点,对之前的估计进行矫正,不确定性会减小很多。
假设一阶马尔科夫性则会得到EKF等滤波器方法
不假设的话会得到非线性优化的方法。
上面K的不需要计算后延协方差的方式使用了SMW的第4个公式
2. 批量方法
对稀疏矩阵做一个简单的维数验证:
雅可比:88矩阵块
雅可比的转置JT\bm J^TJT,同样也是88矩阵块,每个块也要转置
H=JTJH=\bm J^T\bm JH=JTJ
和下面的临接矩阵除了对角线外,结构一样
高斯消元,H第二行左乘−EC−1-EC^{-1}−EC−1加到第一行来消掉右上角的E。
这里核心意思是把计算量转移到了求解Δxc\Delta x_cΔxc上,最主要的就是就是对C进行求逆,
边缘化小结:
2.1. BA和递归的对比
新的关键帧来到时,要把老的关键帧Marg掉,老的关键帧会影响先验分布
问题是:如果回环之后,老的信息不太容易用起来。
3. Pose Graph位姿图
由于路标点的数量很多,CPU很难实现实时优化,所以策略
- 如滑动窗口那样,丢弃一些历史数据;
- 如位姿图那样舍弃对路标点的优化,只保留Pose之间的边。
4. 实践
4.1 Ceres BA书写
照着例程运行,安装meshlab
sudo apt-get install meshlab
这个是初始点云
这个是优化后的
噪声点明显少了很多。
4.2 g2o BA
跑代码和4.1差不多。
4.3 Pose Graph SE3
跑出来大概这样子:
4.4 Pose Graph Lie_algebra
编译时有个小bug:
./pose_graph_g2o_lie ../sphere.g2o
Sophus ensure failed in function 'void Sophus::SO3Base<Derived>::normalize() [with Derived = Sophus::SO3<double>]', file '/usr/local/include/sophus/so3.hpp', line 273.
Quaternion ( 0.706662 4.32706e-17 0.707551 -4.3325e-17) should not be close to zero!
查了一下,原因是:
顶点类VertexSE3LieAlgebra的读入函数virtual bool read(istream& is)缺少返回值,会报以上错误。
解决方法:在函数virtual bool read(istream& is)中加入return true;
virtual bool read(istream &is) override {double data[7];for (int i = 0; i < 7; i++)is >> data[i];Quaterniond q(data[6], data[3], data[4], data[5]);q.normalize();setMeasurement(SE3d(q, Vector3d(data[0], data[1], data[2])));for (int i = 0; i < information().rows() && is.good(); i++)for (int j = i; j < information().cols() && is.good(); j++) {is >> information()(i, j);if (i != j)information()(j, i) = information()(i, j);}return true;
}
用单位阵代替Jr−1J_r^{-1}Jr−1结果差不多:
// Matrix6d J = JRInv(SE3d::exp(_error));Matrix6d J = MatrixXd::Identity(6, 6);// 尝试把J近似为I?
做作业!
深蓝学院-视觉SLAM课程-第7讲笔记相关推荐
- 深蓝学院-视觉SLAM课程-第1讲笔记
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 1. 基础知识 一些图像处理方面的工作需要借助ML方法来完成:物体识别,检测 ...
- 深蓝学院-视觉SLAM课程-第2讲笔记--三维空间刚体运动
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 0. 内容 C++没有矩阵的运算,用别人的库来进行矩阵运算,其中Eigen库 ...
- 深蓝学院-视觉SLAM课程-第3讲笔记-李群和李代数
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 0. 内容 1. 什么是群 为什么要引入群? 因为求旋转矩阵或者变换矩阵的导 ...
- 深蓝学院-视觉SLAM课程-第6讲笔记
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 0. 内容 仍然是前端的内容,估计位姿,不过不是特征点法,而是另外的方法. ...
- 深蓝学院-视觉SLAM课程-第2讲作业
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 1. 基础知识 需要复习现代和矩阵论的知识. 特征值,特征向量有啥用? 有了 ...
- 深蓝学院-视觉SLAM课程-第7讲作业:SLAM中g2o入门详解,直接法BA
1. 引言 在SLAM中,BA是个重要的部分,前后端很多地方都用得到,而g2o是一个很重要的使用图优化求解优化问题的库,所以有必要熟练掌握,尽管有了些C++的底子,但是看g2o的代码还是比较吃力,所以 ...
- 深蓝学院-视觉SLAM课程-第6讲作业
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 第6讲作业 2. T2 2.1 光流文献综述 文献还没读完,这部分参考博客 ...
- 深蓝学院-视觉SLAM课程学习课后题
一. 第一节课习题# 标题 1.熟悉linux (1)可以通过 sudo apt-get install <软件名>的方式安装软件 当自己下载了软件压缩包之后(tar.gz文件),可以解压 ...
- 深蓝视觉SLAM课程第四讲--相机模型,非线性优化(G2O)
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 0. 内容 对应于十四讲中的第5讲和第6讲 回顾十四讲P24-26 1. 针 ...
最新文章
- linux系统无法挂载U盘
- host mysql server_解决服务器连接错误Host ‘XXX’ is not allowed to connect to this MySQL server...
- 【机器学习】5行代码在小数据集上涨点
- python pycurl
- 永远不会执行的cron表达式
- stm32f103r6最小系统原理图_超强PCB布线设计经验谈附原理图
- 对于国产芯片何时能挑大梁
- 读书笔记之:高质量程序设计指南——C++/C
- 基于redis的悲观锁
- 【知识图谱】史上最全《知识图谱》2020综述论文,18位作者, 130页pdf
- eclipse翻译插件,支持最新版eclipse 2022-09
- 使用开票组件快速开具清单发票
- PS自定义形状+笔刷添加打造完美水印
- ICP备案不等于ICP许可证
- xp升级到win7傻瓜教程_最简单xp一键升级win7重装
- 2022最新 wifi大师小程序独立版3.0.8
- AdGuard 无与伦比的广告拦截
- 【IEEE】IEEE审稿意见与回复-写作指南
- 【C语言】变量和常量、数据类型、进制转换、数据存储
- 安卓系统怎么安装软件_【图文】安卓系统手机如何下载安装APP