习题练习(视觉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.观察打 ...
随机推荐
- overwrite 复制
[root@myv xiaole_dl_img]# cp upfc/mainDEBUGmysqllogTEST.py online_package_test_/tmp/ cp: overwrite ‘ ...
- bootrap 手风琴Collapse源码分析
/* ======================================================================== * Bootstrap: collapse.js ...
- MPMoviePlayerController属性方法简介
属性 说明 @property (nonatomic, copy) NSURL *contentURL 播放媒体URL,这个URL可以是本地路径,也可以是网络路径 @property (nonatom ...
- 玲珑学院OJ 1023 - Magic boy Bi Luo with his excited math problem 树状数组暴力
分析:a^b+2(a&b)=a+b so->a^(-b)+2(a&(-b))=a-b 然后树状数组分类讨论即可 链接:http://www.ifrog.cc/acm/probl ...
- 开始学习java编程
先看视屏,学习JAVA语法先,后面再看java web mvc,以及myeclipse http://i.youku.com/u/UMzM4MjMxNjMy/videos 争取20天内进步很大.
- 蓝书2.4 AC自动机
T1 玄武密码 bzoj 4327 题目大意: 一些字符串 求这些字符串的前缀在母串上的最大匹配长度是多少 思路: 对于所有串建立AC自动机 拿母串在自动机上匹配 对所有点打标记 以及对他们的fail ...
- BZOJ_1692_[Usaco2007 Dec]队列变换_后缀数组
BZOJ_1692_[Usaco2007 Dec]队列变换_后缀数组 Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛” ...
- Windows Java环境变量配置
安装步骤略过... 环境变量配置 新建环境变量: JAVA_HOME C:\Program Files\Java\jdk1.6 将路径替换为自己的安装路径. 新建环境变量: classpath ...
- J20170602-ts
アソシエーション association n. 联想; 协会,社团; 联合,联系; アンケート 英文是questionnaire
- js的多种数值分类相加,数据先后没有顺序,不确定同类数据多少
下面是js源码片段.看的是思想. <script type="text/javascript"> deg_countMyChart = function(deptcod ...