自己手绘了一张,图糙理不糙
其实里面还有大量细节没有展示
这里简单介绍一下:
我们都知道运行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架构