Ubuntu 20.04 ORB SLAM 2 설치

Soraemon·2023년 8월 30일
0

SLAM

목록 보기
1/1

Dependencies 설치

OpenCV 3.4.9 설치

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 3.4.9

cd ../opencv
git checkout 3.4.9
mkdir build && cd build
cmake -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
make -j8 
sudo make install
sudo ldconfig

OpenCV 추가 빌드 옵션

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_CUDA=ON \
-D BUILD_opencv_cudacodec=OFF \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=7.5 \
-D WITH_V4L=ON \
-D WITH_QT=OFF \
-D WITH_OPENGL=ON \
-D WITH_GSTREAMER=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_PC_FILE_NAME=opencv.pc \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF .. 
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.8 \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/ \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
-D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.8.so ../
/

Eigen 3 설치

sudo apt install libeigen3-dev

Panglion 0.5 설치

  • [1], [2]를 참고하여 코드 수정
    - Pangolin/CMakeModules/FindFFMPEG.cmake
    - Pangolin/src/video/drivers/ffmpeg.cpp
    - Pangolin/include/pangolin/video/drivers/ffmpeg.h
    - Pangolin/src/display/device/display_x11.cpp
  • 빌드
git clone --recursive https://github.com/stevenlovegrove/Pangolin.git 

./scripts/install_prerequisites.sh recommended

git checkout tags/v0.5 -b
cd Pangolin
cmake -B build -GNinja
cmake --build build

cd build
sudo make install

나머지 Dependencies 설치

ORB-SLAM 2 설치

https://github.com/raulmur/ORB_SLAM2

  • ORB_SLAM2/include/System.h #23#include <unistd.h> 추가
#ifndef SYSTEM_H
#define SYSTEM_H

#include <unistd.h> // 추가
#include <string>
  • ORB_SLAM2/include/LoopClosing.h #50 수정
// const KeyFrame* -> KeyFrame *const
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
        Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;
  • 빌드
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
# 코드 수정 후 빌드
./build.sh
  • 실행
    - Dataset은 Examples/Monocular 폴더 안에 넣는다.
./Examples/Monocular/mono_kitti \
Vocabulary/ORBvoc.txt \ # BoW 
Examples/Monocular/KITTI00-02.yaml \ # Camera Param (Calibration 값)
Examples/Monocular/KITTI/odometry_gray/sequences/00 # Dataset

ROS에 빌드

ROS1 Noetic 설치

http://wiki.ros.org/noetic/Installation/Ubuntu

# sources.list 설정
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

# cURL 설치
sudo apt install curl # if you haven't already installed curl

# 설치 키 설정
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

sudo apt update

# ROS 설치
sudo apt install ros-noetic-desktop-full
  • bashrc 혹은 zshrc 에 추가
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

echo "source /opt/ros/noetic/setup.zsh" >> ~/.zshrc
source ~/.zshrc
  • Dependencies 설치
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

sudo apt install python3-rosdep

sudo rosdep init
rosdep update
  • 설치 확인
roscore

# version 
printenv | grep -i ROS

# output:
# ROS_DISTRO=noetic

Intel RealSense SDK 2.0 설치

https://github.com/IntelRealSense/realsense-ros.git

  • 방법 1: ROS 서버에서 debian package로 librealsense2 설치
sudo apt-get install ros-$ROS_DISTRO-realsense2-camera
sudo apt-get install ros-$ROS_DISTRO-realsense2-description
sudo mkdir -p /etc/apt/keyrings

curl -sSf https://librealsense.intel.com/Debian/librealsense.pgp | sudo tee /etc/apt/keyrings/librealsense.pgp > /dev/null

echo "deb [signed-by=/etc/apt/keyrings/librealsense.pgp] https://librealsense.intel.com/Debian/apt-repo `lsb_release -cs` main" | \
sudo tee /etc/apt/sources.list.d/librealsense.list

sudo apt-get update

sudo apt-get install librealsense2-dkms librealsense2-utils librealsense2-dev librealsense2-dbg -y

realsense-viewer
git clone https://github.com/IntelRealSense/librealsense.git

cd librealsense

sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev at

# Run Intel Realsense permissions script from librealsense root directory:
./scripts/setup_udev_rules.sh

# Build and apply patched kernel modules
# Ubuntu 20/22 (focal/jammy) with LTS kernel 5.13, 5.15
./scripts/patch-realsense-ubuntu-lts-hwe.sh

mkdir build && cd build

cmake ../ -DBUILD_EXAMPLES=true -DCMAKE_BUILD_TYPE=Release -DBUILD_WITH_TM2=false -DBUILD_WITH_CUDA=false -DFORCE_RSUSB_BACKEND=true

sudo make uninstall && make clean && make && sudo make install
  • 실행
realsense-viewer
  • 삭제
dpkg -l | grep "realsense" | cut -d " " -f 3 | xargs sudo dpkg --purge

Intel RealSense ROS 설치

https://github.com/leggedrobotics/realsense-ros-rsl

# Create a catkin workspace Ubuntu
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/

# Intel RealSense ROS
git clone https://github.com/IntelRealSense/realsense-ros.git
cd realsense-ros/
git checkout `git tag | sort -V | grep -P "^2.\d+\.\d+" | tail -1`

cd ..
catkin_init_workspace

cd ..
catkin_make clean
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

echo "source ~/catkin_ws/devel/setup.zsh" >> ~/.zshrc
source ~/.zshrc
  • camera node 실행
roslaunch realsense2_camera rs_camera.launch
rosrun rqt_image_view rqt_image_view
rosnode list

ORB-SLAM 2 ROS 설치

ros::Subscriber sub = nodeHandler.subscribe("/camera/color/image_raw", 1, &ImageGrabber::GrabImage,&igb);
  • build_ros.sh 수정
    - no module name rospkg 오류 문제 해결
cmake .. -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3.8
  • ~/.zshrc 설정
# 추가
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:path/to/ORB_SLAM2/Examples/ROS
export ROS_IP=localhost
export ROS_MASTER_URI=http://localhost:11311
source ~/.zshrc
  • 빌드
cd path/to/ORB_SLAM2
chmod +x build_ros.sh
./build_ros.sh
  • ~/.zshrc 설정
# 추가
source path/to/ORB_SLAM2/Examples/ROS/ORB_SLAM2/build/devel/setup.zsh
source ~/.zshrc
  • 실행
roscore
roslaunch realsense2_camera rs_camera.launch
rosrun ORB_SLAM2 Mono \                                                         
Vocabulary/ORBvoc.txt \
Examples/Monocular/D455-640x480.yam

추가 빌드 이슈

  • undefined reference to symbol '_ZNK2cv8FileNodecviEv’
    https://github.com/raulmur/ORB_SLAM2/issues/990#issuecomment-1384694730

    • libopencv_{}.so를 ORB_SLAM2/lib에 복사

      whereis libopencv_imgproc
      ls -l /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so*  
      ls -l /usr/lib/x86_64-linux-gnu/libopencv_core.so*
      sudo cp /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so path/to/ORB_SLAM2/lib
      sudo cp /usr/lib/x86_64-linux-gnu/libopencv_core.so path/to/ORB_SLAM2/lib
    • ORB_SLAM2/Examples/ROS/ORB_SLAM2/CMakeLists.txt 에 path 추가

      # 맞는 버전으로 수정
      # find_package(OpenCV 3.0 QUIET)
      # find_package(OpenCV 4.0 QUIET)
      find_package(OpenCV QUIET)
      
      set(LIBS
      # ${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
      
      ${PROJECT_SOURCE_DIR}/../../../lib/libopencv_core.so
      ${PROJECT_SOURCE_DIR}/../../../lib/libopencv_imgproc.so
      )
    • 다시 빌드

      cd path/to/ORB_SLAM2
      ./build_ros.sh
profile
소라에몽

0개의 댓글