从零开始实现ORB_SLAM2编译与运行

news2024/12/22 17:33:01

文章目录

  • 前言
  • 一、前期准备
  • 二、库安装
    • 1.engin库安装
      • 方法1:apt安装
      • 方法2:源码安装
    • 2.Pangolin库安装
    • 3.openCV源码安装
  • 三、build编译
  • 四、测试
  • 五、ROS安装
  • 六、build-ros编译
  • 七、测试
  • 总结


前言

ORB_SLAM2作为一种优秀的开源VSLAM解决方案,以其高效的处理性能和强大的功能吸引了众多研究者和工程师的关注。然而,对于初学者来说,安装和编译ORB_SLAM2可能是一个复杂且耗时的过程。官方文档虽然提供了编译指南,但在实际操作过程中,用户可能会遇到各种问题,这些问题往往需要额外的搜索和尝试才能解决。因此,本博客旨在提供一个详尽的步骤说明,从零开始详细记录安装、编译以及运行ORB_SLAM2的全过程,包括基于原始build系统的编译和基于ROS的build_ros系统编译。


一、前期准备

我是在WSL中进行测试安装的,因此需要安装WSL并创建一个Ubuntu子系统,WSL相应的安装可以参考:

我的系统环境:Ubuntu16.04;

注意:WSL默认安装的Ubuntu是没有16.04版本的,因此可以选择Ubuntu20.04进行安装。
WSL中安装Ubuntu16.04可以参考:

二、库安装

由于是一个全新的系统,因此需要更换国内镜像源(可选)、安装必要的编译工具以及编辑器:

  1. 更新镜像源:
sudo cp /etc/apt/sources.list /etc/apt/sources.bak1
#第一个参数是拷贝的文件名称,第二个是拷贝到的文件路径和文件名

从阿里云官网复制并导入相应系统的阿里云镜像,因为我是Ubuntu16.04,所以下面是16.04的镜像源:

deb https://mirrors.aliyun.com/ubuntu/ xenial main
deb-src https://mirrors.aliyun.com/ubuntu/ xenial main

deb https://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src https://mirrors.aliyun.com/ubuntu/ xenial-updates main

deb https://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src https://mirrors.aliyun.com/ubuntu/ xenial universe
deb https://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src https://mirrors.aliyun.com/ubuntu/ xenial-updates universe

deb https://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src https://mirrors.aliyun.com/ubuntu/ xenial-security main
deb https://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src https://mirrors.aliyun.com/ubuntu/ xenial-security universe

打开sources.list,删除原来内容并将上面的镜像源粘贴上去:

sudo vim /etc/apt/sources.list

更新软件源列表:

sudo apt-get update
  1. 安装必要工具包:
sudo apt-get update
apt-get install vim
apt-get install gcc g++ cmake

1.engin库安装

方法1:apt安装

sudo apt-get install libeigen3-dev

方法2:源码安装

从官网下载源代码压缩包或者GitHub上克隆相应代码:

git clone  -b '3.3.0' https://gitlab.com/libeigen/eigen.git --single-branch
cd eigen
mkdir build && cd build
cmake ..
sudo make install
#默认的eigen安装在/usr/local/include/eigen3/Eigen/ , 为了方便使用,需要将其拷贝一份放到/usr/include/
sudo cp -r /usr/local/include/eigen3/Eigen /usr/include
sudo cp -r /usr/local/include/eigen3 /usr/include

2.Pangolin库安装

  1. 安装依赖:
sudo apt-get install libglew-dev
  1. 安装Pangolin:
git clone -b 'v0.6' https://github.com/stevenlovegrove/Pangolin.git --single-branch
cd Pangolin
mkdir build && cd build 
cmake ..
make 
sudo make install

3.openCV源码安装

参考我写的这篇博客:openCV源码安装与卸载

三、build编译

cd ORB_SLAM2
sudo sh ./build.sh

常见问题:

error "usleep"was not declared in this scope

解决方法:在所有遇到错误的脚本中添加头文件: #include <unistd.h>

四、测试

进入到ORB_SLAM2/Examples/Monocular/目录下(数据集下载并保存在ORB_SLAM2文件下)

 sudo ./mono_tum ../../Vocabulary/ORBvoc.txt TUM1.yaml ../../rgbd_dataset_freiburg1_xyz/

在这里插入图片描述

五、ROS安装

参考这篇文章的安装ROS部分,强烈推荐。
下面是安装ROS所用到的命令行:

sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ xenial main" > /etc/apt/sources.list.d/ros-latest.list'
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv=key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
apt-get update
apt-get install ros-kinetic-openni2-launch
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

测试并初始化ROS:

roscore
pip install rosdepc
rosdepc init
rosdepc update

六、build-ros编译

chmod +x build_ros.sh
sudo sh ./build_ros.sh

常见问题:

CMake Error at /opt/ros/kinetic/share/ros/core/rosbuild/private.cmake:102 (message):
  [rosbuild] rospack found package "ORB_SLAM2" at "", but the current
  directory is "/home/ztl/ORB_SLAM2/Examples/ROS/ORB_SLAM2".  You should
  double-check your ROS_PACKAGE_PATH to ensure that packages are found in the
  correct precedence order.
Call Stack (most recent call first):
  /opt/ros/kinetic/share/ros/core/rosbuild/public.cmake:177 (_rosbuild_check_package_location)
  CMakeLists.txt:4 (rosbuild_init)

解决方法:
这是一个很坑的地方,网上的博客都说在bashrc中设置路径:

sudo vim ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/ztl/ORB_SLAM2/Examples/ROS
source ~/.bashrc 

但是完全不起作用,即使echo $ROS_PACKAGE_PATH 有结果,仍然无效,需要在ROS的安装路径下面更改路径:

cd /opt/ros/kinetic/
sudo vim setup.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/ztl/ORB_SLAM2/Examples/ROS
source setup.sh

七、测试

启动三个终端分别运行:

roscore
cd ORB_SLAM2
rosrun ORB_SLAM2 Mono ./Vocabulary/ORBvoc.txt ./Examples/Monocular/TUM1.yaml
rosbag play --clock rgbd_dataset_freiburg1_xyz.bag

补充:如果出现:Command ‘rosrun‘ not found
解决方法:$ sudo apt install ros-kinetic-rosbash

问题:运行之后发现没有画面,显示一直在等待输入,后面请教实验室同学,发现是话题名有问题,查看bag的信息:

ztl@DELL:~/ORB_SLAM2$ rosbag info rgbd_dataset_freiburg1_xyz.bag
path:         rgbd_dataset_freiburg1_xyz.bag
version:      2.0
duration:     30.4s
start:        May 10 2011 20:38:18.38 (1305031098.38)
end:          May 10 2011 20:38:48.81 (1305031128.81)
size:         480.4 MB
messages:     25626
compression:  bz2 [1598/1598 chunks; 29.14%]
uncompressed:   1.6 GB @ 54.1 MB/s
compressed:   479.4 MB @ 15.8 MB/s (29.14%)
types:        sensor_msgs/CameraInfo         [c9a58c1b0b154e0e6da7578cb991d214]
              sensor_msgs/Image              [060021388200f6f0f447d0fcd9c64743]
              sensor_msgs/Imu                [6a62c6daae103f4ff57a132d6f95cec2]
              tf/tfMessage                   [94810edda583a504dfda3829e70d7eec]
              visualization_msgs/MarkerArray [f10fe193d6fac1bf68fad5d31da421a7]
topics:       /camera/depth/camera_info     798 msgs    : sensor_msgs/CameraInfo        
              /camera/depth/image           798 msgs    : sensor_msgs/Image             
              /camera/rgb/camera_info       798 msgs    : sensor_msgs/CameraInfo        
              /camera/rgb/image_color       798 msgs    : sensor_msgs/Image             
              /cortex_marker_array         3034 msgs    : visualization_msgs/MarkerArray
              /imu                        15158 msgs    : sensor_msgs/Imu               
              /tf                          4242 msgs    : tf/tfMessage

因此需要将ros_mono.cc中订阅的节点名改为/camera/rgb/image_color才行,出现编译运行,输出正常。

ros::Subscriber sub = nodeHandler.subscribe("/camera/rgb/image_color", 1, &ImageGrabber::GrabImage,&igb);

在这里插入图片描述

总结

本博客详细记录了ORB_SLAM2的编译与运行过程,涵盖了基于原始build系统及ROS的build_ros系统。读者通过本指南可获得安装、配置、编译直至运行ORB_SLAM2的全面了解,为进一步探索VSLAM技术奠定了坚实基础。

本文档在实验室同学的帮助下完成,很多不懂的地方都是他帮忙解决的,十分感谢大佬的帮忙,这是他的主页。最后,希望这份指南不仅仅是一个技术手册,更是一份知识共享和经验传承的文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1510134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高浓度纸浆废水如何处理达标排放

在纸浆生产过程中&#xff0c;高浓度纸浆废水是一个常见的环境污染源&#xff0c;其处理对于环境保护和可持续发展至关重要。为了实现高浓度纸浆废水的达标排放&#xff0c;必须采用一系列专业的处理技术&#xff0c;以确保废水处理的高效性和环境友好性。 首先&#xff0c;通过…

Oracle之ADG与DG的区别?

在上云后的Oracle数据灾备场景中&#xff0c;我们经常听到DBA迁移工程师讲到“在这个项目中用ADG进行数据实时备份&#xff0c;ADG比DG更好&#xff01;”。究竟ADG作Oracle数据灾备的优势在什么地方&#xff1f; 一、ADG主要解决了DG时代读写不能并行的问题 DG时代的数据同步…

Kutools For Excel | 新增 300+ 高级功能

Kutools For Excel 是一个便捷的 Excel 插件&#xff0c;具有 300 多种高级功能&#xff0c;可将各种复杂的任务简化为在 Excel 中的几次单击。 功能强大且用户友好的加载项将为 Excel 用户节省大量工作时间&#xff0c;并大大提高工作效率。支持 Excel 2021 / 2019 / 2016 / …

【Python使用】python高级进阶知识md总结第3篇:静态Web服务器-返回指定页面数据,静态Web服务器-多任务版【附代码文档】

python高级进阶全知识知识笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;操作系统&#xff0c;虚拟机软件&#xff0c;Ubuntu操作系统&#xff0c;Linux内核及发行版&#xff0c;查看目录命令&#xff0c;切换目录命令&#xff0c;绝对路径和相对…

‘UnityEngine.Application‘ does not contain a definition for isBatchMode

unity 2017.4.37f1. 解决办法: Try to replace Application.isBatchMode with UnityEditorInternal.InternalEditorUtility.inBatchMode

NCDA大赛交互网页设计优秀作品有哪些?

现在&#xff0c;越来越多 UX/UI 设计者将互动 / 在其网站设计中添加动画元素(如鼠标悬停状态、音频或视频媒体、滚动交互等。).这样一方面可以让网站本身更加华丽有趣&#xff0c;吸引更多的访问者&#xff0c;激励访问者更加关注和阅读网站内容。这就是为什么互动网站设计已经…

机器学习开源分子生成系列(1)-DeepFrag的本地部署及使用

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …进入 文章目录 前言一、DeepFrag是什么&#xff1f;二、conda中安装DeepFrag CLI环境1. 创建环境并激活2. 下载pre-trained model3. DeepFrag CLI 使用方法必需参数&#xff1a;可选参数&#xff1a; 4. DeepFrag CLI 使用…

猫头虎分享已解决Bug || 网络攻击(Network Attack):DDoSError, NetworkIntrusion

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

2048游戏代码

创建一个2048游戏的最小完整实现需要HTML、CSS和JavaScript。以下是一个简单的实现&#xff0c;你可以将这些代码复制到本地文件中&#xff0c;比如命名为2048.html&#xff0c;然后用浏览器打开这个文件来玩游戏。 <html> <head><title>2048 Game</title…

AJAX入门:前端连接后端

一.概述 AJAX即Asynchronous Javascript And XML&#xff0c;即异步JavaScript和XML。 AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。&#xff08;使用Ajax和服务器进行通信&#xff0c;就可以使用…

Java_6 数组拆分 I

数组拆分 I 给定长度为 2n 的整数数组 nums &#xff0c;你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) &#xff0c;使得从 1 到 n 的 min(ai, bi) 总和最大。 返回该 最大总和 。 示例 1&#xff1a; 输入&#xff1a;nums [1,4,3,2] 输出&#…

如何看待Linux桌面操作系统的火速增长

文章目录 1. 使用过Linux桌面操作系统吗&#xff1f;Linux系统有什么优势&#xff1f;对于Linux桌面操作系统份额的火速增长怎么看呢认为未来Linux会主导桌面操作系统吗&#xff1f; #如何看待Linux桌面操作系统的火速增长&#xff1f; 1. 使用过Linux桌面操作系统吗&#xff…

蓝桥杯[OJ 2928]分糖果-CPP(贪心、字典序)

目录 一、题目描述&#xff1a; 二、整体思路 (一)字典序比较规则 (二)正确理解题意 &#xff08;三&#xff09;分类讨论 三、代码 一、题目描述&#xff1a; 二、整体思路 (一)字典序比较规则 首先要知道字典序是怎么比较大小的&#xff0c;简单来说按以下次序进行比较&am…

污水磷资源回收工艺及海普树脂除杂

#污水磷资源回收工艺及海普树脂除杂 ​磷矿资源也是一种不可再生资源&#xff0c;目前磷矿产业仍在扩张&#xff0c;随着新能源行业磷酸铁锂电池的大范围应用&#xff0c;对磷的需求量仍在增加。基于污水中相对较高的磷负荷&#xff0c;从污泥焚烧灰分中回收磷显得十分有必要&a…

iTOP-3588开发板快速启动手册Windows安装串口终端软件创建串口会话

双击上图中红框的应用程序后&#xff0c;软件会启动&#xff0c;界面启动后如下图所示&#xff1a; 下面来创建第一个SSH 会话。点击菜单栏 「会话」 --> 「新建会话」&#xff0c;即可弹出 「会话设置」 对话框&#xff0c;如下图所示&#xff1a; 在会话设置框里面选择串口…

如何提高API接口的性能和设计安全可靠的API

如何提高API接口的性能 下图显示了提高 API 性能的 5 种常见技巧。 分页 这是在结果集较大时常用的优化方法。结果会以流式方式传回客户端&#xff0c;以提高服务响应速度。 异步日志 同步日志每次调用都要处理磁盘&#xff0c;会降低系统速度。异步日志会先将日志发送到无…

Oracle增量更新备份(更快的备份策略)

正常的备份策略包括&#xff1a;全库备份&#xff0c;full备份&#xff0c;创建镜像备份&#xff0c;累积增量备份以及差异增量备份&#xff1a; 全库备份&#xff1a;如名&#xff0c;对oracle整个数据库进行备份&#xff0c;包括archivedlog&#xff0c;数据文件&#xff0c;…

Verilog刷题笔记37

题目&#xff1a;3位二进制加法器 Now that you know how to build a full adder, make 3 instances of it to create a 3-bit binary ripple-carry adder. The adder adds two 3-bit numbers and a carry-in to produce a 3-bit sum and carry out. To encourage you to actua…

Mixamo动画素材导入UE5的最简单方法

一、Mixamo素材 官网&#xff1a;https://www.mixamo.com/ Mixamo是Adobe公司出品的免费动画库&#xff0c;可商用。软件分为characters(角色&#xff09;、Animations&#xff08;动画)两个部分。 二、辅助工具MIXAMO CONVERTER 官网&#xff1a;https://terribilisstudio…

如何做校园圈子小程序,需要哪些功能?APP小程序H5公众号功能齐全,PHP书写,uniAPP。源码交付,支持二开!

最近几年&#xff0c;校园外卖跑腿服务市场迅速兴起。由于学生每天课程繁忙&#xff0c;很多人没有时间去食堂或外面的餐厅用餐&#xff0c;校园外卖跑腿平台提供了便捷和快速的解决方案&#xff0c;满足了学生的饮食跑腿需求&#xff0c;并受到越来越多学生的喜爱。 那么&…