这里记录了Cyrill Stachniss教授讲课的课件和一些体会,课程可以在youtube或者B站上找到
least square
有一个待估计状态
x
x
x,有观测模型
f
(
x
)
f(x)
f(x),得到预测的观测值
z
^
\hat{z}
z^,有实际的观测值
z
z
z。
以机器人位姿估计为例讲一下
Graph based slam
最小二乘的一些特性
在不同的机器人位姿之间添加约束(后面会提到的pose graph),也可以在位姿和三维世界特征点之间添加约束
回环检测会添加当前位姿和之前位姿之间的约束
- 利用graph来表达问题
- 每个node代表机器人的位姿(pose graph),总体上:可以将每一个待估计的量,弄成一个graph,比如三维世界的路标点的位置、相机的内参等等,都可以弄成node
- 每一个edge就是连接node之间的约束,不一定是两个,也可以是多个
- graph based slam:利用graph来求解error最小的机器人位姿序列
一个例子
找到node之间的约束关系
效果还是非常不错的
有比较准的pose后,就可以构造一个地图
slam系统的整体结构:
前段+后端
这里主要解释后端
每一个
x
i
x_i
xi代表在
t
i
t_i
ti时刻的机器人位姿,每个位姿之间都有一个约束
可以利用odometry来创建一个node和node之间的约束
也可以利用激光雷达icp来构建一个约束
利用齐次坐标来表达odometry边,以及observation边
可以利用一个矩阵4x4,来表达旋转和平移,这个没啥问题
齐次坐标的一些特性
观测会受到信息矩阵的影响,这个信息矩阵可以理解成,正态分布里的协方差矩阵
问题1:scanmatching和odometry的信息矩阵有什么区别?
答:scanmatching会更准一点
问题2:在长廊里的信息矩阵什么样?
答:纵向信息少,横向信息多
注意这里:其实讲的就是pose graph
目标就是使平方误差最小化
最小平方误差形式
以及待估计的状态node
误差的表达式:
整体的最小化求解过程:
- 定义误差方程
- 线性化
- 计算导数
- 导数等于零
- 求解现行方程组
- 迭代
误差方程的线性化:用泰勒展开,涉及到求雅各比矩阵
可以看到雅各比矩阵是稀疏的
雅各比矩阵稀疏,使得H矩阵也是稀疏的
特定的b取值,只和相关的节点有联系,其他的位置都是0
H也是同样的情况
由于稀疏特性,可以有更快的求解方法
举一个1维的例子
可以固定一个点,比如一串点的时候固定第一个点,这个在高翔的视频里有讲到
g2o里可以设定一个fix特性
一个实际的效果
可以将一些已知的点设定为不变的点,不去进行更新
这个不太懂,最后这一点不知道要干啥。