当前位置: 首页 > article >正文

SLAM技术栈 ——《视觉SLAM十四讲》学习笔记(一)

《视觉SLAM十四讲》学习笔记(一)

  • 第2讲 初识SLAM
    • 习题部分
  • 第3讲 三维空间刚体运动
    • 3.1 左手系与右手系
    • 3.2 齐次坐标
    • 3.3 旋转矩阵与变换矩阵
    • 3.4 正交群与欧式群
    • 3.5 旋转向量与欧拉角
    • 3.6 实践Eigen线性代数库
      • 3.6.1 QR分解(QR decomposition)
    • 3.7 四元数到其它旋转表示的转换
    • 3.8 相似、仿射、射影变换
  • 第4讲 李代数

第2讲 初识SLAM

这篇文章已经总结的很好了,把要点都总结到了,我就不重复了《重读《视觉SLAM十四讲》ch2初识SLAM》

习题部分

《视觉SLAM十四讲笔记 – 第二讲课后习题》,这篇文章有较为完善的习题讲解,但缺少第8问,我这里补充下。

8.完善Hello SLAM小程序,把它做成一个小程序库,安装到本地硬盘中。然后,新建一个工程,使用find_package找这个库并调用

参考《“轻松搞定 CMake”系列之 find_package 用法详解》

第3讲 三维空间刚体运动

3.1 左手系与右手系

伸出你的左右手,始终保持这两只手指的大拇指朝右(x轴正方向)食指朝上(y轴正方向),然后中指垂直于大拇指与食指所构成的平面,即 (z轴正方向)

左手系与右手系

图片来源 —— Understanding left- or right-handed coordinate systems,百度百科也用的这张图

3.2 齐次坐标

【探秘三维透视投影 - 齐次坐标的妙用 - 奇乐编程学院】
投影分为正交投影(又称平行投影,不会改变物体的比例,本质依然是简单的缩放和平移)与透视投影
《【Math】齐次坐标 》这篇文章看过后,你应该能理解,为什么看上去铁轨在无限延伸处,看起来是相交的,这就是因为三维空间投影至二维视觉成像平面,损失了深度信息。即,你的观察点和两条铁轨的无限远处的某点所连成的直线,与成像平面的交点会越来越靠近同一个点。图我无法画的很好看,只能用这段文字说明下,用相似三角形就可以表示了。

3.3 旋转矩阵与变换矩阵

旋转矩阵 R R R,由于基向量的长度为1,所以实际上是各基向量夹角的余弦值。所以这个矩阵也叫方向余弦矩阵(Direction Cosine Matrix)。下面统一称为旋转矩阵。旋转矩阵R是一个行列式为1的正交矩阵。

书中的符号记法: R 12 R_{12} R12代表“把坐标系2的向量变换到坐标系1”的旋转矩阵
下面的公式里的 T T T称为变换矩阵(Transform Matrix)

不刻意区别齐次坐标与普通坐标的符号,默认使用的是符合运算法则的那一种

3.4 正交群与欧式群

SO(n)是特殊正交群(Special Orthogonal Group)
SE(n)是特殊欧氏群(Special Euclidean Group):这种矩阵的特点是,左上角为旋转矩阵,右侧为平移向量,左下角为0向量,右下角为1

3.5 旋转向量与欧拉角

书曰:“事实上,任意旋转都可以用一个旋转轴和一个旋转角来刻画。于是,我们可以使用一个向量,其方向与旋转轴一致,而长度等于旋转角。这种向量称为旋转向量(或轴角/角轴,Axis-Angle),只需一个三维向量即可描述旋转”。所以按这种说法,角速度也是一种向量,高中物理课本上有说这一点,但是角速度这种向量很特殊,被当做标量处理。

从旋转向量到旋转矩阵的转换过程由罗德里格斯公式(Rodrigues’s Formula)表明:
罗德里格斯公式

参考证明
Rodrigues’ rotation formula - wiki
【罗德里格斯公式推导】- bilibili

3.6 实践Eigen线性代数库

安装线性代数库Egien,这个库是C++编写的

sudo apt install libeigen3-dev

Eigen的特性是,不能混合两种不同类型的矩阵,具体代码请看书籍或配套资料

3.6.1 QR分解(QR decomposition)

在书籍代码中有涉及,这是考研数学的一部分,来复习下,QR分解的一个目的是为了快速寻找矩阵特征值

参考资料
【矩阵分解:QR分解】
形象解释线性代数之QR分解

3.7 四元数到其它旋转表示的转换

3.8 相似、仿射、射影变换

常见变换的性质比较

第4讲 李代数


http://www.kler.cn/a/531795.html

相关文章:

  • AP单类平均准确率
  • 图像处理之图像灰度化
  • 【C语言】自定义类型讲解
  • PaddleOCR 截图自动文字识别
  • C# 类与对象详解
  • 一文讲解HashMap线程安全相关问题(上)
  • c++ stl 遍历算法和查找算法
  • BMS和无刷电机产品拆解学习
  • TryHackMe: TryPwnMe Two
  • 使用递归解决编程题
  • 编程AI深度实战:AI编程工具哪个好? Copilot vs Cursor vs Cody vs Supermaven vs Aider
  • redis教程
  • 《苍穹外卖》项目学习记录-Day11销量排名统计
  • JavaScript系列(55)--安全编程实践详解
  • 代码随想录二刷|二叉树7
  • Leetcode 3440. Reschedule Meetings for Maximum Free Time II
  • 刷题汇总一览
  • 在Vue3项目中使用百度地图
  • vscode flutter 项目连接 mumu 浏览器
  • BUUCTF Pwn axb_2019_brop64 题解
  • aws(学习笔记第二十七课) 使用aws API Gateway+lambda体验REST API
  • C++泛型编程指南07 函数重载
  • 来自谷歌新作:SFT负责记忆遵循,RL驱动泛化迁移?
  • Use-DeepSeek增效
  • 将D盘空间划分给C盘
  • 大年初六,风很大