<source : greatway9999>

一、前言

在我們開始一個偉大的機器人計畫前,我們一定會思考要在機器人身上實現哪些功能。如果是服務型的機器人,那麼SLAM的功能必不可少。實現SLAM,可以透過 Lidar、WebCAM等感測器來進行,對於一般人來說 WebCAM是相對比較容易取得的感測器,而ORB-SLAM2正是其中可用於WebCAM的SLAM演算法。就讓我們一起先在WebCAM進行SLAM的實現。


二、實作 : 執行WebCAM的即時SLAM測試

用WebCAM實作ORB-SLAM2,其實很簡單,只要逐一完成以下目標,就可順利實現ORB-SLAM2。

  1. 安裝 Melodic版的usb_cam套件 (若已安裝,可略過本步驟)
  2. 啟動 roscore 和 usb_cam
  3. 相機校正
  4. 修改ros_mono.cc文件
  5. 重新編譯
  6. 執行單目 SLAM
讓我們開始吧!

1. 安裝 Melodic版的usb_cam套件 (若已安裝,可略過本步驟)

步驟1. 查看 usb cam在系統中的顯示樣態

$ lsusb  
$ ls  /dev/video*

<source : greatway9999>

步驟2. 安裝 usb_cam 套件

$ sudo apt-get install ros-melodic-usb-cam


步驟3. 安裝image相關套件包

$ sudo apt-get install ros-melodic-image-*
$ sudo apt-get install ros-melodic-rqt-image-view


<source : greatway9999>

步驟4. 確認launch檔中的device 設定

進入到 usb_cam資料夾中,確認launch資料夾中的launch文件,第3行末要改成你想使用的裝置代號,以我的電腦為例,video0為webcam,因此value設為 " /dev/video0 "。




順帶一提,若不能存檔,請記得將檔案權限更改。
$ sudo su
$ chmod 666 [路徑]/usb_cam-test.launch 
ex. chmod 666 /opt/ros/melodic/share/usb_cam/launch/usb_cam-test.launch 

如下圖


步驟5. 執行usb_cam 的 launch檔測試影像傳輸是否正常

$ roslaunch usb_cam usb_cam-test.launch

成功後的畫面如下 :

<source : greatway9999>

備註 : 若出現類似 timeout的錯誤,請確認虛擬機上的 USB設定是否為 3.0。筆者更改成 USB 3.0後,錯誤碼就不再出現了。如下圖。

<source : greatway9999>

(Optional)步驟6. 利用rqt_image_view節點查看圖像

$ rqt_image_view image:=/image_raw

若視窗打開後,看不到圖片,記得要將左上角的下拉選單選到 /usb_cam_image。

<source : greatway9999>

(Optional)步驟7. 用RViz查看圖像

>>啟動 rviz 
>> 先更改“Displays”選項。單擊RViz左下方的[Add],在[By displaytype]選項卡中選擇[Image]  
>>然後將[Image] → [Image Topic]的值更改爲“/image_raw”,圖像就會顯示了。如下圖。

2. 啟動 roscore 和 usb_cam

$ roscore
$ roslaunch usb_cam usb_cam-test.launch


3. 相機標定

3-1準備標定圖

若無標定圖,可從ROS官網下載列印。

3-2啟動usb cam測試之launch檔 (若已啟動,可略過此步驟)

roslaunch usb_cam-test.launch

3-3 執行標定程式camera_calibration (另開一個新的 Terminal)

$ rosrun camera_calibration meracalibrator.py --size 15x21 --square 0.009 image:=/usb_cam/image_raw camera:=/usb_cam

參數依據自己的標定圖設定 size 15x21,指的是標定棋盤的內角點數,不是色塊數; square 0.009 是色塊的大小,單位是公尺。

啟動後,會出現一個灰色的鏡頭視窗。



為了得到一個好的校正結果,應該使標定圖儘量出現在鏡頭視野的各個位置裡 (左、右、上、下、傾斜、水平) 。

介面中參數意義 :
x:表示標定圖在視野中的左右位置。
y:表示標定圖在視野中的上下位置。
size:標定圖在占視野的尺寸大小,也可以理解為標定板離攝像頭的遠近。
skew:標定圖在視野中的傾斜位置。

<source : greatway9999>

3-3 點擊 CALIBRATE,完成校正

當CALIBRATE按鈕亮起時,表示有足夠的資料進行校正,就可以點擊CALIBRATE檢視結果。

4.修改ros_mono.cc文件

ORB-SLAM默認訂閱的話題為/camera/image_raw,而usb_cam節點發佈的話題為/usb_cam/image_raw,因此需要在ros_mono.cc (路徑 : catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src)中修改訂閱的話題

<source : greatway9999>

5.重新編譯

cd ~/catkin_ws/src/ORB_SLAM2
./build_ros.sh

6.執行單目 SLAM

$ rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

ex. 
$ rosrun ORB_SLAM2 Mono /home/great/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt  /home/great/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml 

<source : greatway9999>


成功實現了 ORB-SLAM2,你一定非常開心吧!一起繼續挑戰吧!:)


---
參考資料 :

#ORB_SLAM2 #usb_cam #webcam

0 留言