激光雷达3D目标检测任务需要将地面滤除,滤除地面的方法多种多样:基于深度学习、基于栅格、基于平面拟合、基于条件随机场、基于深度图像等等。关于将点云转化为深度图像,PCL库中有相关函数,但使用起来有一定的局限性,在这里不再展开,读者可自行体会。这里主要介绍利用OpenCV的Mat类,将ROS接收到的点云消息展开为深度图像的方法。
一、ROS工作空间及包的构建
mkdir -p ~/depthMap_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/depthMap_ws/
catkin_make
catkin_make执行过后,就成功创建了一个新的ROS工作空间,此时depthMap_ws目录下有三个文件夹:
接下来构建工作包,需要使用的库为PCL、OpenCV以及ROS自带的一些库:
cd depthMap_ws/src
catkin_create_pkg depth_make rospy roscpp std_msgs sensor_msgs pcl_ros pcl_conversions cv_bridge
其中depth_make 为包名,后面跟着的为需要的依赖。这一步进行完后,在depthMap_ws/src目录下会生成一个depth_make文件夹,该文件夹中的内容如下:
接着编辑package.xml文件,加入以下两行:
gedit package.xml
#在package.xml加入以下两行:
<build_depend>libpcl-all-dev</build_depend>
<exec_depend>libpcl-all</exec_depend>
进行到这一步,就初步完成了工作空间以及包的构建,接下来编写节点cpp文件