问题介绍

slam构建地图,先进行降采样,再进行可视化或存储。然而经过降采样后,代码没有报错的情况下,点云数据散成一团。将代码和点云数据展示如下,

pcl::VoxelGrid<Lidar::PointType> voxel_filter;
voxel_filter.setLeafSize(0.02, 0.02, 0.02); Lidar::PointCloudPtr mapPointCloud(new Lidar::PointCloudType); //滤波器输入变量
//...
//往输入变量中填充数据
//... voxel_filter.setInputCloud(mapPointCloud);
voxel_filter.filter(*mapPointCloud);
std::cout << "after voxel_filter, mapPointCloud size : " << mapPointCloud->points.size() << std::endl;
std::string index = std::to_string(ndtCount);
pcl::io::savePCDFileASCII ("/home/gordon/fase_ws/src/ddd_wall_mapping/filter_map_"+index+".pcd",
*mapPointCloud);

问题分析

猜想是由于降采样滤波器的输入和输出是同一个指针变量,在处理过程中内存混乱,导致点云数据出错。

解决方案

使用两个不同的变量作为降采样滤波器的输入和输出,并且作为输出的变量每次都要进行清空操作。

问题解决后的代码和点云数据展示如下,

pcl::VoxelGrid<Lidar::PointType> voxel_filter;
voxel_filter.setLeafSize(0.02, 0.02, 0.02); Lidar::PointCloudPtr mapPointCloud(new Lidar::PointCloudType); //滤波器输入变量
//...
//往输入变量中填充数据
//... Lidar::PointCloudPtr filter_mapPointCloud(new Lidar::PointCloudType); // 滤波器输出变量
voxel_filter.setInputCloud(mapPointCloud);
voxel_filter.filter(*filter_mapPointCloud);
mapPointCloud->clear();
*mapPointCloud += *filter_mapPointCloud;
std::cout << "after voxel_filter, mapPointCloud size : " << mapPointCloud->points.size() << std::endl;
std::string index = std::to_string(ndtCount);
pcl::io::savePCDFileASCII ("/home/gordon/fase_ws/src/ddd_wall_mapping/filter_map_"+index+".pcd", *mapPointCloud);

至于具体原因,至今不详,忘高手或前辈指点迷津。

PCL智能指针疑云 <二> 使用同一智能指针作为PCL预处理API的输入和输出的更多相关文章

  1. 20130330 printf数组改变 数组指针便利二维数组 二级指针遍历二维数组 ZigZag

    1.为什么printf之后数组的值会改变? #include<stdio.h> ; int * Zigzag() { ,j=,limit=; ; ; int a[N][N]; int (* ...

  2. 唠唠C++二级指针、二维数组、指针数组、数组指针等的区分

    今天看c++primer第六章,有这部分的内容,脑子有点糊涂了,看了几篇博客,自己敲了下,记录一下备忘. 二级指针: int **p; 二维数组: int p[10][10]; char q[10][ ...

  3. c++智能指针《二》 std::tr1::shared_ptr

    转载http://www.cnblogs.com/kadinzhu/archive/2011/12/12/2284826.html 看<effective c++>,作者一直强调用std: ...

  4. Rust 智能指针(二)

    1. Rc<T> 引用计数指针 Rc<T> 是引用计数指针,可以使用clone使得指针所指向的数据具有多个所有者. enum List { Cons(i32, Rc<Li ...

  5. Android系统智能指针的设计思路(轻量级指针、强指针、弱指针)

    本博客为原创,转载请注明出处,谢谢. 参考博文:Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 C++中最容易出错的地方莫过于指针了,指针问题主要有两类,一是内存泄露,二是无 ...

  6. UI标签库专题二:JEECG智能开发平台Column(列) 子标签

    UI标签库专题二:JEECG智能开发平台Column(列) 子标签  1.1. Column(列) 子标签 1.1.1. 演示样例 <t:dgCol title="年龄" ...

  7. 智能反射表面(可重构智能表面)Large Intelligent surface 最新综述整理

    闻道洛阳花正好,家家遮户春风.道人饮处百壶空.年年花下醉,看尽几番红. 此拐又从何处去,飘蓬一任西东.语声虽异笑声同.一轮清夜月,何处不相逢. ---- 临江仙·与刘拐 更多精彩内容请关注微信公众号 ...

  8. C语言教学--二维数组和指针的理解

    对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...

  9. 关于c语言二维数组与指针的个人理解及处理办法。

    相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...

随机推荐

  1. Linux用ICMP协议实现简单Ping网络监测功能

    ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网 ...

  2. C语言作业7

    问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://i.cnblogs.com/EditPosts.aspx?opt=1 我在这个课程的目标是 在学好C语言编程的 ...

  3. numpy-添加操作大全

    合并 hstack(tup):按行合并 [前面有个 h,可以理解为 行,这样方便记忆] vstack(tup):按列合并 参数虽然是 tuple,但是 list 也行,可以合并2个或者多个数组. a= ...

  4. MySQL中的索引优化

    MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 过多的使用索引将会造成滥用.因此索引也会有它的缺点.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 ...

  5. npm学习(十二)之高级用法

    如何使用距离标记标记包 如何使用双因素身份验证 如何使用安全令牌 如何从CLI更改配置文件设置 理解包和模块

  6. 使用python 实现 微信好友 个性签名 并 制作 词云图

    环境搭建: pip install itchat numpy wordcloud matplotlib jieba 先把上面的几个包安装完成,直接上代码 import itchat from itch ...

  7. SQLite3中自增主键相关知识总结,清零的方法、INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用

    这篇文章主要介绍了SQLite3中自增主键相关知识总结,清零的方法.INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用等,需要的朋友可以参考下 一.SQLite清空表 ...

  8. tomcat+Redis

    Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发而成. Tomca ...

  9. Activity安装与使用

    详细安装步骤:http://blog.csdn.net/oyzl68/article/details/16817963

  10. 常用的webpack 配置

    const path = require('path'); let HtmlWebpackPlugin = require('html-webpack-plugin'); let VueLoaderP ...