LSD_SLAM编译运行

Posted 花心葬空魂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LSD_SLAM编译运行相关的知识,希望对你有一定的参考价值。

基本操作之甩锅先:……(你懂得)

编译环境:Ubuntu14.04 LTS(64位),ROS Indigo,OpenCV2.4.9

这次给出 64位 这个信息,有没有感到困惑?其实真正原因是,我之前编译总是失败以至于都怀疑是不是只有32位的才可以。实践证明,64也是可以哒,放心撒~~~

同理也给出了OpenCV的版本,这是因为我在编译的时候遇到了ROS找不到Opencv的问题,其实,在安装ROS的时候由于安装的是 full 版所以 OpenCV 自然也是已经安装上了,但是安装路径我却没有查到。Indigo 默认的安装的 OpenCV 版本是 2.4.8,然而我电脑上自己自定义路径安装了 OpenCV2.4.9 等版本,没有 2.4.8。反正不管怎么说,就是ROS找不到OpenCV,于是我就把 2.4.9 版本的手动移到了 /usr/include 下,然后,,然后竟然通过了(即使不是2.4.8版本)。

已经安装了 ROS 的朋友们自己看看在 /usr/include 下是不是有 opencv 这个文件夹,如果没有编译的时候可能会出错。反正我的是没有,也不知道是不是自己之前不小心删掉了,没有也没关系,下面会给出相应的解决方法。

还有一点,按照原作者网页编译了N次,均告失败。翻了各种帖子,最终只有这一篇让我解决了大部分问题,是用 catkin_make 编译的,然后又综合别的网页最后总算是成功了。

还要说明的一点是,需要把之前编译 ORB 时设置的环境变量注释掉,否则不能运行这个,可能会提示找不到启动文件。不只是这次,以后每次重新编译slam程序时,只要涉及到了修改 ~/.bashrc 中的环境变量都需要把以前的 ROS_PACKAGE_PATH 之类的都注释掉。运行哪个 slam 程序就取消哪个注释,不用的都要注释掉。

下面是具体步骤:

1、创建工作空间并获取源码

打开终端窗口,输入:

mkdir -p ~/lsd-slam_ws/src

初始化工作空间:

cd ~/lsd-slam_ws

catkin_make

source devel/setup.bash

下载源码:

cd src

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

下载完后大概这样:

然后切换分支:

cd lsd_slam

git checkout catkin

效果如下:

然后下载用到的数据包,链接在此,下载好后移到 ~/lsd-slam_ws 下。

2、安装依赖项及更改文件

首先安装依赖项,(为了避免输出看起来太乱,建议新开一个窗口执行):

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

安装好后修改 lsd_slam/lsd_slam_viewer 下的 package.xml

       以及修改 lsd_slam/lsd_slam_core    下的 package.xml

在文件上右键选择 open-with - - gedit 编辑即可,两个文件中都添加内容:

<build_depend>cmake_modules</build_depend>

<run_depend>cmake_modules</run_depend>

保存退出,

然后编辑 lsd_slam_core 下的 CMakeLists.txt 文件,11行左右添加:

set(OpenCV_DIR ~/opencv-2.4.9/share/OpenCV)

include_directories(~/opencv-2.4.9/include)

find_package(cmake_modules REQUIRED)

然后在 102、108和113行左右的 target_link_libraries 的括号里最后面添加 X11 库:

保存退出。这里啰嗦一下,由于之前我安装的 OpenCV2.4.9 路径不是默认路径,而是自己定义的 ~/opencv-2.4.9/share/OpenCV(为了方便版本切换),所以这里的路径才是这样的,同时也要将OpenCV的环境变量也从 2.4.13 切换成 2.4.9(切换环境变量后新开的窗口才会更新变量,原来已开的窗口保存的是更新前的变量,这个上篇文章也说过了) 。多版本 OpenCV 的安装,环境变量的配置与切换可以参考我上篇编译 ORB 的文章,这里就不再赘述了。

然后编辑 lsd_slam_viewer 下的 CMakeLists.txt 文件,11行左右添加:

set(OpenCV_DIR ~/opencv-2.4.9/share/OpenCV)
include_directories(~/opencv-2.4.9/include)
find_package(cmake_modules REQUIRED)

与刚才不同的是,这里我们要再多修改一个地方,在第 73 行下插入一行:

add_dependencies(viewer lsd_slam_viewer_generate_messages_cpp)

 

之前我没有添加这句,结果出现了这种错误:

In file included from /home/gao/lsd-slam_ws/src/lsd_slam/lsd_slam_viewer/src/main_viewer.cpp:25:0:
/home/gao/lsd-slam_ws/src/lsd_slam/lsd_slam_viewer/src/PointCloudViewer.h:30:41: fatal error: lsd_slam_viewer/keyframeMsg.h: No such file or directory
#include "lsd_slam_viewer/keyframeMsg.h"

 

 

然后在 target_link_libraries 的括号里最后面添加 X11 库 (79 行左右):

保存退出。

3、编译

把依赖装好,并且更改为文件后,回到原来的窗口,然后开始编译(如果不回到原来窗口而是新开窗口编译的话,别忘了先source相关的setup文件,前面的文章已经说过了):

cd ~/lsd-slam_ws

catkin_make

然后我最开始提到的问题就出现了,找不到 opencv ,如图:

怎么办呢?没有就给它弄过去呗,首先进入 opencv2.4.9 的安装文件夹,我的是 ~/opencv-2.4.9,然后进入 include 文件夹,就可以看到 opencv 文件夹了:

然后把这个 opencv 文件夹拷到 /usr/include 下

 

然后重新 catkin_make,最后结果如图:

4、运行

新开窗口启动 ROS:

roscore

新开窗口,运行 viewer:

cd ~/lsd-slam_ws

source devel/setup.bash

rosrun lsd_slam_viewer viewer

然后会弹出一个名称为 PointCloud Viewer 的窗口,由于没有数据输入,故黑屏。

新开窗口,运行 core:

cd ~/lsd-slam_ws

source devel/setup.bash

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

然后显示 “WAITING for ROS camera calibration!”

注:要尽快运行数据包,否则程序长时间检测不到输入就会自动停止,就需要重新启动了。

在新开窗口运行数据包:

cd ~/lsd-slam_ws

rosbag play LSD_room.bag  

效果如图:

 

当你“看完了所有的帖子”,“尝试了所有的方法之后”还是解决不了问题,但这并不代表没有办法可以解决这个问题,只是你看的还不够多,做的还不够多。你以为你看了所有,尝试了所有,事实是你忽略了太多东西。

这是这次我最大的收获,共勉!!

以上是关于LSD_SLAM编译运行的主要内容,如果未能解决你的问题,请参考以下文章

如何在VSCode内编译运行C++

window脚本怎么编辑、编译及运行

反汇编出来的地址是运行地址还是编译地址?

Linux下如何编译,运行C程序?需要安装编译器吗

Java编译时注解和运行时注解有啥区别

如何安装WDK并运行编译一个工程