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

测试环境:

一、 安装依赖


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

在这里插入图片描述

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Ubuntu 18.04上安装ORB-SLAM3,您可以按照以下步骤进行操作: 1. 安装依赖项:ORB-SLAM3需要一些依赖项,包括Eigen、OpenCV、Pangolin和g2o。您可以使用以下命令安装它们: ``` sudo apt-get install libeigen3-dev libopencv-dev libpangolin-dev libglew-dev libboost-dev libboost-filesystem-dev libboost-serialization-dev libboost-system-dev libboost-thread-dev libg2o-dev ``` 2. 克隆ORB-SLAM3存储库:使用以下命令从GitHub上克隆ORB-SLAM3存储库: ``` git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 ``` 3. 编译ORB-SLAM3:进入ORB-SLAM3目录,使用以下命令编译ORB-SLAM3: ``` cd ORB_SLAM3 chmod +x build.sh ./build.sh ``` 4. 运行ORB-SLAM3:使用以下命令运行ORB-SLAM3: ``` ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /path/to/dataset/sequence/ ``` 其中,/path/to/dataset/sequence/是您要运行ORB-SLAM3的数据集路径。 希望这可以帮助您安装ORB-SLAM3。 ### 回答2: Orb-slam3是实时三维SLAM(Simultaneous Localization and Mapping)系统,可以同时进行环境三维建模和自主移动机器人的定位。如果你希望在ubuntu18.04上安装orb-slam3,你可以按照以下步骤进行操作: 1. 安装必要的软件依赖项 打开终端并输入以下命令: ``` sudo apt-get update sudo apt-get install git libglew-dev cmake libopencv-dev ``` 2. 克隆Orb-slam3代码 使用Git工具将Orb-slam3代码克隆到本地目录。在终端中输入以下命令: ``` cd ~ git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 ``` 此命令将Orb-slam3源代码克隆到~/ORB_SLAM3目录中。 3. 编译Orb-slam3代码 进入ORB_SLAM3目录,然后创建build目录并进入该目录: ``` cd ORB_SLAM3 mkdir build cd build ``` 现在,使用CMake编译Orb-slam3代码。在终端中输入以下命令: ``` cmake .. -DOpenCV_DIR=/usr/share/OpenCV/ make -j4 ``` 使用-DOpenCV_DIR标志指定OpenCV库的路径,其中/usr/share/OpenCV/是OpenCV库的默认路径。-j4选项表示使用4个核心并行编译。 4. 运行示例 一旦编译完成,您可以运行示例程序。首先,下载一个示例地图: ``` cd .. ./ORB_SLAM3 Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml Examples/Stereo/EuRoC_mono_left.mp4 ``` 上述命令将使用ORBvoc.txt词汇表对EuRoC/MH_01_easy地图进行三维重建。您可以尝试其他设置和选项,其中.yaml文件指定ORB-SLAM3的参数,.mp4是用于测试的视频文件。 这就是在ubuntu18.04上安装Orb-slam3的步骤。如果您遇到任何问题,请查看Orb-slam3的官方文档以获取更多信息。 ### 回答3: ORB-SLAM3是一个基于视觉的定位和地图构建系统,它能够使用单个RGB-D相机或单目摄像机进行定位和地图构建。在Ubuntu18.04系统上,ORB-SLAM3的安装可以分为以下几步。 1. 下载ORB-SLAM3 在终端中输入以下命令以下载ORB-SLAM3: ``` git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ``` 2. 安装必要的依赖项 安装ORB-SLAM3需要一些必要的依赖项,包括ROS和PCL。在终端中输入以下命令以安装这些依赖项: ``` sudo apt-get update sudo apt-get install ros-melodic-desktop-full sudo apt-get install libpcl-dev ``` 3. 编译ORB-SLAM3 在终端中输入以下命令以编译ORB-SLAM3: ``` cd ORB_SLAM3 chmod +x build.sh ./build.sh ``` 这将编译ORB-SLAM3和其依赖项。编译完成后,可以通过输入以下命令运行ORB-SLAM3: ``` ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml PATH_TO_DATASET_FOLDER ``` 其中,PATH_TO_DATASET_FOLDER需要替换为您的数据集的路径。 4. 调整相机参数 在运行ORB-SLAM3之前,需要根据摄像机的参数调整yaml文件中的相机参数。在ORB-SLAM3的Examples/Monocular文件夹中有一个名为TUM1.yaml的示例文件,您可以将其复制并进行更改以符合您的摄像机参数。 以上就是在Ubuntu18.04上安装ORB-SLAM3的步骤。有关ORB-SLAM3的更多详细信息,请参阅ORB-SLAM3的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值