c++ 如何将(ROS)“几何信息/点”转换为传感器信息/点云2?

gdrx4gfi  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(232)

我是一个学习LIDAR算法的学生。我有一个订阅sensor_msgs/PointCloud2的LIDAR代码。我现在正在接收geometry_msgs/Point数据。我想将geometry_msgs/Point转换为sensor_msgs/PointCloud2。我想应用我写的代码。请告诉我c++中的sensor_msgs::PointCloud2类型函数!!还有widthheightsensor_msgs/PointCloud2里面等等,怎么转换呢,geometry_msgs/Point里面没有,我很好奇。
如果它是sensor_msgs/LaserScan,我已经转换了它,但我不确定geometry_msgs/Point

wpx232ag

wpx232ag1#

我认为最简单的方法是创建一个sensor_msgs::PointCloud,它是geometry_msgs::Point32contains a vector
然后将您的点添加到此msg中,并从point_cloud_conversion.hpp调用方法convertPointCloudToPointCloud2

static inline bool convertPointCloudToPointCloud2(
  const sensor_msgs::msg::PointCloud & input,
  sensor_msgs::msg::PointCloud2 & output)

以获得sensor_msgs::PointCloud2
或者您可以尝试创建一个pcl::PointCloud2,然后使用fromPCLmoveFromPCL方法从pcl_conversions转换

lymnna71

lymnna712#

最简单的方法是创建一个pcl PointCloud 2结构体,用geometry_msgs/Point数据填充它,并相应地调整宽度。如果你有一个geometry_msgs/Point类型的矢量points,你可以做以下操作。

pcl::PointCloud<pcl::PointXYZ>::Ptr tmp(new pcl::PointCloud<pcl::PointXYZ>);
tmp->width = 0;
tmp->height = 1;
tmp->is_dense = false;
tmp->points.resize(tmp->width * tmp->height);
tmp->header.frame_id = _your_frame;

for (int i = 0; i < points.size(); i++)
{
    pcl::PointXYZ pt;
    pt.x = points.at(i).x;
    pt.y = points.at(i).y;
    pt.z = points.at(i).z;
    tmp->points.push_back(pt);
    tmp->width++;
}

现在您可以使用已知方法将此PCL点云转换为Pointcloud 2。

相关问题