视觉SLAM14精讲——三维空间刚体运动1.0

embedded/2024/10/21 3:31:24/

简介


第一份工作是一家比较大的机器人企业,被迫在AI视觉的基础上自学SLAM。一开始接触的就是vslam14讲,现在想把一些心得和基础知识分享一下。但是目前网络上有关视觉SLAM14讲挺多了,所以本系列不会重复书本中已经有的基本内容,也不一定按顺序发表。想要体现的还是一些更深层的理解和书本意外的一些知识。


三位空间刚体运动

前两章的内容都是一些基础背景知识以及专业名词解释,因此我选择从第三章开始。第三章可以说是整本书,甚至整个3D计算视觉的基石。其中包含大量的数学内容,并需要非常好的空间想像能力。因此对这一章必须要有非常深的理解,才会有助于看懂后面的章节。


特殊正交群与特殊欧式群

旋转矩阵的理解

刚接触旋转向量的人可能会十分不适应这种表示方式,因为一般人直觉上更喜欢使用欧拉角来表示三维旋转,这种比较直观的方式。但是不得不承认,旋转矩阵在数学计算,尤其是编程方面是非常方便的(直接照公式敲的程度)。因此,深入了解旋转向量是非常重要的。

在十四讲中,对于旋转矩阵的推导非常干净利落。通过两组空间坐标的正交基,对等效坐标建立等式解出旋转矩阵的定义。如果我们只对空间坐标系的坐标轴进行旋转,则会有如下公式

R x ( β ) = [ 1 0 0 0 c o s β s i n β 0 − s i n β c o s β ] R_x(\beta) = \left[ \begin{array}{ccc} 1 & 0 & 0\\ 0 & cos\beta & sin\beta\\ 0 & -sin\beta & cos\beta \end{array} \right] Rx(β)= 1000cosβsinβ0sinβcosβ

R y ( β ) = [ c o s β 0 − s i n β 0 1 0 s i n β 0 c o s β ] R_y(\beta) = \left[ \begin{array}{ccc} cos\beta & 0 & -sin\beta\\ 0 & 1 & 0\\ sin\beta & 0 & cos\beta \end{array} \right] Ry(β)= cosβ0sinβ010sinβ0cosβ

R z ( β ) = [ c o s β s i n β 0 − s i n β c o s β 0 0 0 1 ] R_z(\beta) = \left[ \begin{array}{ccc} cos\beta & sin\beta & 0\\ -sin\beta & cos\beta & 0\\ 0& 0 & 1 \end{array} \right] Rz(β)= cosβsinβ0sinβcosβ0001
观察上述公式有两个结论。

  • 第一,我们可以通过欧拉角配合上述公式来构造我们所需要的旋转矩阵。构造旋转矩阵的时候需要注意旋转的先后顺序(群的性质,不满足交换律)。
  • 其次,旋转某个轴的时候,另外两个轴并不是孤立的,而是会受到影响的。比如我们将一个右手表示的三维坐标周的y轴旋转90度(正数为逆时针),会发现此时z轴替换了原来x轴的位置,而此时x轴正指向下方。

因此,上述公式有着非常重要的意义,建议背下来。别怕,很好记。
旋转哪个轴,该位置就为1,划掉该位置的行和列(均为0)。对角线是cos,副对角线是sin。除了y轴旋转,负号都在左下角。
[ x 0 0 0 y 0 0 0 z ] \left[ \begin{array}{ccc} x & 0 & 0 \\ 0 & y & 0 \\ 0 & 0 & z \end{array} \right] x000y000z

旋转矩阵求逆在工程中的应用

特殊正交群的一个非常重要的性质就是R的转置和R的逆是等价的。 然而在实际变成过程中我们会经常会按照思维惯性来求取旋转矩阵的逆:

#python
R_inv = np.linalg.inv(R)#C++
##OPENCV
cv::Mat R_inv = R.inv();
##EIGEN
Eigen::Matrix3d R_inv = R.inverse()

但是求逆的算法多数情况下求取的是近似值,并且计算过程复杂。多数库的求逆算法并不会假设矩阵的正交性,因此会使用普通的求逆算法来对矩阵进行运算。那么既然有着特殊正交群的前提条件,就应该使用转置替代求逆操作。这样做的好处不止于使用方便,求取的结果是精确值而非近似值,并且在效率上优于直接求逆的方法。

#python
R_inv = R.T#C++
##OPENCV
cv::Mat R_inv = R.t();
##EIGEN
Eigen::Matrix3d R_inv = R.transpose();

http://www.ppmy.cn/embedded/39789.html

相关文章

如何到《新英格兰医学杂志》 NEJM查找下载文献

《新英格兰医学杂志》NEJM是世界上阅读、引用最广泛、影响力最大的综合性医学期刊之一。NEJM集团出版的期刊还包括NEJM Journal Watch、NEJM Catalyst及NEJM Evidence。NEJM是一份全科医学周刊,出版对生物医学科学与临床实践具有重要意义的一系列主题方面的医学研究…

每日一题 第九十六期 单调队列

题 有n个生物&#xff0c;第i个生物会在第i到第ai(i≤ai≤n)天出现&#xff0c;它的攻击力为bi。其中对于所有i(1≤i<n)&#xff0c;满足ai≤ai1请输出每天出现的生物的攻击力的最大值。 输入格式 第一行一个整数n 。 接下来n行&#xff0c;每行两个整数ai,bi 输出格式 一…

JavaSE基础小知识Ⅱ(很容易错!!!)

1. 变量被final修饰后不能再指向其他对象&#xff0c;但可以重写 如果是引用变量被final修饰&#xff0c;那么的确如此&#xff1b; 基本变量不能重写 2. 下列代码的输出结果是&#xff1f; public class Test {static {int x 5; }static int x,y; public static void ma…

搭建Docker私有镜像仓库

大家好&#xff0c;今天给大家分享一下如何搭建私有镜像仓库&#xff0c;私有镜像仓库可以更好地管理和控制镜像的访问和使用&#xff0c;确保只有授权的人员能够获取和使用特定的镜像&#xff0c;而且方便团队内部共享定制化的镜像&#xff0c;提高开发和部署效率&#xff0c;…

喜报|知从科技荣获“2023年度浦东新区创新创业奖”

4月11日&#xff0c;由上海市浦东新区人民政府举办的“2024年浦东新区经济突出贡献企业表彰活动”在上海国际会议中心隆重举行。知从科技凭借过去一年在行业内卓越的技术创新实力及对浦东新区发展作出的杰出贡献&#xff0c;入选创新创业20强企业&#xff0c;荣获“2023年度浦东…

【江科大STM32学习笔记】GPIO输出

一、GPIO简介 1.GPIO&#xff08;General Purpose Input/Output&#xff09;通用输入输出 2.可配置为8种输入输出模式 3.引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V 部分引脚输入可为5V但输出只能是3.3V 4.输出模式下可控制端口输出高低电平&#xff0c;用…

手机App防沉迷系统-算法

import java.util.*; public class Main{public static void main(String[] args){Scanner innew Scanner(System.in);int nInteger.parseInt(in.nextLine());//已注册app列表List<Log> listnew ArrayList<>();for(int k0;k<n;k){String[] strin.nextLine().spl…

Linux——mysql运维篇

回顾基本语句&#xff1a; 数据定义语言 ( DDL ) 。这类语言用于定义和修改数据库的结构&#xff0c;包括创建、删除和修改数据库、表、视图和索引等对象。主要的语句关键字包括 CREATE 、 DROP 、 ALTER 、 RENAME 、 TRUNCATE 等。 create database 数据库 &…