首页 > 【视觉SLAM14讲】ch3课后题答案

【视觉SLAM14讲】ch3课后题答案

1.验证旋转矩阵是正交矩阵

感觉下面这篇博客写的不错

http://www.cnblogs.com/caster99/p/4703033.html 

总结一下:旋转矩阵是一个完美的矩阵——正交矩阵。①行列式为1,②每个列向量都是单位向量且相互正交,③它的逆等于它的转置。

 


 

2.罗德里格斯公式的简单推导

http://blog.sina.com.cn/s/blog_ea828d2a0102wlk6.html

罗德里格斯旋转公式是通过反对称矩阵求旋转矩阵的方法,起初我在看别人写的姿态解算分析文章里看到,他的推导如下:

请注意我做标记的地方,我刚开始一直不明白这种推导,这样会有误差的推导,难道罗德里格斯公式是对旋转矩阵R的近似?这样做并不好,反而会使解算的姿态更不准确,后来在群里讨论这个问题,有大神给我解惑了。

首先我们明白这是一个SO(3)到SO(3)的李群的映射。不要担心自己不知道李群是什么,因为我们下面的推导会非常简单!

 

我们先来看什么是反对称矩阵,在这之前,先展示它和向量叉乘(内积)的关系:

红色三个格子应该是i  j  k

 

下面看看我们的反对称矩阵运算:

加一个小三角,就是将这个向量变成一个反对称矩阵

 

 所以我们得出:

我们知道我们的旋转矩阵R和我们的三角函数的关系,这里就不多说了,所以现在我们来看一个反对称矩阵的性质,首先定义一个反对称矩阵:

同时我们有如下的约束:

现在我们可以看到我们的反对称阵有如下性质:

 

现在可以进行我们的罗德里格斯公式推导了:

 

 


 3. 验证四元数旋转某个点后,结果是一个虚四元数(实部为零),所以仍然对应 到一个三维空间点(式 3.34)。

 =.=  看我干啥?下一题

 


 

4.旋转矩阵  轴角  欧拉角  四元数

书上都有

P42 轴角[n,α]与旋转矩阵的关系

P52 轴角[n,α]与四元数的关系

欧拉角存在gimbal lock,不研究他的关系【其实我不会】


 

5.假设有一个大的eigen矩阵,想把他的左上角的3*3取出来,然后赋值为I3x3

 

 

 


 

6.Ax = b的Eigen实现

 


 

7.

机器人一号和二号,分别在世界坐标系中。 

一号的位姿q1=[0.35,0.2,0.3,0.1]t1=[0.3,0.1,0.1]T。 

二号的位姿q2=[0.5,0.4,0.1,0.2]t2=[0.1,0.5,0.3]T。 

q的第一项是实部,且还未归一化。 

已知一号机器人看到某个点,在他的坐标系下是p=[0.5,0,0.2]T, 求在二号机器人坐标系下该点的位置。

 

#include 
#include // Eigen 部分
#include 
// 稠密矩阵的代数运算(逆,特征值等)
#include 
//Eigen 几何模块
#include using namespace std;int main(int argc, char **argv) {Eigen::Quaterniond q1(0.35, 0.2, 0.3, 0.1);Eigen::Quaterniond q2(-0.5, 0.4, -0.1, 0.2);Eigen::Vector3d t1(0.3, 0.1, 0.1);Eigen::Vector3d t2(-0.1, 0.5, 0.3);Eigen::Vector3d p1(0.5, 0, 0.2);Eigen::Quaterniond q1_one = q1.normalized();Eigen::Quaterniond q2_one = q2.normalized();//way1
    Eigen::Vector3d v = q1_one.inverse() * (p1 - t1);Eigen::Vector3d v2 = q2_one * v + t2;cout << "way1 v2 = " << endl << v2 << endl;//way2    Eigen::Matrix3d R1 = Eigen::Matrix3d(q1_one);Eigen::Matrix3d R2 = Eigen::Matrix3d(q2_one);Eigen::Vector3d v_2 = R1.inverse() * (p1 - t1);Eigen::Vector3d v_2_2 = R2 * v_2 + t2;cout << "way2 v2= " << endl << v_2_2 << endl;return 0;
}

 

way1 v2 = 
-0.03097310.734990.296108



way2 v2= -0.03097310.734990.296108 *** Exited normally ***

 

转载于:https://www.cnblogs.com/-Mr-y/p/7737990.html

更多相关:

  • 当函数y = 10*(x0+3)^2 + (x1-5)^2取最小值时,计算x0和x1的值,即: {x0, x1} = arg⁡min⁡x0,x1(10∗(x0+3)2+(x1−5)2)mathop{argmin}_{x0, x1}( 10*(x0+3)^2 + (x1-5)^2)argminx0,x1​(10∗(x0+3)2+...

  • 看龙书的时候发现一个矩阵在传入Shader之前都要转置一下,很好奇为什么要有一步这样的操作。行主序和列主序行主序指矩阵在内存中逐行存储,列主序指矩阵在内存中逐列存储。行主序矩阵内存布局:列主序矩阵内存布局:行向量和列向量行向量指的是把向量当成一个一行n列的矩阵,列向量指的是把向量当成一个n行一列的矩阵。左乘和右乘矩阵“左乘”:矩阵和向...

  • ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下,都能够完成初始化的工作。其中主要是使用了适用于平面场景的单应性矩阵H和适用于非平面场景的基础矩阵F,程序中通过一个评分规则来选择适合的模型,恢复相机的旋转矩阵R和平移矩阵t那么下面主要讲解关于对极几何中的基础矩阵,本质矩阵,和单应矩阵之间的区别与联...

  • 矩阵可分为稠密矩阵和稀疏矩阵,对于稀疏矩阵而言,使用同样的内存来存储这个矩阵显然是对内存的浪费,那么我们就可以想办法将矩阵中所有的o元素挥着不相关元素剔除,怎么剔除,第一种方法是通过三个一维矩阵来存储原二维矩阵中的所有非0元素,三个矩阵分别为value、column、row, value 数组存储所有的非零元素, column 数...

  • void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const; m – 目标矩阵。如果m在运算前没有合适的尺寸或类型,将被重新分配。rtype – 目标矩阵的类型。因为目标矩阵的通道数与源矩阵一样,所以rtype也可以看做是目标...

  • https://blog.csdn.net/jiangdf/article/details/8460012 glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有3种模式: GL...

  • 英语的重要性,毋庸置疑!尤其对广大职场人士,掌握英语意味着就多了一项竞争的技能。那,对于我们成人来说,时间是最宝贵的。如何短时间内在英语方面有所突破,这是我们最关心的事情。英语学习,到底有没有捷径可以走,是否可以速成?周老师在这里明确告诉大家,英语学习,没有绝对的捷径走,但是可以少走弯路。十多年的教学经验告诉我们,成功的学习方法可以借...

  • 展开全部 其实IDLE提供了一个显32313133353236313431303231363533e78988e69d8331333365663438示所有行和所有字符的功能。 我们打开IDLE shell或者IDLE编辑器,可以看到左下角有个Ln和Col,事实上,Ln是当前光标所在行,Col是当前光标所在列。 我们如果想得到文件代码...

  • 前言[1]从 Main 方法说起[2]走进 Tomcat 内部[3]总结[4]《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spri...

  • 【本文摘要】【注】本文所述内容为学习Yjango《学习观》相关视频之后的总结,观点归Yjango所有,本文仅作为学习之用。阅读本节,会让你对英语这类运动类知识的学习豁然开朗,你会知道英语学习方面,我们的症结所在。学习英语这类运动类知识,需要把握四个原则第一,不要用主动意识。第二,关注于端对端第三,输入输出符合实际情况第四,通过多个例子...

  • 点云PCL免费知识星球,点云论文速读。文章:RGB-D SLAM with Structural Regularities作者:Yanyan Li , Raza Yunus , Nikolas Brasch , Nassir Navab and Federico Tombari编译:点云PCL代码:https://github.co...