我的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
发表回复