Ubuntu18.04编译ORB-SLAM3及遇到的一些问题

2023-05-16

测试环境:

  • 系统:Ubuntu18.04
  • Eigen 3.3.4 查看Eigen3版本的方法
  • Pangolin 0.6
  • OpenCV 3.4.14
  • ROS Melodic

一、 安装依赖


ORB-SLAM的各项依赖里OpenCV,Eigen,g20等都比较常规,直接下载源码编译安装就可以。需要注意的是Opencv版本别装太高。遇到的问题出在安装Pangolin。通过源码编译安装完成后,测试十四讲中高博的示例代码,编译可以通过,但在执行时会报错:error while loading shared libraries: libpangolin.so: cannot open shared object file: No such file or directory,大概就是没有链接上动态库,需要修改一个配置文件,告诉他去/usr/local/lib里搜索。参考https://blog.csdn.net/weixin_42226918/article/details/86158540

二、 编译源代码


Git clone或者下载压缩包解压以后,按照官网的教程,创建目录,执行./build.sh,这里面遇到的几个报错大致如下:

  1. /ORB_SLAM3/src/LocalMapping.cc:628:49: error: no match for ‘operator/’ (operand types are ‘cv::Matx<float, 3, 1>’ and ‘float’) x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3);
    解决方法是在localMapping.cc的628行,把x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3);换成
x3D = cv::Matx31f(x3D_h.get_minor<3,1>(0,0)(0) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(1) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(2) / x3D_h(3));
  1. recipe for target ‘CMakeFiles/ORB_SLAM3.dir/src/CameraModels/KannalaBrandt8.cpp.o’ failed
    在ORB_SLAM3-master/include/CameraModels/KannalaBrandt8.h ,#include "TwoViewReconstruction.h"这一行的后面,中添加如下代码:
namespace cv 
{ 
template<typename _Tp, int m, int n> static inline Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n>& a, float alpha) 
{
 return Matx<_Tp, m, n>(a, 1.f / alpha, Matx_ScaleOp()); 
} 
}

参考链接https://blog.csdn.net/weixin_48464886/article/details/118970304

三、执行./euroc_examples

这里的问题主要在g2o和DBoW2上,这个可以参考ORM SLAM2 GitHub上一个issues的回答
https://github.com/introlab/rtabmap/issues/287
在这里插入图片描述

大致就是我们在使用ORB-SLAM的时候,不能链接使用自己装在/usr/local的库,应该用ORB-SLAM3 Thirdparty的路径下内置的libg2o.so,所以可以把下面这句话加到~/.bashrc里去

export LD_LIBRARY_PATH=xxx/ORB_SLAM3/lib:xxx/ORB_SLAM3/Thirdparty/g2o/lib:xxx/ORB_SLAM2/Thirdparty/DBoW2/lib:$LD_LIBRARY_PATH

把其中的xxx换成自己的路径。之后就执行成功啦!
编译成功的截图:
在这里插入图片描述

四、运行单目demo


4.1 下载EuRoC数据集

泡泡机器人整理的SLAM常用数据集连https://blog.csdn.net/qq_36170626/article/details/94902166
zip格式就是官网推荐的ASL格式,下载以后把文件夹重命名为MH01,

4.2 测试

把MH01文件夹所在的文件夹的路径替换了/ORB_SLAM3/Examples/euroc_examples.sh的第二行的引号内。如果路径错了,会报错找不到图片。
之后cd/ORB_SLAM3/Examples,复制euroc_examples.sh的第二行的命令:

./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml /home/qyz/Dataset/EuRoc/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono

运行成功的截图
在这里插入图片描述

五、ROS运行单目demo##


参考链接
https://github.com/hxiaoxi/SLAM/blob/master/ROS%20%2B%20ORB_SLAM.md
https://www.jianshu.com/p/31c95d9a5f97
安装ROS Melodic,参见ROS官网:http://wiki.ros.org/melodic/Installation/Ubuntu
rosdep update报错,可以参考这个链接
https://zhuanlan.zhihu.com/p/392082731

5.1 创建ROS工作空间,初始化

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash

catkin_make后会自动生成build、devel、src文件夹,catkin_make可以看做是cmake和make的结合体。
为了不用每次启动一个新的终端都更新一下环境变量,可以执行下面的命令,把source命令加到~/.bashrc里

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

5.2 下载ORB-SLAM3的源码,编译

通过下载压缩包解压或者git clone的方式,把ORB-SLAM3的源码放到~/catkin_ws/src里,把文件夹重命名为ORB-SLAM3
在这里插入图片描述
之后就是像上面一样编译ORB-SLAM3的源码

cd ~/catkin_ws/src/ORB_SLAM3/
chmod +x build.sh
./build.sh

之后准备把ORB-SLAM编译成一个ROS功能包,先把 ROS 所在目录加入 ROS_PACKAGE_PATH 环境变量中,具体操作是把下面的命令添加到 ~/.bashrc 文件末尾,把 替换成自己的路径

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:<PATH>/ORB_SLAM3/Examples/ROS

之后source,然后执行编译,

chmod +x build_ros.sh
./build_ros.sh

这一步执行./build_ros.sh时我遇到了ImportError: No module named rospkg这个错误,后来在ROS ANSWERS上找到了合适的回答

The reason this error occurs is because Python packages in /opt are added to PYTHONPATH environment variable BUT for ones in /usr, path does not exist in PYTHONPATH variable. The python-rospkg gets installed in /usr by default. So you just need following line in .bashrc to fix this:
发生此错误的原因是 /opt 中的 Python 包已添加到 PYTHONPATH 环境变量中,但对于 /usr 中的 Python 包,PYTHONPATH 变量中不存在路径。 默认情况下,python-rospkg 安装在 /usr 中。 所以你只需要 .bashrc 中的以下行来解决这个问题:

所以只需要在~/ .bashrc 中添加以下行来解决这个问题:

export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages

然后再source,chmod,再运行build_ros.sh脚本,编译ROS节点成功

5.3 测试

数据集依然选用euroc,把一个bag文件放到/home/qyz/catkin_ws/src/ORB-SLAM3/Datasets目录下

在 ROS 模式下,需要从 rosbag 里面发布数据,因此要从上述数据网站上下载相应的 rosbag 数据包。
在运行时,一个关键的设置是将 slam node 接收的 ros topic 和 rosbag 发布的 ros topic 匹配起来,也就是收、发双方的 ros topic 名字必须相同.
topic 名字的转化既可以在运行 slam node 时设置,格式为

rosrun  <package_name>  <node_name>  original_topic:=new_topic

也可以在 play rosbag 的时候设置,格式为

rosbag play <bag_name> original_topic:=new_topic

可以用rosbag info xxx.bag查看一个bag文件包含的topic
在这里插入图片描述
由于我准备跑一个单目的demo,所以topic选/cma0或者/cam1应该都可以
第一步,启动一个终端,启动roscore

roscore

第二步,启动一个终端,运行ORB-SLAM3 package中的Mono节点,路径改成自己的

rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml 

Mono后需要跟两个参数,第一个是ORB vocabulary,第二个xxx.yaml需要填数据集的相机参数文件。下载的源码里Examples/Monocular/路径下有
第三步,启动一个终端,播放bag

rosbag play /home/qyz/catkin_ws/src/ORB_SLAM3/Datasets/a1.bag /cam0/image_raw:=/camera/image_raw

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04编译ORB-SLAM3及遇到的一些问题 的相关文章

  • rviz 选取点云数据

  • [USB波形分析] 全速USB波形数据分析(一)

    在之前的文章一次CAN波形分析之旅里 xff0c 根据示波器采集的波形数据 xff0c 详细地分析了CAN通信 今天来分析USB数据 xff0c 还是同样的流程 xff0c 但是这次使用matplotlib来协助分析 USB基本波形 USB
  • [USB波形分析] 全速USB波形数据分析(二)

    在上一篇文章全速USB波形数据分析 一 介绍了全速USB的数据包 Packet 的组成 xff0c 数据的类型等基本知识 这篇文章介绍USB的几种传输方式 事务 Transaction USB协议定义了三种不同的事务 Transation
  • STM32的PCROP代码保护功能

    软件供应商们在致力于开发属于自己的知识产权的软件产品 xff0c 尤其是那些中间件产品的同时 xff0c 如何保护这些知识产权 IP 实际上也是他们非常关心和重视的问题 基于各类微处理器的嵌入式产品对IP保护的要求也日益明显和迫切 为了满足
  • 人类高质量芯片工程师的那些“黑话”

    1 xff1a 计划 A xff1a 你们项目组芯片什么时间TO xff1f B xff1a 年底 A MPW B 直接FULL MASK A xff1a 有钱 B xff1a 芯片面积太大 xff0c 占了6个SEAT xff0c 况且年
  • Keil MDK各版本及pack包下载

    转自安富莱 MDK5 29 xff0c 5 30 xff0c 5 31 xff0c 5 32 xff0c 5 33 5 34 xff0c 5 35 5 36 5 37和各种pack软件包镜像下载 xff08 2022 05 04 xff09
  • g2o非线性优化架构详解图

    流程 xff1a 1 每次添加边的时候 xff0c 会对jacobian workspace更新size xff0c 最终size等于所有边中顶点相关顶点数量最多的顶点数 xff1b 这样做的原因是所有边求解雅克比矩阵 xff0c 用的是同
  • 利用协方差约束单个方向的g2o写法

    由于匹配结果有时候只约束单个方向 xff0c 比如法向 xff0c 因此需要考虑只约束部分方向的误差方程写法 xff0c 虽然可以使用自定义边 xff0c 但经过测试 xff0c 自定义欧式距离边加上位姿的求解通常不能收敛 xff0c 因此
  • 双目相机融合(五)

    预备中
  • 转贴:黑客高手必懂基础内容 (发在这里只为娱乐大家)

    转贴 xff1a 黑客高手必懂基础内容 发在这里只为娱乐大家 黑客高手必懂基础内容 一楼 xff1a DOS命令大全 二楼 xff1a TCP端口 作用 漏洞 操作详析 三楼 xff1a 开始 运行 命令 集锦 四楼 xff1a IPC 空
  • 大数据平台架构设计探究

    近年来 xff0c 随着IT技术与大数据 机器学习 算法方向的不断发展 xff0c 越来越多的企业都意识到了数据存在的价值 xff0c 将数据作为自身宝贵的资产进行管理 xff0c 利用大数据和机器学习能力去挖掘 识别 利用数据资产 如果缺
  • ros 解析激光点云的强度信息

  • 国外程序员整理的 C++ 资源大全

    转 xff1a http www csdn net article 2014 10 24 2822269 c 43 43 C 43 43 是在C语言的基础上开发的一种集面向对象编程 泛型编程和过程化编程于一体的编程语言 应用较为广泛 xff
  • Oracle、MySQL、SQL Server数据库的jdbc连接驱动配置

    Oracle MySQL SQL Server数据库的jdbc连接驱动配置 Oracle jdbc driver 61 oracle jdbc driver OracleDriver 或者 oracle jdbc OracleDriver
  • PID调参详解1

    PID调参详解1 xff08 比例环节 xff09 PID控制中有P I D三个参数 xff0c 只有明白这三个参数的含义和作用才能完成控制器PID参数调整 下面我们分别通过实例来分析比例微分积分三个环节对系统输出的影响 上式为PID控制器
  • NVIDIA NX刷机,配置深度学习环境

    买来的NVIDIA NX自带了一个sd卡和一个ssd卡 xff0c 刚开始按照sdkmanager去安装系统 xff0c 结果安装后发现装到了sd卡上 xff0c 后又根据视频教程在ssd上安装了系统 xff0c 最后配置了深度学习的环境
  • 串口调试助手VC源程序及详细编程过程

    串口调试助手VC源程序 及编程详细过程 作者 xff1a 龚建伟 可以任意转载 xff0c 注明作者和说明来自 龚建伟技术主页 目次 xff1a 1 建立项目 2 在项目中插入MSComm控件 3 利用ClassWizard定义CMSCom
  • linux 下 pytorch 安装

    我的显卡是gtx 730M 已经安装linux版本的驱动 xff0c 安装环境centos8 xff0c 内核版本Linux localhost localdomain 4 18 0 305 19 1 el8 4 x86 64 1 xff0
  • 章文嵩:怎样做开源才有意义?

    转至 xff1a http www infoq com cn interviews how to make open source meaningful utm campaign 61 infoq content amp utm sourc
  • seL4 构建和测试

    转载至 xff1a https source2014 hackpad com seL4 IJItb9IDncR 取得核心程式碼 預先設定好 Toolchain http sel4 systems Download DebianToolCha

随机推荐

  • [小技巧] ping 的时间间隔

    ping 可以选择间隔一段时间的间隔值 使用 i 命令 参考 xff1a 隔一秒钟ping一次 ping i 1 127 0 0 1 PING 127 0 0 1 127 0 0 1 56 84 bytes of data 64 bytes
  • [R语言] quantmod 包获取国内的股票数据

    2016 05 09追加 xff1a 对应的quantmod包相关说明参考 http www quantmod com quantmod 包默认是访问 yahoo finance 的数据 xff0c 其中包括上证和深证的股票数据 xff0c
  • 文件名日文乱码处理

    文件名出现日文乱码的话可以用如下命令解决 xff1a convmv r t utf 8 notest path to dir 另外 xff0c 压缩的 zip 解压时使用如下命令 xff1a unzip Ocp932 path to zip
  • can 总线介绍

    CAN xff0c 全称为 CONtroller Area Network xff0c 即控制器局域网 xff0c 是国际上应用最广泛的现场总线之一 最初 xff0c CAN被设计作为汽车环境中的微控制器通讯 xff0c 在车载各电子控制装
  • python 的 do ~ while 语法

    本文摘至 http ama ch hatenablog com entry 20080425 1209110237 Python不支持do while语法 while xff08 无限循环 xff09 和break组合起来替换 do whi
  • 802.11协议帧格式、Wi-Fi连接交互过程、无线破解入门研究

    本文转载至 xff1a http www cnblogs com littlehann p 3700357 html 目录 1 802 11标准简介 2 802 11协议格式 3 Wi Fi认证过程 4 802 11标准中的数据安全加密协议
  • Make 命令教程

    转载至 xff1a http www ruanyifeng com blog 2015 02 make html 作者 xff1a 阮一峰 日期 xff1a 2015年2月20日 代码变成可执行文件 xff0c 叫做编译 xff08 com
  • Python中用于计算对数的log()方法

    本文转载至 xff1a http www jb51 net article 66130 htm 这篇文章主要介绍了Python中用于计算对数的log 方法 是Python入门基础中的必会的方法 需要的朋友可以参考下 log 方法返回x的自然
  • RT-Thread创始人熊谱翔: 我和Linux、嵌入式实时操作系统RT-Thread

    本文转载至 xff1a http www rt thread org dynamic 78 html 接触 Linux 说起 Linux应该从我在校园时期说起 我是在山城 重庆邮电学院念的书 xff0c 1998年时宿舍伙伴一起凑的钱买的电
  • 到底什么是Unikernel?

    本文转载至 xff1a http dockone io article 855 utm source 61 tuicool amp utm medium 61 referral 编者的话 本文介绍了一种新的应用虚拟化技术 xff0c 它让应
  • xauth: “timeout in locking authority file /home/<user>/.Xauthority”?

    本文转载至 xff1a http unix stackexchange com questions 215558 why am i getting this message from xauth timeout in locking aut
  • 小技巧:检查你本地及公共 IP 地址

    本文转载至 xff1a https linux cn article 8207 1 html utm source 61 rss amp utm medium 61 rss 你本地的 IP 地址 xff1a 192 168 1 100 上面
  • Inside Real-Time Linux

    本文转载于 xff1a https www linux com news event elce 2017 2 inside real time linux Real time Linux has come a long way in the
  • [小技巧] vim中使用cscope时不区别大小写

    cscope 有 C 这么一个选项 C Ignore letter case when searching vim 里使用 cscope 不区别大小写可以使用下面一个技巧 xff1a set csprg 61 usr bin ra csco
  • PWM占空比和电机转速有什么线性关系

    可以看电机拖动一书 xff0c 里面讲了电机的建模 由于PWM波频率很高 xff0c 一般认为接在电机两端的电压平均值有如下关系 xff1a 假如占空比为a xff0c 驱动板供电电压为U xff0c 则电机两端电压Ud 61 a U 对于
  • SIFT特征点提取及描述论文算法详解

    SIFT特征点提取及描述论文算法详解 1 尺度空间极值检测 Scale space extrema detection 1 1 尺度空间和极值1 2 DoG和LoG的关系1 3 构建高斯尺度差分空间Tips 2 极值点定位 Keypoint
  • 国科大计算机视觉20-21考题

    国科大计算机视觉20 21考题 SIFT检测及描述流程 xff08 20分 xff09 相机成像模型 xff08 16分 xff09 两视图的稀疏重建 xff08 16分 xff09 LM算法流程 xff08 16分 xff09 PCA的思
  • Ubuntu18.04关闭内核自动更新安装之前版本

    Ubuntu18 04关闭内核自动更新安装之前版本 回退的原因 xff0c 上一周安装了Ubuntu18 04双系统 xff0c 主机型号是外星人 Asura R6 xff0c 安装完毕后可以正常进入Ubuntu xff0c 但是关机的时候
  • Windows10配置MongoDB

    Windows10安装MongoDB并配置 1 安装2 安装完成后启动服务器2 1 一次性启动2 2 设置为服务 xff0c 开机自启动 3 添加环境变量 xff0c 方便在cmd任何目录中直接启动 参考链接 xff1a https www
  • Ubuntu18.04编译ORB-SLAM3及遇到的一些问题

    测试环境 xff1a 系统 xff1a Ubuntu18 04Eigen 3 3 4 查看Eigen3版本的方法Pangolin 0 6OpenCV 3 4 14ROS Melodic 一 安装依赖 ORB SLAM的各项依赖里OpenCV