Ubuntu16.04安装LSD-SLAM

Ubuntu16.04安装LSD-SLAM的过程、注意事项以及可能出现的错误:


LSD-SLAM官网:https://vision.in.tum.de/research/vslam/lsdslam

LSD-SLAM Github:https://github.com/tum-vision/lsd_slam


安装LSD-SLAM之前,必须先安装ROS kinetic,可以参考:点击打开链接


1. 安装LSD-SLAM
1.1 创建rosbuild工作空间:

sudo apt-get install python-rosinstall
mkdir ~/rosbuild_ws
cd ~/rosbuild_ws
rosws init . /opt/ros/kinetic
mkdir package_dir
rosws set ~/rosbuild_ws/package_dir -t .
echo "source ~/rosbuild_ws/setup.bash" >> ~/.bashrc
bash
cd package_dir

1.2 安装依赖

sudo apt-get install ros-kinetic-libg2o ros-kinetic-cv-bridge liblapack-dev libblas-dev freeglut3-dev libqglviewer-dev libsuitesparse-dev libx11-dev

注:不要安装上述依赖中的libqglviewer-dev,否则,在运行LSD-SLAM时会出现realloc(): invalid pointer错误。

请参考下面的问题2.1安装libqglviewer-dev-qt4,并创建相关链接。


1.3 获取LSD-SLAM

git clone https://github.com/tum-vision/lsd_slam.git lsd_slam

1.4 编译

rosmake lsd_slam
注:编译过程中会出现一些错误,请参考下面的问题2.2-2.4对源代码进行修改之后再进行编译;或者再编译过程中出现错误,根据错误提示修改源代码,并重新编译。


2. 问题和解决方法

2.1 运行lsd_slam_viewer出现下面的错误:

Ubuntu16.04安装LSD-SLAM_第1张图片


分析:在Ubuntu16.04中,安装libqglviewer-dev,默认依赖的是qt5,这是导致上述问题的直接原因,因为LSD-SLAM需要依赖qt4,而不是qt5。


解决方法:

1) 删除libqglviewer-dev

sudo apt remove libqglviewer-dev

2) 安装libqglviewer-dev-qt4,并创建相关链接

sudo apt install libqglviewer-dev-qt4  
cd /usr/lib/x86_64-linux-gnu  
sudo ln -s libQGLViewer-qt4.so libQGLViewer.so

2.2 编译过程中出现错误:raise Exception(r"""quotes not allowed in description string '%s'""" % description)

Ubuntu16.04安装LSD-SLAM_第2张图片


分析:顾名思义,不应该在描述中出现引号(单引号或双引号),可以通过查看错误内容得知需要修改的文件的名称。


解决方法:

1) lsd_slam_viewer/cfg/LSDSLAMViewerParams.cfg

第20行scaledDepthVarTH:单词 point's和keyframe's 中出现了单引号,删除单引号

第21行absDepthVarTH:单词 point's

第24行cutFirstNKf:单词 keyframe's


2) lsd_slam_core/cfg/LSDDebugParams.cfg

第11行plotStereoImages:单词 what's

第12行plotTracking:单词 what's

第48行continuousPCOutput:单词 Keyfram's


2.3 编译过程中出现错误:invalid initialization of non-const reference of type 'qreal& {aka double&}' from an rvalue of type 'qreal {aka double}'

Ubuntu16.04安装LSD-SLAM_第3张图片


分析:qt中的qreal表示小数,在Ubuntu14.04中qreal就是float,但是Ubuntu16.04中qreal变为了double。错误中的变量x, y, z的类型是float,getPosition函数的形参类型是qreal,也就是double,所有x, y, z的值会自动转型为double,并存储在一个临时变量中,这会导致getPosition函数的实参变为了右值,但是右值不能初始化非const的引用。


解决方法:

1) lsd_slam_viewer/src/PointCloudViewer.h

第135行:将float x, y, z修改为qreal x, y, z或者double x, y, z

2) lsd_slam_viewer/src/PointCloudViewer.cpp

第325行:将float x, y, z修改为qreal x, y, z或者double x, y, z


2.4 编译过程中出现错误:warning Detected X11 'Status' macro definition, it can cause build conflicts. Please, include this header before any X11 headers.

Ubuntu16.04安装LSD-SLAM_第4张图片


分析:这条错误信息可以在文件/opt/ros/kinetic/include/opencv-3.2.0-dev/opencv2/stitching.hpp的58行查看到,信息中已经告诉了如何解决这个问题,即:将这个头文件放到任何X11头文件之前,或者也可以直接将#include "opencv2/opencv.hpp"注释掉


解决方法:

将文件lsd_slam_viewer/src/KeyFrameDisplay.cpp的头文件修改为如下顺序:

#include "opencv2/opencv.hpp"

#include 
#include 
#include 
或者

#include 
#include 
#include 

// #include "opencv2/opencv.hpp"

3. 运行LSD-SLAM

3.1 下载数据集并解压:Room Example Sequence


3.2 打开Termial,输入以下命令:

roscore

3.3 打开新的Termial,输入以下命令,弹出PointCloud Viewer窗口:

rosrun lsd_slam_viewer viewer

3.4 打开新的Termial,输入以下命令:

rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info

3.5 打开新的Termial,输入以下命令,弹出DebugWindow DEPTH窗口并运行SLAM:

rosbag play ./LSD_room.bag

注:将上述命令中的./LSD_room.bag替换为你之前下载的数据集的所在的路径


注:此时会出现错误,DebugWindow DEPTH窗口会卡死,PointCloud Viewer窗口显示一个红色的相机。在上述步骤3.4的Termial中会显示如下信息:



分析:根据错误的提示,可以猜测这个错误也是Qt版本变化导致的,暂时还不知道如何解决,希望能有高人指教。也许将Ubuntu16.04的qt5卸载了,安装qt4就能解决这个问题。在程序中,这个错误是由于DebugWindow DEPTH窗口的出现导致的。


解决方法:

可以将文件lsd_slam_core/src/util/settings.cpp的第38行的变量displayDepthMap设为false,即不显示DebugWindow DEPTH窗口:

bool displayDepthMap = false;

重新编译,即步骤1.4。再次执行步骤3.2-3.5,此时程序可以正常运行,可以在PointCloud Viewer中查看环境的点云信息,但是不显示DebugWindow DEPTH窗口,如下所示(LSD-SLAM正常运行,可以参考:Ubuntu14.04安装LSD-SLAM):

Ubuntu16.04安装LSD-SLAM_第5张图片

你可能感兴趣的:(教程)