视觉SLAM ch3代码总结 (二)

coordinateTransform.cpp

首先小萝卜一号坐标变换到世界坐标系

Pw =  T w1 *  P 1

其次世界坐标系再变换到小萝卜二号坐标系

P2 = T 2w *  P w

所以 P2 = T 2w  *   Tw1 * P1

T2w 是使用四元数q2初始换欧式变换矩阵

 Isometry3d T2w(q2);

Tw1 =  T1w的逆矩阵   初始化和上面代码一样

 Isometry3d T1w(q1);

 在加上平移向量

 T1w.pretranslate(t1);
 T2w.pretranslate(t2);

计算P2的公式每项都已经知道 Tw1 = T1w{-1}   ({-1}表示逆)

p2 = T2w *  T1w.inverse() * p1;

最后记得在定义完四元数后归一化

q1.normalize();
q2.normalize();

*******************************************************************************************************

plotTrajectory.cpp

(1)关于<unistd.h>

许多在Linux下开发的C程序都需要头文件unistd.h,但VC中没有这个头文件,所以用VC编译总是报错。

unistd.h是unix std的意思,是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数。

unistd.h在unix中类似于window中的windows.h。
1、打开文件,函数open()  2、读取文件,函数read()  3、写文件,函数write()4、关闭文件,函数close()   5、控制文件,函数ioctl()

(2) vector<Isometry3d, Eigen::aligned_allocator<Isometry3d>>

vector<xxx,aligned_allocator<xxx>> 
让我们自己定义动态申请变量的方法。

aligned_allocator在做一件事,告诉vector容器Isometry3d的内存大小。

找到一个例子在介绍:

如果STL容器中的元素是Eigen库数据结构,例如这里定义一个vector容器,元素是Matrix4d ,如下所示:

vector<Eigen::Matrix4d>

这个编译不会出错,只有在运行的时候出错。解决的方法很简单,定义改成下面的方式:

vector<Eigen::Matrix4d,Eigen::aligned_allocator<Eigen::Matrix4d>>;

其实上述的这段代码才是标准的定义容器方法,只是我们一般情况下定义容器的元素都是C++中的类型,所以可以省略,这是因为在C++11标准中,aligned_allocator管理C++中的各种数据类型的内存方法是一样的,可以不需要着重写出来。但是在Eigen管理内存和C++11中的方法是不一样的,所以需要单独强调元素的内存分配和管理。

(3)关于文件操作的一些笔记

  • fin对象的作用可以理解成:对文件中的内容进行读操作 【从硬盘–>缓冲区】

  • fout对象的作用可以理解成:向文件中进行写操作 【从缓冲区–>硬盘】

  • cin对象的作用可以理解成实现:【键盘–>缓冲区】 
    如:string str; cin>>str;

  • cout对象的作用可以理解成:【缓冲区–>屏幕上显示】 
    如:cout<<str; 

ifstram fin("文件名");
ofstream  fout("文件名");

eof()函数返回true时是读到文件结束符0xFF,而文件结束符是最后一个字符的下一个字符。

eof()为真表示文件为空     !eof为真时表示文件非空

while(!fin.eof())   //文件读操作中使用while语句进行判断

 (4)自定义函数 DrawTrajectory()   

具体代码注释参考下面文章

视觉SLAM十四讲CH3代码解析及课后习题详解_nudt一枚研究生-CSDN博客

SLAM地图构建与定位算法,含有卡尔曼滤波和粒子滤波器的程序 SLAM算法的技术文档合集(含37篇文档) slam算法的MATLAB源代码,国外的代码 基于角点检测的单目视觉SLAM程序,开发平台VS2003 本程序包设计了一个利用Visual C++编写的基于EKF的SLAM仿真器 Slam Algorithm with data association Joan Solà编写6自由度扩展卡尔曼滤波slam算法工具包 实时定位与建图(SLAM),用激光传感器采集周围环境信息 概率机器人基于卡尔曼滤波器实现实时定位和地图创建(SLAM算法 机器人地图创建新算法,DP-SLAM源程序 利用Matlab编写的基于EKF的SLAM仿真器源码 机器人定位中的EKF-SLAM算法,实现同时定位和地图构建 基于直线特征的slam机器人定位算法实现和优化 SLAM工具箱,很多有价值的SLAM算法 EKF-SLAM算法对运动机器人和周围环境进行同步定位和环境识别仿真 SLAM using Monocular Vision RT-SLAM机器人摄像头定位,运用多种图像处理的算法 slam(simultaneous localization and mapping)仿真很好的入门 SLAM自定位导航的一个小程序,适合初学者以及入门者使用 slam算法仿真 slam仿真工具箱:含slam的matlab仿真源程序以及slam学习程序 移动机器人栅格地图创建,SLAM方法,可以采用多种地图进行创建 SLAM算法程序,来自悉尼大学的作品,主要功能是实现SLAM算法SLAM算法中的EKF-SLAM算法进行改进,并实现仿真程序 SLAM的讲解资料,机器人导航热门方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值