视觉SLAM14讲学习笔记

本文是关于视觉SLAM的学习笔记,涵盖预备知识、初始SLAM及三维空间刚体运行。介绍了SLAM的基本概念、传感器类型、相机的工作原理以及SLAM的主要步骤,包括视觉里程计、后端优化、回环检测和建图。同时,提到了Linux中库文件的静态库和共享库区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录:

第一讲 预备知识

第二讲 初始SLAM

第三讲 三维空间刚体运行


第一讲 预备知识

书的简介以及书中约定的一些描述等

再漂亮的数学理论,如果不能转化为可以运行的代码,那就仍是可望而不可即的空中楼阁,没有实际意义。

轮式编码器会测到轮子转到的速度,IMU测量运动的角速度和加速度,相机和激光传感器则读取外部环境的某种观测数据。

SLAM特指:特指搭载传感器的主体,在没有环境先验的信息情况下,在运动过程中建立环境模型,通过估计自己的运动。

SLAM的目的是解决两个问题:1、定位 2、地图构建

本书代码例子 :https://github.com/gaoxiang12/slambook

第二讲 初始SLAM

相机的种类分为: 单目(Monocular)、双目(Stereo)、深度相机(RGB-D)

单目相机 只使用一个摄像头进行SLAM的做法叫做单目SLAM(Monocular SLAM),结构简单,成本低。

单目SLAM 估计的轨迹和地图,与真实的轨迹和地图之间相差一个因子,这就是所谓的尺度(scale)由于,单目SLAM无法凭借图像来确定真实的尺度,又称为尺度不确定

单目SLAM 的缺点:1、只有平移后才能计算深度 2、无法确定真实的尺度。

 

双目相机和深度相机的目的是,通过某种手段测量物体离我们之间的距离。如果知道这个距离,场景的三维结构就可以通过这个单个图像恢复出来,消除了尺度不确定性。

 

视觉slam的路程分成以下几步:

1、传感器信息的读取。

2、视觉里程计(Visual Odometry,VO)视觉里程计的任务是,估算相邻图像之间相机的运动,以及局部地图。VO也称为前端(Front End).

3、后端优化(Optimization)后端是接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息。(Back End)

4、回环检测(loop Closing)。回环检测是判断机器人是否或者曾经到达过先前的位置。如果检测到回环,它会吧信息提供给后端进行处理

5、建图(Mapping),他根据估计出的轨迹,建立与任务要求的对应的地图。

在Linux中,库文件分为静态库和共享库两种,静态库以.a作为后缀名,共享库以.so结尾。所有库都是一些函数打包后的集合,差别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本,更省空间。

第三讲 三维空间刚体运行

旋转矩阵可以描述相机的旋转。

 

### 关于SLAM14讲的学习笔记与资料 #### SLAM14讲的核心内容概述 《视觉SLAM十四讲》是一本深入浅出介绍视觉SLAM系统的书籍,涵盖了从基础理论到实际应用的多个方面。该书不仅讲解了相机模型、特征提取、位姿估计等基础知识[^1],还涉及到了非线性优化、滤波方法以及如何构建一个完整的SLAM系统框架[^2]。 #### 数据结构与多线程处理的重要性 为了确保SLAM系统的稳定性和效率,《视觉SLAM十四讲》强调了合理设计数据结构的重要性,并通过引入“锁”机制来解决并发访问中的冲突问题。此外,书中提到可以通过单独开启线程的方式运行后端优化程序,从而提高整体性能。 #### 可视化工具的选择 对于初学者而言,选择合适的可视化工具能够极大地提升开发体验。Pangolin作为一个轻量级的OpenGL封装库,提供了强大的3D渲染功能和支持多种视频流输入的能力,非常适合用来展示SLAM过程中的地图点云和轨迹信息[^3]。 #### 推荐资源列表 以下是几类推荐给希望深入了解《视觉SLAM十四讲》相关内容的学生或工程师: 1. **官方配套代码** 作者高博在其GitHub仓库中公开了大部分章节对应的实现代码,这对于理解抽象概念非常有帮助。 2. **在线课程平台上的解读系列** 如B站上存在许多UP主针对每章知识点录制的教学视频,配合纸质教材观看效果更佳。 3. **社区讨论区和技术博客** 许多名字带有“SLAM”的技术论坛里经常能看到围绕本书展开的技术探讨帖,其中不乏高质量的回答可以帮助解答疑惑之处。 ```python import numpy as np from scipy.optimize import least_squares def reprojection_error(x, camera_matrix, points_3d, points_2d): """ 定义重投影误差函数作为最小二乘法的目标函数之一 参数: x (array): 待求解参数向量(包含R,t) ... 返回值: array: 所有点计算得到的残差组成的数组 """ R_vec = x[:3] t = x[3:] # 将旋转向量转换成旋转矩阵 from cv2 import Rodrigues _, R = Rodrigues(R_vec) projected_points = [] for pt in points_3d: temp = np.dot(camera_matrix, np.dot(R, pt) + t).reshape(-1,) projected_points.append(temp / temp[-1]) errors = [(p_proj - p_obs)[:2] for p_proj, p_obs in zip(projected_points, points_2d)] return np.array(errors).flatten() ``` 上述代码片段展示了基于`scipy`库完成的一个简单的重投影误差定义及其优化调用方式的例子。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值