【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/Pangolinmkdir 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.rhkb.cn/news/459085.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回溯算法习题其二-Java【力扣】【算法学习day.16】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

【Java小白图文教程】-05-数组和排序算法详解

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

论文概览 |《Computers, Environment and Urban Systems》2024.10 Vol.113

本次给大家整理的是《Computers, Environment and Urban Systems》杂志2024年10月第113期的论文的题目和摘要&#xff0c;一共包括13篇SCI论文&#xff01; 论文1 Can consumer big data reveal often-overlooked urban poverty? Evidence from Guangzhou, China 消费者大数…

百度SEO中的关键词密度与内容优化研究【百度SEO专家】

大家好&#xff0c;我是百度SEO专家&#xff08;林汉文&#xff09;&#xff0c;在百度SEO优化中&#xff0c;关键词密度和关键词内容的优化对提升页面排名至关重要。关键词的合理布局与内容的质量是确保网页在百度搜索结果中脱颖而出的关键因素。下面我们将从关键词密度和关键…

通俗易懂的餐厅例子来讲解JVM

餐厅版本 JVM&#xff08;Java虚拟机&#xff09;可以想象成一个虚拟的计算机&#xff0c;它能够运行Java程序。为了让你更容易理解&#xff0c;我们可以用一个餐厅的比喻来解释JVM&#xff1a; 菜单&#xff08;Java源代码&#xff09;&#xff1a; 想象一下&#xff0c;Java…

BLFAasia2025广州国际酒饮料制造设备及液态加工技术展览会(广州酒饮料液态加工技术展)

Asia Beer and Beverage Technology and Liquid Food Processing Equipment Exhibition BLFAasia2025广州国际酒饮料制造设备及液态加工技术展览会&#xff08;以下简称&#xff1a;“BLFAasia”&#xff09;展会于2025年8月22-24日在粤港澳大湾区核心城市广州隆重举行。是专注…

自动驾驶-传感器简述

自动驾驶车辆上的传感器类型包含激光雷达、毫米波雷达、相机、imu、rtk、超声波雷达等&#xff0c;这些传感器用来接收外部世界多姿多彩的信号&#xff0c;根据接收到的信号&#xff0c;车载大脑对信号进行处理&#xff0c;那信号的准确程度就尤为重要。 本文将各个传感器的特性…

【acwing】算法基础课-搜索与图论

目录 1、dfs(深度优先搜索) 1.1 排列数字 1.2 n皇后问题 搜索顺序1 搜索顺序2 2、bfs(广度优先搜索) 2.1 走迷宫 2.2 八数码 3、树与图的存储 4、树与图的遍历 4.1 树的重心 4.2 图中点的层次 5、拓扑排序 6、最短路问题 6.1 朴素Dijkstra算法 6.2 堆优化Dijks…

Qt | windows视频播放器小项目

点击上方"蓝字"关注我们 01、前言 >>> Windows平台如果播放不了视频,记得下载编解码工具:https://www.mediaplayercodecpack.com/#google_vignette media.player.codec.pack.v4.6.0.setup.exe 下载后双击安装。 02、videowidget.pro >>> (.pro…

Python: Print Table on console

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a; # 描述&#xff1a; # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # OS : windows 10 # Datetime : 2024/10/28 22:08 # User : geo…

鸿蒙网络编程系列34-Wifi热点扫描及连接示例

1. Wifi热点简介 Wifi热点是移动设备接入网络的重要形式&#xff0c;特别是在不具备固定网络接入点的情况下&#xff0c;可以通过Wifi热点灵活方便的接入网络&#xff0c;因此在日常生活中具有广泛的应用。鸿蒙系统也提供了方便的Wifi管理API&#xff0c;支持热点扫描&#xf…

十四:Python学习笔记--基础知识完结(12)写几个案例 打包exe出来 齐活

目录 案例一&#xff1a;系统监控工具 案例二&#xff1a; 假设 多台电脑 在局域网中 只有一台电脑可以连接外网&#xff0c; 内网的数据必须要传递到外网电脑 内网&#xff1a; 外网&#xff1a; 程序打包 案例一&#xff1a;系统监控工具 加载配置&#xff1a;从 config…

HDU - 2588 GCD

题目大意&#xff1a;两个正整数 a 和 b 的最大公约数 GCD&#xff08;a&#xff0c;b&#xff09;&#xff0c;有时写成 &#xff08;a&#xff0c;b&#xff09;&#xff0c;是 a 和 b 的最大公约数&#xff0c;例如&#xff0c;&#xff08;1,2&#xff09;1&#xff0c;&am…

【笔记】大模型长度外推技术 NTK-Aware Scaled RoPE

NTK-Aware Scaled RoPE 正弦编码(Sinusoidal)旋转位置编码RoPE编码步骤&#xff1a;旋转位置编码的优势 NTK-Aware Scaled RoPE直接外推线性内插进制转换高频外推、低频内插的理解位置编码 总结参考&#xff1a; 长度外推技术是自然语言处理&#xff08;NLP&#xff09;领域中&…

java中的二叉树

二叉树 树型结构概念相关概念树的表示形式树的应用 二叉树概念两种特殊的二叉树二叉树的性质二叉树的存储二叉树的基本操作前置说明二叉树的遍历二叉树的基本操作 二叉树相关OJ题 树型结构 概念 树是一种非线性的的数据结构&#xff0c;它是由n(n>0)个有限结点组成一个具有…

防静电监控系统为汽车电子工厂打造安全生产环境

汽车电子产品对静电极其敏感&#xff0c;微小的静电放电 (ESD) 都会导致元器件损坏&#xff0c;造成巨大的经济损失和产品质量问题。因此&#xff0c;在汽车电子工厂构建完善的ESD防静电防护体系至关重要。传统的防静电措施主要依赖人工巡检&#xff0c;效率低且难以保证实时监…

如何挑选项目管理软件?8款免费工具推荐

本文提及的8款免费优质项目管理软件有: 1.PingCode&#xff1b; 2.Worktile&#xff1b; 3.钉钉&#xff08;Dingtalk&#xff09;&#xff1b; 4.金蝶项目管理&#xff1b; 5.ProcessOn&#xff1b; 6.简道云&#xff1b; 7.Jira&#xff1b; 8.Basecamp。 在如今快速发展的商…

51单片机 复位电路

上电复位 上电复位是为了程序执行到后面&#xff0c;突然关机&#xff0c;能够让电路能够回到初始状况 使用阻容(通交流隔直流)电路完成复位 电容上电有一个过程&#xff0c;充满电所需世界大于两个机器周期 电容电充满之后&#xff0c;电压拉为0v, 整个电路就复位了 如果电压一…

面向对象(下)

7.继承 继承的基础语法 学习目标&#xff1a;理解继承的概念&#xff0c;掌握继承的使用方式&#xff0c;掌握pass关键字的作用 就是把老的设计图继承下来&#xff0c;然后修修改改成为新的设计图 我们可以使用继承&#xff0c;来完成此需求。 单继承 从头写一个新的类&…

利用Django实现MySQL数据库的内容在网页的增删改写

利用Django实现MySQL数据库的内容在网页的增删改写 1.建立项目2.定义模型3.创建视图4.创建模板5.创建表单和配置url6.最后修改7.效果 1.建立项目 输入命令django-admin startproject aaa 新建项目&#xff0c;项目名称命名为aaa&#xff0c;打开aaa文件夹&#xff0c;命令提示…