Mapping ORB with Web Cam - Yvvvan/MPSEES-23-nxtOSEK-Driving GitHub Wiki

Setup ORB with Web Cam

Requirements

  1. Ubuntu 18.04

  2. C++ 7.5

  3. Opencv 3.2.0

  4. ROS Melodic (other version is possible)

Project Directory Structure

orb_slam
 └ src
    └ ORB_SLAM3
    └ Pangolin
    └ opencv
 └ build (ROS)

Setup

mkdir orb_slam
cd orb_slam

1. ROS Install

following the instruction melodic/Installation/Ubuntu - ROS Wiki:

  1. Configure Ubuntu Repositories

    sudo add-apt-repository restricted
    sudo add-apt-repository universe
    sudo add-apt-repository multiverse
    
  2. Setup sources.list and keys

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    sudo apt install curl 
    curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
    
  3. Installation

    sudo apt update
    sudo apt-get install ros-melodic-desktop-full
    
  4. Environment setup

    echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
    source ~/.bashrc
    
  5. Dependencied

    sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
    

2. ORB-Dependency Install

ORB_SLAM3

  1. GCC

    GCC 7.5 is the default version in Ubuntu 18.04. If not, please try to install 7.5 and set it to default.

  2. Download Repos

    mkdir src
    cd src
    
    git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
    git clone https://github.com/stevenlovegrove/Pangolin
    git clone https://github.com/opencv/opencv.git
    
  3. OpenCV

    cd opencv
    git checkout 3.2.0
    
    sed -i '42s/^/#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)\n#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER\n#define AVFMT_RAWPICTURE 0x00\n/' ./modules/videoio/src/cap_ffmpeg_impl.hpp
    
    mkdir build
    cd build
    cmake -D ENABLE_PRECOMPILED_HEADERS=OFF -D CMAKE_BUILD_TYPE=Release -D WITH_CUDA=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..
    make -j 4   # -j [N] : Allow N jobs at once
    sudo make install
    
  4. Pangolin

    cd ../../Pangolin
    mkdir build 
    cd build 
    cmake -D CMAKE_BUILD_TYPE=Release ..
    make -j 4
    sudo make install
    
    
    # if GLEW not found by cmake
    sudo apt install libglew-dev
    

3. ROS setting

  1. Build Thirdparty

    cd Thirdparty/
    
    cd DBoW2/
    mkdir build
    cd build
    cmake -DCMAKE_BUILD_TYPE=Release ..
    make
    
    cd ../../g2o/
    mkdir build
    cd build
    cmake -DCMAKE_BUILD_TYPE=Release ..
    make
    
    cd ../../Sophus/
    mkdir build
    cd build
    cmake -DCMAKE_BUILD_TYPE=Release ..
    make
    
  2. ROS setting instruction

    cd ../../ORB_SLAM3
    mv Examples_old/ROS/ Examples/
    
    sed -i 's+/camera/image_raw+/usb_cam/image_raw+g' ./Examples/ROS/ORB_SLAM3/src/ros_mono.cc
    
    sudo apt install ros-melodic-usb-cam
     
    sudo rosdep init
    rosdep update
    
    echo "export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/orb_slam/src/ORB_SLAM3/Examples/ROS/" >> ~/.bashrc
    source ~/.bashrc
    sed -i '46s+^+${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus\n+' ./Examples/ROS/ORB_SLAM3/CMakeLists.txt
    
    sed -i 's+cv::Mat Xw = pMP->GetWorldPos();+cv::Mat Xw;\ncv::eigen2cv(pMP->GetWorldPos(), Xw);+g' ./Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc
    sed -i 's+vPoints.push_back(pMP->GetWorldPos());+cv::Mat WorldPos;\ncv::eigen2cv(pMP->GetWorldPos(), WorldPos);\nvPoints.push_back(WorldPos);+g' ./Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc
    sed -i '27s+^+#include <Eigen/Dense>\n#include <opencv2/core/eigen.hpp>\n#include <opencv2/opencv.hpp>\n+' ./Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc
    sed -i '27s+^+#include <Eigen/Dense>\n#include <opencv2/core/eigen.hpp>\n#include <opencv2/opencv.hpp>\n+' ./Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc
    sed -i 's+cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());+cv::Mat Tcw;\nSophus::SE3f Tcw_SE3f = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());\nEigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();\ncv::eigen2cv(Tcw_Matrix, Tcw);\n+g' ./Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc
    
  3. build

    #first build normal verison to get libORB_SLAM3.so
    sed -i 's+OpenCV 4.4+OpenCV 3.2+g' CMakeLists.txt
    ./build.sh
    
    ./build_ros.sh
    
  4. run

    # Terminal 1
    roscore
    
    
    # Terminal 2
    roslaunch usb_cam usb_cam-test.launch 
    
    
    # Terminal 3
    rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml