我现在正在研究从激光扫描创建点云的一段时间,但我遇到了一些问题:
首先,PCL并不支持hokuyo激光器,因此我计划使用hokuyoaist库。
我遇到的主要问题是如何将2D激光数据转换为点云(pointcloud2),以便我可以使用PCL库。我知道ROS中的一些软件包可以做到这一点,但我真的不想接近ROS这样做。
提前致谢,
马尔
答案 0 :(得分:2)
你可以使用类似的(未经测试,但应该让你去):
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <vector>
// Get Hokuyo data
int numberOfDataPoints = 0; // you need to fill this
std::vector<double> hokuyoDataX,hokuyoDataY;
for(int i=0;i<numberOfDataPoints;i++)
{
hokuyoDataX.push_back(...); // you need to fill this for the x of point i
hokuyoDataY.push_back(...); // you need to fill this for the y of point i
}
// Define new cloud object
pcl::PointCloud<pcl::PointXY>::Ptr cloud (new pcl::PointCloud<pcl::PointXY>);
cloud->is_dense = true; // no NaN and INF expected.
cloud->width = hokuyoDataX.size();
cloud->height = 1;
cloud->points.resize(hokuyoDataX.size());
// Now fill the pointcloud
for(int i=0; i<hokuyoDataX.size(); i++)
{
cloud->points[i].x = hokuyoDataX[i];
cloud->points[i].y = hokuyoDataY[i];
}