当前位置: 首页 > article >正文

【10天速通Navigation2】(四) :ORB-SLAM3的ROS2 humble编译和配置

前言

  • 往期内容:
    • 第一期:【10天速通Navigation2】(一) 框架总览和概念解释
    • 第二期:【10天速通Navigation2】(二) :ROS2gazebo阿克曼小车模型搭建-gazebo_ackermann_drive等插件的配置和说明
    • 第三期:【10天速通Navigation2】(三) :Cartographer建图算法配置:从仿真到实车,从原理到实现
  • 本教材将贯穿nav2的全部内容,使用ROS2和C++实现一些仿真乃至实车中常见的建图和路径规划算法,例如cartographer,ORB-SLAM,RRT,hybrid-astar。我们将注重与原理讲解和代码实现,去详细讲解每一步的配置过程和代码复现细节。
  • 同理本教材默认大家有一些基础的ROS2C++的编程基础,故不对一些基础部分进行详细说明。
  • 本教程使用的环境:
    • ROS2 humble
    • ubuntu 22.04 LTS
  • 接下来两期我们将进行ORB-SLAM3 的配置和原理讲解,本期我们将重点讲解ORB-SLAM3在ROS2的环境配置,由于环境配置稍微复杂,所以这一期我们单独挑出来说明。
  • 配置成功后,下图是抱着电脑使用电脑摄像头进行的ORB-SLAM3-ROS2的建图请添加图片描述

1 ORB-SLAM3

1-1 介绍
  • ORB-SLAM3是一个开源的视觉SLAM(Simultaneous Localization and Mapping,同时定位与建图)系统,它是ORB-SLAM和ORB-SLAM2的后续版本。SLAM是一种用于同时估计相机位置和构建环境地图的技术,广泛用于机器人、增强现实和自动驾驶车辆等领域。

  • ORB-SLAM3官网请添加图片描述

  • 但是值得一提的是,官网提供的ROS支持只有在ROS1 Melodic中配置,所以这里我们选择还一个进行配置请添加图片描述

  • 这里我们选择别人开源的这个ORB-SLAM3-ROS2进行配置

  • ORB-SLAM3-ROS2请添加图片描述

1-2 安装依赖清单
  • 在正式配置之前,我们需要预先安装一些必要的依赖。
    • OpenCV 4.2.0
    • cv_bridge for opencv 4.2(注意这里的cv_brigde版本一定要和OpenCV的版本一致且都为4.2.0!!!)
    • Pangolin
    • Eigen3
    • DBoW2 and g2o (包含在ORB-SLAM3本体的安装目录下)
    • Python:系统自带即可
    • ROS :这个肯定有的,这里我使用的是ROS2 Humble
    • ORB-SLAM3本体
  • 最后就是我们的ORB-SLAM3-ROS2

2 OpenCV 4.2.0编译安装

2-1 介绍
  • OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV旨在提供一个跨平台的中等API,以促进计算机视觉技术在商业产品中的应用。它由Intel在1999年发起,现在由一个活跃的贡献者社区维护,并且可以免费用于学术和商业用途。
2-2 源码编译安装
  • 值得注意的是,ORB-SLAM3必须使用OpenCV 4.2.0,否则可能会造成后续一系列的报错。(参见最后一节报错汇总请添加图片描述

  • 由于直接使用apt包管理器默认安装的是最新版本的OpenCV4.5.5,我们这边需要使用到历史版本,所以这里我们选择源码安装。

    • 我们不使用这个:sudo apt install libopencv-dev
  • 在下载CV之前,我们需要准备一些基本GUI的依赖

sudo apt-get update
sudo apt-get install libgtk2.0-dev pkg-config
  • 这里我们直接使用wget 命令直接下载 OpenCV 4.2.0 的源码压缩包
cd ~
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip
  • 下载完后我们解压安装包
unzip opencv.zip
  • 这将创建一个名为 opencv-4.2.0 的目录,该目录包含了 OpenCV 4.2.0 的源码。请添加图片描述

  • 然后我们新建一个build目录

mkdir build
cd build
  • 我们进行cmake配置,注意这里需要打开WITH_GTK,否则后续GUI显示可能会出现问题
cmake -D CMAKE_BUILD_TYPE=Release \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_GTK=ON ..

请添加图片描述

  • 然后我们进行编译,这里-j4表示制定4个核并行编译
make -j4

请添加图片描述

  • 是在软件编译成功后,将其安装到系统中的最后一步
sudo make install

请添加图片描述

  • 安装成功后我们可以在usr/local下找到:

  • /usr/local/bin/:OpenCV 提供的工具或示例程序请添加图片描述

  • /usr/local/lib/:动态链接库(通常是 .so 文件在 Linux 系统上,.dylib 文件在 macOS 上)和静态库(通常是 .a 文件)会被安装在这里。请添加图片描述

  • 不放心的朋友们可以自己跑一个基础的cv历程来测试

#include <opencv2/opencv.hpp>
#include <iostream>

int main(int argc, char **argv) {
    // 检查是否提供了图像文件名
    if (argc != 2) {
        std::cout << "Usage: " << argv[0] << " <Image_Path>" << std::endl;
        return -1;
    }

    // 加载图像
    cv::Mat image = cv::imread(argv[1], cv::IMREAD_COLOR);
    if (image.empty()) {
        std::cout << "Could not open or find the image" << std::endl;
        return -1;
    }

    // 将图像转换为灰度
    cv::Mat gray_image;
    cv::cvtColor(image, gray_image, cv::COLOR_BGR2GRAY);

    // 显示原始图像
    cv::namedWindow("Original Image", cv::WINDOW_AUTOSIZE);
    cv::imshow("Original Image", image);

    // 显示灰度图像
    cv::namedWindow("Gray Image", cv::WINDOW_AUTOSIZE);
    cv::imshow("Gray Image", gray_image);

    // 等待用户按键然后退出
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}


3 cv_bridge for opencv 4.2编译

3-1 介绍
  • cv_bridge 是一个用于在 ROS (Robot Operating System) 中桥接 ROS 图像消息和 OpenCV 图像数据的库。在 ROS 中,图像通常以 sensor_msgs/Image 消息的形式传输,而 OpenCV 使用自己的 cv::Mat 数据结构来处理图像。cv_bridge 提供了一个方便的方式来转换这两种格式,使得开发者可以轻松地在 ROS 和 OpenCV 之间转换图像数据。
3-2 安装
  • 和上面的OpenCV一样,如果直接使用apt安装会是最新版本的
    • 所以我们不使用:sudo apt install ros-humble-cv-bridge
  • 这里我们同样需要拉取源码进行编译,我们直接拉取源码
git clone -b humble https://github.com/ros-perception/vision_opencv

请添加图片描述

  • 注意这里我们需要的是cv_brigde,同理我们创建build目录
cd vision_opencv/cv_bridge/
mkdir build
cd build/
  • 然后我们进行编译,注意这里我们安装到/opt/ros/humble
cmake -DCMAKE_INSTALL_PREFIX=/opt/ros/humble ..
make -j4
sudo make install

请添加图片描述![[Pasted image 20241028222014.png]]请添加图片描述


4 Pangolin

4-1 介绍
  • Pangolin 是一个轻量级的、开源的库,用于处理计算机视觉和机器人领域中的3D数据、相机标定、3D模型显示、用户界面以及其他与3D相关的任务。它由斯特拉斯堡大学(University of Strasbourg)的 Steven Lovegrove 开发,并广泛用于学术界和工业界的各种项目中。
4-2 安装编译
  • 同理
git clone https://github.com/stevenlovegrove/Pangolin

mkdir build 
cd build 
cmake .. 
make -j4 
sudo make install

请添加图片描述

4-3 测试安装成功
  • 我们编译其中的测试模块
cd Pangilin/examples/HelloPangolin
mkdir build
cd build
cmake ..
make
  • 运行测试
sudo ldconfig
./HelloPangolin
  • 当出现下述方块表示安装成功请添加图片描述

5 Eigen3

5-1 介绍
  • Eigen是一个高级的C++库,用于线性代数、矩阵和向量运算、数值解算以及相关的算法。Eigen3是Eigen库的第三个主要版本,它提供了快速、高效且易于使用的API来处理矩阵和向量运算,适用于各种科学和工程计算问题。
5-2 安装
  • 最简单的一集
sudo apt-get install libeigen3-dev

6 OLB-SLAM3本体编译

6-1 安装
  • 安装好上述依赖以后,我们就可以安装ORB-SLAM3的本体拉
  • 我们拉取源码
git clone https://github.com/zang09/ORB-SLAM3-STEREO-FIXED.git ORB_SLAM3
  • 下载后在编译前我们需要打开源码中的可视化部分请添加图片描述

  • 然后我们开始编译

cd ORB_SLAM3
chmod +x build.sh
./build.sh

请添加图片描述

  • 理论上安装上述依赖完全代码编译是可以通过的,如果有错误,参照最后面的报错参考。
6-2 数据及测试
  • 根据官网提示,我们可以下载数据集来测试ORB-SLAM3的安装请添加图片描述

  • 这里我们随便点一个link下载数据集数据集连接请添加图片描述

  • 下载后我们解压

  • 请添加图片描述

  • 我们记住这个解压后的文件路径,比如说我的 /home/zhlucifer/Downloads/MH_01_easy

  • 进入文件夹,终端输入,测试代码

cd ORB_SLAM3
cd Examples
./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml /home/zhlucifer/Downloads/MH_01_easy ./Monocular/EuRoC_TimeStamps/MH01.txt
  • 请添加图片描述

  • 请添加图片描述

  • 出现上述画面就成功辣!!!!!!!!!!


7 ORB-SLAM3-ROS2编译安装

7-1 编译安装
  • 那么上述我们是成功安装了ORB-SLAM3本体,如果我们还需要使用ROS2和它对接,我们需要安装ORB-SLAM3-ROS2请添加图片描述

  • 我们还需要额外下载一些ROS2的依赖包

sudo apt install ros-$ROS_DISTRO-vision-opencv && sudo apt install ros-$ROS_DISTRO-message-filters
  • 然后我们就可以正式开始我们的编译了,我们进入前几节课创建的工作空间,然后拉取源码
cd qingzhou_sim/src
git clone https://github.com/zang09/ORB_SLAM3_ROS2.git orbslam3_ros2

请添加图片描述

  • 在正式开始编译之前有一些部分需要修改:

  • 替换CMakeLists中你的python的路径请添加图片描述

  • 替换CMakeModulesORB-SLAM3为你刚刚编译好的ORB-SLAM3的路径请添加图片描述

  • 然后事不宜迟,直接开始编译

colcon build

请添加图片描述

  • 然后就成了!!!上述是编译警告,无伤大雅!!!

7-2 ORB-SLAM3-MONO单目SLAM测试
  • 那事不宜迟,我们先使用我们自己电脑的摄影头来尝试吧!
  • 我们安装基础的摄像头驱动库
sudo apt-get install ros-humble-image-transport ros-humble-camera-info-manager
sudo apt install ros-humble-image-tools
  • 我们通过ls /dev/video*找到我们的摄像头,通常是/dev/video0请添加图片描述

  • 我们打开摄像头节点进行摄像头拍摄和图像话题发布

ros2 run image_tools cam2image --ros-args -p video_device:=/dev/video0

请添加图片描述

  • 我们打开RVIZ2订阅/image话题,可以看到我们的电脑前端画面!请添加图片描述

  • 那么紧接着我们就来测试ORB-SLAM3-ROS2,我们打开源码中单目建图订阅图像话题的部分(下一期我们再讲这是什么)请添加图片描述

  • 修改为/image进行编译。

colcon build
  • 然后我们解压vocabulary下的压缩包请添加图片描述

  • 然后我们运行

source ./install/setup.bash
ros2 run orbslam3 mono ./src/orbslam3_ros2/vocabulary/ORBvoc.txt ./src/orbslam3_ros2/config/monocular/TUM1.yaml
  • 请添加图片描述

  • 一开始启动是黑的不要紧,因为还没有数据更新请添加图片描述

  • 我们移动电脑摄像头,可以看到交点特征被提取,ORB-SLAM3开始工作请添加图片描述

  • 我们抱着电脑缓慢移动,可以看到如下场景,我在室内转了一圈后回到原点,下属窗口记录了我的移动路径。请添加图片描述

  • 自此,我们就完成配置辣!!!!!!!!!!!!!!!!!


8 报错汇总

8-1 OpenCV编译或者运行出错

8-1-1 The function is not implemented
  • 原因是没编译gtk的GUI请添加图片描述

  • 解决方法:

sudo apt-get update
sudo apt-get install libgtk2.0-dev pkg-config
  • 然后Cmake的时候打开WITH_GTK=ON
cmake -D CMAKE_BUILD_TYPE=Release \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_GTK=ON ..

8-2 ORB-SLAM3编译报错

8-2-1 Sophus库出现重复链接
  • 代码出现重复定义请添加图片描述

  • 请添加图片描述

  • 根据所需,选择一个添加请添加图片描述

  • 请添加图片描述

  • !请添加图片描述

8-2-2 std::enable_if_t等找不到
  • 请添加图片描述

  • 制定编译标准为C++14请添加图片描述

8-1 ORB-SLAM3-ROS2编译报错

8-1-2 undefined reference to symbol '_ZN2cv23…
  • 如下请添加图片描述

  • 或者如下!请添加图片描述

  • 解决方法:![请添加图片描述
    ]

  • 选择OpenCV 4.2.0,同时选择编译对应版本的cv_bridge


9 小节

  • 本期介绍了如何在ROS2 Humble上进行ORB-SLAM3-ROS2的配置。
  • 下一期我们在仿真中配置深度相机插件,并说明如何进行ORB-SLAM3-ROS2的使用
  • 如有错误,欢迎指出!!!感谢大家的支持!!!

请添加图片描述


http://www.kler.cn/a/370259.html

相关文章:

  • P8738 [蓝桥杯 2020 国 C] 天干地支
  • 高频词汇背诵 Day1
  • 代码随想录_字符串
  • Spring 中的事件驱动模型
  • 【深度学习】利用Java DL4J 训练金融投资组合模型
  • Linux探秘坊-------3.开发工具详解(2)
  • 如何在Linux系统中管理和优化Swap空间
  • 论文阅读工具:arXiv、papers.cool、txyz
  • antvG6如何实现节点动画、连线动画、切换节点图标
  • 网络安全的重要性及实践指南
  • Python语言实现刑事犯罪罪名判定算法
  • 大数据之Kafka
  • 简单的Python爬虫实例
  • Qt example---40000 Chips
  • XCode16中c++头文件找不到解决办法
  • 007:无人机遥控器功能介绍
  • 鼠标事件与webGl坐标系
  • RayLink为企业提供高效安全的远程办公环境
  • 架构师备考-非关系型数据库
  • 贵州鑫宏远农业-始终致力于推动现代农业的科技创新与发展
  • 使用 FastGPT + Ollama 搭建本地 AI 客服小助手
  • 【封装小程序log,设定层级】
  • opencv - py_ml - py_kmeans
  • Vue.js从入门到精通 — 基础知识
  • 医学影像基础:常见的医学影像学术语和概念
  • 商场应急管理:SpringBoot技术解决方案