OpenREALM在Ubuntu20.04下的部署方案

更新于2024.1.8

1. 概要

本文档首次提供了OpenREALM在ubuntu20.04部署成功的方案,在此之前该开源框架只能在ubuntu16.04/18.04上部署。在20.04上部署主要需要解决cv_bridge和openrelam依赖不同opecv版本的问题,应对依赖库等作一系列调整,详见3.5。

2. 参考链接

2.1 原项目链接:

2.1.1 OpenREALM源代码(算法主代码)OpenREALM is a pipeline for real-time aerial mapping utilizing visual SLAM and 3D reconstruction frameworks. - GitHub - laxnpander/OpenREALM: OpenREALM is a pipeline for real-time aerial mapping utilizing visual SLAM and 3D reconstruction frameworks.https://github.com/laxnpander/OpenREALMicon-default.png?t=N7T8https://github.com/laxnpander/OpenREALM

 2.1.2 OpenREALM_ROS1_Bridgehttps://github.com/laxnpander/OpenREALM_ROS1_Bridgeicon-default.png?t=N7T8https://github.com/laxnpander/OpenREALM_ROS1_Bridge


2.2 环境配置参考

 2.2.1 主要参考https://www.cnblogs.com/choiiyill/articles/17841835.htmlicon-default.png?t=N7T8https://www.cnblogs.com/choiiyill/articles/17841835.html

2.2.2 OpenCV3.3.1安装https://www.cnblogs.com/choiiyill/articles/17816177.htmlicon-default.png?t=N7T8https://www.cnblogs.com/choiiyill/articles/17816177.html

3. 配置流程

按以下顺序部署:CMake3.18,OpenCV3.3.1,OpenVSLAM,OpenREALM,OpenREALM_ROS1_Bridge。这些部署2.2.2链接能提供绝大多数解决方案,而涉及到与ubuntu20.04的兼容性问题出要:ros1的cv_bridge依赖于opecv4,而openrealm依赖于opencv3.3,caktin_make的最后可能会出现版本冲突问题,解决方案见3.5

如果安装了conda,建议在整个安装流程中都deactivate。此外,需要的依赖包都要安装,否则后续会出现难以定位源头的问题。

3.1 CMake 3.18

按照链接2.2.1中CMake的安装顺序。如下:

sudo apt install build-essential libssl-dev
wget https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4.tar.gz
tar -zxvf cmake-3.18.4.tar.gz
cd cmake-3.18.4
./bootstrap
make
sudo make install

3.2 OpenCV 3.3.1

步骤一:安装cuda和依赖环境

按照链接2.2.2,如下:

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libjasper
sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran

可能存在的问题:Error:Unable to locate package libjasper-dev,解决方案如下:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

安装libpng12-dev可能存在问题,通过以下方法解决: 

sudo add-apt-repository ppa:linuxuprising/libpng12
sudo apt update
sudo apt install libpng12-0
sudo apt install libpng12-dev
步骤二:安装opencv3.3.1

按照链接2.2.2。cmake和make之前,需要完成gcc 与g++7版本的安装以及文中“安装前必要的准备工作”。详见原文。

3.3 OpenVSLAM

步骤一:安装依赖库

按照链接2.2.2

步骤二:安装Pangolin-0.5

按照链接2.2.2,其他安装命令参考开源SLAM框架学习——OpenVSLAM源码解析: 第一节 安装和初探 | 码农家园,git checkout不能少。

步骤三:安装gcc 6与g++6

按照链接2.2.2

步骤四:安装OpenVSLAM

按照链接2.2.2

注意链接中提到

首先打开\openvslam\.git\config,将 https://github.com/OpenVSLAM-Community/FBoW.git 修改为:https://github.com/stella-cv/FBoW.git

这里的https://github.com/OpenVSLAM-Community/FBoW.git需要在命令git submodule init后才会在config中出现。

3.4 OpenREALM

按照链接2.2.2

3.5 OpenREALM_ROS1_Bridge

请注意不要直接按照2.2.2的方式部署ros1_bridge,否则在解决cmake error后,make进度到95%左右会出现一系列libopencv相关问题,这是由于:通过sudo apt-get install安装的适用于ubuntu20的cv_bridge依赖于cv4,和openrealm依赖的opencv版本不一致。具体部署按如下步骤进行。

步骤一:安装ros1

noetic/Installation/Ubuntu - ROS Wikihttps://wiki.ros.org/noetic/Installation/Ubuntuicon-default.png?t=N7T8https://wiki.ros.org/noetic/Installation/Ubuntu

步骤二:安装其他依赖

sudo apt install -y -q python3-catkin-tools build-essential git wget # 区别于2.2.2中python-catkin-tools,我们安装的是python3-catkin-tools
sudo apt install -y -q ros-$ROS_DISTRO-geographic-msgs
sudo apt install -y -q ros-$ROS_DISTRO-geodesy
sudo apt install -y -q ros-$ROS_DISTRO-cv-bridge
sudo apt install -y -q ros-$ROS_DISTRO-rviz
sudo apt install -y -q ros-$ROS_DISTRO-pcl-ros

步骤三:在OpenREALM文件夹中生成ROS工作空间 

mkdir catkin_ws && cd catkin_ws
mkdir src && cd src

步骤四:部署适用于opencv3.3.1的cv_bridge

ubuntu20.04 解决ros,cv_bridge,opencv连接以及vins-mono,vins-fusion,pl-vins等运行问题_sudo apt-get install ros-noekit-cv-bridge-CSDN博客文章浏览阅读1.1k次,点赞3次,收藏15次。然后在vins-mono的工作空间下执行catkin_make命令,这一步就是为了先编译cv_bridge,这样就会使编译vins-mono优先使用自己编译的cv_bridge。只修改CMakeLists中opencv的路径,编译可能没问题,但在代码执行时如果引用到libcv_bridge.so,还是会链接到opencv原来的版本。打开下载的包,打开cv_bridge,编辑CMakeLists里内容,将里面opencv部分替换为自己安装的opencv,然后保存。这样编译的就没有警告,也能正常运行。_sudo apt-get install ros-noekit-cv-bridgehttps://blog.csdn.net/GuanLingde/article/details/130586071icon-default.png?t=N7T8https://blog.csdn.net/GuanLingde/article/details/130586071

注意1,原cv_bridge不用卸载 ,更改后的cv_bridge的CMakeList.txt如下:

package.xml中pakagename也需要改称cv_bridge_cv331

cmake_minimum_required(VERSION 3.0.2)
project(cv_bridge_cv331) #名在得改

find_package(catkin REQUIRED COMPONENTS rosconsole sensor_msgs)

if(NOT ANDROID)
  find_package(PythonLibs)

  if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")
    # Debian Buster
    find_package(Boost REQUIRED python37)
  else()
    # Ubuntu Focal
    find_package(Boost REQUIRED python)
  endif()
else()
find_package(Boost REQUIRED)
endif()

# set(_opencv_version 4)
# find_package(OpenCV 4 QUIET)
# if(NOT OpenCV_FOUND)
#   message(STATUS "Did not find OpenCV 4, trying OpenCV 3")
#   set(_opencv_version 3)
# endif()
# set(_opencv_version 3)

find_package(OpenCV 3.3.1 REQUIRED
  COMPONENTS
    opencv_core
    opencv_imgproc
    opencv_imgcodecs
  CONFIG
)

catkin_package(
  INCLUDE_DIRS include
  LIBRARIES ${PROJECT_NAME}
  CATKIN_DEPENDS rosconsole sensor_msgs
  DEPENDS OpenCV
  CFG_EXTRAS cv_bridge-extras.cmake
)

catkin_python_setup()

include_directories(include ${Boost_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

if(NOT ANDROID)
add_subdirectory(python)
endif()
add_subdirectory(src)
if(CATKIN_ENABLE_TESTING)
  add_subdirectory(test)
endif()

# install the include folder
install(
  DIRECTORY include/${PROJECT_NAME}/
  DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)

步骤四:部署OpenREALM_ROS1_Bridge 

git clone到catktin_ws/src

在OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/CMakeLists.txt的find_package中加入cv_bridge_cv331

在/home/zeeco/OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_rviz_plugin/CMakeLists.txt的find_package中加入cv_bridge_cv331。

根据2.2.2的方法更改OpenREALM\catkin_ws\src\OpenREALM_ROS1_Bridge\realm_ros\CMakeList.txt

在catkin_ws文件夹下运行catkin_make -DCMAKE_BUILD_TYPE=Release

解决以下错误:

错误:undefined reference to symbol 'pthread_getspecific@@GLIBC_2.2.5'

解决办法:在OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/CMakeLists.txt中加入link_directories(/usr/lib/x86_64-linux-gnu) ,在target_link_libraries中加入libpthread.so,参考自(已解决)undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'-CSDN博客文章浏览阅读1.6w次,点赞15次,收藏45次。undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command linecollect2: error: ld returned 1 exit status解决方..._undefined reference to symbol 'pthread_create@@glibc_2.2.5https://blog.csdn.net/weixin_45617478/article/details/103447175icon-default.png?t=N7T8https://blog.csdn.net/weixin_45617478/article/details/103447175

完整的OpenREALM/catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.15)

project(realm_ros)


################################################################################
# Include CMake dependencies
################################################################################


include(CheckLanguage)


################################################################################
# Compiler specific configuration
################################################################################


check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
    enable_language(CUDA)
    message(STATUS "CUDA Support enabled.")

    include(FindCUDA)
    set(CUDA_ARCH_LIST Auto CACHE STRING  "List of CUDA architectures (e.g. Pascal, Volta, etc) or \
                                           compute capability versions (6.1, 7.0, etc) to generate code for. \
                                           Set to Auto for automatic detection (default).")
    cuda_select_nvcc_arch_flags(CUDA_ARCH_FLAGS ${CUDA_ARCH_LIST})
    list(APPEND CUDA_NVCC_FLAGS ${CUDA_ARCH_FLAGS})
else()
    message(STATUS "CUDA Support disabled.")
endif()


################################################################################
# Dependencies
################################################################################


find_package(catkin REQUIRED COMPONENTS
        roscpp
        roslib
        pcl_ros
        geodesy
        cv_bridge_cv331 #更改默认的cv_bridge版本
        tf
        std_msgs
        nav_msgs
        sensor_msgs
        geographic_msgs
        realm_msgs
)
find_package(Boost COMPONENTS thread filesystem date_time system REQUIRED) #2.2.2增加的
# Fix to avoid OpenCV package confusion with ROS melodic
find_package(OpenCV 3.3.1 EXACT QUIET)
if (NOT OpenCV_FOUND)
    find_package(OpenCV 3 QUIET)
endif()
if (NOT OpenCV_FOUND)
    find_package(OpenCV 4 REQUIRED)
    message(WARNING "OpenCV 4 Support is experimental, use at your own risk!")
endif()

#find_package(Pangolin REQUIRED)

find_package(cmake_modules REQUIRED)

find_package(OpenREALM REQUIRED)
find_package(openvslam REQUIRED)
find_package(OpenMP REQUIRED)
#find_package(ORB_SLAM2 REQUIRED)
#find_package(ORB_SLAM3 REQUIRED)
#find_package(ov2slam REQUIRED)
find_package(fbow REQUIRED)#2.2.2增加的
find_package(CGAL REQUIRED)#2.2.2增加的
find_package(VTK REQUIRED)
find_package(Eigen3 3.3 REQUIRED NO_MODULE)

################################################################################
# Catkin Package
################################################################################


catkin_package(
        INCLUDE_DIRS
            include
        LIBRARIES
            ${PROJECT_NAME}
        CATKIN_DEPENDS
            roscpp
            roslib
            pcl_ros
            geodesy
            cv_bridge
            tf
            std_msgs
            nav_msgs
            sensor_msgs
            geographic_msgs
            realm_msgs
            cmake_modules
        DEPENDS
            OpenCV
)


################################################################################
# Build
################################################################################
set(CMAKE_MODULE_PATH "/usr/lib/x86_64-linux-gnu/cmake")#2.2.2增加的
add_library(FLANN::FLANN INTERFACE IMPORTED)#2.2.2增加的
add_library(${PROJECT_NAME} SHARED
        src/realm_ros_lib/grabber_ros_node.cpp
        src/realm_ros_lib/grabber_exiv2_node.cpp
        src/realm_ros_lib/stage_node.cpp
        src/realm_ros_lib/conversions.cpp
)

target_include_directories(${PROJECT_NAME} PUBLIC
        include
        ${catkin_INCLUDE_DIRS}
)

link_directories(/usr/lib/x86_64-linux-gnu) # 解决pthread错误
target_link_libraries(${PROJECT_NAME} PUBLIC
        ${catkin_LIBRARIES}
        ${cmake_modules_LIBRARIES}
        ${OpenCV_LIBRARIES}
        ${Boost_FILESYSTEM_LIBRARIES}
        ${Boost_SYSTEM_LIBRARIES}
	realm_stages
    libpthread.so # 解决pthread错误
)

add_dependencies(${PROJECT_NAME}
        realm_msgs_generate_messages_cpp
)

################################################################################
# Executables
################################################################################


add_executable(realm_ros_grabber src/grabber_ros_node_main.cpp)
add_dependencies(realm_ros_grabber ${catkin_EXPORTED_TARGETS})
target_link_libraries(realm_ros_grabber PUBLIC ${PROJECT_NAME})

add_executable(realm_exiv2_grabber src/grabber_exiv2_node_main.cpp)
add_dependencies(realm_exiv2_grabber ${catkin_EXPORTED_TARGETS})
target_link_libraries(realm_exiv2_grabber PUBLIC ${PROJECT_NAME})

add_executable(realm_stage_node src/stage_node_main.cpp)
add_dependencies(realm_stage_node ${catkin_EXPORTED_TARGETS})
target_link_libraries(realm_stage_node PUBLIC ${PROJECT_NAME})

################################################################################
# Install
################################################################################


# Mark executables and/or libraries for installation
install(
        TARGETS ${PROJECT_NAME}
        ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
        LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
        RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

# Mark cpp header files for installation
install(
        DIRECTORY include/${PROJECT_NAME}/
        DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
        FILES_MATCHING
            PATTERN "*.h"
            PATTERN "*.hpp"
)

错误:make install :ModuleNotFoundError: No module named ‘genmsg

解决办法:make install :ModuleNotFoundError: No module named ‘genmsg‘_modulenotfounderror: no module named 'genmsg-CSDN博客文章浏览阅读2k次,点赞10次,收藏11次。参考资料https://jingyan.baidu.com/article/358570f64af7cfce4724fc0c.html1. 先下载Microsoft LibraryMSDN的下载地址:链接:http://pan.baidu.com/s/1boNHEZt 密码:p1cw_modulenotfounderror: no module named 'genmsghttps://blog.csdn.net/howard789/article/details/101597991icon-default.png?t=N7T8https://blog.csdn.net/howard789/article/details/101597991

 错误:Invalid tag: Cannot load command parameter [rosversion]: command [rosversion roslaunch] returned with code [1].

解决办法:

roslaunch 出现如下错误解析_cannot load command parameter [rosversion]: no suc-CSDN博客文章浏览阅读6.8k次。ros 中使用roscore命令或者输入roslaunch运行脚本时,如果出现以下错误 Invalid tag: Cannot load command parameter [rosversion]: command [rosversion roslaunch] returned with code [1]. Param xml is 原因是ROSPACKAGEPATH有问题,如果输入rosc_cannot load command parameter [rosversion]: no such command [['rosversion',https://blog.csdn.net/ktigerhero3/article/details/65441963icon-default.png?t=N7T8https://blog.csdn.net/ktigerhero3/article/details/65441963

步骤五:环境变量相关

~/.bashrc

#ros1
source /opt/ros/noetic/setup.bash

#openrealm
source /home/zeeco/OpenREALM/catkin_ws/devel/setup.sh
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/zeeco/OpenREALM/catkin_ws/
export CUDACXX=/usr/local/cuda/bin/nvcc

#opencv
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

4. 成功运行

5. 其他可能的问题

错误:OpenREALM/modules/realm_stages/include/realm_stages/pose_estimation.h:150:10: error: ‘deque’ in namespace ‘std’ does not name a template type
     std::deque<Frame::Ptr> m_buffer_no_pose;

解决方案:在对应的头文件加#include <deque>

6. 其他资料

4.1 开源OpenREALM项目剖析文章浏览阅读1.1k次,点赞2次,收藏13次。OpenREALM是一个实时航空地图制作的框架,利用了视觉SLAM和3D重建的技术。它可以用于无人机的定位和导航,也可以用于生成高分辨率的影像和地形数据。它支持多种操作模式,包括平面拼接,3D重建,以及PSM(平面扫描匹配)。本篇包含了对该项目的一些总结_openrealmhttps://blog.csdn.net/qq_41314786/article/details/129998792?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-18-129998792-blog-124722591.235%5Ev38%5Epc_relevant_sort_base2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-18-129998792-blog-124722591.235%5Ev38%5Epc_relevant_sort_base2&utm_relevant_index=26icon-default.png?t=N7T8https://blog.csdn.net/qq_41314786/article/details/129998792?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-18-129998792-blog-124722591.235%5Ev38%5Epc_relevant_sort_base2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-18-129998792-blog-124722591.235%5Ev38%5Epc_relevant_sort_base2&utm_relevant_index=26

关于openrealm中的试验-CSDN博客文章浏览阅读59次。1.将其中的点云生成方法进行替换,例如orbslam,进行更深一步的点云替换,比如用sfm,colmap等输出的稠密点云数据。思路:一个process获取,另一个process进行传输,无法进行整体的替换,只能使用增量式的方法。点云以pointcloud形式存储,1.点云ID 2.Mat类型存储实际数据。经过实验,若整体的增加在-1~+1之间,对整体效果没有特别大的影响。2.在高程上添加一个随机数,看生成出来的拼接图像效果是否足够好。正在进行,在正射影像中的高程上添加了一个随机数。若有了点云还需要什么?https://blog.csdn.net/qq_60320488/article/details/134517774?spm=1001.2014.3001.5502

进行openrealm的slam模块更改-CSDN博客文章浏览阅读353次,点赞8次,收藏7次。2.将OpenREALM_ROS1_Bridge-master\realm_ros\CMakeLists.txt中的70行左右,find_package中的find_package(ORB_SLAM2 REQUIRED)前的注释取消。5.然后将OpenREALM_ROS1_Bridge-master\realm_ros\launch\alexa_reco.launch中的。4.然后重新编译openrealm,再重新编译openrealm_bridge。https://blog.csdn.net/qq_60320488/article/details/134965714?spm=1001.2014.3001.5502

解决ROS配置中cv_bridge问题_ros2 cv_bridge-CSDN博客文章浏览阅读4.4k次,点赞8次,收藏28次。cv_bridge — opencv和ros连接起来的桥问题描述在Jetson Nano+ROS环境上catkin_make时出现cv_bridge问题如下CMake Error at /home/nano/catkin_ws/devel/share/cv_bridge/cmake/cv_bridgeConfig.cmake:113 (message): Project 'cv_bridge' specifies '/home/nano/catkin_ws/src/vision_openc._ros2 cv_bridgehttps://blog.csdn.net/double_ZZZ/article/details/113254903icon-default.png?t=N7T8https://blog.csdn.net/double_ZZZ/article/details/113254903

openrealm配置-CSDN博客文章浏览阅读736次。下载测试数据集:https://drive.google.com/open?注意:其中的./install_deps.sh中包含的库中多数已经安装过,可以文本形式打开,自己选择其中未安装项进行安装。DBoW2 : 必须使用作者的修改版 https://github.com/shinsumicco/DBoW2.解压 tar -xvzf open_realm_edm_dataset.tar.gz。执行roslaunch realm_ros alexa_gnss.launch。_openrealmhttps://blog.csdn.net/qq_60320488/article/details/132722740icon-default.png?t=N7T8https://blog.csdn.net/qq_60320488/article/details/132722740

warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with lib_warning: libopencv_imgcodecs.so.4.2, needed by /op-CSDN博客文章浏览阅读2.6k次,点赞9次,收藏37次。ROS和ubuntu的opencv版本冲突_warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_brihttps://blog.csdn.net/qq_41873057/article/details/129943471

ubuntu20.04下opencv版本不兼容问题 - 知乎Opencv3 与 Opencv4 版本不兼容问题Ubuntu 20.04 以上 ros 自带的 opencv 版本都是 4.0 以上的,但是一些经典的 SLAM 算法使用的 opencv 版本都需要 3.x 版本,例如 PL-VINS 使用的是 3.4 版本,这就导致了以下两…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/617289094

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值