轉載 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吧,湊合着用吧)
跑出來的效果是這樣的: