ROS 機器人技術 - ROS 與 PCL 的點雲類型轉換

在圖像和點雲的融合節點中,作了一個點雲格式的轉換:html

  • ROS 點雲 sensor_msgs::PointCloud2 -> PCL 第一代點雲 pcl::PointCloudpcl::PointXYZ

這裏記錄下經常使用的 ROS 和 PCL 之間的轉換。指針

1. sensor_msgs::PCLPointCloud2 <=> pcl::PointCloudpcl::PointXYZ

把 ROS PointCloud2 轉爲 PCL 第一代 PointCloud,方便用 PCL 庫處理:code

void pcl::fromROSMsg(const sensor_msgs::PointCloud2 &, pcl::PointCloud<T> &);

好比:htm

// ROS 點雲
sensor_msgs::PointCloud2::ConstPtr& cloud_msg;

// PCL 第一代點雲
pcl::PointCloud<pcl::PointXYZ>::Ptr pcl_cloud_msg(new pcl::PointCloud<pcl::PointXYZ>);

// ROS 點雲 -> PCL 第一代點雲
pcl::fromROSMsg(*cloud_msg, *pcl_cloud_msg);

把 PCL 第一代 PointCloud 轉爲 ROS PointCloud2,用於發佈 ROS 的點雲主題:blog

void pcl::toROSMsg(const pcl::PointCloud<T> &, sensor_msgs::PointCloud2 &);

好比:get

// PCL 第一代點雲
pcl::PointCloud<pcl::PointXYZRGB>::Ptr out_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);

// ROS 點雲
sensor_msgs::PointCloud2 fusion_cloud;

// PCL 第一代點雲 -> ROS 點雲
pcl::toROSMsg(*out_cloud, fusion_cloud);

2. sensor_msgs::PCLPointCloud2 <=> pcl::PCLPointCloud2

所用的頭文件:io

#include <pcl_conversions/pcl_conversions.h>

把 ROS PointCloud2 轉爲 PCL 第二代 PointCloud2:class

void pcl_conversions::toPCL(const sensor_msgs::PointCloud2 &, pcl::PCLPointCloud2 &)

好比:im

// ROS 點雲 -> 第二代 PCL 點雲
// cloud_msg 和 pcl_cloud2 這裏都定義爲指針
pcl_conversions::toPCL(*cloud_msg, *pcl_cloud2);

把 PCL 第二代 PointCloud2 轉爲 ROS PointCloud2:filter

void pcl_conversions::moveFromPCL(const pcl::PCLPointCloud2 &, const sensor_msgs::PointCloud2 &);

好比:

pcl::PCLPointCloud2 pcl2_cloud_filtered;
sensor_msgs::PointCloud2 ros_cloud_filter;

// 第二代 PCL 點雲 -> ROS 點雲
pcl_conversions::fromPCL(pcl2_cloud_filtered, ros_cloud_filter);

參考連接:

相關文章
相關標籤/搜索