11.2 PCL从ROS获取激光雷达的点云数据及处理

这部分内容结合了前面的内容。其实很简单,分三步走就可以:首先是通过ROS打开激光雷达,查看PCL配置需要的信息。然后是用PCL通过ROS发布的topic获取激光雷达的数据。最后将ROS和PCL结合。

实现上面两步的前提是我们已经部署好了ROS环境及PCL环境,具体操作如下:

一、通过ROS打开激光雷达

首先需要搭建好打开激光雷达的环境,这部分内容可以参照以下博址:

4.livox hap(大疆激光雷达)环境搭建_livox hap激光雷达-CSDN博客,然后根据该博址运行

复制代码
source ../../devel/setup.sh
roslaunch livox_ros_driver2 rviz_HAP.launch

运行成功后得到界面如下:

上面代码和图在以上博址有。在这个图片里我们注意两个地方:

一是记住左栏第二行的Fixed Frame后的livox_frame;二是记住左栏发布的Topic后的/livox/lidar,这两个内容是后面PCL读取数据需要的。在这里,打开雷达的环境就配置好了。

二、用PCL通过ROS发布的topic获取激光雷达的数据

PCL的详细运用可以看博址:,在这里,直接写读取激光雷达数据的步骤(和博址有略微的差别)。

1、在home下新建文件夹

复制代码
mkdir -p ~/catkin_ws/src

2、进入src文件夹并初始化

复制代码
cd ~/catkin_ws/src
catkin_init_workspace

执行完该命令后,src目录下会多出一个 CMakeLists.txt 文件,这个文件一般不需要我们修改。

3、 返回到catkin_ws下,进行编译(注意:每次编译必须在这个ws工作空间下才能编译成功!)

复制代码
cd ~/catkin_ws/
catkin_make

执行完该命令后,发现工作空间catkin_ws中有三个目录: build devel src。可以从5、看到它们的作用。

4、source一下将工作空间加入环境变量

复制代码
source devel/setup.bash

注意: 这一步只重新加载了setup.bash文件。如果关闭并打开一个新的命令行窗口,也需要再输入该命令将得到同样的效果。

所以建议采用一劳永逸的方法:.

5、.bashrc文件在用户的home文件夹(/home/USERNAME/.bashrc)下。每次用户打开终端,这个文件会加载命令行窗口或终端的配置。所以可以添加命令或进行配置以方便用户使用。在bashrc文件添加source命令:

复制代码
echo "source ~/catkin_ws/devel/setup.bash">> ~/.bashrc

或者也可以打开.bashrc文件采用手动修改的方式添加source ~/catkin_ws/devel/setup.bash:

复制代码
gedit ~/.bashrc

添加完毕,你的bashrc文件应该有两句source:

添加完后,在 .bashrc的同目录下运行

复制代码
~/.bashrc

5、理解工作空间

工作空间结构:

源空间(src文件夹),放置了功能包、项目、复制的包等。在这个空间中,,最重要的一个文件是CMakeLists.txt。当在工作空间中配置包时,src文件夹中有CMakeLists.txt因为cmake调用它。这个文件是通过catkin_init_workspace命令创建的。

编译空间(build space):在build文件夹里,cmake和catkin为功能包和项目保存缓存信息、配置和其他中间文件。

开发空间(Development(devel)space):devel文件夹用来保存编译后的程序,这些是无须安装就能用来测试的程序。一旦项目通过测试,就可以安装或导出功能包从而与其他开发人员分享。

一、创建节点发布点云数据并可视化

1、在ros工作空间的src目录下新建包(包含依赖项)

复制代码
catkin_create_pkg chapter10_tutorials pcl_conversions pcl_ros pcl_msgs sensor_msgs

2、在软件包中新建src目录

复制代码
rospack profile
roscd chapter10_tutorials
mkdir src

3、在src目录下新建pcl_write.cpp,topic为"/livox/lidar"发布。frame设为livox_frame(这两个信息是从第一步得到的)。

**注意:**以下代码也有个地方要改为/livox/lidar,在这里已经修改好了,如果你们的topic不同,则自己需要修改。

复制代码
#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);
    pcl::io::savePCDFileASCII ("0.pcd", cloud);
}
 
main (int argc, char **argv)
{
    ros::init (argc, argv, "pcl_write");
    ros::NodeHandle nh;
    ros::Subscriber bat_sub = nh.subscribe("/livox/lidar", 10, cloudCB);
    ros::spin();
 
    return 0;
}

4、修改cmakelist.txt内容

复制代码
cmake_minimum_required(VERSION 2.8.3)
project(chapter10_tutorials)
find_package(catkin REQUIRED COMPONENTS
  pcl_conversions
  pcl_ros
  roscpp
  sensor_msgs
  rospy
)
 
find_package(PCL REQUIRED)
catkin_package()
 
include_directories(
  ${catkin_INCLUDE_DIRS}
  ${PCL_INCLUDE_DIRS}
)
 
link_directories(${PCL_LIBRARY_DIRS})
 
 
add_executable(pcl_write src/pcl_write.cpp)

target_link_libraries(pcl_write ${catkin_LIBRARIES} ${PCL_LIBRARIES})

5、进入工作空间编译包

复制代码
cd ~/catkin_ws
catkin_make --pkg chapter10_tutorials

三、将ROS和PCL结合

1、若编译成功,新窗口打开ros

复制代码
roscore

2.打开新窗口再次运行第一步的代码打开激光雷达

复制代码
source ../../devel/setup.sh
roslaunch livox_ros_driver2 rviz_HAP.launch

3.再打开个新窗口运行pcl_write.cpp

复制代码
roscd chapter10_tutorials && rosrun chapter10_tutorials pcl_write

4.可视化

复制代码
rviz

**注意:**若打开后没有雷达返回的数据,则将左栏的设置为第一步的信息。

相关推荐
暂未成功人士!17 天前
点云处理的关键技术流程和常用算法
ros·pcl·点云处理·点云去噪滤波
提伯斯64618 天前
Fast-Lio和LIO-SAM分别在有gps情况下与PX4融合的过程
ros·px4·fast-lio·lio-sam
见合八方18 天前
【滤波器】用于红外微型光谱仪的可调谐MEMS-FP滤光片-综述
自动化·soa·光通信·激光雷达·半导体光放大器
南檐巷上学21 天前
基于地平线RDK X5的智能医药机器人系统
ubuntu·机器人·ros·机械臂·openclaw
加成BUFF22 天前
第七天 ROS《 参数服务器与Launch文件》
运维·ros·参数服务器
见合八方23 天前
News丨见合八方发布O波段高功率SLD蝶形器件
网络·soa·光通信·激光雷达·半导体光放大器
加成BUFF23 天前
第六天 ROS 《Action 通信实验》
linux·机器人·ros
加成BUFF23 天前
第5天 ROS 《Service 通信实验指导书》
机器人·ros
提伯斯64623 天前
解决Fast-Drone-250编译相关错误
linux·ros·无人机·fast-drone