1.在ros中发布一个点云信息(pcd文件)
在ros中使用pcl点云的第一步要弄明白点云的数据类型和ros中sensor_msgs/PointCloud2之间的关系。简而言之也就是pcl库中存储的点云数据为pcl::PointXYZ,在pcl库中接口中调用的函数都是处理这种类型的数据,要想把这个数据在ros中发布以及可视化等操作需要将其转化为sensor_msgs/PointCloud2数据。
#include<ros/ros.h>
#include<pcl/point_cloud.h>
#include<pcl_conversions/pcl_conversions.h>
#include<sensor_msgs/PointCloud2.h>
#include<pcl/io/pcd_io.h>
int main (int argc, char** argv)
{
ros::init (argc, argv, "pcl_ros_1");
ros::NodeHandle nh;
ros::Publisher pcl_pub = nh.advertise<sensor_msgs::PointCloud2> ("pcl_output", 1);
pcl::PointCloud<pcl::PointXYZ> cloud;
sensor_msgs::PointCloud2 output;
pcl::io::loadPCDFile ("/home/yym/sample_ws/src/pcl_sample/data/test_pcd.pcd", cloud);//这是pcl库读取pcd文件的接口
pcl::toROSMsg(cloud, output);//这里是pcl和ros中点云数据的转换接口
output.header.frame_id = "odom";
ros::Rate loop_rate(1);
while (ros::ok())
{
pcl_pub.publish(output);
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
-
在运行此文件前,需要提前安装pcl点云库(github上下载)
-
包的依赖pcl_msgs pcl_ros pcl_conversions sensor_msgs
-
在cmakelist中添加对应的链接
find_pcakage(PCL REQUIRED) ...
pcl库的链接也是必需的