ORB_SLAM2运行TUM数据和实时数据
0.引用:
(1)https://www.cnblogs.com/ifly-zhhades/p/7305572.html
?(? 2)https://www.imooc.com/article/details/id/29136
(3)https://www.cnblogs.com/kekeoutlook/p/7693129.html
?(? 4)https://blog.csdn.net/zzu_seu/article/details/84866858
(5)ORB-SLAM2部署,編譯錯誤問題解決方法ros_rgbd.cc.o: undefined reference to symbol_power的專欄-CSDN博客
1.查看電腦軟硬件配置
(1)硬件
#獲取cpu詳細信息
$ cat /proc/cpuinfo
# 查看cpu是幾核
$ cat /proc/cpuinfo |grep "cores"|uniq
# 查看cpu型號
$ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
(2)軟件
#查看當前操作系統發行版信息
$ cat /etc/issue
軟件平臺
$roscore
2. 步驟
(1)更新apt庫
$ sudo apt-get update
(2)安裝git
$ sudo apt-get install git
(3)安裝cmake,用于程序編譯
$ sudo apt-get install cmake
(4)安裝pangolin作為可視化和用戶界面
#安裝依賴項
$ sudo apt-get install libglew-dev libpython2.7-dev
#從github上下載項目
$ git clone https://github.com/stevenlovegrove/Pangolin.git
#編譯安裝
$ cd Pangolin
$ mkdir build
$ cd build
$ cmake ..
報錯
所使用的安裝包https://github.com/stevenlovegrove/Pangolin.git有問題,改用舊版本安裝包
$ git clone https://github.com/zzx2GH/Pangolin.git
重復上述編譯過程
$ make
$ sudo make install
(5)安裝Open CV,用于處理圖像和特征,注意安裝版本是否兼容,要求最低版本是2.4.3,安裝版本為2.4.11
#安裝依賴項
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc 1394-22-dev
在OpenCV官網http://opencv.org下載OpenCV2.4.11的source版本,解壓到本地,編譯安裝
$ cd ~/opencv
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
#為防止編譯時間較長,cpu性能較高使用make -jx, x表示線程(4核*2),以加速編譯
$ make -j8
$ sudo make install
(6)安裝Eigen3開源線性庫,進行矩陣運算
$ sudo apt-get install libeigen3-dev
(7)安裝DBoW2和g2o
DBoW2是一個開源C++庫,用于索引圖像并將其轉換為單詞表示形式;
g2o是一個開源C++框架,用于優化基于圖的非線性誤差函數;
這兩個庫在ORB-SLAM2的ThirdParty文件夾中,后續統一編譯。
(8)安裝ORB-SLAM2
#克隆倉庫
$ git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
#編譯ORB_SLAM2,DBoW2,g2o,并解壓ORB詞典
$ cd ORB_SLAM2
$ chmod +x build.sh
$ ./build.sh
編譯過程中如果卡死,說明電腦cpu不行,就把build.sh文件中make -j換成make.
報錯:
error: ‘usleep’ was not declared in this scope
在提示有錯的文件system.cc、tracking.cc、Localmapping.cc、Loopclosing.cc、Viewer.cc、mono_euroc.cc、mono_kitti.cc、mono_tum.cc、rgbd_tum.cc、stereo_kitti.cc、stereo_euroc.cc
ROS中的viewerAR.cc的外部頭文件引用加上#include <unistd.h>
再重新編譯./build.sh
3. 單目數據庫TUM
有TUM、KITTI、EuRoC三種數據集。其中TUM數據集在http://vision.in.tum.de/data/datasets/rgbd-dataset/download下載對應序列,可以下載最簡單序列“freiburg1_xyz”,解壓到新建文件夾ORB_SLAM2/data中。該數據序列由kinect提供groundtruth.txt數據。包括depth文件夾、depth.txt、rgb文件夾、rgb.txt。
#運行./Examples/Monocular/mono_tum可執行文件
$ cd ORB_SLAM2
$ ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml Path_to_sequence_folder
其中,TUMX.yaml 與下載的序列freiburgx對應,本文為TUM1;Path_to_sequence_folder為數據序列freiburg1的存儲路徑。
ORB特征、環境稀疏地圖、相機運動軌跡。
公開數據集還可以作為算法性能對比的評價標準。
4.借助ROS實時運行ORB_SLAM2
(1)安裝ROS,Ubuntu16.04 安裝Ros_zttsm的博客-CSDN博客
(2)攝像頭數據讀取與顯示
#創建工作空間
$ mkdir -p ~/catkin_zttws/src
$ cd ~/catkin_zttws/src
#下載usb_cam包
$ git clone https://github.com/bosch-ros-pkg/usb_cam.git usb_cam
(usb_cam: A ROS Driver for V4L USB Camerashttps://gitee.com/ztt1996/usb_cam)
#編譯工作空間
$ cd ..
$ catkin_make
$ source devel/setup.sh
插入攝像頭連接線進usb2.0端口
#輸入查詢新設備接入命令
$ lsusb
顯示Logitech,Inc.Webcam C930e
#在/計算機/dev文件下搜索video,從新增文件得到設備號
打開/home/ztt/catkin_zttws/src/usb_cam/launch/usb_cam-test.launch文件,設置攝像頭對應設備號,一般video0表示電腦自帶攝像頭,外設依次遞增。(本例子是無攝像頭的臺式機外接羅技單目攝像頭,所以如果是帶攝像頭的筆記本外接羅技單目攝像頭,應該為video1)
?<param name="video_device" value="/dev/video0" />
#在catkin_***ws下啟動usb_cam節點,彈出顯示窗口
$ roslaunch usb_cam usb_cam-test.launch
(3)將ORB_SLAM2文件夾移動到catkin_zttws/src下;將包含ORB_SLAM2/Examples/ROS路徑添加到ROS_PACKAGE_PATH環境變量中,打開新終端
$sudo gedit?~/.bashrc
#在文件最后添加
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS
source /home/ztt/catkin_zttws/devel/setup.bash
其中PATH為ORB_SLAM2項目路徑/home/ztt/catkin_zttws/src
在終端執行命令
$ source ~/.bashrc
(4)編譯ROS下的ORB_SLAM2
(4.1)修改話題
ORB-SLAM默認訂閱的話題為/camera/image_raw,而usb_cam節點發布的話題為/usb_cam/image_raw,因此需要在/home/ztt/catkin_zttws/src/ORB_SLAM2.2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc中修改訂閱的話題。
? ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);
(4.2)因為(4.3)更改源文件,需要重新編譯
#新終端
#重新編譯ROS的example
$ cd ~/catkin_zttws/src/ORB_SLAM2
$ chmod +x build_ros.sh
$ ./build_ros.sh
如果報錯CMakeFiles/RGBD.dir/build.make:216: recipe for target '../RGBD' failed
則$gedit ./Examples/ROS/ORB_SLAM2/CMakeLists.txt
添加一行-lboost_system
#重新編譯工作空間
$ cd ~/catkin_zttws
$ catkin_make
(4.3)新終端運行內核
roscore
(4.4)新終端啟動相機
$ cd catkin_ws
$ roslaunch usb_cam usb_cam-test.launch
(4.5)新終端運行/home/ztt/catkin_zttws/src/ORB_SLAM2.2/Examples/ROS/ORB_SLAM2/Mono可執行文件
#cd?/home/ztt/catkin_zttws/src/ORB_SLAM2.2/Examples/ROS/ORB_SLAM2
# rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
其中PATH_TO_VOCABULARY:視覺詞典,一般可直接使用../../../Vocabulary/ORBvoc.txt
PATH_TO_SETTINGS_FILE:攝像頭內參,可以使用路徑./Asus.yaml,但需要將Asus.yaml中的參數改成自己使用攝像頭標定后的參數,攝像頭標定可以使用opencv或matlab工具箱。
(4.6)運行提示打不開參數文件Asus.yaml,復制ORBvoc.txt放在與Asus.yaml相同目錄下,并授權
$ sudo chmod 777 Asus.yaml
$ sudo chmod 777 ORBvoc.txt
再次運行
*為順利初始化,虛選擇紋理豐富場景,左右平移相機直至圖像提出ORB特征。
*最好保持勻速運動,保持當前幀與上一幀有足夠數量匹配的特征點,否則跟蹤失敗,退回到之前經過的場景,進行重定位。
最后輸出相機的運動軌跡與周圍環境的稀疏地圖。右圖中綠線表示相機運動軌跡,藍色方框表示相機運動過程中的空間位置(關鍵幀),紅黑點表示環境的稀疏地圖,紅點為當前路標,黑點為歷史路標。
總結
以上是生活随笔為你收集整理的ORB_SLAM2运行TUM数据和实时数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Deepin 系统安装NVIDIA
- 下一篇: 对于阿里云的oss上传本地图片的相关注意