ROS-PCL学习(1)
文章目录
前言
本文主要记录ROS-PCL的学习过程,尽可能详细的记录以便日后回顾,大家也可以参考学习学习。
一、创建一个ROS软件包
1.创建一个工作空间并完成环境配置
2.创建一个ROS软件包
下面是一个典型的创建软件包的命令。
catkin_creat_pkg 包名 依赖1依赖2…
catkin_creat_pkg chapter10_tutorials pcl_conversions pcl_ros pcl_msgs sensor_msgs
3.创建一个源文件目录
rospack profile
roscd chapter10_tutorials
mkdir src
4.在源文件目录下创建新的cpp文件
创建后输入以下代码
#include <ros/ros.h>
#include <pcl/point_cloud.h>
#include <pcl_conversions/pcl_conversions.h>
#include <sensor_msgs/PointCloud2.h>
int main (int argc, char **argv)
{
ros::init (argc, argv, "pcl_create");
ros::NodeHandle nh;
ros::Publisher pcl_pub = nh.advertise<sensor_msgs::PointCloud2> ("pcl_output", 1);
pcl::PointCloud<pcl::PointXYZ> cloud;
sensor_msgs::PointCloud2 output;
// Fill in the cloud data
cloud.width = 100;
cloud.height = 1;
cloud.points.resize(cloud.width * cloud.height);
for (size_t i = 0; i < cloud.points.size (); ++i)
{
cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
}
//Convert the cloud to ROS message
pcl::toROSMsg(cloud, output);
output.header.frame_id = "odom";
ros::Rate loop_rate(1);
while (ros::ok())
{
pcl_pub.publish(output);
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
这个是用于创建一个ROS节点并发布带有100个点的点云。
(推荐大家试试ROBOWARE,用来编辑ros十分方便)
5.修改CMakeLists.txt
基本做所有功能包都需要这部,就不多废话了,大家都老ROS人了。
find_package(catkin REQUIRED COMPONENTS
roscpp
pcl_conversions
pcl_msgs
pcl_ros
sensor_msgs
rospy
)
find_package(PCL REQUIRED)
include_directories(
include ${catkin_INCLUDE_DIRS}
${catkin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
)
link_directories(${PCL_LIBRARY_DIRS})
add_executable(pcl_create
src/pcl_create.cpp
)
add_dependencies(pcl_create ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(pcl_create
${catkin_LIBRARIES}
)
二、程序运行
1.启动功能包
注意每次新开终端要source一次。
也可以通过配置环境文件一劳永逸,这个有很多教程大家自行搜索。
开终端启动ros
roscore
新开一个终端启动创建点云的节点
rosrun chapter10_tutorials pcl_create
再新开一个终端启动rviz
rosrun rviz rviz
2.设置Rviz
1.将坐标系设置为odom
2.add添加一个PointCloud2并设置topic为pcl_create
3.最后效果
总结
以上就是一个简单例子,方便大家入门感受一下。