ROS 机器人技术 - ROS 与 PCL 的点云类型转换

登龙

共 1632字,需浏览 4分钟

 ·

2020-07-29 23:17

82fb997a8f5d3bfcc39d8301dc707e8d.webp


登龙

这是我的第 138 篇原创


在图像和点云的融合节点中,做了一个点云格式的转换:

  • ROS 点云 sensor_msgs::PointCloud2 -> PCL 第一代点云 pcl::PointCloudpcl::PointXYZ

这里记录下常用的 ROS 和 PCL 之间的转换。

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

把 ROS PointCloud2 转为 PCL 第一代 PointCloud,方便用 PCL 库处理:

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

比如:

sensor_msgs::PointCloud2::ConstPtr& cloud_msg;

// PCL 第一代点云
pcl::PointCloud::Ptr pcl_cloud_msg(new pcl::PointCloud);

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

把 PCL 第一代 PointCloud 转为 ROS PointCloud2,用于发布 ROS 的点云主题:

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

比如:

// PCL 第一代点云
pcl::PointCloud::Ptr out_cloud(new pcl::PointCloud);

// ROS 点云
sensor_msgs::PointCloud2 fusion_cloud;

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

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

所用的头文件:

#include 

把 ROS PointCloud2 转为 PCL 第二代 PointCloud2:

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

比如:

// ROS 点云 -> 第二代 PCL 点云
// cloud_msg 和 pcl_cloud2 这里都定义为指针
pcl_conversions::toPCL(*cloud_msg, *pcl_cloud2);

把 PCL 第二代 PointCloud2 转为 ROS PointCloud2:

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);

参考链接:

  • https://www.cnblogs.com/li-yao7758258/p/6651326.html

推荐阅读:

Ubuntu install kitti2bag!

ROS 机器人技术 - TF 静态坐标帧

ROS 机器人技术 - rosbag 详细使用教程



厦大同学,与你分享编程,AI 算法等技术干货!精品文章创作不易,谢谢关注,欢迎在看。

5f08dad72441495e3e417d8a30ca61cc.webp

点击阅读原文,查看更多精彩文章!

浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报