cv_gordon

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

背景

最近写了一个包,使用ndt算法拼接点云,构建三维壁面环境的点云地图。

设计一个lidar类,表征激光雷达。可以获取点云数据并存储到容器 std::vector<PointCloudPtr> 。

设计一个RegistrationWithNDTandGICP类,表征基于ndt_icp的slam方案。该类中有一个lidar类的成员,该成员可以获取点云数据,然后计算激光里程计,拼接地图。

创建一个lidar的对象,lidar;创建一个RegistrationWithNDTandGICP类的对象,ndt;

 

问题描述

lidar获取点云后,以指针(shared_ptr)的形式存放在容器中,之后ndt从容器中逐个取出点云指针,计算里程计。

在lidar中,每次把点云指针存入容器之前,将点云的部分点坐标数据打印出来;

在ndt中,每次把点云指针从容器中取出后,将点云的部分点坐标数据打印出来;

对比发现,点的坐标数据发生了变化!

进一步检查。

在lidar中,每次把点云指针存入容器之前,输出点云的大小和指针地址;

在lidar中,每次把点云指针从容器中取出后,输出点云的大小和指针地址;

对比发现,上述两个变量的值完全一样!

 

解决方案

把容器改为 std::vector<PointCloudType> 类型,该错误立即消失。

 

具体错误原因不详!期待高手或前辈指点!

 

posted on 2019-05-30 22:36  cv_gordon  阅读(402)  评论(0编辑  收藏  举报