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

效果如图:

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

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

原文地址:https://www.cnblogs.com/hxzkh/p/8488132.html

时间: 2024-10-30 12:07:31

LSD_SLAM编译运行的相关文章

Linux下librdkafka客户端的编译运行

Linux下librdkafka客户端的编译运行 librdkafka是一个开源的Kafka客户端C/C++实现,提供了Kafka生产者.消费者接口. 由于项目需要,我要将Kafka生产者接口封装起来给别人调用,所以先安装了librdkakfa,然后在demo上进行修改封装一个生产者接口. [一] 安装librdkafka 首先在github上下载librdkafka源码,解压后进行编译: cd librdkafka-master chmod 777 configure lds-gen.py .

[开发工具]_[Sublime Text 2]_[配置C++编译运行环境]

场景: 1. g++的版本更新比较快,可以使用最新的C++11特性, 这里sublime text 2是我的轻量级C++开发工具(只有这个),可以使用st2这种工具来验证一些语法新特性. 2. st2的好处是免费, 还有支持多语言的语法高亮和函数outline 3. 当然st2也支持插件开发. 4. 给sublime text 2添加选中文件右键打开看这里: http://blog.csdn.net/infoworld/article/details/18771731 步骤 配置C++编译选项

使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS

文章来源:http://www.powerxing.com/hadoop-build-project-using-eclipse/ 使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS 本教程介绍的是如何在 Ubuntu/CentOS 中使用 Eclipse 来开发 MapReduce 程序,在 Hadoop 2.6.0 下验证通过.虽然我们可以使用命令行编译打包运行自己的MapReduce程序,但毕竟编写代码不方便.使用 Eclipse,我们可以

Sublime Text 3配置C++编译运行

因为喜欢Sublime Text 3 的高亮配色,于是想在这里写程序.从emacs配置时连配置文件在哪都不知道到vim配置了半天很有成就感,我对配置文件算是更了解了.不过Sublime Text 3 没那么麻烦.配置C++编译运行的方法大概就是配置一个Build System.在cmd窗口运行且解决了中文乱码问题的c++编译配置如下: { "encoding": "utf-8", "working_dir": "$file_path&q

C语言学习笔记之第一个C程序及编译运行(一)

一.第一个C程序 1>C程序由函数构成 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 2>C程序的入口 C程序的入口是一个名字叫做main的函数,简称main函数.(为了区分函数,每一个函数都有一个名称)也就是说,不管整个程序中有多少个函数,都是先执行main函数.不管main函数写在文件中间,还是文件末尾,也都是先执行main函数. 注意: 如果一个C程序中没有main函数,那么

DuiLib学习笔记1——编译运行demo

c++中皮肤问题比较麻烦,MFC自带的太难用.DirectUI界面库就比较强大了,之前像skin++之类的基于DirectUI收费昂贵.DuiLib是基于DirectUI的界面库,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率. duilib的SVN地址:http://duilib.googlecode.com/svn/trunk 下载后运行DuiLib.sln 编译时可能会遇到几个报错. 0.开发环境本身有问题,比如用win7没有装win7sdk之类的. 1. TestApp1

这个.c文件根本就不是用来编译运行的

#define DEFINE(sym, val)          asm volatile("\n->" #sym " %0 " #val : : "i" (val)) 那个宏定义在asm-offsets.c中,这个.c文件根本就不是用来编译运行的,只是在编译内核的时候,用它生成一个asm-offsets.s文件,然后使用一个脚本将这个asm-offsets.s再转换为asm-offsets.h.这个头文件遵循汇编语法 ...  [pre

Ubuntu / Debian / Deepin等 Sublime Text 3 配置C++环境(一键编译&amp;运行,格式化代码)

配置编译环境: 进sublime,然后点击Tools->Build System->New build System 直接用下面的替换 { "shell_cmd": "g++ '${file}' -o '${file_path}/${file_base_name}'", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir

Cocos2d-x 3.X Qt MinGW版本编译运行

自Cocos2d-x 3.X引入了C++ 11特性,在Windows平台上的支持就仅限VS 2012,其实还可以尝试MinGW版本,GitHub上有MinGW版本的Qt Creator工程. 地址:https://github.com/sergey-shambir/cocos2d-x/tree/qtcreator           https://github.com/akof1314/cocos2d-x/tree/qtcreator Pull Request:https://github.c