3d激光雷达开发(平面映射)

Posted 费晓行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3d激光雷达开发(平面映射)相关的知识,希望对你有一定的参考价值。

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        3d点云当中,一个经常用到的方法就是先找到一个平面,然后将点映射到平面上面。这个里面用到的数据结构是ProjectInliers。参考的代码链接在这,https://blog.csdn.net/weixin_42291376/article/details/106154329,代码和参数稍微做了一些修改

1、准备pcl.cpp文件

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/ModelCoefficients.h>
#include <pcl/filters/project_inliers.h>
#include<stdio.h>
 
int
main(int argc, char** argv)

	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected(new pcl::PointCloud<pcl::PointXYZ>);
 
	// Fill in the cloud data
	cloud->width = 5;
	cloud->height = 1;
	cloud->points.resize(cloud->width * cloud->height);
 
	for (size_t i = 0; i < cloud->points.size(); ++i)
	
		cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
	
 
	std::cerr << "Cloud before projection: " << std::endl;
	for (size_t i = 0; i < cloud->points.size(); ++i)
		std::cerr << "    " << cloud->points[i].x << " "
		<< cloud->points[i].y << " "
		<< cloud->points[i].z << std::endl;
 
	// Create a set of planar coefficients with X=Y=0,Z=1
	pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients());
	coefficients->values.resize(4);
	coefficients->values[0] = 0;
	coefficients->values[1] = 1;
	coefficients->values[2] = 0;
	coefficients->values[3] = 0;
 
	// Create the filtering object
	pcl::ProjectInliers<pcl::PointXYZ> proj;
	proj.setModelType(pcl::SACMODEL_PLANE);
	proj.setInputCloud(cloud);
	proj.setModelCoefficients(coefficients);
	proj.filter(*cloud_projected);
 
	std::cerr << "Cloud after projection: " << std::endl;
	for (size_t i = 0; i < cloud_projected->points.size(); ++i)
		std::cerr << "    " << cloud_projected->points[i].x << " "
		<< cloud_projected->points[i].y << " "
		<< cloud_projected->points[i].z << std::endl;
	system("pause");
	return (0);

2、再准备CMakeLists.txt

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

project(pcl)

find_package(PCL 1.2 REQUIRED)

include_directories($PCL_INCLUDE_DIRS)
link_directories($PCL_LIBRARY_DIRS)
add_definitions($PCL_DEFINITIONS)

add_executable (pcl pcl.cpp)
target_link_libraries (pcl $PCL_LIBRARIES)

3、生成sln工程,准备编译

4、运行exe文件

        直接运行pcl.exe即可,

        注意这里面y轴数据发生了改变,当然映射的平面可以是分割出来的任意平面。

 

以上是关于3d激光雷达开发(平面映射)的主要内容,如果未能解决你的问题,请参考以下文章

3d激光雷达开发(入门)

3d激光雷达开发(lidar使用)

3d激光雷达开发(法向量预测)

3d激光雷达开发(pcl安装和使用)

3d激光雷达开发(pcd数据读取)

3d激光雷达开发(绘制长方体)