天天看點

運作ORB-SLAM筆記_使用篇(二)

1. 編譯完成之後就可以使用了,按照說明我們可以知道,首先開啟roscore

再打開一個指令視窗使用指令:rosrun ORB_SLAM ORB_SLAM PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

其中ORB_SLAM PATH_TO_VOCABULARY:是一種樹型資料結構模型,<code>ORB-SLAM</code>裡面主要用來做<code>回訪(loop-closure)</code>檢 測,對于不同資料集嚴格來說需要離線單獨處理生成,但一般成像條件都差不多是以對于不同圖像資料集可以使用相同的詞彙資料檔案(相當于一個資料庫檔案,方 便快速儲存和查詢視覺特征資訊)。雖然是TXT檔案,打開就是許多數字而已。(https://answers.cosrobotics.org/question/184/guan-yu-orb_slamyun-xing-yi-ji-rgb-d-datasetde-xiang-ji-can-shu-de-wen-ti/)

PATH_TO_SETTINGS_FILE:這個很容易了解就是相機的内參;

然後我們輸入指令如圖所示:

我們檢視ORB_SLAM節點的topic

salm@salm:~$ rtopic  list -v

Published topics:

 * /ORB_SLAM/Map [visualization_msgs/Marker] 1 publisher

 * /ORB_SLAM/Frame [sensor_msgs/Image] 1 publisher

 * /rosout [rosgraph_msgs/Log] 1 publisher

 * /tf [tf2_msgs/TFMessage] 1 publisher

 * /rosout_agg [rosgraph_msgs/Log] 1 publisher

Subscribed topics:

 * /camera/image_raw [sensor_msgs/Image] 1 subscriber

 * /rosout [rosgraph_msgs/Log] 1 subscriber

(1)知道該節點是訂閱/camera/image_raw這個topic,然後被 <code>ORB_SLALM</code> 節點處理後的圖像幀被釋出到話題 <code>ORB_SLAM/Frame</code> 中,可以通過使用 <code>image_view</code> 功能包來檢視

<code>rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true</code>

<code>(2)ORB_SLAM</code> 節點處理得到的地圖被釋出到話題 <code>/ORB_SLAM/Map</code> 中,錄影機目前位姿和地圖全局坐标原點通過 <code>/tf</code> 功能包分别釋出到話題 <code>/ORB_SLAM/Camera</code> 和話題 <code>/ORB_SLAM/World</code> 中,通過運作 <code>rviz</code> 功能包來檢視地圖:

<code>rosrun rviz rviz -d Data/rviz.rviz</code>

這都是我們在訂閱了/camera/image_raw才能看到的試驗結果,那麼我們從那裡得到/camera/image_raw這個節點呢?

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 那麼我就嘗試首先釋出一個經典的圖檔topic 給ORB_SLAM節點:

(1)首先進入自己的工作空間catkin_ws,然後進入src,使用catkin_pkg_create指令建立我的功能包

之後在CMakefile.txt檔案添加

add_executable(my_publisher src/my_publisher.cpp)

target_link_libraries(my_publisher ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})

進行catkin_make即可我們運作檢視一下實作的結果:

                                                       $ rosrun learning_image_transport  my_publisher

                 $  rosrun ORB_SLAM ORB_SLAM Data/ORBvoc.txt Data/Settings.yaml

                                                       $  rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true

就是這個結果,因為我也是一邊學習,一邊實作,我自己也不知道裡面使用的算法,具體為什麼會這樣,這也是不斷學習的原因

(2)那現在我再釋出一個動态的topic 用攝像頭捕捉的話題釋出給ORB_SLAM,看看實作結果:

 與之前的一樣,仍然在src 檔案下     $ vi  image_converter.cpp

輸入<code>:</code>

 同理 添加

                           add_executable(image_converter src/image_converter.cpp)

                           target_link_libraries(image_converter ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})

當然前提是電腦有攝像頭,并且下載下傳了USB攝像頭的驅動:https://github.com/bosch-ros-pkg/usb_cam

輸入以下指令:                             

                                                       $  roslaunch usb_cam usb_cam-test.launch

(在啟動攝像頭可能會遇到一些問題吧,比如出現  Webcam: expected picture but didn't get it...就要修改launch檔案下的 "pixel_format",比如有mjpeg ,yuyv等)

                                                       $  rosrun learning_image_transport image_converter

繼續閱讀