Ubuntu ORBSLAM3安装及其配置,运行RGBD数据集,有对一些坑的解决方法

实验简介:

我是在虚拟机VMware上安装的,进行过多次的配置及安装,对于一些安装过程中的坑都有一些小心得相逢想给大家

参考文章:ORB-SLAM3配置及安装教程(2023.3)_orbslam3安装-CSDN博客

                  ORB-SLAM3配置安装及运行---Ubuntu20.04(2021年)-CSDN博客

            在Ubuntu上安装ORBSLAM3与运行RGBD-TUM数据集_orb-slam3运行rgbd数据集-CSDN博客

一.准备工作

1.安装 gcc 和 g++ 环境:

sudo apt-get install gcc
sudo apt-get install g++

测试c++:

touch test.cpp

打开文件并输入

#include <iostream>
using namespace std;
int main()
{
    cout << "HELLO WORLD!" << endl;
    return 0;
}

在“test.cpp”文件目录中打开终端并输入:

g++ test.cpp -o test.out

通过以上编译得到test.out文件以后,可以直接把这个文件拖到Terminal上,通过按回车键运行,可以得到结果:HELLO WORLD!    就是成功了。

2.有些电脑用终端下载源码时下不下来,我把网站给大家放在下面了

ORB-SLAM3

Pangolin

Eigen3

Opencv

点击Code然后download zip

3.安装git,vi编译器,cmake

sudo apt-get install git
sudo apt-get remove vim-common
sudo apt-get install vim
sudo apt-get install cmake
sudo apt-get install mlocate

二.安装Eigen3

1.安装源码

# github 
git clone https://github.com/eigenteam/eigen-git-mirror

如果下载不了

可以直接从网站下Eigen3

不要采用下面这个指令安装eigen3

sudo apt-get install libeigen3-dev

不然路径会报错

2.安装

cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install

路径为/usr/local/include/eigen3/

3.测试

新建新建test-Eigen.cpp

touch test-Eigen.cpp

将以下代码复制进去

  1. #include <Eigen/Dense>
  2. using namespace Eigen;
  3. using namespace Eigen::internal;
  4. using namespace Eigen::Architecture;
  5. using namespace std;
  6. int main()
  7. {
  8.     Vector4d test1;
  9.     test1<< 1,2,3,4;
  10.     cout<<"test=\n"<<test1<<endl;
  11.     cout<<"Test Success!"<<endl;
  12.     return 0;
  13. }

在终端打开:

g++ test-Eigen.cpp -o test-Eigen
./test-Eigen

4.遇到的坑以及解决

CMake Error at CMakeLists.txt:1 (project):

No CMAKE_CXX_COMPILER could be found.

解决方法:依次检查gcc -v g++ -v

看是否存在,不存在安装即可

三.安装Pangolin

1.安装源码

#github
git clone https://github.com/stevenlovegrove/Pangolin.git

如果下载不了

可以直接从网站下Pangolin

2.安装

安装依赖:

sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install cmake
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols

3.编译安装

cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .

4.测试Pangolin

cd build/examples/HelloPangolin
cmake .
make
./HelloPangolin

出现正方形就是成功了!

5.遇到的坑以及解决

CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):

Could NOT find epoxy (missing: epoxy_LIBRARIES epoxy_INCLUDE_DIRS)

解决方法:

sudo apt install libepoxy-dev

四.安装opencv

(如果要安装opencv_contrib可以去看这篇conrtrib)

注明:opencv我配过好几个版本(3.4.3,4.4,4.5.5)要按照之后要装的搭配安装不然要重装

1.安装源码

OpenCV自己找适应的版本就好

点击source就可以下载了

2.安装

安装依赖

unzip opencv-x.x.x.zip

(x.x.x用自己下载的版本即好)

  更新

sudo apt-get update

安装依赖

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev

 若是报错如下

error: unable to locate libjasper-dev    无法定位这个包libjasper-dev

 先试试这个

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

 若还是报错

error: unable to locate libjasper-dev  
error: unable to locate libjasper1

去找更新命令中发现有个仓库缺少数字签名

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32

将数字签名存储下来,再进行更新

sudo apt update
sudo apt install libjasper1 libjasper-dev

3.编译安装

cd opencv-x.x.x
mkdir build
cd build

cmake 

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

执行命令后会自动下载一个ippicv库

但我安装的好几次都没成功,需要离线下载一个ippicv库

ippicv

注意:需要将ippicv库单独拷贝下来放在文件夹下面

然后把你的OpenCV源文件中 /3rdparty/ippicv 文件夹下的 ippicv.cmake 

第47行"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" 改成你新下载的ippicv文件路径

我放的是opencv下面,所以我的路径是"file:///home/*****/opencv/ippicv"

(****指的是你的opencv的路径不知道的可以直接右键点击opencv文件夹查看属性可以看到复制黏贴即可)

再次进行编译cmake命令,就完成了编译

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

make 

make -j4
sudo make install

添加库路径

sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'

配置bash

sudo gedit /etc/bash.bashrc

在末尾粘贴如下两行代码

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH 

保存,执行如下命令使得配置生效

source /etc/bash.bashrc 

更新

sudo updatedb  

检测版本

pkg-config --modversion opencv

注意:OpenCV版本4以上的,默认不生成.pc文件,会出现找不到包的问题

4.遇到的坑以及解决

编译opencv时出现的错误

/home/changym/sources/opencv-4.4.0/modules/gapi/test/gapi_async_test.cpp:448:26: error: ‘sleep_for’ is not a member of ‘std::this_thread’

448 | std::this_thread::sleep_for(std::chrono::milliseconds{2});

| ^~~~~~~~~

解决: 在 gapi_async_tesr.cpp 中添加

#include <thread>

五.python

sudo apt install libpython2.7-dev

六.安装boost

1.安装源码

boost

点击对应版本后选择后缀为(.tar.gz)即可

解压:

tar -xzvf boost_x_xx_x.tar.gz

(xxx即为版本号)

执行这个脚本

sudo ./bootstrap.sh

再执行这个脚本

sudo ./b2 install

七.安装libssl-dev

sudo apt-get install libssl-dev

八.安装和编译ORB-SLAM3

1.安装源码

ORB-SLAM3

2.编译安装

进入文件夹ORB_SLAM3中

先将第20行的11改成14

若是OpenCV3.4.3的别忘了把OpenCV的版本也改下

​​​​​​​

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

若是内存不足可以一步一步安装

没有提示错误则安装成功

echo "Configuring and building Thirdparty/DBoW2 ..."
 
cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
 
cd ../../g2o
 
echo "Configuring and building Thirdparty/g2o ..."
 
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
 
cd ../../../
 
echo "Uncompress vocabulary ..."
 
cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
 
 
echo "Configuring and building ORB_SLAM3 ..."
 
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cd ..
make -j

3.遇到的坑以及解决

编译slam3时

#include <pangolin/pangolin.h>这句话报错

解决:

回到Pangolin文件夹的build文件夹下打开中终端然后执行

sudo make install

若是出现

make[2]: *** [CMakeFiles/ORB_SLAM3.dir/build.make:89:CMakeFiles/ORB_SLAM3.dir/src/LocalMapping.cc.o] 错误 1
 
make[2]: *** [CMakeFiles/ORB_SLAM3.dir/build.make:349:CMakeFiles/ORB_SLAM3.dir/src/CameraModels/KannalaBrandt8.cpp.o] 错误 1

在KannalaBrandt8.cpp,LocalMapping.cc

在include之后加上如下代码

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());
}
}

参考文章:ORB-SLAM3配置安装及运行---Ubuntu20.04(2021年)-CSDN博客

若是不行可以尝试删除build文件夹重新构建

九.数据集

我刚开始用的是mho1(mono_euroc)没成功后来经老师提点换了rgbd

RGBD-TUM数据集

https://vision.in.tum.de/data/datasets/rgbd-dataset/download(这几天网站服务器好像有问题打不开,前几天我还打得开,大家可以过段时间看看)

解压缩到ORBSLAM3文件夹中,以rgbd_dataset_freiburg1_desk为例

1.新建associate.py文件

touch associate.py

它从rgb.txt文件和 depth.txt 文件中读取时间戳,并通过查找最佳匹配来连接它们。

直接黏贴:

import argparse
import sys
import os
import numpy
 
 
def read_file_list(filename):
    """
    Reads a trajectory from a text file. 
    
    File format:
    The file format is "stamp d1 d2 d3 ...", where stamp denotes the time stamp (to be matched)
    and "d1 d2 d3.." is arbitary data (e.g., a 3D position and 3D orientation) associated to this timestamp. 
    
    Input:
    filename -- File name
    
    Output:
    dict -- dictionary of (stamp,data) tuples
    
    """
    file = open(filename)
    data = file.read()
    lines = data.replace(","," ").replace("\t"," ").split("\n")
    #if remove_bounds:
    #    lines = lines[100:-100]
    list = [[v.strip() for v in line.split(" ") if v.strip()!=""] for line in lines if len(line)>0 and line[0]!="#"]
    list = [(float(l[0]),l[1:]) for l in list if len(l)>1]
    return dict(list)
 
def associate(first_list, second_list,offset,max_difference):
    """
    Associate two dictionaries of (stamp,data). As the time stamps never match exactly, we aim 
    to find the closest match for every input tuple.
    
    Input:
    first_list -- first dictionary of (stamp,data) tuples
    second_list -- second dictionary of (stamp,data) tuples
    offset -- time offset between both dictionaries (e.g., to model the delay between the sensors)
    max_difference -- search radius for candidate generation
    Output:
    matches -- list of matched tuples ((stamp1,data1),(stamp2,data2))
    
    """
    first_keys = list(first_list.keys())
    second_keys = list(second_list.keys())
    potential_matches = [(abs(a - (b + offset)), a, b) 
                         for a in first_keys 
                         for b in second_keys 
                         if abs(a - (b + offset)) < max_difference]
    potential_matches.sort()
    matches = []
    for diff, a, b in potential_matches:
        if a in first_keys and b in second_keys:
            first_keys.remove(a)
            second_keys.remove(b)
            matches.append((a, b))
    
    matches.sort()
    return matches
 
if __name__ == '__main__':
    
    # parse command line
    parser = argparse.ArgumentParser(description='''
    This script takes two data files with timestamps and associates them   
    ''')
    parser.add_argument('first_file', help='first text file (format: timestamp data)')
    parser.add_argument('second_file', help='second text file (format: timestamp data)')
    parser.add_argument('--first_only', help='only output associated lines from first file', action='store_true')
    parser.add_argument('--offset', help='time offset added to the timestamps of the second file (default: 0.0)',default=0.0)
    parser.add_argument('--max_difference', help='maximally allowed time difference for matching entries (default: 0.02)',default=0.02)
    args = parser.parse_args()
 
    first_list = read_file_list(args.first_file)
    second_list = read_file_list(args.second_file)
 
    matches = associate(first_list, second_list,float(args.offset),float(args.max_difference))    
 
    if args.first_only:
        for a,b in matches:
            print("%f %s"%(a," ".join(first_list[a])))
    else:
        for a,b in matches:
            print("%f %s %f %s"%(a," ".join(first_list[a]),b-float(args.offset)," ".join(second_list[b])))
            
        

在ORBSLAM3文件夹中打开终端运行:

python3 ./Examples/RGB-D/associate.py ./rgbd_dataset_freiburg1_desk/rgb.txt ./rgbd_dataset_freiburg1_desk/depth.txt >./rgbd_dataset_freiburg1_desk/associations.txt

得到associations.txt

十.运行ORB-SLAM3

在ORBSLAM3中打开终端:

./Examples/RGB-D/rgbd_tum ./Vocabulary/ORBvoc.txt ./Examples/RGB-D/TUM1.yaml ./rgbd_dataset_freiburg1_desk ./rgbd_dataset_freiburg1_desk/associations.txt

若是出现段错误或者已终止请检查命令,其他博主的命令和我的不是很一样请仔细检查

若是没有区别,可以试试多运行几次可能就会好

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在ORB-SLAM3中运行RGBD IMU模式,您需要进行以下步骤: 1. 首先,您需要将ORB-SLAM3安装到您的系统上。您可以按照引用中提到的文章中的说明进行配置安装。请确保您的系统已正确配置ORB-SLAM3的运行环境。 2. 在ORB-SLAM3中,RGBD IMU模式是通过添加RGBD-inertial模式和其对应的ROS接口实现的。引用中提到了这个新特性。您可以根据ORB-SLAM3的官方文档或示例代码来了解如何使用RGBD IMU模式。 3. 在ORB-SLAM3中,有两种ROS接口可供使用:Mono_inertial和Stereo_inertial。您可以根据您的实际需求选择其中之一。这些接口可以帮助您在ROS环境中使用ORB-SLAM3的RGBD IMU模式。 4. 在使用ORB-SLAM3的RGBD IMU模式之前,您可能需要确保您的系统有正确的IMU数据来源。这可能涉及到硬件设备的连接和配置,以及相关驱动程序的安装。 总之,要在ORB-SLAM3中运行RGBD IMU模式,您需要正确安装ORB-SLAM3、配置相关运行环境,并根据官方文档或示例代码了解如何使用RGBD-inertial模式和对应的ROS接口。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Ubuntu 18.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM2+SLAM相关库的安装](https://blog.csdn.net/zardforever123/article/details/127138151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [RGBD惯性模式及其ROS接口已添加到ORB_SLAM3。-C/C++开发](https://download.csdn.net/download/weixin_42134143/19108628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值