三维目标检测之ROS可视化
實驗室有一個鐳神C16的激光雷達,最近在我這,想拿來玩一玩。本意是做一個實時的檢測,通過ROS獲取激光雷達的激光點云,用pointpillars模型來進行實時的三維目標檢測任務。但是鐳神c16這一個激光雷達,不太好處理,目前只能用自帶的驅動,進行一個實時的顯示。所以下邊的思路就是,先存儲鐳神c16的點云數據,再用ros進行三維目標檢測。
文章目錄
- 1. 思路:
- 2. 實驗環境:
- 3. 步驟:
- 1. 前提條件
- 2. 編譯環境
- 創建一個工作空間并進入
- 將ROS包復制或者克隆到當前文件夾下
- 編譯
- 遷移OpenPCDet中的一些文件
- 3. 修改代碼
- **ros.py代碼**
- 1. 簡單修改
- 2. 修改旋轉參數
- 3.添加類似與NMS的功能,去除不靠譜的檢測結果
- 4. 新增發布跟檢測結果匹配的每一幀點云
- **launch/pointpillars.launch代碼**
- **launch/pointpillars.rviz代碼**
- 4. 運行
- 4. 圖片效果:
- 1.未設定閾值的檢測效果:
- 2.設定閾值之后的效果
- 3. 最終效果
- 5. 主要參考資料:
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 ..編譯
# 進入到搭建好的openpcdet環境 conda activate openpcdet pip install --user rospkg catkin_pkg pip install pyquaternion # 因為我用的是kinetic,所以需要安裝下邊的庫,如果是其他版本的ros,下邊修改kinetic安裝對應版本即可 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遷移OpenPCDet中的一些文件
為保險起見,我將下邊這些文件全部放入到src/pointpillars/tools文件夾下了。
可以先修改一下demo.py文件的配置文件和預訓練模型的位置,測試是否能成功調用pcdet,如果可以的話,說明環境遷移過來后沒問題,再嘗試修改ros.py的代碼。
3. 修改代碼
ros.py代碼
1. 簡單修改
# 下邊的路徑改成自己的 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)2. 修改旋轉參數
修改旋轉參數,大概在ros.py的86行前后。我問了開源作者,他們安裝的雷達有偏角,所以這里置0就行。
# 旋轉軸 #rand_axis = [0,1,0] #旋轉角度 #yaw = 0.1047 #yaw = 0.0 #返回旋轉矩陣 #rot_matrix = self.rotate_mat(rand_axis, yaw) #np_p_rot = np.dot(rot_matrix, np_p[:,:3].T).T# convert to xyzi point cloud x = np_p[:, 0].reshape(-1) y = np_p[:, 1].reshape(-1) z = np_p[:, 2].reshape(-1) if np_p.shape[1] == 4: # if intensity field existsi = np_p[:, 3].reshape(-1) else:i = np.zeros((np_p.shape[0], 1)).reshape(-1) points = np.stack((x, y, z, i)).T3.添加類似與NMS的功能,去除不靠譜的檢測結果
另外ros.py代碼中是沒有去除掉scores低的檢測框,我打印看了一下,如下圖所示,置信度為0.107的也沒有去除掉:
修改ros.py代碼的大概110行前后(去除掉不合適的檢測框,我設置的閾值為0.5),如下所示:
4. 新增發布跟檢測結果匹配的每一幀點云
分析:
??以上的代碼,訂閱了激光點云信息(并在rviz界面展示),發布檢測框(并在rviz顯示),檢測是需要時間的,所以檢測框與當前顯示幀的點云并不匹配。
思路:
??得到檢測框結果之后,重新發布當前幀點云信息,名字修改一下。然后在rviz可視化界面選擇重新發布的點云就可以了。
在ros.py中添加新發布的點云,在rviz文件中新增新的點云話題。
修改后的代碼可查看:
國內gitee地址:https://gitee.com/ximing689/pointpillars_ros
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代碼
主要修改你所用的話題的名字,我改了點云和圖像的名字
4. 運行
執行下邊的命令
conda activate openpcdet source ~/pointpillars_ros/devel/setup.bash roslaunch pointpillars_ros pointpillars.launch4. 圖片效果:
我使用kitti原數據的某一段時間,轉成.bag格式,用pointpillars的模型進行測試的,效果也不行,猜測原因可能是1.旋轉矩陣參數沒有修改;2.激光點云顯示的跟檢測框有延時,不能很好匹配;3.第三點可能就是模型不行(可能性不大)。
1.未設定閾值的檢測效果:
2.設定閾值之后的效果
設定閾值之后,明顯減少了很多檢測框,不過依然存在檢測延時(檢測框不準)。
3. 最終效果
初次部署這個代碼的時候,檢測框跟實際點云完全不匹配,目標框是雜亂的。經過分析,將點云和檢測框進行匹配對齊之后,顯示的檢測效果還是不錯的(目前還沒做圖像的對齊,所以圖像和點云顯示不一致)。
嗶哩嗶哩
下圖是用雷神c16雷達在實驗室采集的30秒的數據,不到1分鐘,696MB。
目前用rosbag record存儲了一些雷神C16激光雷達的數據,還不太會使用雷達實時讀取,實時檢測。后期再想辦法吧。
5. 主要參考資料:
??非常感謝這些網友分享的開源資料,讓一個小白的我,也能快速demo出一個效果。
- ROS點云的Pointpillars實時目標檢測
- Github資料
遇到的問題,解決辦法:
- error while loading shared libraries: libopencv_core3.so.3.3
- ROS運行python報錯:/usr/bin/env: ‘python\r’: No such file or directory
視頻效果:https://www.bilibili.com/video/BV1ce4y1D76o/
代碼地址:https://gitee.com/ximing689/pointpillars_ros
總結
以上是生活随笔為你收集整理的三维目标检测之ROS可视化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dw01均衡电路_一种基于dw01的电池
- 下一篇: cmd如何切换到E盘