Mapping ORB with Web Cam - Yvvvan/MPSEES-23-nxtOSEK-Driving GitHub Wiki
Setup ORB with Web Cam
Requirements
-
Ubuntu 18.04
-
C++ 7.5
-
Opencv 3.2.0
-
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:
-
Configure Ubuntu Repositories
sudo add-apt-repository restricted sudo add-apt-repository universe sudo add-apt-repository multiverse
-
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 -
-
Installation
sudo apt update sudo apt-get install ros-melodic-desktop-full
-
Environment setup
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc
-
Dependencied
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
2. ORB-Dependency Install
-
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.
-
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
-
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
-
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
-
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
-
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
-
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
-
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