在ROS2工作空间中安装ORB-SLAM3

我的ROS2工作空间路径为/home/cennum/cyberdog_sim/

  • 安装其他ORB-SLAM3依赖
sudo apt install -y \
    build-essential \
    libboost-all-dev \
    libeigen3-dev \
    libopencv-dev \
    libsuitesparse-dev \
    ros-galactic-nav2-bringup \
    ros-galactic-navigation2

下载ORB-SLAM3

进入工作空间的src目录下拉取ORB-SLAM3源代码

cd /home/cennum/cyberdog_ws/src
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

  • 安装libepoxy依赖
sudo apt-get install -y \
  libepoxy-dev \
  libegl-dev \
  libgles2-mesa-dev \
  libwayland-dev \
  libxkbcommon-dev \
  wayland-protocols

安装Pangolin的所有依赖

sudo apt-get install -y \
  libgl1-mesa-dev \
  libglew-dev \
  cmake \
  libpython3-dev \
  libeigen3-dev \
  apt-utils \
  libjpeg-dev \
  libavcodec-dev \
  libavutil-dev \
  libavformat-dev \
  libswscale-dev \
  libavdevice-dev \
  libdc1394-dev \
  libraw1394-dev \
  libopenni-dev \
  python3-dev \
  python3-numpy \
  libtbb-dev \
  libuvc-dev \
  libepoxy-dev
  • 下载安装Pangolin

进入刚才clon的ORB_SLAM3文件夹的第三方包Thirdparty

cd ORB_SLAM3/Thirdparty

拉取Pangolin源代码

git clone https://github.com/stevenlovegrove/Pangolin.git

完成后进入该目录

cd Pangolin

创建并进入build目录

mkdir build && cd build

编译安装

cmake .. -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_EXAMPLES=OFF \
    -DBUILD_TESTS=OFF \
    -DBUILD_TOOLS=OFF \
    -DBUILD_SHARED_LIBS=OFF \
    -DCMAKE_CXX_FLAGS="-w -std=c++11" \
    -DBUILD_PANGOLIN_VIDEO=OFF \
    -DBUILD_PANGOLIN_FFMPEG=OFF \
    -DBUILD_PANGOLIN_DC1394=OFF \
    -DBUILD_PANGOLIN_OPENNI=OFF \
    -DBUILD_PANGOLIN_OPENNI2=OFF \
    -DBUILD_PANGOLIN_PLEORA=OFF \
    -DBUILD_PANGOLIN_TELICAM=OFF \
    -DBUILD_PANGOLIN_UVC=OFF \
    -DBUILD_PANGOLIN_V4L=OFF \
    -DBUILD_PANGOLIN_DEPTHSENSE=OFF \
    -DBUILD_PANGOLIN_REALSENSE=OFF
make -j4
sudo make install

编译安装过程 会因为每个人的环境不同出现各种各样的报错,问chatgpt逐一解决

  • 安装系统依赖
sudo apt install -y \
    build-essential \
    cmake \
    git \
    libboost-all-dev \
    libeigen3-dev \
    libopencv-dev \
    libglew-dev \
    libpython3-dev \
    gcc-7 \
    g++-7

注意切换gcc版本

  • 编译DBoW2和g2o

DBoW2位于ORB-SLAM3源代码目录的Thirdparty目录下,进入编译它!

cd ../../DBoW2
mkdir build && cd build
cmake ..
make -j4

g2o位于ORB-SLAM3源代码目录的Thirdparty目录下,进入编译它!

cd ../../g2o
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_EXAMPLES=OFF \
    -DBUILD_TESTS=OFF \
    -DBUILD_TOOLS=OFF \
    -DBUILD_SHARED_LIBS=OFF \
    -DCMAKE_CXX_FLAGS="-w -std=c++11" \
    -DBUILD_PANGOLIN_VIDEO=OFF \
    -DBUILD_PANGOLIN_FFMPEG=OFF \
    -DBUILD_PANGOLIN_DC1394=OFF \
    -DBUILD_PANGOLIN_OPENNI=OFF \
    -DBUILD_PANGOLIN_OPENNI2=OFF \
    -DBUILD_PANGOLIN_PLEORA=OFF \
    -DBUILD_PANGOLIN_TELICAM=OFF \
    -DBUILD_PANGOLIN_UVC=OFF \
    -DBUILD_PANGOLIN_V4L=OFF \
    -DBUILD_PANGOLIN_DEPTHSENSE=OFF \
    -DBUILD_PANGOLIN_REALSENSE=OFF
make -j4
  • 修改ORB_SLAM3目录下的CMakeLists.txt

找到这行

find_package(OpenCV 4.4)

修改为

find_package(OpenCV 4.2 QUIET)
  • 安装realsense
sudo apt install -y \
  libssl-dev \
  libusb-1.0-0-dev \
  pkg-config \
  libgtk-3-dev

安装RealSense SDK

apt install -y ros-galactic-librealsense2*

添加全局变量

echo 'export LD_LIBRARY_PATH=/home/cennum/cyberdog_sim/src/ORB_SLAM3/Thirdparty/Pangolin/build:$LD_LIBRARY_PATH' >> ~/.bashrc

记得修改LD_LIBRARY_PATH=你的路径

生效

source ~/.bashrc

安装cv-bridge

sudo apt install ros-galactic-cv-bridge
  • 创建一个C++包装器

进入ORB_SLAM3根目录创建

mkdir wrapper

再创建包装器头文件 orb_slam3_wrapper.hpp

touch orb_slam3_wrapper.hpp

编辑orb_slam3_wrapper.hpp,加入以下内容

#ifndef ORB_SLAM3_WRAPPER_HPP
#define ORB_SLAM3_WRAPPER_HPP

#include <string>
#include "System.h"

extern "C" {
    // 创建SLAM系统
    ORB_SLAM3::System* createSystem(const char* vocab_path, 
                                  const char* settings_path, 
                                  const char* sensor_type);
    
    // 处理RGBD帧
    void trackRGBD(ORB_SLAM3::System* slam,
                  const unsigned char* rgb_data,
                  const float* depth_data,
                  int width, int height,
                  double timestamp);
                  
    // 关闭系统
    void shutdownSystem(ORB_SLAM3::System* slam);
}

#endif

创建包装器源文件 orb_slam3_wrapper.cpp

touch orb_slam3_wrapper.cpp

编辑加入以下内容

#include "orb_slam3_wrapper.hpp"
#include <opencv2/core/core.hpp>

extern "C" {
    ORB_SLAM3::System* createSystem(const char* vocab_path, 
                                   const char* settings_path, 
                                   const char* sensor_type) {
        return new ORB_SLAM3::System(vocab_path, settings_path, 
                                    ORB_SLAM3::System::RGBD);
    }

    void trackRGBD(ORB_SLAM3::System* slam,
                   const unsigned char* rgb_data,
                   const float* depth_data,
                   int width, int height,
                   double timestamp) {
        if (!slam) return;
        
        cv::Mat rgb(height, width, CV_8UC3, (void*)rgb_data);
        cv::Mat depth(height, width, CV_32F, (void*)depth_data);
        
        slam->TrackRGBD(rgb, depth, timestamp);
    }
    
    void shutdownSystem(ORB_SLAM3::System* slam) {
        if (slam) {
            slam->Shutdown();
            delete slam;
        }
    }
}

修改主目录下CMakeLists.txt

1.在项目的CMakeLists.txt中最顶部添加以下行来启用C++14标准

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

2.修改CMAKE_CXX_FLAGS,改成下面

set(CMAKE_CXX_FLAGS "-std=c++14 ${CMAKE_CXX_FLAGS} -Wall  -O3")

3.添加包装器编译,在ORB_SLAM3的CMakeLists.txt中添加

add_library(orb_slam3_wrapper SHARED
    wrapper/orb_slam3_wrapper.cpp
)

target_link_libraries(orb_slam3_wrapper
    ${PROJECT_NAME}
)

install(TARGETS orb_slam3_wrapper
    LIBRARY DESTINATION lib
    RUNTIME DESTINATION bin
)

回到ORB_SLAM3根目录下的build目录

cd ../..
cd build/
cmake .. -DCMAKE_BUILD_TYPE=Release \
         -DUSE_ROS=ON \
         -DROS_VERSION=2 \
         -DBUILD_SHARED_LIBS=ON
make

安装完成可能导致ros-galactic-gazebo-ros-pkgs异常,导致不出现gazebo话题的情况,重新安装即可

sudo apt install ros-galactic-gazebo-ros-pkgs

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注