ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SLAM-Eigen库

2021-01-09 19:33:53  阅读:219  来源: 互联网

标签:Eigen 矩阵 旋转 SLAM 坐标 齐次 向量


目录

使用Eigen库的原因

开源线性代数库
矩阵运算,表达刚体旋转

三维空间中刚体的旋转表示

1.旋转矩阵

R和t组成齐次变换矩阵T,表达连续的欧式变换
R的逆矩阵表示相反的旋转

扩展:欧几里得坐标系(即欧式坐标)

定义了内积,角,距离。三维坐标系下的外积
内积:
在这里插入图片描述
几何概念,角:
在这里插入图片描述在这里插入图片描述
距离:
d(x,y)=||x-y||

三维坐标系下的外积:
齐次坐标下,向量a x b表示与a,b都垂直的向量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

扩展:齐次坐标在欧式空间的好处

1.方便表达点在线上或平面上
直线 l 用ax + by + c = 0表示
在这里插入图片描述
p的齐次坐标(x,y,1)
在这里插入图片描述
面的原理同上
2.方便表达直线和角点
在齐次坐标下,可以用两个点 p, q 的齐次坐标叉乘结果来表达一条直线 l,也就是
l = p x q
也可以使用两条直线 l, m 的叉乘表示他们的交点 x
x = l x m
在这里插入图片描述3.方便区分点和向量
(1)从普通坐标转换成齐次坐标时,
如果(x,y,z)是个点,则变为(x,y,z,1);
另:如果是点(x,y,z,0)则表示无穷远处的点
如果(x,y,z)是个向量,则变为(x,y,z,0)

(2)从齐次坐标转换成普通坐标时 ,
如果是(x,y,z,1),则知道它是个点,变成(x,y,z);
如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z)

4.更优美的表达欧式变换
将平移的加法变成矩阵相乘
当面对连续的旋转平移,就体现了优势,变成了连续的矩阵相乘

2.四元数

w+xi+yj+zk 即(w,x,y,z)

单位四元数才能描述旋转,使用前要归一化:q.normalize( )

3.旋转向量

一个轴,一个角描述旋转,360度一圈,所以有奇异性
旋转向量到旋转矩阵有罗德里格斯公式,opencv和MATLAB有函数实现
旋转向量和旋转矩阵的转换对应于李代数和李群的映射

4.欧拉角

yaw,pitch,roll轴
俯仰角正负90度,一次和第三次旋转共轴,丢失一个自由度
三维旋转需要四个变量

Eigen库的安装与基础

安装:sudo apt-get install libeigen3-dev

1.Eigen库只有头文件,没有.so,.a等二进制库文件
在CMakeLists.txt里只需要添加头文件路径,不需要target_link_libraries将程序链接到库
2.转换图
在这里插入图片描述

标签:Eigen,矩阵,旋转,SLAM,坐标,齐次,向量
来源: https://blog.csdn.net/nobody258/article/details/111798618

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有