Ubuntu20.04+ros noetic部署ORB SLAM3

第 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
  1. 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

  1. 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
### 准备工作 为了在Ubuntu 20.04上成功使用OpenCV 4.2ROS Noetic以及Pangolin运行ORB_SLAM3,需确保所有依赖项已正确安装并配置。由于安装ROS的过程中已经包含了Eigen和OpenCV的安装[^1],因此重点在于确认这些库是否满足ORB_SLAM3的要求。 ### 安装必要的软件包 对于未单独安装的部分组件,如Boost库1.77.0版本,可以通过如下命令完成安装: ```bash tar -xvf boost_1_77_0.tar.gz cd ./boost_1_77_0 ./bootstrap.sh sudo ./b2 install ``` 上述过程将解压缩文件,并进入指定目录执行初始化脚本`bootstrap.sh`,最后利用`b2`工具进行编译安装操作[^4]。 ### 获取ORB_SLAM3源码 获取最新的ORB_SLAM3仓库副本以便后续编译: ```bash git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ``` 此命令用于克隆官方GitHub上的ORB_SLAM3项目到本地环境中[^3]。 ### 编辑CMakeLists.txt以适应当前环境设置 考虑到可能出现的头文件找不到的情况(例如`opencv/cv.h`),这通常意味着路径设定不正确或是使用的OpenCV版本与预期不符。应检查项目的`CMakeLists.txt`文件,确保其指向正确的OpenCV模块位置,并且兼容所用的OpenCV版本。如果遇到类似错误,则可能需要调整代码中的包含路径或更新至支持的新API调用方式[^2]。 ### 配置Pangolin 鉴于Pangolin是可视化的重要组成部分之一,在某些场景下可能会缺少相应的`.cmake`配置文件。可以从[Pangolin GitHub页面](https://github.com/stevenlovegrove/Pangolin/archive/refs/tags/v0.6.zip)下载特定标签下的资源来解决这个问题。下载完成后按照说明文档指示完成构建流程即可。 ### 构建ORB_SLAM3 当一切准备就绪之后,可以尝试构建ORB_SLAM3工程了。先进入之前克隆下来的ORB_SLAM3根目录,创建一个新的子目录用来存放编译产物,接着运行CMake生成对应的Makefile,最后通过make指令启动实际的编译进程: ```bash mkdir build && cd build cmake .. make -j$(nproc) ``` 这里假设读者具备基本Linux shell技能;其中`-j$(nproc)`参数可以让编译器充分利用多核处理器加速整个过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值