PCL智能指针疑云 <一>

背景算法

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

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

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

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

 

问题描述对象

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

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

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

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

进一步检查。

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

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

对比发现,上述两个变量的值彻底同样!

 

解决方案

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

 

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

相关文章
相关标签/搜索