之前几天看了视觉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