实验室有一个镭神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
将ROS包复制或者克隆到当前文件夹下
git clone https://github.com/BIT-DYN/pointpillars_ros
cd ..
编译
conda activate openpcdet
pip install --user rospkg catkin_pkg
pip install pyquaternion
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
迁移OpenPCDet中的一些文件
为保险起见,我将下边这些文件全部放入到src/pointpillars/tools文件夹下了。 可以先修改一下demo.py文件的配置文件和预训练模型的位置,测试是否能成功调用pcdet,如果可以的话,说明环境迁移过来后没问题,再尝试修改ros.py的代码。
修改代码
ros.py代码
sys.path.append("/home/ubuntu/pointpillars_ros/src/pointpillars_ros")
""" 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")
self.sub_velo = rospy.Subscriber("/kitti/velo/pointcloud", PointCloud2, self.lidar_callback, queue_size=1, buff_size=2**12)
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>
launch/pointpillars.rviz代码 主要修改你所用的话题的名字,我改了点云和图像的名字
3. 运行
执行下边的命令
conda activate openpcdet
source ~/pointpillars_ros/devel/setup.bash
roslaunch pointpillars_ros pointpillars.launch
4. 图片效果:
我使用kitti原数据的某一段时间,转成.bag格式,用pointpillars的模型进行测试的,效果也不行,猜测原因可能是1.旋转矩阵参数没有修改;2.激光点云显示的跟检测框有延时,不能很好匹配;3.第三点可能就是模型不行(可能性不大)。 下图是用雷神c16雷达在实验室采集的30秒的数据,不到1分钟,696MB。 目前用rosbag record存储了一些雷神C16激光雷达的数据,还不太会使用雷达实时读取,实时检测。后期再想办法吧。
5. 视频效果
哔哩哔哩
6. 主要参考资料:
??非常感谢这些网友分享的开源资料,让一个小白的我,也能快速demo出一个效果。
遇到的问题,解决办法:
|