Ubuntu18.04 + ROS 下学习点云库PCL的使用(一)

本文介绍了在ROS环境下使用PCL创建功能包,配置VScode环境,编写并运行第一个点云程序的过程,包括创建工作空间、设置任务、编写C++代码以及在rviz中查看结果。
摘要由CSDN通过智能技术生成

目录

序言

一、在工作空间下创建功能包

1.创建工作空间

2.使用VScode进行配置

3.编写第一个点云入门程序

二、运行程序 

1.启动功能包

2.启动rviz查看

总结 


序言

本文适用于ros下的PCL使用,在学完ros基础课程(古月居或赵须左老师的课程)后,作者自己学习PCL的随记,希望能找到志同道合的伙伴一起学习、分享经验。

本文默认已经提前安装好pcl库及相关依赖,不再演示安装和配置相关操作

PCL官方学习链接:pointclouds.org/

一、在工作空间下创建功能包

1.创建工作空间

mkdir -p pcl_ws/src
cd pcl_ws
catkin_make

这一步操作是基础的操作,熟能生巧。

2.使用VScode进行配置

cd pcl_ws
code .

进入之后 Ctrl+Shift+P 修改tasks.json文件,设置成ros环境,可以将下列代码直接替换原代码:

{
// 有关 tasks.json 格式的文档,请参见
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "label": "catkin_make:debug", //代表提示的描述性信息
            "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
            "command": "catkin_make",//这个是我们需要运行的命令
            "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可选always或者silence,代表是否输出信息
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

 然后在src目录下新建功能包,名字“pcl_01”;回车添加依赖:

roscpp pcl_conversions pcl_ros pcl_msgs sensor_msgs

回车创建完成,在功能包的src目录下新建.cpp文件命名为:“pcl_create.cpp”。

3.编写第一个点云入门程序

#include <ros/ros.h>
#include <pcl/point_cloud.h>
#include <pcl_conversions/pcl_conversions.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl_ros/point_cloud.h>

int main (int argc, char *argv[])
{
    /* code */
    //初始化ros节点
    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;

    //编辑点云数据
    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);
    }

    //转换成ros的消息类型
    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点的点云,并且发布话题。

4.修改CmakeLists.txt文件

cmake_minimum_required(VERSION 3.0.2)
project(pcl_01)
find_package(catkin REQUIRED COMPONENTS
  pcl_conversions
  pcl_ros
  roscpp
  sensor_msgs
)
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.启动功能包

开启一个终端,启动roscore

source ./devel/setup.bash
roscore

再新开一个终端,启动程序

rosrun pcl_01 pcl_create 

2.启动rviz查看

rviz

         在rviz里面, Fixed Frame 选择“odom”(不知道什么原因,我操作的时候下拉选项没有“odom”这个选项,后面直接手打上去的)。

          添加一个PointCloud2,选择topic为“/pcl_output”

最后显示结果如下即为成功。

 

总结 

         网络上很多pcl的教学,但是在ros下使用的教程并不丰富,刚开始创建功能包甚至不知道需要哪些依赖项,反正“只要功夫深,铁杵磨成针”,发表这些文章的目的主要是想找到一起学习的小伙伴,大家一起讨论、一起成长。

          接下来我会发布一系列关于pcl的学习博客,如果对你有帮助,请点赞收藏,防止迷路~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值