日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 目标检测 >内容正文

目标检测

三维目标检测之ROS可视化

發(fā)布時間:2024/3/7 目标检测 89 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三维目标检测之ROS可视化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗室有一個鐳神C16的激光雷達,最近在我這,想拿來玩一玩。本意是做一個實時的檢測,通過ROS獲取激光雷達的激光點云,用pointpillars模型來進行實時的三維目標檢測任務。但是鐳神c16這一個激光雷達,不太好處理,目前只能用自帶的驅動,進行一個實時的顯示。所以下邊的思路就是,先存儲鐳神c16的點云數據,再用ros進行三維目標檢測。

文章目錄

  • 1. 思路:
  • 2. 實驗環(huán)境:
  • 3. 步驟:
    • 1. 前提條件
    • 2. 編譯環(huán)境
      • 創(chuàng)建一個工作空間并進入
      • 將ROS包復制或者克隆到當前文件夾下
      • 編譯
      • 遷移OpenPCDet中的一些文件
    • 3. 修改代碼
      • **ros.py代碼**
        • 1. 簡單修改
        • 2. 修改旋轉參數
        • 3.添加類似與NMS的功能,去除不靠譜的檢測結果
        • 4. 新增發(fā)布跟檢測結果匹配的每一幀點云
      • **launch/pointpillars.launch代碼**
      • **launch/pointpillars.rviz代碼**
    • 4. 運行
  • 4. 圖片效果:
    • 1.未設定閾值的檢測效果:
    • 2.設定閾值之后的效果
    • 3. 最終效果
  • 5. 主要參考資料:

1. 思路:

??通過ros來實現點云消息的訂閱和檢測框bbox消息的發(fā)布,來實現一個檢測效果的可視化功能。

2. 實驗環(huán)境:

  • Ubuntu16.04
  • cuda 10.1
  • ros-kinetic
    檢測環(huán)境主要依托OpenPCDet,環(huán)境搭建可參考我的這篇博客

3. 步驟:

1. 前提條件

已經搭建過了OpenPCDet。
已經搭建了ROS環(huán)境,我用的是kinetic版本,用其他版本應該也可以。

2. 編譯環(huán)境

創(chuàng)建一個工作空間并進入

mkdir -p ~/pointpillars_ros/src cd pointpillars_ros/src

將ROS包復制或者克隆到當前文件夾下

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

編譯

# 進入到搭建好的openpcdet環(huán)境 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 ## 注意,執(zhí)行catkin_make時,在最外層的文件夾下,也就是我例子中的~/pointpillars_ros catkin_make

遷移OpenPCDet中的一些文件

為保險起見,我將下邊這些文件全部放入到src/pointpillars/tools文件夾下了。

可以先修改一下demo.py文件的配置文件和預訓練模型的位置,測試是否能成功調用pcdet,如果可以的話,說明環(huán)境遷移過來后沒問題,再嘗試修改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)).T

3.添加類似與NMS的功能,去除不靠譜的檢測結果

另外ros.py代碼中是沒有去除掉scores低的檢測框,我打印看了一下,如下圖所示,置信度為0.107的也沒有去除掉:
修改ros.py代碼的大概110行前后(去除掉不合適的檢測框,我設置的閾值為0.5),如下所示:

# 組裝數組字典input_dict = {'points': points,'frame_id': msg.header.frame_id,}data_dict = self.demo_dataset.prepare_data(data_dict=input_dict) # 數據預處理data_dict = self.demo_dataset.collate_batch([data_dict])load_data_to_gpu(data_dict) # 將數據放到GPU上pred_dicts, _ = self.model.forward(data_dict) # 模型前向傳播scores = pred_dicts[0]['pred_scores'].detach().cpu().numpy()mask = scores > 0.5scores = scores[mask]boxes_lidar = pred_dicts[0]['pred_boxes'][mask].detach().cpu().numpy()label = pred_dicts[0]['pred_labels'][mask].detach().cpu().numpy()num_detections = boxes_lidar.shape[0]#rospy.loginfo("The num is: %d ", num_detections)# print(boxes_lidar)# print(scores)# print(label)

4. 新增發(fā)布跟檢測結果匹配的每一幀點云

分析:
??以上的代碼,訂閱了激光點云信息(并在rviz界面展示),發(fā)布檢測框(并在rviz顯示),檢測是需要時間的,所以檢測框與當前顯示幀的點云并不匹配。
思路
??得到檢測框結果之后,重新發(fā)布當前幀點云信息,名字修改一下。然后在rviz可視化界面選擇重新發(fā)布的點云就可以了。
在ros.py中添加新發(fā)布的點云,在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. 運行

執(zhí)行下邊的命令

conda activate openpcdet source ~/pointpillars_ros/devel/setup.bash roslaunch pointpillars_ros pointpillars.launch

4. 圖片效果:

我使用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可视化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。