学习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数据格式:
扫描二维码关注公众号,回复:
12887988 查看本文章

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