Ubuntu 18.04上跑通LSD SLAM

简介

LSD SLAM是经典的使用直接法的单目SLAM框架。我打算学习一下它的源码,因此想把代码弄下来跑一下效果,但这过程也折腾了不少时间,需要记录一下。而且网上很少在ubuntu 18.04上跑的,源代码是在12.04 和 14.04上,不少大佬改成了16.04,我参考了不少博客,终于在我的18.04的环境上跑通了。

准备工作

1. ROS-melodic安装

可以参考我的记录link

2. OpenCV(>3.0)安装

这里说两种情况:第一种是电脑本来就没有opencv,那么去官网下载源码,通过cmake安装(重点,下面说),网上很多教程。第二种是,你已经安装好了opencv,这个时候开始说要注意的重点。LSD SLAM需要的opencv是使用GTK而不是用QT的,所以一开始cmake的时候,需要把GTK打开而关闭QT。所以如果是第一次安装opencv,需要注意cmake的配置,如果已经安装了的话,需要重新配置cmake重新编译opencv。过程如下:

# 假如你的opencv源码在 ~/opencv/ 
$ cd ~/opencv/build
$ sudo make uninstall	# 卸载opencv
$ make clean
$ cmake-gui		#打开gui版的cmake

在这里插入图片描述

在这里插入图片描述

# 编译并重新安装
make -j4
sudo make install

3. Eigen 3.2.5 安装

同样分两种情况,如果没有安装过eigen,那么直接安装Eigen 3.2.5,一定按照这个版本,太高会有问题。而如果已经安装过,但是版本不同,建议是可以先跳过看看能不能把代码跑起来,如果在运行时报内存错误,那么把原来的卸载了,安装这个版本。

  • 查看eigen版本的方法是:
# 看前面几行有版本信息
$ sudo cat /usr/include/eigen3/Eigen/src/Core/util/Macros.h
  • 卸载eigen的办法是:
# 找到所有包含eigen的路径
$ sudo updatedb
$ locate eigen3
$ sudo rm <上面locate打印出来的路径>
  • 重新安装:
# 把安装包解压并改名为eigen3
$ sudo mv eigen3 /usr/include/

4. 下载依赖

$ sudo apt-get install ros-melodic-libg2o ros-melodic-cv-bridge liblapack-dev libblas-dev freeglut3-dev libsuitesparse-dev libx11-dev
$ sudo apt install libqglviewer-dev-qt4
$ cd /usr/lib/x86_64-linux-gnu
$ sudo ln -s libQGLViewer-qt4.so libQGLViewer.so

编译源码

$ mkdir -p ~/ros_lsd/src
$ cd ~/ros_lsd/src
$ git clone https://github.com/Rick0514/Ubuntu18.04-LSD-SLAM.git lsd_slam
$ cd ../
$ catkin_make

测试

Test1

下载LSD_room.bag并解压。

# 打开终端1
$ roscore

# 打开终端2
$ source ./devel/setup.bash
$ rosrun lsd_slam_viewer viewer

# 打开终端3
$ source ./devel/setup.bash
$ rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info

# 打开终端4
$ rosbag play ~/LSD_room.bag

在这里插入图片描述

Test2

下载图片数据集fr1/xyz并解压。

# 假设数据集放在 ~/dataset/
# 数据集解压后改名为fr1 --> ~/dataset/fr1
$ cd ~/dataset/fr1
$ touch calib.cfg	# 添加相机参数文件
$ gedit calib.cfg

复制以下参数:

0.820315 1.09375 0.49921875 0.498958333 0
640 480
none
640 480

# 打开终端1
$ roscore

# 打开终端2
$ source ./devel/setup.bash
$ rosrun lsd_slam_viewer viewer

# 打开终端3
$ source ./devel/setup.bash
$ rosrun lsd_slam_core dataset _files:=~/dataset/fr1/rgb _hz:=30 _calib:=~/dataset/fr1/calib.cfg

程序执行可能会报如下错误:

OpenCV Error: Assertion failed (tlsSlots.size() > slotIdx) in releaseSlot, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp, line 1092 terminate called after throwing an instance of ‘cv::Exception’ what(): /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp:1092: error: (-215) tlsSlots.size() > slotIdx in function releaseSlot

如果OpenCV版本不是3.2.0的话,就会报错。因为ros-melodic默认安装了这个版本的opencv,两个版本的冲突会造成错误,而错误是由库cv_bridge引起的。修改方法参考一下两个链接:

在这里插入图片描述

  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值