视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇

文章目录

  • 3.1 旋转矩阵
    • 3.1.1点与坐标系
    • 3.1.2 坐标系中的欧式变换
    • 3.1.3 变换矩阵与齐次坐标
  • 3.2 Eigen库的使用
  • 3.3 旋转向量和欧拉角
    • 3.3.1 旋转向量
    • 3.3.2 欧拉角
  • 3.4四元数
    • 3.4.1 四元数的定义
    • 3.4.2 四元数的运算
    • 3.4.3 用四元数表示旋转
    • 3.4.4 四元数到旋转矩阵的转换
  • 3.5 补充小萝卜的例子解释,坐标在不同坐标系转换
  • 参考博客

3.1 旋转矩阵

3.1.1点与坐标系

点乘

在这里插入图片描述
叉乘
法向量的方向成右手法则,所以叉乘的顺序是会有影响的。
在这里插入图片描述

反对称矩阵
反对成矩阵(skew-symmetric matrix),如a = [a1, a2, a3]
视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第1张图片视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第2张图片

3.1.2 坐标系中的欧式变换

  1. 旋转关系加上平移关系统称为坐标系之间的变换关系。
  2. 我们用两个参考系考察机器人运动,一个是固定不动的世界坐标系,一个是依靠机器人自身建立的移动坐标系,我们研究的问题就是如何把一个向量在这两个坐标系中相互转换。
  3. 转换思路:需要先得到该点针对机器人坐标系坐标值,再根据机器人位姿转换到世界坐标系中
    视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第3张图片

在这里插入图片描述
视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第4张图片视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第5张图片

3.1.3 变换矩阵与齐次坐标

矩阵相乘的意义
在这里插入图片描述
变换矩阵Transform Matrix
1.SO(n)是特殊正交群(special orthogonal group),集合的定义如下:
在这里插入图片描述
特殊正交群要求正交,且行列式为1.

齐次坐标:
射影几何里的概念,把一个三维向量的末尾添加 1,变成了四维向量,称为齐次坐标。对于这个四维向量,我们可以把旋转和平移卸载一个矩阵里,使得整个关系变成线性关系。
在这里插入图片描述视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第6张图片
5.SE(3)特殊欧氏群(special euclidean group),定义如下:
在这里插入图片描述
6.变换矩阵的逆,反向的变换.inverse()为:
在这里插入图片描述
这里这个反对称矩阵的概念,听起来很简单,但是其实很重要观察反对称矩阵的特点,不难发现符合A^{T}=-A的反对称矩阵,3x3的矩阵,有九个元素,但是呢由于对角线都是0,并且他还上下对称。所以,我们只用三个元素就能表达一个反对称矩阵。比如,A用a来表示

视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第7张图片用三个元素就能表达A,也就是说反对称矩阵只有三个自由度。 这一点很重要,正因如此,我们就可以把一个三维向量和一个三维矩阵建立对应关系。

3.2 Eigen库的使用

参考链接:
Eigen官网
民间Eigen教程
eigen 中四元数、欧拉角、旋转矩阵、旋转向量互相转换

3.3 旋转向量和欧拉角

3.3.1 旋转向量

视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第8张图片

3.3.2 欧拉角

在这里插入图片描述
视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第9张图片视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第10张图片

欧拉角的奇异性问题
在特定值时,旋转自由度减1;
Yaw-pitch-roll顺序下,当pitch为90度时,存在奇异性

视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第11张图片

3.4四元数

3.4.1 四元数的定义

视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第12张图片视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第13张图片

3.4.2 四元数的运算

视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第14张图片视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第15张图片视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第16张图片

3.4.3 用四元数表示旋转

视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第17张图片

3.4.4 四元数到旋转矩阵的转换

视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第18张图片

3.5 补充小萝卜的例子解释,坐标在不同坐标系转换

视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第19张图片视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第20张图片
视觉SLAM十四讲学习笔记——ch3-三维刚体运动理论篇_第21张图片
计算代码和注释如下:

#include 
#include 
#include 
#include 
#include 
 
using namespace std;
using namespace Eigen;
 
int main(int argc, char** argv) {
  //q1 q2存为两个四元数
  Quaterniond q1(0.35, 0.2, 0.3, 0.1), q2(-0.5, 0.4, -0.1, 0.2);
  //使用之前要归一化操作
  q1.normalize();
  q2.normalize();
  //两个平移向量t1 t2 
  Vector3d t1(0.3, 0.1, 0.1), t2(-0.1, 0.5, 0.3);
  //题目给出的小萝卜一号在自身坐标系下的坐标
  Vector3d p1(0.5, 0, 0.2);
  //声明两个变换矩阵  分别代表w->1  w->2的变换矩阵
  //将四元数代表的旋转 赋值给变换矩阵
  Isometry3d T1w(q1), T2w(q2);
  //把平移向量赋值给变换矩阵
  T1w.pretranslate(t1);
  T2w.pretranslate(t2);
  //此时 我们的变换矩阵已经代表了 旋转+平移
  //P2 = T2w * Tw1 * P1
  Vector3d p2 = T2w * T1w.inverse() * p1;
  cout << endl << p2.transpose() << endl;
  return 0;
}

参考博客

1.视觉SLAM十四讲学习笔记——第三章 三维空间刚体运动
2.SLAM学习笔记-------------(三)三维空间刚体运动
3.视觉SLAM十四讲 第3讲 三维空间刚体运动(相关知识点汇总)

你可能感兴趣的:(37のSLAM学习,自动驾驶,SLAM,EIgen,刚体运动)