PCD文件的读取以及可视化

PCD文件的读取以及可视化


  在开发激光雷达相应算法的时候,经常需要生成或者读取pcd点云文件,因此本文主要编写了一个简单的读取pcd点云文件的功能包,并且能够实现可视化。

源代码

#include <iostream>
#include <ros/package.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
#include <cstring>

using namespace std;

int main(int argc,char** argv)
{
	/* ROS中读取pcd点云文件并在rviz显示 */
    ros::init (argc, argv, "show_PCD");
    ros::NodeHandle nh;
    ros::Publisher pcl_pub = nh.advertise<sensor_msgs::PointCloud2> ("pcl_output", 1);
    pcl::PointCloud<pcl::PointXYZ> rviz_cloud;
    sensor_msgs::PointCloud2 rviz_output;
    pcl::io::loadPCDFile<pcl::PointXYZ>(ros::package::getPath("reading_pcd") + "/pcd/pointcloud.pcd", rviz_cloud);
    pcl::toROSMsg(rviz_cloud, rviz_output);
    rviz_output.header.frame_id = "rslidar";
    ros::Rate loop_rate(1);
    while (ros::ok())
    {
        pcl_pub.publish(rviz_output);
        ros::spinOnce();
        loop_rate.sleep();
    }
    /****************************************************************************************************************/
    
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

    if(pcl::io::loadPCDFile<pcl::PointXYZ>(ros::package::getPath("reading_pcd") + "/pcd/pointcloud.pcd", *cloud)==-1) // 打开点云文件
    {
        PCL_ERROR("Couldn't read file test_pcd.pcd\n");
        return(-1);
    }

    std::cout<<"Loaded "<<cloud->width*cloud->height<<" data points from test_pcd.pcd with the following fields: "<<std::endl;

    #if 0
    for(size_t i=0; i<cloud->points.size(); ++i)
    {
        std::cout<<"    "<<cloud->points[i].x<<" "<<cloud->points[i].y<<" "<<cloud->points[i].z<<std::endl;
    }
    #endif

    pcl::visualization::CloudViewer viewer("viewer");
    viewer.showCloud(cloud);
    while (!viewer.wasStopped()) {}
    system("pause");

    return(0);
}

  在使用上述代码的过程中需要注意,我在功能包文件夹下面创建了一个pcd文件夹用于存储pcd点云文件(如下图所示),并利用ros::package::getPath()来获取绝对路径。读者在使用的过程中需要对文件的路径做相应的修改,其中ros::package::getPath()的用法可以参考博主另一篇文章
在这里插入图片描述

CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2)
project(reading_pcd)

add_compile_options(-std=c++11)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  roslib
)

find_package(PCL 1.8 REQUIRED)

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

include_directories(${PCL_INCLUDE_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(pcd_read src/pcd_read.cpp)
target_link_libraries(pcd_read ${PCL_LIBRARIES} ${catkin_LIBRARIES})

  结果如下所示:
在这里插入图片描述

在这里插入图片描述

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roar冷颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值