cartographer架构设计图
Posted COCO_PEAK_NOODLE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cartographer架构设计图相关的知识,希望对你有一定的参考价值。
自己手绘了一张,图糙理不糙
其实里面还有大量细节没有展示
这里简单介绍一下:
我们都知道运行cartographer的ros程序有2个包一个是cartographer自己的库文件,还有一个是接收ros话题然后传给cartographer的node包。
而cartographer在代码架构上是如何处理数据并显示的呢?这里展开叙述一下:
1-数据先传递给GlobalTrajectory类,然后GlobalTrajectory类传递给LocalTrajectory类,
2-LocalTrajectory类中使用ScanMacher来处理激光及IMU及odom数据,获得2个重要的数据类型,分别是submap和node,这两个数据代表了位姿图中的node节点和submap节点,
3-接着将这两个数据传入PoseGraph的线程池中进行处理,处理什么呢?就是找到node和submap之间的约束(constraints),这一步业界叫做回环检测,
4-再接着把找到的约束传入Oprimization中进行优化,就可以得到优化后的node和submap的位姿了,
5-把正确的位姿和显示数据传递给rviz就可以进行显示地图和机器人的当前位置了。
这张图对应了cartographer架构中重要的几个类,分别是
1-GlobalTrajectory
2-LocalTrajectory(用于构建前端)
3-PoseGraph(用于优化后端)
4-ThreadPool(用于并行构建多约束模型,用于后端优化)(亮点)
5-Optimization(使用ceres构建约束方程,完成优化任务)
cartographer做的不止这些,前端和后端的匹配器并不一样,还有前端还有一个位姿推断器(用于融合imu和odom数据),他还有完善的地图保存,加载,纯定位功能,甚至还写好了slam远程服务器,使用rpc进行数据传输,实现多路径多数据上传进行服务器建图,mygod!ok,后面有时间会一一分解,万丈高楼起,一砖一瓦皆代码。
以上是关于cartographer架构设计图的主要内容,如果未能解决你的问题,请参考以下文章