背景:算法
最近写了一个包,使用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> 类型,该错误当即消失。
具体错误缘由不详!期待高手或前辈指点!