提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
记录一下利用ROS加载PCD文件并在rviz中查看
一、创建ROS功能包
在工作空间下的src目录下使用功能包创建命令,命令如下所示
//catkin_create_pkg 包名 依赖包名
catkin_create_pkg check_pcd std_msgs rospy roscpp
二、编写加载pcl代码
代码如下(示例):
#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>
main (int argc, char **argv)
{
ros::init (argc, argv, "pcl_load"); //初始化节点,创建节点名称
ros::NodeHandle nh; //节点处理句柄
ros::Publisher pcl_pub = nh.advertise<sensor_msgs::PointCloud2> ("pcl_output", 1); //发布名称为pcl_out的话题,消息队列长度为1,消息类型为sensor_msgs::PointCloud2
pcl::PointCloud<pcl::PointXYZ> cloud;
sensor_msgs::PointCloud2 output;
pcl::io::loadPCDFile ("pcd文件所在路径", cloud); //修改自己pcd文件所在路径
//Convert the cloud to ROS message
pcl::toROSMsg(cloud, output); //转换为ROS的消息类型
output.header.frame_id = "odom";//this has been done in order to be able to visualize our PointCloud2 message on the RViz visualizer
//!!!这一步需要注意,是后面rviz的 fixed_frame !!!敲黑板,画重点。
ros::Rate loop_rate(1); //控制发布的信息的快慢,即循环内sleep的间隔
while (ros::ok())
{
pcl_pub.publish(output);
ros::spinOnce(); //监听反馈函数
loop_rate.sleep();
}
return 0;
}
编辑CMakeList和package.xml
编辑好代码后,还需修改CMakeList以及package.xml使得编译可以顺利进行
1、CMakeList需要更改的地方
需要在find_package中添加所需的依赖包
find_package(catkin REQUIRED COMPONENTS
pcl_ros
pcl_conversions
pcl_msgs
sensor_msgs
//以上为新添加
roscpp
rospy
)
需在include_directories和link_directories中包含pcl库
include_directories(
${catkin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
)
link_directories(
${PCL_LIBRARY_DIRS}
)
添加执行程序
add_executable(check_pcd src/pcl_load.cpp)
将程序与依赖库链接起来
target_link_libraries(check_pcd ${catkin_LIBRARIES} ${PCL_LIBRARIES})
至此,CMakeList修改完毕
package.xml修改
package.xml修改增加新增的依赖包对应的代码即可,代码如下
<build_depend>pcl_ros</build_depend>
<build_depend>pcl_conversions</build_depend>
<build_depend>pcl_msgs</build_depend>
<build_depend>sensor_msgs</build_depend>
<build_export_depend>pcl_ros</build_export_depend>
<build_export_depend>pcl_conversions</build_export_depend>
<build_export_depend>pcl_msgs</build_export_depend>
<build_export_depend>sensor_msgs</build_export_depend>
<exec_depend>pcl_ros</exec_depend>
<exec_depend>pcl_conversions</exec_depend>
<exec_depend>pcl_msgs</exec_depend>
<exec_depend>sensor_msgs</exec_depend>
编译
回到catkin_workspace下面,使用catkin_make
命令对功能包的代码进行编译
运行
先利用roscore
运行起master节点,再利用如下命令把功能包中的程序运行起来
// 功能包名称 程序名称
rosrun check_pcd check_pcd
查看pcl数据
按上图设置即可看到pcd中的点云数据