学习ros及ros-pcl的一些总结

学习ros及ros-pcl的一些总结

一、2021.3.18记录

①、ros的安装可以参考以下链接:
https://www.bilibili.com/video/BV1zt411G7Vn?p=5
在这里插入图片描述
②、显示某一个topic对应的激光雷达点云的frame_id信息,在rviz中会用到:

rostopic echo /topicname | grep frmae_id
rosbag record /livox/lidar //记录livox-mid40采集的点云数据,为bag格式
rosbag play bagfile.bag

查看bag包信息:

rosbag info ***.bag

bag包解析出pcd文件:

rosrun pcl_ros bag_to_pcd bag文件名 topic名 输出路径  

③、ros相关的指令

启动ros的节点管理器,在运行ros指令之前,应该先运行roscore:roscore
运行某一节点:rosrun packagename 节点名
显示节点的通信图:rqt_graph
显示运行中的节点:rosnode list
显示当前话题名:rostopic list

==================================================================

二、2021.3.19记录:

ros中点云的类型为:sensor_msgs::PointCloud2
pcl中点云类型为:pcl::PCLPointCloud2

两者之间的转换使用:
ROS数据格式–>>PCL数据格式:

pcl_conversions::toPCL(sensor_msgs::PointCloud2, pcl::PCLPointCloud2)
pcl::fromROSMsg (sensor_msgs::PointCloud2, pcl::PointCloud<pcl::PointXYZ>)

PCL数据格式–>>ROS数据格式:

 pcl_conversions::fromPCL(pcl::PCLPointCloud2, sensor_msgs::PointCloud2)
pcl::toROSMsg (pcl::PointCloud<pcl::PointXYZ>, sensor_msgs::PointCloud2)

PCL数据格式互转:

pcl::fromPCLPointCloud2(pcl::PCLPointCloud2,pcl::PointCloud<pcl::PointXYZ>)
pcl::toPCLPointCloud2(pcl::PointCloud<pcl::PointXYZ>, pcl::PCLPointCloud2)

例如,以下写法均可:

pcl::PCLPointCloud2::Ptr cloud (new pcl::PCLPointCloud2 ());
pcl::PCLPointCloud2::Ptr cloud_filtered (new pcl::PCLPointCloud2 ());
 
 // Fill in the cloud data
pcl::PCDReader reader;
 // Replace the path below with the path where you saved your file
reader.read ("table_scene_lms400.pcd", *cloud); // Remember to download the file first!
std::cerr << "PointCloud before filtering: " << cloud->width * cloud->height 
       << " data points (" << pcl::getFieldsList (*cloud) << ").";
 
 // Create the filtering object
pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
sor.setInputCloud (cloud);
sor.setLeafSize (0.01f, 0.01f, 0.01f);
sor.filter (*cloud_filtered);
pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZI>);
pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZI>);
	// 填入点云数据
pcl::io::loadPCDFile("table_scene_lms400.pcd", *cloud);
	
	// 创建滤波器对象
pcl::VoxelGrid<pcl::PointXYZI> sor;
sor.setInputCloud(cloud);
sor.setLeafSize(0.01f, 0.01f, 0.01f);
sor.filter(*cloud_filtered);
std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height
		<< " data points (" << pcl::getFieldsList(*cloud_filtered) << ").";

Reference:
[1] http://wiki.ros.org/pcl/Overview
[2] http://wiki.ros.org/pcl/Tutorials
[3] http://docs.pointclouds.org/1.7.0/structpcl_1_1_pcl_point_cloud2.html

猜你喜欢

转载自blog.csdn.net/sj775973722/article/details/114988465
今日推荐