计算map代码_cartographer--2D代码解析(1)点云数据进入方式

8628f985dbbe93a75746cfe00b4ed1c1.png

感谢各位对我的支持,之前抽风写的这边文章阅读人数超出了我的想想,现在开始实现承诺,发布几个开源slam代码的解析。

本人工作比较忙,回家要陪闺女玩,所以每天更新知乎的时间不多,我尽量保证一天一更。

目的:

1: 之前总结过,后来长时间不看就忘记了,留下文字记录。

2: 在写解析的过程中,又学习了一遍,每次都有新的收获,最大的应该是代码结构

3:结交更多的朋友,深知只有交流、讨论才能共同进步。

4: 我是真的想提高知乎的写作等级,希望大家能帮点关注、收藏、分享、赞。

书灌木:五年无人驾驶工作总结及展望​zhuanlan.zhihu.com

cartographer是google开源的slam,可以说是国际上第一个工程化的slam。我的代码运行环境是tx2和xavier。在此解析非ros版本。

点云数据进入流程:

1. http://map_builder_server_main.cc创建map_builder_server_;

2. map_builder_server_的构造函数中新建async_grpc::Server,grpc_server_中会添加AddRangefinderDataHandler(),并行执行。并设置grpc_server_的上下文为当前map_builder_server_。

3. map_builder_server.start(),开始执行grpc_server_,开始接收点云数据。并调用StartSlamThread()开始处理接收到的点云数据。

4. AddRangefinderDataHandler::OnSensorData()接收点云,并将其转换成Dispatchable,Dispatchable继承自Data,包含AddToTrajectoryBuilder()函数。并调用map_builder_context_impl.h中的EnqueueSensorData()将Dispatchable添加到map_builder_server_的incomming_data_queue_。

5. 回到map_builder_server.start(),调用StartSlamThread(),在调用ProcessSensorDataQueue(),每隔100ms从incomming_data_queue_中取一个数据,调用map_builder_context_impl.h中AddSensorDataToTrajectory(),将点云数据添加到map_builder_server_中的map_builder_中,再调用GetTrajectoryBuilder,得到当前建立的GlobalTrajectoryBuilder,进而调用AddSensorData()。

至此,点云数据就进入了GlobalTrajectoryBuilder()。

http://map_builder_server.cc中会向grpc_server_中添加一个AddTrajectoryHandler,会调用http://map_builder.cc中的AddTrajectoryBuilder,会向map_builder_中的trajectory_builder_中添加GlobalTrajectoryBuilder。

MapBuilder,GlobalTrajectoryBuilder,LocalTrajectoryBuilder都已建立,可以进行后续计算。

下篇将解析LocalTrajectoryBuilder。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值