1《MRPT指导教程》《MRPTTutorial》MRPT_V1.0.2汪若博※译keyearth@gmail.comMobileRobotProgrammingToolkit移动机器人编程工具箱版本历史V1.0.2建立文档...说明...Warning:本文内容仅供参考,为方便mrpt开发者学习而整理撰写,不保证内容准确无误,以mrpt官网内容为准:www.mrpt.orgCopyright:本文主要内容根据mrpt官网内容翻译整理,版权归英文原作者所有。任何组织和个人不得将本文档用于商业用途。Tips:编程语言为C++语言,适合具有一定C++/STL基础的开发者。...知行...
2MRPT版本1.0.2http://www.mrpt.org/tutorials/programming/
3目录《MRPT指导教程》.........................................................................................................................1目录...............................................................................................................................................3第一章入门.......................................................................................................................................91.1编译MRPT..........................................................................................................................91.1-1预备条件..................................................................................................................9(1.1)Windows..............................................................................................................9(1.2)GNU/Linux........................................................................................................11(1.3)Ubuntu/Debian...................................................................................................11(1.4)Fedora.................................................................................................................11(1.5)OpenSUSE.........................................................................................................11(1.6)Mac.....................................................................................................................111.1-2CMakebuild选项...................................................................................................12(2.1)使用cmake-gui..................................................................................................12(2.2)在控制台运行cmake........................................................................................12(2.3)感兴趣的build选项.........................................................................................121.1-3生成Makefiles/IDE工程......................................................................................131.1-4编译........................................................................................................................131.1-5其它编译器介绍....................................................................................................14(5.1)Windows下使用MinGW.................................................................................14(5.2)GNU/Linux下使用clang.................................................................................141.2你的第一个C++/MRPT程序..........................................................................................141.2-1源码文件................................................................................................................151.2-2使用CMake...........................................................................................................151.2-3接下来?................................................................................................................161.3简介MRPT库...................................................................................................................161.3-1已有库....................................................................................................................161.3-2创建库....................................................................................................................171.4你需要那个MRPT库?...................................................................................................171.5智能指针............................................................................................................................181.6常见问题和错误................................................................................................................181.6-1一般问题................................................................................................................181.6-2常见错误................................................................................................................181.7在Linux中用Makefile和pkg-config编译定制应用...................................................191.7怎样在ROS节点中使用MRPT?..................................................................................211.7-1小动作....................................................................................................................211.7-2Ready-to-use示例...................................................................................................211.8怎样与PCL交互使用MRPT?......................................................................................21第二章GUI窗口和3DOpenGL图形..........................................................................................222.13D场景简介......................................................................................................................222.1-1示例........................................................................................................................22
42.1-2类............................................................................................................................222.1-3视窗........................................................................................................................322.2高效的百万级点云渲染...................................................................................................322.3对Stanford3D模型文件格式(PLY)的支持..............................................................332.4消息框(渲染为矢量OpenGL图形)...........................................................................332.5在3D(OpenGL)窗口渲染视频...................................................................................342.62D字体实现.......................................................................................................................35第三章图像,图像处理,摄像头模型........................................................................................373.1特征探测和跟踪................................................................................................................373.1-1简介........................................................................................................................373.1-2探测器&描述子.....................................................................................................373.1-3跟踪........................................................................................................................373.1-4加载/保存为文本文件...........................................................................................373.2高效的非畸变图像序列...................................................................................................383.3使用MRPT校准多种摄像头...........................................................................................393.4立体图像校正....................................................................................................................39第四章地图(定位,SLAM,建图)...............................................................................................404.1Graph-SLAM地图.............................................................................................................404.1-1文本文件.graph格式.............................................................................................404.1-2二进制文件.graphbin格式....................................................................................404.1-3相关C++代码........................................................................................................414.1-4Graph地图示例......................................................................................................414.2占据栅格地图....................................................................................................................444.2-1理论基础................................................................................................................444.2-2一种高效实现........................................................................................................444.2-3已实现传感器模型(似然观测模型)................................................................454.2-4已实现操作............................................................................................................454.3度量地图层次模型............................................................................................................464.3-1关于MRPT中的地图...........................................................................................464.3-2地图们....................................................................................................................47(2.1)多度量地图Multi-metricmap..........................................................................47(2.2)信标地图Beaconmaps.....................................................................................47(2.3)2D气体浓度地图..............................................................................................47(2.4)2D高度(海拔)地图.....................................................................................47(2.5)路标地图Landmarkmaps................................................................................47(2.6)占据栅格地图Occupancygridmaps...............................................................47(2.7)点云地图Pointmaps........................................................................................474.3-3多度量地图的配置................................................................................................47第五章数学和几何.........................................................................................................................495.12D_3D_几何.......................................................................................................................495.1-12D/3DPoint、Pose、齐次坐标.............................................................................495.1-2MRPT中的空间几何类.........................................................................................49(2.1)CPoint2D:(x,y)..................................................................................................49(2.2)CPoint3D:(x,y,z)...............................................................................................50
5(2.3)CPose2D:(x,y,ϕ)................................................................................................51(2.4)CPose3D:(x,y,z,yaw,pitch,roll).........................................................................51(2.5)CPose3DQuat:3D变换+四元数(x,y,z,qr,qx,qy,qz)........................................525.1-33D旋转矩阵的推导...............................................................................................525.1-4类之间转换............................................................................................................535.1-5常用运算................................................................................................................54(5.1)位姿合并/逆合并..............................................................................................54(5.2)计算距离............................................................................................................54(5.3)计算范数............................................................................................................55(5.4)输出到控制台...................................................................................................555.1-6四元数....................................................................................................................555.1-7实例:移动机器人摄像头坐标变换....................................................................555.2Levenberg-Marquardt算法(数字雅可比矩阵)............................................................575.3矩阵、向量、数组和线性代数:MRPT和Eigen类....................................................575.3-1线性代数类:Eigen...............................................................................................575.3-2MRPT特有类.........................................................................................................575.3-3MRPT矩阵类和Eigen类之间的差异..................................................................585.3-4常见错误(及解决方案)....................................................................................58(4.1)编译时对齐问题.................................................................................................58(4.2)运行时对齐问题.................................................................................................60(4.3)混合数值类型:显式转换.................................................................................60(4.4)resize()与setSize()............................................................................................615.3-5从MRPT0.9.2移植代码的问题..........................................................................61(5.1)MRPT::vector_float和MRPT::vector_double问题........................................61(5.2)从位姿(TPose2D,...)显式构造矩阵....................................................................61(5.3)矩阵元素的迭代器.............................................................................................61(5.4)CVectorFloat和CVectorDouble.........................................................................61(5.5)矩阵方法unit()...................................................................................................615.3-6高级主题................................................................................................................61(6.1)在你的代码中同时包含MRPT和Eigen头文件.............................................615.4RANSACC++类................................................................................................................625.4-1RANSAC算法........................................................................................................625.4-2C++示例..................................................................................................................62(2.1)拟合3D平面.....................................................................................................62(2.2)拟合多个3D平面.............................................................................................63(2.3)拟合多个2D线.................................................................................................64(2.4)基于RANSAC的数据关联.............................................................................655.5SLERP插值........................................................................................................................655.5-1描述........................................................................................................................655.5-2C++实现..................................................................................................................665.5-3参考........................................................................................................................67第六章杂项.....................................................................................................................................686.1Kinect和MRPT.................................................................................................................686.1-1概述........................................................................................................................68
66.1-2示例代码和文档....................................................................................................686.1-3在Windows中安装...............................................................................................68(3.1)使用OpenKinect的libfreenect(推荐)..........................................................69(3.2)使用CLNUISDK..............................................................................................706.1-4在Unix/Linux中安装...........................................................................................706.1-5数据集....................................................................................................................706.2Kinect校正.........................................................................................................................706.3关于计量单位....................................................................................................................716.4从RGB+D观测生成3D点云(CObservation3DRangeScan对象)..........................726.4-1参数校正................................................................................................................726.4-2投影方程................................................................................................................72(2.1)一般情况..............................................................................................................73(2.2)“校正的”深度图...............................................................................................736.4-3相关MRPTAPIs....................................................................................................73(3.1)RGB+D–>local3Dpointcloud.........................................................................73(3.2)RGB+D–>local3Dpointcloud–>CPointsMap(&derived)..........................73(3.3)RGB+D–>CPointsMap(&derived)..................................................................73(3.4)RGB+D–>mrpt::opengl::CPointCloud..............................................................74(3.5)RGB+D–>mrpt::opengl::CPointCloudColoured...............................................74(3.6)RGB+D–>pcl::PointCloud
...........................................................74(3.7)RGB+D–>pcl::PointCloud...................................................746.5元编程:类型名to字符串..............................................................................................756.5-1描述........................................................................................................................756.5-2示例........................................................................................................................756.6mrpt-ros-pkg........................................................................................................................766.7在读取运行时Kinect数据和读取RGBD数据集文件之间的切换.............................776.8在MRPT中单元测试.......................................................................................................77第七章里程和运动模型.................................................................................................................787.1概率运动模型....................................................................................................................787.1-1介绍........................................................................................................................787.1-2高斯概率运动模型................................................................................................787.1-3Thrun,Fox&Burgard’sbook:粒子运动模型.....................................................80参考文献...........................................................................................................................82第八章路径和运动规划.................................................................................................................838.1避障....................................................................................................................................838.1-1概述........................................................................................................................838.1-2参考........................................................................................................................838.2占据栅格地图下的路径规划...........................................................................................838.2-1描述........................................................................................................................838.2-2使用........................................................................................................................838.2-3结果........................................................................................................................84参考文献...........................................................................................................................84第九章概率编程.............................................................................................................................86第十章扫描匹配和ICP.................................................................................................................86710.13D-ICP示例.....................................................................................................................8610.2迭代最近点(ICP)和其它匹配算法...........................................................................8710.2-1迭代最近点(ICP)算法....................................................................................87(1.1)使用示例..............................................................................................................88(1.2)“经典”ICP算法................................................................................................88(1.3)Levenberg-Marquardt的ICP算法.....................................................................9010.2-2对应关系组优化..................................................................................................90(2.1)最小二乘刚性变换(2D+方向)......................................................................90(2.2)最小二乘刚性变换(6D)................................................................................90(2.3)鲁棒刚性变换(2D+方向)..............................................................................90参考文献...........................................................................................................................90第十一章串行化.............................................................................................................................9111.1串行化机制......................................................................................................................9111.1-1基础......................................................................................................................91(1.1)类..........................................................................................................................91(1.2)POD(普通旧数据类型)和特例.....................................................................91(1.3)存储基础数据类型的数组.................................................................................92(1.4)基本用法..............................................................................................................9311.1-2运行时类识别......................................................................................................9411.1-3如何实现新的可串行化类..................................................................................95(3.1)一般步骤..............................................................................................................95(3.2)特殊情况..............................................................................................................9711.1-4MRPT中串行化的用途.......................................................................................9711.1-5MRPT内部注册可串行化类...............................................................................9711.1-6串行化和STL容器.............................................................................................9711.2Rawlog格式.....................................................................................................................9811.2-1现有操作工具......................................................................................................9811.2-2FORMAT#1:一种贝叶斯友好的文件格式..........................................................98(2.1)这种格式的”.rawlog”文件的实际内容.............................................................9911.2-3FORMAT#2:一种时间戳排序的观测序列..........................................................99(3.1)这种格式的”.rawlog”文件的实际内容.............................................................9911.2-4压缩Rawlog文件................................................................................................9911.2-5生成Rawlog文件................................................................................................9911.2-6读取Rawlog文件..............................................................................................100(6.1)选项A:文件流................................................................................................100(6.2)选项B:一次读取............................................................................................10111.2-7关于里程数据的注意事项................................................................................101第十二章统计和贝叶斯滤波[StatisticsandBayesfiltering]......................................................10212.1平均似然对数值[AveragingLog-LikelihoodValues]:数值稳定性[NumericalStability].................................................................................................................................................10212.1-1加权似然对数值[Weightedlog-likelihoodvalues]...........................................10212.1-2未加权似然对数值(算术平均值)[Unweightedlog-likelihoodvalues]......10212.2卡尔曼滤波[KalmanFilters].........................................................................................10312.2-1MRPT中的卡尔曼滤波器.................................................................................103
812.2-2为特定问题写一个KF类.................................................................................103(2.1)派生新类............................................................................................................103(2.2)算法内部流程...................................................................................................10312.2-3一个示例............................................................................................................104(3.1)问题描述............................................................................................................104(3.2)实现....................................................................................................................105(3.2.1)转移模型.........................................................................................................105(3.2.2)转移模型雅可比矩阵....................................................................................105(3.2.3)观测及观测模型............................................................................................10512.3粒子滤波算法................................................................................................................10712.3-1顺序重要性重采样[SequentialImportanceResampling]-SIR(pfStandardProposal).................................................................................................10712.3-2辅助粒子滤波[AuxiliaryParticleFilter]-APF(pfAuxiliaryPFStandard)...10712.3-3最优采样[OptimalSampling](pfOptimalProposal).....................................10712.3-4逼近最优采样[ApproximateOptimalSampling](pfAuxiliaryPFOptimal).107参考文献.........................................................................................................................10712.4粒子滤波器....................................................................................................................10812.5空间表征概率密度分布...............................................................................................10812.6重采样机制....................................................................................................................10912.6-1重采样算法........................................................................................................109(1.1)prMultinomial(默认)........................................................................................109(1.2)prResidual..........................................................................................................110(1.3)prStratified.........................................................................................................110(1.4)prSystematic.......................................................................................................11112.6-2MATLAB版本....................................................................................................111参考文献.........................................................................................................................111第十三章有用的MRPT宏(C++预处理器)................................................................................11213.1用于异常处理的宏........................................................................................................11213.1-1异常类别............................................................................................................11213.1-2异常引发宏(似断言宏)................................................................................11313.1-3用于异常传递的特殊宏....................................................................................11413.2关于宏MRPT_START/MRPT_END.........................................................................114