Ubuntu18.04/20.04编译orbslam3(ros)时遇见的问题

目录

问题1:修改bulid.sh文件

问题2:安装eigen3-3.3.7

问题3:sophus在make时出现错误

问题4:缺少reslsense2Config.cmake realsense2-config.cmake

问题5:安装PCL-1.13.0

>问题6:E: 无法定位软件包

>问题7:dpkg: 警告: 无法找到软件包 libeigen3-dev 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

问题8:运行数据集前修改 *.launch 文件

问题9:rosbag 文件

>>问题10:ModuleNotFoundError: No module named 'numpy'

问题11:虚拟机根目录空间不足

问题12:打开rviz界面以后,没有图片输入(no image)

参考资料


本文内容基于Ubuntu18.04 搭建ros环境继续搭建,遇到的一些问题及解决办法。

所用源码:

git clone https://github.com/lturing/ORB_SLAM3_ROS.git
cd ORB_SLAM3_ROS
chmod +x ./build.sh 
./build.sh 

# 数据集下载
# https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download

# 运行单目
# 适当修改 launch/orb_slam_mono.launch
chmod +x ./run_mono.sh
./run_mono.sh 

# 运行rgbd稠密建图
# 适当修改 launch/orb_slam_rgbd_mapping.launch
chmod +x ./run_rgbd_mapping.sh 
./run_rgbd_mapping.sh 

问题1:修改bulid.sh文件

新的 bulid.sh 文件和以前的不太一样,直接运行可能会有 error

解决办法:修改一下build.sh文件里部分语句,比如把 make -jn 改成适配自己电脑的进程,把删除语句注释掉(建议先总体运行一遍,如果卡住了就从卡住的地方一句一句运行)

问题2:安装eigen3-3.3.7

原因:eigen3版本不符合,用命令直接安装的是3.3.4,编译要求的是3.3.7

解决办法:安装3.3.7版本的eigen3

# 查询安装路径
sudo updatedb  
locate eigen3  

下载3.3.7版本:下载页面

# 解压
sudo tar -xzvf eigen-3.3.7.tar.gz 

# 安装
cd eigen-3.3.7
sudo mkdir build
cd build
sudo cmake ..
sudo make install

# 移动头文件
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 

问题3:sophus在make时出现错误

解决办法:安装fmt后再重新安装Sophus

下载新版 fmt-9.1.0 并解压

cd fmt-9.1.0
mkdir build
cd build
cmake ..
make
sudo make install

安装Sophus(因为github下载速度太慢了,换一个快的地址)

注意安装路径在 ORB_SLAM3_ROS/Thirdparty 下,和原 Sophus 文件同路径

git clone https://gitee.com/kxuehen/Sophus
cd Sophus
mkdir build
cd build
cmake ..
make
sudo make install

然后在重新下载完成的 Sophus 里进行 make 编译

问题4:缺少reslsense2Config.cmake realsense2-config.cmake

解决办法:

在 /ORB_SLAM3/build 目录下编译

sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo bionic main" -u
# sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev

问题5:安装PCL-1.13.0

原因:PCL版本太低,要求1.13.0版本

解决办法:重新安装对应的版本

# 依赖项
sudo apt-get update 
sudo apt-get install cmake cmake-gui 
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common 
sudo apt-get install libqhull* libgtest-dev 
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install git build-essential linux-libc-dev
#sudo apt-get install libflann1.8 libflann-dev 
#sudo apt-get install libvtk6-dev
#sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre

>问题6:E: 无法定位软件包

原因:之前安装ros的时候换了清华源,导致内部文件连接断了

解决办法:

# 备份
cd /etc/apt/                          
sudo cp sources.list sources.list.old 

# 查看
ls

 出现 sources.list.old 表示备份成功

# 安装vim编译器(安装过了可无视)
sudo apt-get install vim

# 打开源文件
sudo vim sources.list 

会弹出很多内容,移动到文字末尾,把地址全部替换成镜像源,然后将上面别的地址全部注释掉

# 清华镜像源

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse

 然后 esc 退出编辑,输入 :wq + enter 保存退出,更新

sudo apt-get update

换源结束

(接问题5)

下载页面

 

 友情建议,不要在 releases 界面下载 source 文件,不然你可能会遇见 无法下载-没有授权 ,要么就是 cmake 的时候丢文件(痛苦.jpg

下载成功后移到所需路径,解压并进入

cd pcl-pcl-1.13.0
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_GPU=ON-DBUILD_apps=ON -DBUILD_examples=ON \ -DCMAKE_INSTALL_PREFIX=/usr ..
make 
sudo make install

# 最新版本源码下载
#git clone https://github.com/PointCloudLibrary/pcl.git

>问题7:dpkg: 警告: 无法找到软件包 libeigen3-dev 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

解决办法:

重装软件包

sudo apt install --reinstall libeigen3-dev

以上全部编译完成,接下来就是运行了 

问题8:运行数据集前修改 *.launch 文件

解决办法:

以单目为例

打开 ORB_SLAM3_ROS/launch/orb_slan_mono.launch

改一下数据包名字和路径

问题9:rosbag 文件

解决办法:

数据集

直接下载就完事了,我还找了各种办法……

以下方法废弃!!!

用orb_slam3运行数据集

配置 associate.py 文件 下载页面

或者直接复制下面的文本,自己创建一个 associate.py 放到 ORB_SLAM3/Examples/RGB-D 内

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])))

在 ORB_SLAM3 文件下运行

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

>>问题10:ModuleNotFoundError: No module named 'numpy'

 解决办法:

sudo apt install python3-numpy

(接问题9)

在 ./dataset/rgbd_dataset_freiburg2_large_with_loop 内得到了associate.txt 文件

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM2.yaml dataset/rgbd_dataset_freiburg2_large_with_loop dataset/rgbd_dataset_freiburg2_large_with_loop/associations.txt

成功运行!

# 创建ROS工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make

此种解决办法未完结(但是我不想搞了)

问题11:虚拟机根目录空间不足

在copy了 bag 文件后,虚拟机根目录空间不足,无法解压

解决办法:通常虚拟机的虚拟分配空间和实际分配空间都不符合,所以需要给根目录扩容

先扩充虚拟分配空间的容量,以Vbox为例

在关闭虚拟机的情况下,打开管理器界面选择 管理→工具→虚拟介质管理,选择需要扩容的虚拟机,将内存调高

查询一下内存情况

df -h

 此时实际分配空间还是没有变化,需要将虚拟分配变为实际分配

# 安装 gparted 命令
sudo apt install gparted

sudo gparted

打开如下界面,然后对着未分配的空间右键 点击新建

新分区的参数可以修改也可以默认,然后选择添加

新分区就创建好了,没问题的话点击上面的对号

弹出页面选择应用,分配成功后关闭,刚才分配的新空间 sda3 也能看到了

然后将新分配的空间 sda3 挂到用户下面,记住 sda3 的UUID

sudo blkid

# 创建挂载点
mkdir newdisk

# 查看挂载信息
sudo gedit /etc/fstab

在文件的最下面添加新信息,注意修改路径和UUID(复制过来要删掉引号)

#ext4    /dev/sda3    /home/su/newdisk
UUID=26972326-90a3-42e5-b8ee-6a118633c8d3    /home/su/newdisk    ext4    defaults    0    0

 保存关闭,然后进行挂载

sudo mount -a

最后查询一下,发现已经有 sda3 空间了

然后调整挂载文件的权限,注意修改权限的这两句命令最好手动输入,如果copy过去可能会出现缺少操作数的情况

# 重启服务器
reboot
# 修改权限
cd /home/su
sudo chown -R su /home/su/newdisk
sudo chmod 777 /home/su/newdisk

至此权限修改完毕

然后直接把dataset文件移过来,顺便注意把之前的launch文件里路径修改一下

问题12:打开rviz界面以后,没有图片输入(no image)

解决办法: 

第一个终端

roscore

第二个终端,注意播放成功后摁空格暂停

# 环境配置
source ~/newdisk/ORB_SLAM3_ROS/build/devel/setup.bash
# 播放bag                                    
rosbag play ./dataset/rgbd_dataset_freiburg1_xyz.bag 

第三个终端,打开rviz

chmod +x ./run_mono.sh
./run_mono.sh

还是 no image,然后调整 image topic 的路径,调成和 bag 一致的


点最底下的暂停键(pause),这时候播放了就有图像了

问题13:一切正常,但是跑程序时没有建模

# 查询rosbag

rosbag info name.bag

未完结,之后继续写

参考资料

ORB_SLAM3_ROS

Ubuntu更新Eigen版本

#mkdir无法创建目录权限不够*

sophus库make编译不通过

slambook2下载的第三方库“slambook2/3rdparty/Sophus”为何是空的以及解决办法

【PCL点云库】Ubuntu20.04下从源码 安装/卸载 指定版本的PCL点云库

Jetson安装ORB_SLAM3(一)

Ubuntu16.04下PCL库的安装与测试

Linux 进入root管理员权限

Linux找不到yum命令,没有已启用的仓库

dpkg: 警告: 无法找到软件包 xxx 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里

Linux当中解决apt-get install E: 无法定位软件包问题(附上详细步骤以及注释)

清华大学开源软件镜像站 

解决Linux下 “正在读取软件包列表... 完成 ....E:无法定位软件包 xx-xx-xxx” 问题

linux系统中如何退出vim编辑模式

PCL点云库】Ubuntu20.04下从源码 安装/卸载 指定版本的PCL点云库

在Ubuntu上安装ORBSLAM3与运行RGBD-TUM数据集

VSLAM框架:ORB_SLAM2采用ROS Bag获取数据

Linux下VBOX扩展虚拟机磁盘空间及扩展根目录空间

vbox ubuntu虚拟机扩容方案 虚拟分配空间转换为实际分配空间

ubuntu挂载硬盘【解决硬盘不可读写操作】

chown: "oracle:oinstall /opt/oracle/app" 后缺少操作数

VINS-Mono Rviz测试,详细而正确

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值