第 1 步:安装基础依赖
sudo apt update
sudo apt install -y \
build-essential cmake git pkg-config libgtk-3-dev \
libgl1-mesa-dev libglew-dev libavcodec-dev libavformat-dev \
libswscale-dev libavutil-dev libjpeg-dev libpng-dev libtiff-dev \
libdc1394-22-dev libeigen3-dev python3-dev python3-numpy \
libtbb2 libtbb-dev libboost-all-dev libssl-dev libsqlite3-dev
安装 Pangolin
# 安装前置
sudo apt install -y \
libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
Building
- Bug: E: 无法定位软件包 catch2
解决方法: Catch2 是一个测试框架,跳过 Catch2,忽略测试功能
如 GitHub issue 所提,即:
“catch2 is only required for the tests. If you have to build on Ubuntu 20.04, you can remove it temporarily from the script and build without”
将 scripts/install_prerequisites.sh 中涉及 Catch2 安装的那一行注释掉,然后正常继续构建 Pangolin
- Bug: 在执行cmake --build build时:
报错:
In file included from /usr/include/OpenEXR/ImfXdr.h:108,
from /usr/include/OpenEXR/ImfGenericOutputFile.h:40,
from /usr/include/OpenEXR/ImfTiledOutputFile.h:50,
from /usr/include/OpenEXR/ImfInputFile.h:48,
from /mnt/windows/e/Pangolin/components/pango_image/src/image_io_exr.cpp:10:
/usr/include/OpenEXR/half.h: In member function ‘half half::round(unsigned int) const’:
/usr/include/OpenEXR/half.h:515:10: error: implicitly-declared ‘constexpr half::half(const half&)’ is deprecated [-Werror=deprecated-copy]
515 | return *this;
解决方法: 在 Pangolin 的顶层 CMakeLists.txt中,
cmake_minimum_required(VERSION 3.16)
########################## User #############################
# 在 components/pango_image/CMakeLists.txt 或顶层 CMakeLists.txt
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-copy -Wno-error=deprecated-copy")
########################## User #############################
project("Pangolin")
Then
# Get Pangolin
cd ~/your_fav_code_directory
git clone --recursive https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
# Install dependencies (as described above, or your preferred method)
./scripts/install_prerequisites.sh recommended
# Configure and build
cmake -B build
cmake --build build
sudo cmake --install build
sudo ldconfig
源码编译并安装 OpenCV 4.4
sudo apt update
sudo apt install -y build-essential cmake git pkg-config \
libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev \
libv4l-dev libjpeg-dev libpng-dev libtiff-dev libopenexr-dev \
libtbb-dev libatlas-base-dev python3-dev python3-numpy
sudo apt install libopencv-dev # 不一定最新
# 如果sudo apt install libopencv-dev 安装的版本不够:
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 4.4.0
cd ..
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 4.4.0
cd ../opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_EXAMPLES=OFF ..
make -j$(nproc)
sudo make install
sudo ldconfig
安装ORB-SLAM3
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
cd ORB_SLAM3
修改CMakeLists.txt
# 添加正确的 include 路径 和 设置编译标准为C++14
cmake_minimum_required(VERSION 2.8)
project(ORB_SLAM3)
##################User####################
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
##################User####################
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release)
ENDIF()
MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -march=native")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -march=native")
# Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_definitions(-DCOMPILEDWITHC0X)
message(STATUS "Using flag -std=c++0x.")
else()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
find_package(OpenCV 4.4) # 可以注释换成find_package(OpenCV REQUIRED)
find_package(Eigen3 REQUIRED)
include_directories(/usr/include/opencv4) # User add
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV > 4.4 not found.")
endif()
MESSAGE("OPENCV VERSION:")
MESSAGE(${OpenCV_VERSION})
find_package(Eigen3 3.1.0 REQUIRED)
find_package(Pangolin REQUIRED)
find_package(realsense2)
include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/include/CameraModels
${PROJECT_SOURCE_DIR}/Thirdparty/Sophus
${EIGEN3_INCLUDE_DIR}
${Pangolin_INCLUDE_DIRS}
)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
chmod +x build.sh
./build.sh
安装ORB-SLAM3 For ROS
参考:https://blog.csdn.net/xs798465/article/details/135070426 和 https://blog.csdn.net/GFCLJY/article/details/138290057来解决段错误
# 创造工作空间
cd ORB_SLAM3
mkdir -p ros/src
cd ros
catkin_make
#生成功能包
cd src/
catkin_create_pkg orbslam3 roscpp cv_bridge
# 将orbslam的ros的源码复制粘贴过来
# 填写`CMakeLists.txt`
cmake_minimum_required(VERSION 3.0.2)
project(orbslam3)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3")
## set path
set(ORBSLAM_PATH "~/Downloads/AgxGuide/ORB_SLAM3/ORB_SLAM3")
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_STANDARD 14)
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_definitions(-DCOMPILEDWITHC0X)
message(STATUS "Using flag -std=c++0x.")
else()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}//home/ros/lib/ORB_SLAM3-master/ORB_SLAM3-master/cmake_modules)
find_package(OpenCV)
if(NOT OpenCV_FOUND)
find_package(OpenCV 2.4.3 QUIET)
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
endif()
endif()
find_package(Eigen3 REQUIRED)
find_package(GLEW REQUIRED)
find_package(Pangolin REQUIRED)
find_package(catkin REQUIRED COMPONENTS
cv_bridge
roscpp
sensor_msgs
message_filters
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES orbslam3
CATKIN_DEPENDS cv_bridge roscpp sensor_msgs message_filters
# DEPENDS system_lib
)
## include
include_directories(
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIRS}
${Pangolin_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}
${ORBSLAM_PATH}
${ORBSLAM_PATH}/include
${ORBSLAM_PATH}/Thirdparty/Sophus
${ORBSLAM_PATH}/include/CameraModels
${Pangolin_INCLUDE_DIRS}
${GLEW_INCLUDE_DIRS}
${catkin_INCLUDE_DIRS}
)
## libs
set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${ORBSLAM_PATH}/Thirdparty/DBoW2/lib/libDBoW2.so
${ORBSLAM_PATH}/Thirdparty/g2o/lib/libg2o.so
${ORBSLAM_PATH}/lib/libORB_SLAM3.so
${OPENGL_LIBRARIES}
${GLEW_LIBRARIES}
-lboost_system
)
add_executable(orb_mono_node src/src/ros_mono.cc)
add_executable(orb_rgbd_node src/src/ros_rgbd.cc)
target_link_libraries(orb_mono_node
${catkin_LIBRARIES}
${LIBS}
)
target_link_libraries(orb_rgbd_node
${catkin_LIBRARIES}
${LIBS}
)
cd ros
catkin_make
# terminal one
roscore
---
# terminal two
cd ros
source devel/setup.bash --extend
rosrun orbslam3 orb_rgbd_node ../Vocabulary/ORBvoc.txt ../Examples/ob_camera.yaml /camera/depth_registered/image_raw:=/ob_camera_01/depth/image_raw /camera/rgb/image_raw:=/ob_camera_01/color/image_raw
rosrun orbslam3 orb_mono_node ../Vocabulary/ORBvoc.txt ../Examples/ob_mono.yaml /camera/image_raw:=/ob_camera_01/color/image_raw
rosrun orbslam3 orb_monoimu_node ../Vocabulary/ORBvoc.txt ../Examples/ob_monoimu.yaml /camera/image_raw:=/ob_camera_01/color/image_raw /imu:=/imu/data_raw