(转载)cartographer总结1

cartographer_node总结:
cartographer启动以后,做了如下的工作:

  1. 注册并发布了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了。 这个点我们就留到下篇文章再开始
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值