Robot
[ROS SLAM系列] 用機器人身上的WebCAM,即時實現ORB SLAM2 (ROS melodic版)
<source : greatway9999>
一、前言
在我們開始一個偉大的機器人計畫前,我們一定會思考要在機器人身上實現哪些功能。如果是服務型的機器人,那麼SLAM的功能必不可少。實現SLAM,可以透過 Lidar、WebCAM等感測器來進行,對於一般人來說 WebCAM是相對比較容易取得的感測器,而ORB-SLAM2正是其中可用於WebCAM的SLAM演算法。就讓我們一起先在WebCAM進行SLAM的實現。
二、實作 : 執行WebCAM的即時SLAM測試
用WebCAM實作ORB-SLAM2,其實很簡單,只要逐一完成以下目標,就可順利實現ORB-SLAM2。
- 安裝 Melodic版的usb_cam套件 (若已安裝,可略過本步驟)
- 啟動 roscore 和 usb_cam
- 相機校正
- 修改ros_mono.cc文件
- 重新編譯
- 執行單目 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
如下圖
$ 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 留言