Ubuntu 16.04 ORB_SLAM2+ROS+usb_cam+AR

轉載 https://blog.csdn.net/u79501/article/details/68942174


最近開始學習ORB_SLAM2,想試試它的AR功能。嘗試的過程中遇到了一些問題,總結一下:

搭建ORB_SLAM2

ORB_SLAM2的搭建並不難,網上有很多教程,這個就不錯點擊打開鏈接 

(我建議用opencv3.2,因爲之前我裝的3.0,沒有成功,後來刪了3.0換了3.2,就成功了)

ORB_SLAM2的源碼git_hub上有:點擊打開鏈接

ORB_SLAM2有四個Examples,跑AR的話需要安裝ROS,其他的例子,下載數據集就可以跑了。

ROS安裝

ROS的安裝稍微麻煩一點,它有許多版本,具體要看你用的ubuntu版本了,我用的ubuntu 16.04,所以我用的是ROS Kinetic。如果是ubuntu 14.04的話,用ROS Indigo就行了。網上也有很多教程,但是你自己在操作的過程中可能會遇到一些問題,可能是這些博客沒有指出來的。所以我建議如果是像我這種剛接觸Linux或者ROS的小白,最好先了解一下Linux和ROS的基礎知識,像什麼shell、bashrc、source、export這些,還有ROS的topic、node什麼的。雖然可能不會用它們進行多深入的工作,但是稍微瞭解一下這些概念,看起教程來會容易很多。你就會知道爲什麼要這麼做,就算哪出錯了,你也可以自己搞定了~

具體安裝過程我就不囉嗦了,網上有寫得很好的。我就把我遇到的一些問題,或者值得注意的地方寫一寫。

我主要參考的這篇博文:點擊打開鏈接(注意,kinetic的k應該是小寫的,文中貌似不太對)

我裝的是ros-kinetic-desktop-full,用了15分鐘左右吧。


有關環境配置

在安裝ROS期間,你會看到提示說需要source 多個setup.bash文件中的某一個,或者甚至提示添加這條'source’命令到你的啓動腳本里面。

這些操作是必須的,因爲ROS是依賴於某種組合空間的概念,而這種概念就是通過配置腳本環境來實現的。

這可以讓針對不同版本或者不同軟件包集的開發更加容易。 如果你在查找和使用ROS軟件包方面遇到了問題,請確保你已經正確配置了腳本環境。

一個檢查的好方法是確保你已經設置了像ROS_ROOT和ROS_PACKAGE_PATH這樣的環境變量,可以通過以下命令查看:

$export | grep ROS

如果發現沒有配置,那這個時候你就需要’source’某些’setup.bash’文件了。

在終端下輸入:

gedit ~/.bashrc

在最後面添加相應的setup.bash文件,這樣就不用每次開啓一個終端又需要重新配置。

修改完之後記得在終端 source ~/.bashrc 一下,讓剛剛的修改立即生效。


有關ROS工作空間

一般我們都會創建一個ROS的工作空間:catkin_ws(把它放在home下就行了)

創建完之後記得把catkin_ws的setup.sh添加到.bashrc後面。

一般創建ROS的package都是在catkin_ws/src下面,比如後面要講的usb_cam,就把它直接安裝到catkin_ws/src就行了。

ORB_SLAM2也可以安裝到catkin_ws/src下,這樣你就不用把ORB_SLAM2添加到ROS的環境變量中去了。

當然,你也可以把ORB_SLAM2安裝到其他地方,不過你要記得把ORB_SLAM2的setup.sh路徑添加到.bashrc後面哦。


有關ORB_SLAM AR

我主要參考了這兩篇博客:點擊打開鏈接 和點擊打開鏈接

1. 安裝usb_cam驅動

usb_cam的驅動直接安裝在catkin_ws/src下面就行了,因爲之前已經把catkin_ws的setup.sh添加到.bashrc中了。如果你安裝在其他地方,你還得把usb_cam的setup.sh添加到.bashrc中。

usb_cam的下載地址:點擊打開鏈接,在catkin_ws中catkin_make一下就好了。

安裝完之後就可以測試一下,有兩種方法:

第一種:

a. 在一個終端下啓動ROS內核:roscore

b. 在第二個終端輸入:rosrun usb_cam usb_cam_node (這個時候是看不到畫面的)

c. 在第三個終端輸入:rosrun image_view image_view image:=/usb_cam/image_raw

(前提是你安裝好了image-view:sudo apt-get install  ros-kinetic-image-view)

第二種:

直接在一個終端下輸入:roslaunch usb_cam usb_cam-test.launch

2. 編譯ORB_SLAM2中的ROS

在一個終端下輸入:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/wnw/Projects/ORB_SLAM2-master/Examples/ROS

(根據你自己的路徑修改)

或者你可以直接寫在.bashrc最後面,記得要source一下哦~

然後在這個終端下繼續編譯ORB_SLAM2 ROS

mkdir build

cd build

cmake .. -DROS_BUILD_TYPE=Release

make -j

編譯完之後,記得在.bashrc後面加入:

source /home/wnw/Projects/ORB_SLAM2-master/Examples/ROS/ORB_SLAM2/build/devel/setup.bash

3. 運行ROS中的Demo


直接跑MonoAR吧~

開始之前還有個地方需要改:


把ros_mono_ar.cc中的

ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);

改爲:

ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);

(看到沒有,路徑變了喲。因爲我們的圖片都是從/usb_cam/image_raw發送過來的)

然後再把Example編譯一下~

這下可以開始了:

a. 在一個終端輸入:

roscore(回車)

b. 在第二個終端輸入:

roslaunch usb_cam usb_cam-test.launch(回車)

c. 在第三個終端輸入:

rosrun ORB_SLAM2 MonoAR /home/wnw/Projects/ORB_SLAM2-master/Vocabulary/ORBvoc.txt  /home/wnw/Projects/ORB_SLAM2-master/Examples/Monocular/TUM1.yaml(回車)

(路徑按照自己的寫哦,TUM1.yaml是參數設置文件,主要是相機的內參,這個得自己標定。如果懶得標定,直接用TUM1.yaml吧,湊合着用吧)





跑出來的效果是這樣的:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章