ROS
中使用 sensor_msgs::msg::PointCloud2 传输点云数据。开发中会需要对它和其他类型的点云数据进行转换,大部分由 pcl_conversions 提供。
pcl::PCLPointCloud2
ros msg -> pcl::PCLPointCloud2
1 2 3 4 5 6 7 8 9 10 11
| #include <pcl/PCLPointCloud2.h> #include <sensor_msgs/msg/point_cloud2.hpp> #include <pcl_conversions/pcl_conversions.h>
pcl::PCLPointCloud2 pcl_pc2;
sensor_msgs::msg::PointCloud2 ros_cloud; pcl_conversions::toPCL(ros_cloud, pcl_pc2);
sensor_msgs::msg::PointCloud2::SharedPtr pc_msg; pcl_conversions::toPCL(*pc_msg.get(), pcl_pc2);
|
ros msg <- pcl::PCLPointCloud2
1 2 3 4 5 6 7 8 9 10 11
| #include <pcl/PCLPointCloud2.h> #include <sensor_msgs/msg/point_cloud2.hpp> #include <pcl_conversions/pcl_conversions.h>
pcl::PCLPointCloud2 pcl_pc2;
sensor_msgs::msg::PointCloud2 ros_cloud; pcl_conversions::fromPCL(pcl_pc2, ros_cloud);
sensor_msgs::msg::PointCloud2::SharedPtr pc_msg; pcl_conversions::fromPCL(pcl_pc2, *pc_msg);
|
pcl::PointCloud
ros msg -> pcl::PointCloud
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <pcl/pcl_base.h> #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <sensor_msgs/msg/point_cloud2.hpp> #include <pcl_conversions/pcl_conversions.h>
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_ptr;
sensor_msgs::msg::PointCloud2 ros_cloud; pcl::fromROSMsg(ros_cloud, *cloud_ptr);
sensor_msgs::msg::PointCloud2::SharedPtr pc_msg; pcl::fromROSMsg(*pc_msg.get(), *cloud_ptr);
|
ros msg <- pcl::PointCloud
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <pcl/pcl_base.h> #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <sensor_msgs/msg/point_cloud2.hpp> #include <pcl_conversions/pcl_conversions.h>
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_ptr; if (!cloud_ptr || cloud_ptr->points.empty()) return;
sensor_msgs::msg::PointCloud2 ros_cloud; pcl::toROSMsg(*cloud_ptr, ros_cloud);
sensor_msgs::msg::PointCloud2::SharedPtr pc_msg; pcl::toROSMsg(*cloud_ptr, *pc_msg);
|