反向学习,最基础的才想起来学。
主学习思路整理,不利于作为大家的学习资料,有什么问题可以交流讨论。
注:
1)学习视频:【高翔】视觉SLAM十四讲;
2)视频不同步问题参见评论区。
第1讲
其实这一讲没什么干货,就是一些简单介绍。
- SLAM是一种估计自身运动并建立环境模型的技术;
- 参考文献介绍了几个,其中重量级《Multiple View Geometry in Computer Vision》;
- 代码链接:https://github.com/gaoxiang12/slambook2。
第2讲
2.1 理论部分
这一章是数学基础,理论部分有3个要点。
1)传感器对比
- 作为一种自主传感器,视觉传感器并不依赖于外部环境,可提供间接物理量;
- 与激光相比,视觉工作条件受限:光线足、无遮挡、有环境纹理;
- 相机主要分单目、双目、RGBD三类。其中,单目无法提供尺度信息,也无法计算深度(通过移动物体可以得知其相对远近);双目和RGBD均可提供深度与尺度信息,对于深度的确定,双目采用数学方法计算(视差),RGBD采用物理方法测量(TOF、结构光)。
2)SLAM框架
图片来源:经典视觉SLAM框架
- 视觉里程计主要用于运动估计,计算相邻时刻(图像)的运动,存在累积漂移,一般分特征点法和直接法;
- 后端优化主要状态优化,用于处理噪声,一般分EKF、图优化等;
- 回环检测主要解决位置估计的漂移问题,一般用词袋模型。
3)数学表述
SLAM最关键的2个问题就是定位与建图,相对应的,在数学表述中的2个关键点就是运动方程与观测方程的构建。
- 运动方程, x k = f ( x k − 1 , u k , w k ) x_k=f(x_{k-1},u_k,w_k) xk=f(xk−1,uk,wk) ,描述k时刻位置量;
- 观测方程, z k , j = h ( y j , x k , v k , j ) z_{k,j}=h(y_j,x_k,v_{k,j}) zk,j=h(yj,xk,vk,j) ,描述机器人在 x k x_k xk位置看到路标点 y j y_j yj时,产生的观测数据 z k , j z_{k,j} zk,j,在某时刻看到的路标点数量不同,观测方程数量也不同。
2.2 实践部分
待续ing······