Ubuntu 18.04 + DSO-slam配置、运行数据集、摄像头实时运行

该文章已生成可运行项目,

一、写在前面

前段时间老师布置了课程任务,让全班同学分组配置和运行slam,我们组选择的是DSO-slam。由于选择的时候并没有对slam并没有什么了解,只有老师上课时一些科普性质的讲解,所以相当于是从0开始。

这一周一直用空闲时间配置环境、运行,和同学一起踩了各种各样的坑。这里把我自己成功运行的配置过程、遇到的一些问题记录下来。里面有我和同学在网上查阅的很多东西,包括配置方法、源码等等。非常感谢提供了这么多资料的前辈们,如果有侵权内容,请联系我删除;如果我这里有什么不当之处,也希望大家指出。

二、系统配置

使用虚拟机安装的Ubuntu 18.04系统,主机为win10。

三、安装DSO并运行数据集

1.克隆源码包:
git clone https://github.com/JakobEngel/dso.git
2.安装所需依赖:
(1)suitesparse和eigen3
sudo apt-get install libsuitesparse-dev libeigen3-dev libboost-all-dev
(2)openCV
sudo apt-get install libopencv-dev
(3)Pangolin
cd ~
git clone --recursive https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin 
mkdir build
cd build
cmake -DCPP11_NO_BOOST=1 ..
build git:(master)   make -j
(4)ziplib
sudo apt-get install zlib1g-dev
cd dso/thirdparty
tar -zxvf libzip-1.1.1.tar.gz
cd libzip-1.1.1/
./configure
make
sudo make install
sudo cp lib/zipconf.h /usr/local/include/zipconf.h   # (no idea why that is needed).
3.编译
cd dso
mkdir build
cd build
cmake ..
make -j4
4.运行数据集

首先下载可用的数据集并解压:https://vision.in.tum.de/data/datasets/mono-dataset?redirect=1

进入build目录,执行

bin/dso_dataset files=XXXXX/sequence_XX/images.zip calib=XXXXX/sequence_XX/camera.txt gamma=XXXXX/sequence_XX/pcalib.txt vignette=XXXXX/sequence_XX/vignette.png preset=0 mode=1

XXXXX是存放数据集的目录,XX是下载数据集的编号。

如果要运行自己的数据集,需要将录制的视频提取为图片,并命名为六位数字(如000001.jpg),然后执行

bin/dso_dataset files=XXXXX/images.zip calib=XXXXX/camera.txt mode=1

其中,images.zip为存放图片的压缩包,camera.txt为相机标定文件。

5.可能遇到的问题:

我在这里主要遇到了以下两个问题:

(1)编译时执行camke,提示找不到Pangolin

在已经安装Pangolin的情况下,依然提示找不到Pangolin,在执行cmake前将build文件夹下的cmakecache删除即可。
在这里插入图片描述

(2)编译时执行make,提示‘decay_t’不是std库的成员等

请添加图片描述
可能是由于新版本的Pangolin有问题,于是在网上找到了旧版本的Pangolin:

旧版本Pangolin下载地址:https://github.com/zzx2GH/Pangolin

在以上的地址中将代码打包下载,其他步骤不变。(注意,不要直接在终端执行以上网站中的git clone https://github.com/stevenlovegrove/Pangolin.git,这个依然是新版本)

四、安装DSO-ROS,使用电脑摄像头实时运行

1.dso_ros安装编译
cd ~
mkdir catkin_ws
cd catkin_ws
mkdir src
cd src
src git clone https://github.com/BlueWhaleRobot/dso_ros.git 
cd ..
export DSO_PATH=xxx/dso  (存放dso的路径)
catkin_make
2.usb_cam安装编译
cd ~/catkin_ws/src
src git clone https://github.com/bosch-ros-pkg/usb_cam.git 
cd ..
catkin_make
source ~/catkin_ws/devel/setup.bash
3.运行摄像头

首先将电脑的摄像头连接到虚拟机:如下图所示:
请添加图片描述
运行ros,在第一个终端中运行:

roscore

运行camera,在第二个终端中运行:

roslaunch usb_cam usb_cam-test.launch

请添加图片描述
运行dso_ros,在第三个终端中运行:

rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=相机参数文件所在路径/camera.txt mode=1

camera.txt文件是相机标定文件,相机标定的具体方法可以见这篇文章https://blog.youkuaiyun.com/learning_tortosie/article/details/79901255。这里我没有对笔记本摄像头进行标定,使用了网上下载代码时附带的一份标定文件,能看到运行时图片有比较明显的畸变。
请添加图片描述

4.遇到的问题
(1)安装库时提示无法解决依赖问题

使用aptitude代替apt-get安装,aptitude可以更好地解决库的依赖问题:

sudo aptitude install prime-indicator

但是在我安装时,对于boost库的依赖依然无法解决。查看报错信息发现,是由于期待的boost版本是1.54,而我的库版本是1.65,即版本过高。需要手动卸载原来的boost,并下载安装1.54版本。

(2)catkin_make时找不到util/setting.h

在安装usb_cam中,需要执行一次cmake,这里有可能提示在dso_ros的源文件中,找不到util/setting.h的位置。为什么第一次执行catkin_make没有问题,现在就有问题了呢?我于是新建工作区,下载编译dso_ros后,替换原来的文件,问题解决。也就是说,需要将dso_ros和usb_cam分别编译。

五、使用Android手机摄像头实时运行

在局域网下,使用手机摄像头和Ubuntu系统连接,对手机拍摄到的场景实时重建。

关于手机摄像头和电脑的局域网连接,参考了这篇文章:https://www.cnblogs.com/haijian/p/12044662.html (作者:HaijianYang)

1.安装APP

首先需要在手机上安装RTSPserver,可以进入下面的网址下载,下载解压后,在bin文件夹下找到apk文件,在手机上安装即可。

RTSPserver下载地址: https://github.com/XellossSei/RTSP.Server.Android

2.安装rocon_devices_kinetic

APP完成安装后,需要在Ubuntu系统进行配置。在网上找到了一份免费的源码,下载地址贴在这里了:

rocon_devices_kinetic源码下载链接:https://pan.baidu.com/s/1opt_01-is3ZYuesThnEbFA
提取码:f4g2

在catkin_ws/src文件夹下解压后,进行编译和安装:

cd ~\catkin_ws
catkin_make
source catkin_make/devel/setup.bash

接着就可以与手机进行连接了:

首先将手机和计算机至于同一局域网,打开APP,点击左侧最下方的按键开启连接,可以看到手机的IP地址,这里是192.168.137.179。
请添加图片描述
然后在终端输入如下的语句:(用手机的IP替换xxx)

export ROCON_RTSP_CAMERA_RELAY_URL=rtsp://×××:5540/ch0
roslaunch rocon_rtsp_camera_relay rtsp_camera_relay.launch

至此,相机已经连通并运行了。在另一个终端输入如下的语句,就可以在自己的电脑上查看手机相机拍摄到的场景了:

rosrun image_view image_view image:=/rtsp_camera_relay/image

请添加图片描述

3.使用手机摄像头实时运行DSO

使用手机摄像头运行DSO的方法和使用电脑摄像头类似。

运行ros,在第一个终端中运行:

roscore

运行camera,在第二个终端中运行:

export ROCON_RTSP_CAMERA_RELAY_URL=rtsp://×××:5540/ch0
roslaunch rocon_rtsp_camera_relay rtsp_camera_relay.launch

在第三个终端中运行:

rosrun image_view image_view image:=/rtsp_camera_relay/image

运行dso_ros,在第四个终端中运行:

rosrun dso_ros dso_live image:=/rtsp_camera_relay/image calib=xxx/camera.txt mode=1

运行结果如下:
请添加图片描述

4.遇到的问题
(1)相机与电脑的局域网连接

这里需要注意的是,一定要在手机APP开始运行后再启动终端;在运行过程中,可能会突然断开连接,手机APP不再显示IP地址,则需要退出终端,在APP重新开启相机后再启动终端。

关于虚拟机与手机置于同一局域网下,网上查阅了很多资料,需要对虚拟机的网络配置进行修改。我使用了一种比较简单的方法:在电脑上开启热点,使用手机连接该热点,虚拟机网络使用NAT模式,此时二者为同一局域网下。

(2)运行至START PANGOLIN后卡住

请添加图片描述
如上图所示,启动dso_ros后,提示无法打开PhotometricUndistorter文件,运行至START PANGOLIN卡住。

注意这里输入的语句中的“image:/”段,与运行电脑摄像头的时候是不同的:

rosrun dso_ros dso_live image:=/rtsp_camera_relay/image calib=xxx/camera.txt mode=1

“image:=xxx”后面填写的部分,是相机运行的终端的名称,也就是第三个终端中输入的"iamge:/"字段。注意下图中窗口的名称和终端的输入:
请添加图片描述

附:

在Ubuntu下使用ros保存图像的方法

https://blog.youkuaiyun.com/listen_to_star/article/details/98972581

本文章已经生成可运行项目
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值