TX2下Ubuntu16.04+ZED+ROS +ORB_SLAM2

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

posted @ 2020-09-13 21:28  科研路上的绊脚石  阅读(969)  评论(0编辑  收藏  举报