zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【转】排序总结(总结的非常好)
    [转]C#中使用指针实现高效比较字符串的小技巧
    高斯消元法
    排序算法性能和使用场景总结
    斐波那契数列Log(n)算法
    C#部分方法定义
    杂项记录
    C#指针复习示例zz
    【转】斐波那契数列算法分析
    【转】矩阵乘法
  • 原文地址:https://www.cnblogs.com/qilai/p/13663433.html
Copyright © 2011-2022 走看看