3d激光雷达开发(voxel滤波)
Posted 费晓行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3d激光雷达开发(voxel滤波)相关的知识,希望对你有一定的参考价值。
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
有一种滤波方法,被称之为基于体素网格的下采样滤波。虽然名字听上去有点拗口,其实功能并不复杂。它的中心思想就是在一个网格的空间内,只能有一个点。这么做的一个好处就是,对于一些稠密空间的点云,可以极大地降低数据的个数,这对减少计算量来说是大有裨益的。原来的代码在这https://pcl.readthedocs.io/projects/tutorials/en/master/voxel_grid.html#voxelgrid。这里为了查看效果,所以添加了一些额外代码。
1、准备voxel_grid.cpp代码
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/visualization/cloud_viewer.h>
int
main ()
pcl::PCLPointCloud2::Ptr cloud (new pcl::PCLPointCloud2 ());
pcl::PCLPointCloud2::Ptr cloud_filtered (new pcl::PCLPointCloud2 ());
// Fill in the cloud data
pcl::PCDReader reader;
// Replace the path below with the path where you saved your file
reader.read ("table_scene_lms400.pcd", *cloud); // Remember to download the file first!
std::cerr << "PointCloud before filtering: " << cloud->width * cloud->height
<< " data points (" << pcl::getFieldsList (*cloud) << ")." << std::endl;
// Create the filtering object
pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
sor.setInputCloud (cloud);
sor.setLeafSize (0.01f, 0.01f, 0.01f);
sor.filter (*cloud_filtered);
std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height
<< " data points (" << pcl::getFieldsList (*cloud_filtered) << ")." << std::endl;
pcl::PCDWriter writer;
writer.write ("table_scene_lms400_downsampled.pcd", *cloud_filtered,
Eigen::Vector4f::Zero (), Eigen::Quaternionf::Identity (), false);
pcl::visualization::CloudViewer viewer("Simple Cloud Viewer");
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered_blob(new pcl::PointCloud<pcl::PointXYZ>);
pcl::fromPCLPointCloud2(*cloud_filtered, *cloud_filtered_blob);
viewer.showCloud(cloud_filtered_blob);
while (!viewer.wasStopped())
return (0);
2、代码分析
整个代码里面,最重要的其实就是 sor.setLeafSize (0.01f, 0.01f, 0.01f);这句话。
3、准备CMakeLists.txt文件
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(voxel_grid)
find_package(PCL 1.2 REQUIRED)
include_directories($PCL_INCLUDE_DIRS)
link_directories($PCL_LIBRARY_DIRS)
add_definitions($PCL_DEFINITIONS)
add_executable (voxel_grid voxel_grid.cpp)
target_link_libraries (voxel_grid $PCL_LIBRARIES)
4、生成sln文件,开始编译
mkdir build & cd build & cmake ..
不出意外,应该可以编译成功的,
5、运行voxel_grid.exe文件
直接运行,可能缺少dll,最好补全一下。
此外,还要准备一个pcd点云数据文件,文件名是table_scene_lms400.pcd。
运行起来,可以看一下前后点云的个数,
还可以顺便看一下点云的显示效果,
注:
点云显示这部分,1、按住鼠标左键左右移动、上下移动可以旋转;2、按住鼠标左键和ctrl,可以平面内360旋转;3、按住鼠标左键和shift,可以拖动点云;4、滚动鼠标中轮,可以放大和缩小。
以上是关于3d激光雷达开发(voxel滤波)的主要内容,如果未能解决你的问题,请参考以下文章