目录如下
目录
(3)编译
一.版本信息
系统或者包 | 版本 |
ubuntu | 20.04 |
opencv | 4.5.5/4.2.0版本也可 |
pangolin | 0.6.0 |
Eigen | 3.* |
ros | ros-noetic |
二.库的环境配置
详情请看Ubuntu20.04的ROS环境安装ORB-SLAM3详解_asus.yaml-CSDN博客
三.orbslam3编译
1.非ros情况下编译
(1)安装最新版本orbslam3
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
或者直接安装解压即可
(2)修改文件
a.ORB_SLAM3下CMakeLists.txt
第二十行,换为
set(CMAKE_CXX_STANDARD 14)
b.第34行和第41行
// 34行
find_package(OpenCV REQUIRED)
// 41行
find_package(Eigen3 REQUIRED)
(3)编译
cd ORB_SLAM3
chmod +x build.sh
sh build.sh
2.ros-noetic编译orbslam3-ros源码
orbslam3的源码只在ubuntu18.04上运行,所以我们要重新用ros-noetic创建新的工作空间
(1)创造工作空间
cd ORB_SLAM3
mkdir -p ros/src
cd ros
catkin_make
(2)生成功能包
cd src/
catkin_create_pkg orbslam3 roscpp cv_bridge
(3)将orbslam的ros的源码复制粘贴过来
(4)填写`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 "/home/ros/lib/ORB_SLAM3-master/ORB_SLAM3-master/")
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(Pangolin REQUIRED)
find_package(catkin REQUIRED COMPONENTS
cv_bridge
roscpp
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES orbslam3
CATKIN_DEPENDS cv_bridge roscpp
# 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}/include/CameraModels
${Pangolin_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
-lboost_system
)
add_executable(${PROJECT_NAME}_node src/src/ros_mono.cc)
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
${LIBS}
)
注意: `CMakeLists.txt`的8行代码 `set(ORBSLAM_PATH "/home/ros/lib/ORB_SLAM3-master/ORB_SLAM3-master/")`,要改成你自己的orbslam路径
(5)编译
cd ros
catkin_make
(6)运行节点
# terminal one
roscore
---
# terminal two
cd ros
source /devel/setup.bash
rosrun orbslam3 orbslam3_node ../Vocabulary/ORBvoc.txt ../Examples/Monocular/EuRoC.yaml
请注意, 在运行该节点时,必须要接收到图像来源.