习题练习(视觉slam14讲课后习题)
设有⼩萝⼘1⼀号和⼩萝⼘⼆号位于世界坐标系中。
⼩萝⼘⼀号的位姿为:q1 = [0.55, 0.3, 0.2, 0.2], t1 = [0.7, 1.1, 0.2]T(q 的第⼀项为实部)。这⾥的 q 和 t 表达的是 Tcw,也就是世界到相机的变换关系。
⼩萝⼘ ⼆号的位姿为 q2 = [−0.1, 0.3, −0.7, 0.2], t2 = [−0.1, 0.4, 0.8]T。
现在,⼩萝⼘⼀号看到某个点在⾃⾝的坐 标系下,坐标为 p1 = [0.5, −0.1, 0.2]T,求该向量在⼩萝⼘⼆号坐标系下的坐标。
请编程实现此事,并提交 你的程序。
下面是我的程序:hw3_3.cpp
#include <iostream>
#include <Eigen/Core>
#include <Eigen/Geometry>
#include <cmath>
using namespace std;
int main()
{
/*1、先求出p点在世界坐标系下的坐标pw=Twc*pc1=Tcw`*pc1
*先根据q1和t1,得到Twc(四元数使用之前要归一化)
*再求出Tcw,再代入公式得到Pw
*/
Eigen::Quaterniond q1(0.55,0.3,0.2,0.2);
Eigen::Vector3d t1;
t1<<0.7,1.1,0.2;
Eigen::Vector3d pc1(0.5,-0.1,0.2);
// 变换矩阵T用 Eigen::Isometry
Eigen::Isometry3d Twc1=Eigen::Isometry3d::Identity(); // 虽然称为3d,实质上是4*4的矩阵
Twc1.rotate ( q1.normalized() ); // 按照q1进行旋转
Twc1.pretranslate ( t1 ); // 按照t1进行平移
// 用变换矩阵进行坐标变换
Eigen::Vector3d pw = Twc1.inverse()*pc1; // 相当于R*v+t
//2、再求出pw在小萝卜二号坐标系下的坐标pc2=Tcw*pw
Eigen::Quaterniond q2(-0.1,0.3,-0.7,0.2);
Eigen::Vector3d t2;
t2<<-0.1,0.4,0.8;
// 变换矩阵T用 Eigen::Isometry
Eigen::Isometry3d Tcw2= Eigen::Isometry3d::Identity(); // 虽然称为3d,实质上是4*4的矩阵
Tcw2.rotate ( q2.normalized() ); // 按照q2进行旋转
Tcw2.pretranslate (t2 ); // 按照t2进行平移
Eigen::Vector3d pc2=Tcw2*pw;
cout << "pc2= " <<pc2.transpose()<<endl;
;
}
然后它对应的CMakeLists.txt文件对应为:
cmake_minimum_required( VERSION 2.8 ) project( hw3 ) set( CMAKE_BUILD_TYPE "Release" ) set( CMAKE_CXX_FLAGS "-O3" ) # 添加Eigen头文件 include_directories( "/usr/include/eigen3" ) add_executable( hw3_3 hw3_3.cpp )
然后cmake make得到答案是:
pc2= 1.08228 0.663509 0.686957
习题练习(视觉slam14讲课后习题)的更多相关文章
- 小甲鱼零基础学python第25讲课后习题动手练习--通讯录
小甲鱼零基础学python第25讲课后习题动手练习---通讯录 **************************通讯录要求******************************* 输入指令: ...
- 视觉slam十四讲课后习题ch3-7
题目回顾: 设有小萝卜一号和小萝卜二号位于世界坐标系中,小萝卜一号的位姿为:q1=[0.35,0.2,0.3,0.1],t2=[0.3,0.1,0.1]^T (q的第一项为实部.请你把q归一化后在进行 ...
- 视觉slam十四讲课后习题ch3--5题
题目回顾: 假设有一个大的Eigen矩阵,我想把它的左上角3x3块提取出来,然后赋值为I3x3.编程实现.解:提取大矩阵左上角3x3矩阵,有两种方式: 1.直接从0-2循环遍历大矩阵的前三行和三列 2 ...
- 小甲鱼Python第二十一讲课后习题
测试题: 0. 递归在编程上的形式是如何表现的呢? 在编程上,递归表现为函数调用本身这么一个行为. 1. 递归必须满足哪两个基本条件? 一. 函数调用自身二. 设置了正 ...
- 小甲鱼Python第二十讲课后习题---021
笔记: 1.lambda表达式的作用: 1)Python写一些执行脚本时,使用lambda就可以省下定义函数的过程,比如说我们只是需要写一个简单的脚本来管理服务器时间,我们就不需要专门定义一个函数然后 ...
- 小甲鱼Python第十七讲课后习题
笔记: 1.分清楚形参和实参 2.函数文档:是函数的一部分,于解释不同,使用help(函数名)或者 函数名__doc__可以查看到 3.关键字参数(在一个函数的参数较多的时候作用比较明显): 给参数的 ...
- 小甲鱼Python第十六讲课后习题--017函数
函数的定义用def,函数名后要用冒号 函数的返回:函数中使用return 测试题: 0. 你有听说过DRY吗? DRY是指Don't Repeat Yourself ,特指在程序设计以及计算中避免 ...
- 小甲鱼Python第九讲课后习题--010列表
0.列表都可以存放一些什么东西? 可以存放任何的数据类型 1. 向列表增加元素有哪些方法? append()--末尾添加一个元素 extend()--末尾添加多个元素,但要求已列表的格式添加[x,x, ...
- 小甲鱼Python第四讲课后习题
1while语句中,当条件为真时,它会一直循环下去,比如下面的例子,不过可以用Ctral + C来强制结束 while 'C': print("i love you") 2.观察打 ...
随机推荐
- [办公应用]如何制作二Y轴图(excel)
有时候我们会遇到一种图表,就是X轴一致,可是Y轴的数据相差很大.如下图中,年龄和收入就不是一个数量级,在图表中显示的时候,“年龄”的曲线根本看不到(表中数据仅供举例): 解决的方法就是使用双Y轴显示, ...
- socketserver模块三次登陆验证,身份验证
帅爆太阳的男人 1,socketserver是解决TCP服务器和多个客户端进行通信 服务器: import socketserver class MySocket(socketserver,BaseR ...
- 【OI】关于斯特林数的简单理解
斯特林数分为第一类斯特林数:S1(n,k)和第二类斯特林数:S2(n,k). S1(n,k)代表在n个元素中选出k个环的方案数,S2(n,k)代表在n个元素中选出k个非空集合的方案数, 不同之处在于, ...
- Interval 计时器
语法: setInterval(代码,交互时间); 在执行时,从载入页面后每隔指定的时间执行代码. clearInterval( setInterval() 返回的 ID 值 ): 取消计时器 < ...
- Keil和IAR——使用笔记
1. 几个宏的定义 Keil和IAR均用到以下三种宏定义,分别是:USE_STDPERIPH_DRIVER——表示使用ST提供的标准外设固件库:STM32F40_41xxx——作为芯片的判断:VECT ...
- YTU 2506: 切面条
2506: 切面条 时间限制: 1 Sec 内存限制: 128 MB 提交: 382 解决: 223 题目描述 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀, ...
- 6 Workbook 对象
6.1 在奔跑之前先学会走路:打开和关闭工作薄 代码清单6.1:一个完整的工作薄批处理框架 '代码清单6.1:一个完整的工作薄批处理框架 Sub ProcessFileBatch() Dim nInd ...
- SYSUCPC2017 online round La La string 应用manacher算法
manacher算法给出一个字符串中 以每个位置为对称中心的回文串长度,但是大部分时候我们只需要知道以每个位置为起点的回文串长度,感觉有点浪费. 那么来看看这个不难也不太简单的题目 第一步,我们要想办 ...
- gitlab邮箱验证 邮箱提醒设置
Gitlab邮件提醒方便跟踪项目进度,在这里介绍两种方式,一种是用系统的sendmail发送邮件,另一种是GMAIL的stmp来发送邮件 第一种 用系统的sendmail发送邮件 cd /ho ...
- IDEA中Spark往Hbase中写数据
import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.io.ImmutableBytesWr ...