之前幾天看了視覺SLAM,然后就在TX2開發板上安裝了ubuntu16.04+ROS+ZED+ORB_SLAM2,因為使用的是ZED雙目相機,ORB_SLAM不支持立體相機,
TX2上安裝ubuntu16.04+ROS的教程很多,自行百度吧,這里就不再羅嗦了。
1、OpenCV 3..4.3的安裝
參考:https://www.cnblogs.com/qilai/p/13653354.html
2、CUDA的安裝
官網 https://developer.nvidia.com/cuda-downloads 下載,完成后進行安裝
sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb sudo apt-get update sudo apt-get install cuda
也可以使用TX2 SDK 安裝CUDA Opencv等。我使用的是SDK安裝
4、ZED SDK安裝與調試
參考:https://www.stereolabs.com/docs/getting-started/installation/
下載ZED SDK https://www.stereolabs.com/developers/release/下載完成后在終端輸入
chmod +x ZED_SDK_Linux_*.run ./ZED_SDK_Linux_*.run
5、ZED ROS Wrapper安裝
(1)下載ZED ROS包並放置在ROS工作空間
cd ~/robot_ws/src git clone https://github.com/stereolabs/zed-ros-wrapper
6、 安裝相關依賴項
1)安裝Pangolin
安裝Pangolin,用於可視化和用戶接口,首先安裝依賴如下:
sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev
下載Pangolin:
cd ~/robot/src git clone https://github.com/stevenlovegrove/Pangolin
編譯並安裝Pangolin:
cd Pangolin mkdir build cd build cmake .. make sudo make install
2)安裝Eigen3
由於當前使用的orb_slam2支持eigen3.3,所以直接apt-get方式下載安裝即可
sudo apt-get install libeigen3-dev
6、ORB SLAM2的安裝
(1)下載ORB SLAM2包:
cd ~robot_ws/src git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2 cd ORB_SLAM2
編譯前需要打開build.sh
文件,將所有的
make -j
改為make -j4
,之后修改文件權限並運行編譯
:
chmod +x build.sh ./build.sh
如果編譯時出現如下問題:
解決方法在ORB-SLAM2中的include文件夾里面的system.h加入#include<unistd.h>
編譯成功 ,
7、Monocular Examples(單目數據集測試)
自述文件中介紹了,在單目測試中可以使用TUM Dataset、KITTI Dataset、EuRoC Dataset三種數據集進行測試,以TUM Dataset為例,自述文件中原文如下:
## TUM Dataset 1. Download a sequence from http://vision.in.tum.de/data/datasets/rgbd-dataset/download and uncompress it. 2. Execute the following command. Change `TUMX.yaml` to TUM1.yaml,TUM2.yaml or TUM3.yaml for freiburg1, freiburg2 and freiburg3 sequences respectively. Change `PATH_TO_SEQUENCE_FOLDER`to the uncompressed sequence folder. ``` ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ```
登錄http://vision.in.tum.de/data/datasets/rgbd-dataset/download,下載freiburg1_xyz數據集並解壓,在ORB_SLAM2根目錄下執行如下命令:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ~/robot_ws/src/ORB_SLAM2/rgbd_dataset_freiburg1_xyz
運行過程如下:
8、ROS 上使用zed+ORB_SLAM
(1)編譯build_ros.sh
首先,打開文件gedit ~/.bashrc,在文件末尾添加(根據自己的路徑):
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/robot/src/ORB_SLAM2/Examples/ROS
編譯前需要打開
build_ros.sh文件,將make -j
改為make
,之后修改文件權限並運行編譯
:
chmod +x build_ros.sh ./build_ros.sh
編譯可能會出現undefined reference to symbol
解決辦法:gedit ./Examples/ROS/ORB_SLAM2/CMakeLists.txt
添加一行-lboost_system
(2) 運行Demo
1)比較簡單的方法
roscore //再開一個命令行 roslaunch zed_wrapper zed.launch //再開一個命令行 //先進入ORB_SLAM2的根目錄下 rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false /camera/left/image_raw:=/zed/left/image_rect_color /camera/right/image_raw:=/zed/right/image_rect_color //false的含義是do not rectify,因為使用了校正后的圖像,所以不再校正,所以YAML文件也無所謂啦 //如果需要校正的話,需要自己寫一個yaml文件,寫入自己的傳感器的標定參數,比如說使用普通的網絡攝像頭(Mono),然后選true
運行效果:
2)仿照/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src目錄下的ros_stereo.cc建立一個新文件,如zed_stereo_rect.cc。將代碼復制過去,修改以下部分:
message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/zed/left/image_rect_color", 1); message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "/zed/right/image_rect_color",1);
此處選取了ZED的兩個數據流。然后修改CmakeLists.txt,仿照加入:
# Node for ZED camera rosbuild_add_executable(zed_Stereo_rect src/zed_stereo_rect.cc ) target_link_libraries(zed_Stereo_rect ${LIBS} )
然后在ORB_SLAM2的根目錄下重新編譯:
./build_ros.sh
會新生成一個可執行文件 zed_Stereo_rect 然后執行:
roslaunch zed_wrapper zed.launch //另開一個命令行 cd ~/catkin_ws/src/ORB_SLAM2 rosrun ORB_SLAM2 zed_Stereo_rect Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false
運行效果:
其他問題參考:https://blog.csdn.net/CAIYUNFREEDOM/article/details/104251661