记录关于我们运行roslaunch openni_launch openni.launch  命令时生成的话题以及这些话题的数据类型便于后期的处理,只有知道它们的数据结构,才能很好的对数据进行处理,我们观察到使用rostopic list的所有话题的列表,当然其中也有一些不经常使用的话题类型,比如下面这些话题是我们经常使用的
/camera/depth/image
/camera/depth/image_raw
/camera/depth/points
/camera/ir/image_raw
/camera/rgb/image_color
/camera/rgb/image_raw

发布的话题:

image_raw (sensor_msgs/Image) : 未处理的原始图像

使用命令查看sensor_msgs/Image的数据

camera_info (sensor_msgs/CameraInfo):包含了相机标定配置以及相关数据

介绍几个ROS节点运行的几种工具。他们的作用是ROS格式点云或包与点云数据(PCD)文件格式之间的相互转换。

(1)bag_to_pcd

用法:rosrun pcl_ros bag_to_pcd <input_file.bag> <topic> <output_directory>

读取一个包文件,保存所有ROS点云消息在指定的PCD文件中。

(2)convert_pcd_to_image

用法:rosrun pcl_ros convert_pcd_to_image <cloud.pcd>

加载一个PCD文件,将其作为ROS图像消息每秒中发布五次。

(3) convert_pointcloud_to_image

用法:rosrun pcl_ros convert_pointcloud_to_image input:=/my_cloud output:=/my_image

 查看图像:rosrun image_view image_view image:=/my_image

订阅一个ROS的点云的话题并以图像的信息发布出去。
(4)pcd_to_pointcloud

用法:rosrun pcl_ros pcd_to_pointcloud <file.pcd> [ <interval> ]

  • <file.pcd> is the (required) file name to read.

  • <interval> is the (optional) number of seconds to sleep between messages. If <interval> is zero or not specified the message is published once.

加载一个PCD文件,发布一次或多次作为ROS点云消息
(5)pointcloud_to_pcd

例如: rosrun pcl_ros pointcloud_to_pcd input:=/velodyne/pointcloud2

订阅一个ROS的话题和保存为点云PCD文件。每个消息被保存到一个单独的文件,名称是由一个可自定义的前缀参数,ROS时间的消息,和以PCD扩展的文件。

那么我们使用一个简单的例子来实现在ROS中进行平面的分割,同时注意到使用的数据转换的使用

/**************************************************************************
关于使用pcl/PointCloud<T>的举例应用。这一类型的数据格式是PCL库中定义的一种数据格式
这里面使用了两次数据转换从 sensor_msgs/PointCloud2 到 pcl/PointCloud<T> 和
从 pcl::ModelCoefficients 到 pcl_msgs::ModelCoefficients.
************************************************************************/
#include <iostream>
//ROS
#include <ros/ros.h>
// PCL specific includes
#include <sensor_msgs/PointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/ros/conversions.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h> #include <pcl/io/pcd_io.h> //关于平面分割的头文件
#include <pcl/sample_consensus/model_types.h> //分割模型的头文件
#include <pcl/sample_consensus/method_types.h> //采样一致性的方法
#include <pcl/segmentation/sac_segmentation.h> //ransac分割法 ros::Publisher pub; void
cloud_cb (const sensor_msgs::PointCloud2ConstPtr& input)
{
// 将点云格式为sensor_msgs/PointCloud2 格式转为 pcl/PointCloud
pcl::PointCloud<pcl::PointXYZ> cloud;
pcl::fromROSMsg (*input, cloud); //关键的一句数据的转换 pcl::ModelCoefficients coefficients; //申明模型的参数
pcl::PointIndices inliers; //申明存储模型的内点的索引
// 创建一个分割方法
pcl::SACSegmentation<pcl::PointXYZ> seg;
// 这一句可以选择最优化参数的因子
seg.setOptimizeCoefficients (true);
// 以下都是强制性的需要设置的
seg.setModelType (pcl::SACMODEL_PLANE); //平面模型
seg.setMethodType (pcl::SAC_RANSAC); //分割平面模型所使用的分割方法
seg.setDistanceThreshold (0.01); //设置最小的阀值距离 seg.setInputCloud (cloud.makeShared ()); //设置输入的点云
seg.segment (inliers, coefficients); //cloud.makeShared() 创建一个 boost shared_ptr // pcl_msgs::fromROSMsg(const sensor_msgs::PointCloud2 &, pcl::PointCloud<T>&);
//pcl::io::savePCDFileASCII("test_pcd.pcd",cloud); // 把提取出来的内点形成的平面模型的参数发布出去
pcl_msgs::ModelCoefficients ros_coefficients;
pcl_conversions::fromPCL(coefficients, ros_coefficients);
pub.publish (ros_coefficients);
} int
main (int argc, char** argv)
{
// Initialize ROS
ros::init (argc, argv, "my_pcl_tutorial");
ros::NodeHandle nh; // Create a ROS subscriber for the input point cloud
ros::Subscriber sub = nh.subscribe ("input", , cloud_cb); // Create a ROS publisher for the output model coefficients
pub = nh.advertise<pcl_msgs::ModelCoefficients> ("output", ); // Spin
ros::spin ();
}

在这里我们的input就是要订阅的话题/camera/depth/points

我们在rosrun 的时候注明input:=/camera/depth/points的这样就可以使用kienct发布的点云数据,同时你也可以指定点云的数据

如何在ROS中使用PCL(2)的更多相关文章

  1. 如何在ROS中使用PCL—数据格式(1)

    在ROS中点云的数据类型 在ROS中表示点云的数据结构有: sensor_msgs::PointCloud      sensor_msgs::PointCloud2     pcl::PointCl ...

  2. 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  3. 如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧

    做WEB项目,一定都用过JSP这个大牌.Spring MVC里面也可以很方便的将JSP与一个View关联起来,使用还是非常方便的.当你从一个传统的Spring MVC项目转入一个Spring Boot ...

  4. 如何在latex 中插入EPS格式图片

    如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...

  5. 如何正确的使用json?如何在.Net中使用json?

    什么是json json是一种轻量级的数据交换格式,由N组键值对组成的字符串,完全独立于语言的文本格式. 为什么要使用json 在很久很久以前,调用第三方API时,我们通常是采用xml进行数据交互,但 ...

  6. [原创]如何在Parcelable中使用泛型

    [原创]如何在Parcelable中使用泛型 实体类在实现Parcelable接口时,除了要实现它的几个方法之外,还另外要定义一个静态常量CREATOR,如下例所示: public static cl ...

  7. 如何在springMVC 中对REST服务使用mockmvc 做测试

    如何在springMVC 中对REST服务使用mockmvc 做测试 博客分类: java 基础 springMVCmockMVC单元测试  spring 集成测试中对mock 的集成实在是太棒了!但 ...

  8. 如何在tomcat中如何部署java EE项目

    如何在tomcat中如何部署java EE项目 1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法.2.在tomcat安 ...

  9. 【转】我是如何在SQLServer中处理每天四亿三千万记录的

    原文转自:http://blog.jobbole.com/80395/ 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文 ...

随机推荐

  1. Windows平台JDK安装

    原文链接:http://android.eoe.cn/topic/android_sdk 下载Java的开发包JDK JDK有好几个类型版本,我们只需要选择Java SE类型的版本就行了.进入网页:h ...

  2. JasperReport学习札记6-JRXML的标签

    原文源于:http://langhua9527.iteye.com/blog/402317 JasperReport学习笔记6-JRXML的标签1.<jasperReport>根元素包括很 ...

  3. Shiro系列(3) - What is shiro?

    什么是shiro? Shiro是apache的一个开源权限管理的框架,它实现用户身份认证,权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架 使用shiro来实现权限管理,可以非常有效的提高 ...

  4. vue-cli 工程中引入jquery

    在vue-cli 生成的工程中引入了jquery,记录一下.(模板用的webpack) 首先在package.json里的dependencies加入"jquery" : &quo ...

  5. lua -- string

    table.keys 返回指定表格中的所有键. 格式: keys = table.keys(表格对象) 用法示例: , b = , c = } local keys = table.keys(t) - ...

  6. Splunk Web页面的登录密码忘记了怎么办

    splunk的web登录密码忘记的话,可以使用以下方法重置. 一.关闭splunk服务 /opt/splunk/bin/splunk stop 二.删除默认密码配置文件 三.重启启动splunk服务, ...

  7. Python模块学习——tempfile

    主要有以下几个函数: tempfile.TemporaryFile 如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择.其 ...

  8. 【ARM】arm异常中断处理知识点

    ARM处理器7种类型异常 按优先级从高到低的排列如下: 复位异常(Reset) 数据异常(Date Abort) 快速中断异常(FIQ) 外部中断异常(IRQ) 预取异常(Prefetch Abort ...

  9. 使用nginx搭建tomcat集群配置

    软件准备: (1)jdk-8u73-linux-x64.tar.gz (2)apache-tomcat-7.0.57.tar.gz (3)nginx-1.7.7.tar.gz 准备3台Linux机器, ...

  10. Linux命令格式及帮助命令详解

    昨天看了一个教程,关于Linux命令的,本来以为当是复习随便看看的,结果看了不禁汗颜,这个真挺有学问的,很多东西都是我还不知道的,故此做总结,此文适合于对Linux命令有一定了解但又不是很深入的孩子, ...