Ubuntu 18.04上跑通LSD SLAM

Ubuntu 18.04上跑通LSD SLAM

    • 简介
    • 准备工作
      • 1. ROS-melodic安装
      • 2. OpenCV(>3.0)安装
      • 3. Eigen 3.2.5 安装
      • 4. 下载依赖
    • 编译源码
    • 测试
      • Test1
      • Test2

简介

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

  • 源码链接:https://github.com/tum-vision/lsd_slam
  • 参考链接(据说可以在16.04上直接跑通,但没亲自试过):https://github.com/YaoZhiwen/lsd_slam_catkin_16.04
  • 我的链接:https://github.com/Rick0514/Ubuntu18.04-LSD-SLAM

准备工作

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

Ubuntu 18.04上跑通LSD SLAM_第1张图片

Ubuntu 18.04上跑通LSD SLAM_第2张图片

# 编译并重新安装
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引起的。修改方法参考一下两个链接:

  • https://www.cnblogs.com/pine-apple/p/14545448.html
  • https://blog.csdn.net/bigdog_1027/article/details/79092263

Ubuntu 18.04上跑通LSD SLAM_第3张图片

你可能感兴趣的:(slam,slam)