概述
cartographer_node总结:
cartographer启动以后,做了如下的工作:
- 注册并发布了5个Topic, 并为5个Topic分别设置了定时器函数,在定时器函数中定期向Topic上广播数据:
|===1) Topic 1: kSubmapListTopic: 广播构建出来的submap的list
|-----------发布数据的函数:Node::PublishSubmapList
|-----------调用函数:map_builder_bridge_.GetSubmapList();
|===2) Topic 2: kTrajectoryNodeListTopic:发布trajectory
|-----------发布数据的函数:Node::PublishTrajectoryNodeList Node::PublishTrajectoryStates:
|-----------调用函数:map_builder_bridge_.GetTrajectoryNodeList();
|===3) Topic3: kLandmarkPoseListTopic
|-----------发布数据的函数:Node::PublishLandmarkPosesList
|-----------调用的函数:map_builder_bridge_.GetLandmarkPoseList();
|===4) Topic4: kConstraintListTopic
|-----------发布数据的函数:Node::PublishConstraintList
|-----------调用的函数:map_builder_bridge_.GetConstraintList();
|===5)Topic5: kScanMatchedPointCloudTopic
|-----------发布数据的函数:Node::PublishTrajectoryStates
|-----------调用的函数:map_builder_bridge_.GetTrajectoryStates();
|-----------这个函数名与Topic名对应不上,但是查看Node::PublishTrajectoryStates不难发现,函数中有一句:
scan_matched_point_cloud_publisher_.publish(ToPointCloud2Message(
carto::common::ToUniversal(trajectory_state.local_slam_data->time),
node_options_.map_frame,
carto::sensor::TransformTimedPointCloud(
point_cloud, trajectory_state.local_to_map.cast())));
2. 发布了4个Service,并为4个Service分别设置了句柄函数,而句柄函数也是通过调用map_builder_bridge_的成员函数来处理的。
|===1)Service 1: kSubmapQueryServiceName
|-----------句柄函数:Node::HandleSubmapQuery
|-----------实际处理的函数:map_builder_bridge_.HandleSubmapQuery
|===2) Service 2: kStartTrajectoryServiceName
|-----------句柄函数:Node::HandleStartTrajectory
|-----------实际处理的函数:map_builder_bridge_.AddTrajectory等;
|-----------这里需要额外注意的是Node::LaunchSubscribers这个函数。这个函数负责处理各个传感器函数。仔细读其中的每个处理函数,比如处理IMU的Node::HandleImuMessage函数,发现其实际调用的是map_builder_bridge_中的一个成员类sensor_bridge_ptr的函数来处理:sensor_bridge_ptr->HandleImuMessage。
|===3) Service 3: kFinishTrajectoryServiceName
|------------句柄函数:Node::HandleFinishTrajectory
|------------实际处理的函数:map_builder_bridge_.FinishTrajectory
|===4) Service 4: kWriteStateServiceName
|------------句柄函数:Node::HandleWriteState
|------------实际处理的函数:map_builder_bridge_.SerializeState
可以看到,cartographer_ros这个节点启动后所有东西都交给了map__builder_bridge_去处理。所以,之后我们得去研究这个类:MapBuilderBridge了。 这个点我们就留到下篇文章再开始
最后
以上就是淡然芹菜为你收集整理的(转载)cartographer总结1的全部内容,希望文章能够帮你解决(转载)cartographer总结1所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复