• PCL智能指针疑云 <一>


    背景

    最近写了一个包,使用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> 类型,该错误立即消失。

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

  • 相关阅读:
    读取.properties配置文件的方式
    使用二维数组打印10行的杨辉三角
    【三】Django模版的使用
    【二】Django 视图和url配置
    初学Django
    Java ------ 工厂模式、单例模式
    总结各种排序算法【Java实现】
    MyBatis --- 动态SQL、缓存机制
    MyBatis --- 映射关系【一对一、一对多、多对多】,懒加载机制
    SSM框架搭建
  • 原文地址:https://www.cnblogs.com/gdut-gordon/p/10952475.html
Copyright © 2020-2023  润新知