• 三维目标检测之ROS可视化


    实验室有一个镭神C16的激光雷达,最近在我这,想拿来玩一玩。本意是做一个实时的检测,通过ROS获取激光雷达的激光点云,用pointpillars模型来进行实时的三维目标检测任务。但是镭神c16这一个激光雷达,不太好处理,目前只能用自带的驱动,进行一个实时的显示。所以下边的思路就是,先存储镭神c16的点云数据,再用ros进行三维目标检测。

    1. 思路:

      通过ros来实现点云消息的订阅和检测框bbox消息的发布,来实现一个检测效果的可视化功能。

    2. 实验环境:

    • Ubuntu16.04
    • cuda 10.1
    • ros-kinetic
      检测环境主要依托OpenPCDet,环境搭建可参考我的这篇博客

    3. 步骤:

    1. 前提条件

    已经搭建过了OpenPCDet。
    已经搭建了ROS环境,我用的是kinetic版本,用其他版本应该也可以。

    2. 编译环境

    创建一个工作空间并进入

    mkdir -p ~/pointpillars_ros/src
    cd pointpillars_ros/src
    
    • 1
    • 2

    将ROS包复制或者克隆到当前文件夹下

    git clone https://github.com/BIT-DYN/pointpillars_ros
    cd ..
    
    • 1
    • 2

    编译

    # 进入到搭建好的openpcdet环境
    conda activate openpcdet
    pip install --user rospkg catkin_pkg
    pip install pyquaternion
    # 因为我用的是kinetic,所以需要安装pcl-ros,以上版本不用安装
    sudo apt-get install ros-kinetic-pcl-ros
    sudo apt-get install ros-kinetic-jsk-recognition-msg
    sudo apt-get install ros-kinetic-jsk-rviz-plugins
    ## 注意,执行catkin_make时,在最外层的文件夹下,也就是我例子中的~/pointpillars_ros
    catkin_make
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    迁移OpenPCDet中的一些文件

    为保险起见,我将下边这些文件全部放入到src/pointpillars/tools文件夹下了。

    修改代码

    ros.py代码

    # 下边的路径改成自己的
    sys.path.append("/home/ubuntu/pointpillars_ros/src/pointpillars_ros") # Line 22
    # 54行后边
    """ Initialize ros parameters """
    config_path = rospy.get_param("/config_path", "/home/ubuntu/pointpillars_ros/src/pointpillars_ros/tools/cfgs/kitti_models/pointpillar.yaml")
    ckpt_path = rospy.get_param("/ckpt_path", "/home/ubuntu/pointpillars_ros/src/pointpillars_ros/tools/models/pointpillar.pth")
    # 订阅的激光点云名字,改成自己的,我用的是kitti的.bag文件
    self.sub_velo = rospy.Subscriber("/kitti/velo/pointcloud", PointCloud2, self.lidar_callback, queue_size=1,  buff_size=2**12)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    launch/pointpillars.launch代码

    <launch>
    # 主要修改下边第一行
      <node pkg="rosbag" type="play" name="player" output="log" args="-l /media/ubuntu/ximing/dataset/ros_kitti/bag/2011_10_03/kitti_2011_10_03_drive_0027_synced.bag" />
      <node name="pointpillars_ros" type="ros.py" pkg="pointpillars_ros" output="screen"/>
      <node type="rviz" name="rviz" pkg="rviz" args="-d $(find pointpillars_ros)/launch/pointpillars.rviz" />
    launch>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    launch/pointpillars.rviz代码
    主要修改你所用的话题的名字,我改了点云和图像的名字
    在这里插入图片描述

    3. 运行

    执行下边的命令

    conda activate openpcdet
    source ~/pointpillars_ros/devel/setup.bash
    roslaunch pointpillars_ros pointpillars.launch
    
    • 1
    • 2
    • 3

    4. 图片效果:

    我使用kitti原数据的某一段时间,转成.bag格式,用pointpillars的模型进行测试的,效果也不行,猜测原因可能是1.旋转矩阵参数没有修改;2.激光点云显示的跟检测框有延时,不能很好匹配;3.第三点可能就是模型不行(可能性不大)。
    在这里插入图片描述在这里插入图片描述下图是用雷神c16雷达在实验室采集的30秒的数据,不到1分钟,696MB。
    在这里插入图片描述
    目前用rosbag record存储了一些雷神C16激光雷达的数据,还不太会使用雷达实时读取,实时检测。后期再想办法吧。

    5. 视频效果

    哔哩哔哩

    6. 主要参考资料:

      非常感谢这些网友分享的开源资料,让一个小白的我,也能快速demo出一个效果。

    遇到的问题,解决办法:

  • 相关阅读:
    《Java编程思想》读书笔记(三)
    在Node.js中,什么是事件发射器(EventEmitter)?
    【Spring Cloud实战】Ribbon负载均衡
    环境变量与命令行参数
    虚拟化技术 - I/O虚拟化 [二]
    得物App弱网诊断探索之路
    ROS代码中的消息日志级别
    电脑怎么设置定时关机,2个简单的操作
    Python 集合13 update()方法—更新为并集
    SpringMVC14-SpringMVC执行流程
  • 原文地址:https://blog.csdn.net/jiachang98/article/details/126106126