本文主要是介绍LiDAR-MEMS激光雷达点云实时显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MEMS激光雷达出来后,为了不用LeddarTech的IDE软件,于是对其代码进行了封装,以供其他软件调用。在研究的过程中,点云的实时显示以前还未做过,就写了段测试代码,验证一下:
#include "stdafx.h"
#include <iostream> //标准输入输出流
#include <pcl/io/pcd_io.h> //PCL的PCD格式文件的输入输出头文件
#include <pcl/point_types.h> //PCL对各种格式的点的支持头文件
#include <pcl/visualization/cloud_viewer.h> //点云显示文件
#include "leddartechVu8.h" //MEMS激光雷达封装头文件
using namespace std;boost::mutex updateModelMutex;int user_data;
int main(int argc, char** argv)
{pcl::visualization::CloudViewer viewer("Cloud Viewer");pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 创建点云(指针) //点云测试数据if (pcl::io::loadPCDFile<pcl::PointXYZ>("1.pcd", *cloud) == -1) //* 读入PCD格式的文件,如果文件不存在,返回-1 {PCL_ERROR("Couldn't read file test_pcd.pcd \n"); //文件不存在时,返回错误,终止程序。 return (-1);}std::cout << "Loaded "<< cloud->width * cloud->height<< " data points from test_file.pcd with the following fields: "<< std::endl;int set = 2000;int block = cloud->size()/set;//点云转换函数float vu8_angle[8] = { -7.175, -5.125, -3.075, -1.025, 1.025, 3.075, 5.125, 7.175 };//定义相关变量pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_vu8(new pcl::PointCloud<pcl::PointXYZ>);//初始化点云数据PCD文件头cloud_vu8->width = set;cloud_vu8->height = 1;cloud_vu8->is_dense = true;cloud_vu8->points.resize(cloud_vu8->width*cloud_vu8->height);while (!viewer.wasStopped()){for (UINT i = 0; i < set; ++i){cloud_vu8->points[i].x = cloud->points[i + (block - 1) * set].x;cloud_vu8->points[i].y = cloud->points[i + (block - 1) * set].y;cloud_vu8->points[i].z = cloud->points[i + (block - 1) * set].z;}viewer.showCloud(cloud_vu8);cout << block << endl;block--;user_data++;Sleep(50);}system("pause");return (0);
}
编译通过,实时显示了点云数据如下图所示:
这篇关于LiDAR-MEMS激光雷达点云实时显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!