视觉slam十四讲课后习题ch3-7
题目回顾:
设有小萝卜一号和小萝卜二号位于世界坐标系中,小萝卜一号的位姿为:q1=[0.35,0.2,0.3,0.1],
t2=[0.3,0.1,0.1]^T (q的第一项为实部。请你把q归一化后在进行计算)。这里的q和t的表达的是Tcw,也就是世界到相机的变换关系。小萝卜二号的位姿为q2=[-0.5,0.4,-0.1,0.2],t=[-0.1,0.5,0.3]^T.现在,小萝卜一号看到某个点在自身的坐标系下,坐标为p=[0.5,0,0.2]^T ,求该向量在小萝卜二号坐标系下的坐标,请编程实现此事。
解:
pw:某个点在世界坐标系下的坐标
T_1w :表示世界坐标系到小萝卜一号坐标系的变换关系
T_2w:表示世界坐标系到小萝卜二号坐标系的变换关系
P2 :表示该点在小萝卜二号坐标系下的坐标(即为所求)
单位四元数到旋转矩阵R的变化关系可参考书上55页。之后变换矩阵T=[R t]
[0 1]
由变换关系可列出下面的式子:
p = T_1w * Pw 可解出来pw
p2=T_2W*pW 带入上式解出来的Pw即可求出来p2
具体代码实现如下:
#include<iostream>
#include<Eigen/Core> //包含几何模块
#include<Eigen/Geometry>
using namespace std; int main(int argc,char **argv)
{
/*变量定义*/
Eigen::Quaterniond Q1(0.2,0.3,0.1,0.35); //四元数的表示(w ,x,y,z)
Eigen::Quaterniond Q2(0.4,-0.1,0.2,-0.5);
Eigen::Vector3d t1(0.3,0.1,0.1);
Eigen::Vector3d t2(-0.1,0.5,0.3);
Eigen::Vector3d p(0.5,,0.2); //在一号小萝卜下的坐标
Eigen::Vector3d pw ; //世界坐标
Eigen::Vector3d p2; //求在二号小萝卜的坐标 p2 /*欧氏变换矩阵使用Eigen::Isometry */
Eigen::Isometry3d T_1w = Eigen::Isometry3d::Identity();
Eigen::Isometry3d T_2w = Eigen::Isometry3d::Identity(); /*归一化*/
Q1.normalize();
Q2.normalize(); /*输出归一化参数*/
// cout<<"Q1 is "<<Q1.x()<<endl<<Q1.y()<< endl <<Q1.z()<< endl<<Q1.w()<<endl;
// cout<<"Q2 is "<<Q2.x()<<endl<<Q2.y()<< endl <<Q2.z()<< endl<<Q2.w()<<endl; cout<<"after normalize; "<< endl << Q2.coeffs()<<endl; /*设置变换矩阵的参数*/
T_1w.rotate(Q1);
T_1w.pretranslate(t1);
T_2w.rotate(Q2);
T_2w.pretranslate(t2); /* p = T1w * pw 求解pw*/
pw = T_1w.inverse() * p; /* p2 = T_2w * pw 求解p2*/
p2 = T_2w * pw; /*输出在小萝卜二号下的该点坐标*/
cout<<"该点在小萝卜二号下的坐标为: "<<p2.transpose()<<endl; return ;
}
欢迎大家关注我的微信公众号「佛系师兄」,里面有关于 Ceres 以及 OpenCV 库的一些文章。
比如
「反复研究好几遍,我才发现关于 CMake 变量还可以这样理解!」
更多好的文章会优先在里面不定期分享!打开微信客户端,扫描下方二维码即可关注!

视觉slam十四讲课后习题ch3-7的更多相关文章
- 视觉slam十四讲课后习题ch3--5题
题目回顾: 假设有一个大的Eigen矩阵,我想把它的左上角3x3块提取出来,然后赋值为I3x3.编程实现.解:提取大矩阵左上角3x3矩阵,有两种方式: 1.直接从0-2循环遍历大矩阵的前三行和三列 2 ...
- 《视觉SLAM十四讲课后作业》第二讲
1.设线性⽅程 Ax = b,在 A 为⽅阵的前提下,请回答以下问题:1. 在什么条件下,x 有解且唯⼀? 非齐次线性方程在A的秩与[A|B]的秩相同时方程有解,当R(A)=R(A,B)=n时方程有唯 ...
- 《视觉SLAM十四讲课后作业》第一讲
1. 如何在 Ubuntu 中安装软件(命令⾏界⾯)?它们通常被安装在什么地⽅? 答:一般有两种安装方式(1)apt-get install (2)dpkg -i package.deb.系统软件一般 ...
- 视觉slam十四讲第七章课后习题7
版权声明:本文为博主原创文章,转载请注明出处:http://www.cnblogs.com/newneul/p/8544369.html 7.题目要求:在ICP程序中,将空间点也作为优化变量考虑进来 ...
- 视觉slam十四讲第七章课后习题6
版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8545450.html 6.在PnP优化中,将第一个相机的观测也考虑进来,程序应如何 ...
- 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM
下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/slambook 第二讲:初识SLAM 2.4.2 Hello SLAM(书本P2 ...
- 高博-《视觉SLAM十四讲》
0 讲座 (1)SLAM定义 对比雷达传感器和视觉传感器的优缺点(主要介绍视觉SLAM) 单目:不知道尺度信息 双目:知道尺度信息,但测量范围根据预定的基线相关 RGBD:知道深度信息,但是深度信息对 ...
- 《视觉SLAM十四讲》第2讲
目录 一 视觉SLAM中的传感器 二 经典视觉SLAM框架 三 SLAM问题的数学表述 注:原创不易,转载请务必注明原作者和出处,感谢支持! 本讲主要内容: (1) 视觉SLAM中的传感器 (2) 经 ...
- 《视觉SLAM十四讲》第1讲
目录 一 视觉SLAM 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 视觉SLAM 什么是视觉SLAM? SLAM是Simultaneous Localization and Mappin ...
随机推荐
- shiro整合springmvc
说明 代码及部分相关资料根据慕课网Mark老师的视频进行整理 其他资料: shiro官网 流程 配置 1) 配置web.xml整合shiro 把shiro整合到springMVC实质上是在we ...
- NSOperationQueue队列依赖相关思考
添加依赖后,队列中网络请求任务有依赖关系时,任务结束判定以数据返回为准还是以发起请求为准? waitUntilFinished方法容易误解. 依赖关系 // // ViewController.m / ...
- 11.在Chrome谷歌浏览器中安装插件XPath Helper的方法
1.首先在以下链接下载XPath Helper插件,链接:https://pan.baidu.com/s/1Ng7HAGgsVfOyqy6dn094Jg 提取码:a1dv 2.插件下载完成后解压,然后 ...
- 菜鸟学习Fabric源码学习 — 背书节点和链码容器交互
Fabric 1.4 源码分析 背书节点和链码容器交互 本文档主要介绍背书节点和链码容器交互流程,在Endorser背书节点章节中,无论是deploy.upgrade或者调用链码,最后都会调用Chai ...
- AcWing 220. 最大公约数 | 欧拉函数
传送门 题目描述 给定整数N,求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)有多少对. GCD(x,y)即求x,y的最大公约数. 输入格式 输入一个整数N 输出格式 输出一个 ...
- Sample Code之Web scene-slides
这是我的第一篇随笔,在开始正文前说几句. 这个系列会记录我学习Arcgis js API 4.10的全过程,希望能对自己也对其他有需要的人有帮助.很多时候上网看一些大神的帖子会感到一头雾水,一是自己水 ...
- Java ArrayList类的简单介绍
ArrayList类的说明: ArrayList类是List接口的实现类,java.util.ArrayList集合数据存储的结构是数组结构. 特点: 元素增删慢,查找快.(由于日常开发中使用最多的功 ...
- GB国标编码的程序出现乱码
- cogs 3008. 朋友圈
3008. 朋友圈 ★★ 输入文件:friendscircle.in 输出文件:friendscircle.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] NO ...
- C# HttpWebRequest传递参数多种方式混合使用
在做CS调用第三方接口的时候遇到了这样的一个问题,通过PSOTman调试需要分别在parmas.Headers.Body里面同时传递参数.在网上查询了很多资料,以此来记录一下开发脱坑历程. POSTm ...