习题练习(视觉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.观察打 ...
随机推荐
- mac 查看python路径
1,terminal : input: which python 2, terminal: input : python --->import sys ----> print sys ...
- HFile存储格式
Table of Contents HFile存储格式 Block块结构 HFile存储格式 HFile是參照谷歌的SSTable存储格式进行设计的.全部的数据记录都是通过它来完毕持久化,其内部主要採 ...
- web 开发之js---js 实现文本高亮
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head ...
- 在不同的系统中的virtualbox中安装Ubuntu SDK
对非常多的开发人员来说.你们可能使用的不是Ubuntu操作系统.在这样的情况下,开发人员须要在自己的操作系统中(OS X及Windows)安装virtualbox,并在VirtualBox中安装Ubu ...
- Chrome查看JavaScript函数
在页面上右键view page source(Ctrl+U),然后在弹出来的界面可以查找JavaScript函数 注意:这个只能看到内嵌在网页上的JavaScript函数 一般来讲,JavaScrip ...
- POJ1664 计数 DP
题目传送门 http://poj.org/problem?id=1664 设$dp[i][j]$表示$i$个苹果放在$j$个盘子里的总数 $1.$ 当 苹果数 小于 盘子数 $(M < N) ...
- P2465 [SDOI2008]山贼集团 dp
这个题是一道树形dp+状压dp二合一,先预处理每种组合会有什么额外的费用,然后在树上dp就行了. 题干: 题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两 ...
- python3 批量管理Linux服务器 下发命令与传输文件
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import paramiko import os, stat import sys import ope ...
- mysql/sql server和java之间的数据类型对应关系
Mysql************************************当前列 ClassName ColumnType DisplaySize TypeName0: java.lang.I ...
- nodejs常用命令
npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装的包. 1.npm install m ...