这篇文章是根据专栏
cartographer源码详细解读www.zhihu.com做的笔记,感谢大神的无私分享.
cartographer_ros
这个包是用户用于调用cartographer库的一个接口包,将库里的功能都封装好了,便于用户使用.
首先, Node.h的构造函数中定义了一些ROS service,用户通过不同的ROS client可以使用这些service, 其中就包括了用于车子开始新的一圈儿的Node::HandleStartTrajectory,这个函数是外部使用这个库的起点.
然后,在HandleStartTrajectory里, 经历过一些状态检查之后会调用Node::AddTrajectory,来添加一个新的轨迹.
接着在AddTrajectory函数中,调用了Node的成员变量map_builder_bridge_的成员函数AddTrajectory. ->map_builder_bridge是MapBuilderBridge类的实例,用于将cartographer和cartographer_ros联系起来,他的成员函数AddTrajectory调用了cartographer库中的MapBuilder类的AddTrajectoryBuilder函数,从而将程序引到cartographer库.
(Node::AddTrajectory以及map_builder_bridge_->AddTrajectory中还有其他的一些处理,如传感器数据的接口等,这里主要是介绍算法流程,就不细说了)
cartographer
承接上文,程序通过MapBuilder类的AddTrajectoryBuilder函数转入到cartographer.
MapBuilder是cartographer算法的最顶层设计,MapBuilder包括了两个部分,其中Trajecto