关闭

ROS_PCl_加载PCD点云数据文件与接收点云并保存

2709人阅读 评论(2) 收藏 举报
分类:
第一个程序是加载PCD数据文件,第二个程序是接收点云数据并写入pcd文档.

1.pcl_load.cpp

#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>//which contains the required definitions to load and store point clouds to PCD and other file formats.

main (int argc, char **argv)
{
  ros::init (argc, argv, "UandBdetect");
  ros::NodeHandle nh;
  ros::Publisher pcl_pub = nh.advertise<sensor_msgs::PointCloud2> ("pcl_output", 1);
  pcl::PointCloud<pcl::PointXYZ> cloud;
  sensor_msgs::PointCloud2 output;
  pcl::io::loadPCDFile ("/home/shuning/catkin_ws/src/imgpcl/data/test_pcd.pcd", cloud);
  //Convert the cloud to ROS message
  pcl::toROSMsg(cloud, output);
  output.header.frame_id = "odom";//this has been done in order to be able to visualize our PointCloud2 message on the RViz visualizer
  ros::Rate loop_rate(1);
  while (ros::ok())
  {
    pcl_pub.publish(output);
    ros::spinOnce();
    loop_rate.sleep();
  }
  return 0;
}
pcl_write.cpp:

#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>

void cloudCB(const sensor_msgs::PointCloud2 &input)
{
  pcl::PointCloud<pcl::PointXYZ> cloud;
  pcl::fromROSMsg(input, cloud);//从ROS类型消息转为PCL类型消息
  pcl::io::savePCDFileASCII ("/home/shuning/catkin_ws/src/imgpcl/data/write_pcd_test.pcd", cloud);//保存pcd
}
main (int argc, char **argv)
{
  ros::init (argc, argv, "pcl_write");
  ros::NodeHandle nh;
  ros::Subscriber bat_sub = nh.subscribe("pcl_output", 10, cloudCB);//接收点云
  ros::spin();
  return 0;
}

2.test_pcd.pcd"

部分数据如下

FIELDS x y z intensity distance sid
SIZE 4 4 4 4 4 4
TYPE F F F F F F
COUNT 1 1 1 1 1 1
WIDTH 460400
HEIGHT 1
POINTS 460400
DATA ascii
-0.93387 -0.6825 -1.1865 12 1.485 7
-0.93173 -0.68323 -1.1878 10 1.485 8
-0.92185 -0.68054 -1.1831 10 1.475 10
-0.91748 -0.67961 -1.1815 10 1.471 11
-0.91479 -0.6799 -1.182 12 1.47 12
-0.90031 -0.68289 -1.1872 10 1.467 18
-0.89271 -0.67941 -1.1811 12 1.457 19
-0.87805 -0.67048 -1.1656 8 1.434 20

3.编译

cd catkin_ws

source devel/setup.bash

catkin_make


4.运行

roscore

rosrun imgpcl pcl_load

rosrun imgpcl pcl_write

rosrun rviz rviz

5.Rviz的配置

点击Add,添加pointcloud2,

Fixed  Frame设置为odom.

Topic 设置为/pcl_output


参考Ros机器人程序设计第二版

0
0
查看评论

(八)ROS创建点云数据并在rviz中显示

ROS创建点云数据并在rviz中显示 sensor_msgs::PointCloud2
  • ktigerhero3
  • ktigerhero3
  • 2017-04-15 17:19
  • 2283

PCL读取与保存点云文件

#include #include #include int main (int argc, char** argv) { pcl::PointCloud::Ptr cloud (new pcl::PointCloud); if (pcl::io::loadPCDFile (&qu...
  • breeze5428
  • breeze5428
  • 2014-05-19 16:54
  • 5177

PCL1.7.2+Kinect V 2.0获取并保存点云PCD数据程序

  • 2015-04-07 17:04
  • 25.53MB
  • 下载

PCL系列——将点云数据写入PCD格式文件

PCL系列** PCL系列——读入PCD格式文件操作 ** PCL系列——将点云数据写入PCD格式文件操作 在VS2010 中新建一个文件read_pcd.cpp,然后将下面的代码复制到文件中。 参照之前的文章,配置项目的属性。设置包含目录和库目录和附加依赖项。 #include <iost...
  • xuezhisdc
  • xuezhisdc
  • 2016-03-30 10:53
  • 7533

Kinect+PCL读取点云并存储

捣腾很久终于成功了,这是为之后完成实时跟踪重建的第一步。代码是这样的。 #include #include #include #include using namespace std; int total; class SimpleOpenNIViewer { public...
  • becky514
  • becky514
  • 2014-12-23 16:12
  • 3251

ROS 学习系列 -- 程序发送点云PointCloud2到Rviz显示

方法1  直接加载PCD文件: #include // PCL specific includes #include #include #include #include // Create a ROS publisher for the output point cloud ...
  • crazyquhezheng
  • crazyquhezheng
  • 2016-03-11 09:48
  • 6095

【SLAM】之建图Bag->Pcd->OctoMap

上篇中我们得到了3D激光雷达获得的点云图,存在.bag文件中,接下来我们再用上上篇末尾的做法跑loam_velodyne算法,在RVIZ中的显示效果如下: 这时我们用rqt_graph可以看到: 上面三幅图分别是All、Active和Nodes Only时Node和Topic的关系。...
  • littlethunder
  • littlethunder
  • 2016-07-19 15:55
  • 8754

ROS下使用PCL/kinfu

最近想做机器人平台上的kinect fusion
  • l_h2010
  • l_h2010
  • 2014-08-02 17:28
  • 3906

ROS下订阅topic保存为点云(1)

这里订阅了的是Kinect for Xbox One或是华硕的Xtion Pro Live的topic:/camera/depth_registered/points。这个topic是包含了利用相机内置的calibration参数来配准RGB图和深度图,也即它的像素点包含了颜色和深度信息。 按空格键...
  • yaked
  • yaked
  • 2016-11-14 21:42
  • 1653

PCL点云库中如何读取指定的PCD文件,重新命名,处理后保存到指定文件夹

我一直想把处理后的pcd文件重命名,然后放到指定的文件夹,尝试了好久终于做到了: 比如我想读取  "table_scene_lms400.pcd" 把它进行滤波处理,重命名为 "table_scene_lms400_filter.pcd" ,然后保...
  • kh1445291129
  • kh1445291129
  • 2014-10-08 12:15
  • 2051
    个人资料
    • 访问:346518次
    • 积分:5850
    • 等级:
    • 排名:第5232名
    • 原创:227篇
    • 转载:91篇
    • 译文:0篇
    • 评论:122条
    最新评论