MEMS激光雷达出来后,为了不用LeddarTech的IDE软件,于是对其代码进行了封装,以供其他软件调用。在研究的过程中,点云的实时显示以前还未做过,就写了段测试代码,验证一下:
#include "stdafx.h"
#include //标准输入输出流
#include //PCL的PCD格式文件的输入输出头文件
#include //PCL对各种格式的点的支持头文件
#include //点云显示文件
#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<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>); // 创建点云(指针)
//点云测试数据
if (pcl::io::loadPCDFile<: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<:pointxyz>::Ptr cloud_vu8(new pcl::PointCloud<: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);
}
编译通过,实时显示了点云数据如下图所示: