您的位置:首页 > 其它

LSD_SLAM编译问题解决

2016-02-24 16:49 1711 查看
由于要学习下SLAM的知识,就决定在ubantu上运行一个SLAM框架,看了一些东西后,决定在orb_slam和 lsd_slam 这两个框架上进行运行。

首先开始运行lsd_slam,这里碰到了一些问题,以及找到的解决方法,在此记录下,以防以后找不到,也是对碰到这类问题的同行一些启发。

要向编译lsd_slam,首先安装ROS indigo,这个环境编译时,必须安装boost,我的电脑是ubuntu14.04,要求安装的boost1.54。

1:在安装boost时,碰到比较扯淡的事情,老是编译不过。

"error: 'uintptr_t' was not declared in this scope".


我找到的解决方法是修改boost/atomic/atomic.hpp中的代码

-    || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
+    || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__) && !defined(__GLIBC__)) \


在编译时,可能还会碰到类似这个的错误,同样的在合适的文件中更改。

参考https://svn.boost.org/trac/boost/ticket/7979

2:然后安装ROS indigo,这里主要参考了http://blog.sina.com.cn/s/blog_7b83134b0102w4de.html

什么是ROS indigo?

ROS:Robot Operating System,机器人操作系统,ROS提供一些库和工具来帮助创建一些机器人的程序 (http://wiki.ros.org/cn),其目标是为了提高机器人领域的代码复用率,它是一个分布式框架,使可执行文件能够被单独地设计,然后松散耦合地执行(https://en.wikipedia.org/wiki/Robot_Operating_System),ROS Jade Turtle是目前的发行版本,ROS Indigo Igloo是ROS Jade Turtle前一个版本,在lsdslam中ROS仅用于输入和输出(https://github.com/tum-vision/lsd_slam)

如何在ubuntu14.04上安装ROS indigo?

http://wiki.ros.org/cn/indigo/Installation/Ubuntu

2.1 设置软件源

sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’

2.2 添加密钥

sudo apt-key adv –keyserver hkp://pool.sks-keyservers.net –recv-key 0xB01FA116

说明:

apt-key是Debian软件包的安全管理工具。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。apt-key adv:导入密钥

2.3安装

2.3.1更新软件源:sudo apt-get update

2.3.2安装:sudo apt-get install ros-indigo-desktop-full

(桌面完整版安装太费时,以后可以看一下只安装lsdslam必要的一些ROS包)

2.5配置环境

echo “source /opt/ros/indigo/setup.bash” >> ~/.bashrc

source ~/.bashrc

说明:

ubuntu环境变量更改:当前用户:~/.bashrc 全局设置:/etc/profile系统设置

sudo vi /etc/enviroment

Source命令也称为“点命令”,也就是一个点符号(.),source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

2.6安装rosinstall

sudo apt-get install python-rosinstall

说明:rosinstall是一个命令行工具,帮助下载ROS软件包。

2.7创建ROS工作环境,如果没有rosbuild并且打算使用rosbuild空间的话,执行下列代码

mkdir ~/rosbuild_ws

cd ~/rosbuild_ws

rosws init . /opt/ros/indigo

mkdir package_dir

rosws set ~/rosbuild_ws/package_dir -t .

echo “source ~/rosbuild_ws/setup.bash” >> ~/.bashrc

bash

cd package_dir

这里能进入bash就说明安装ROS indigo成功,可以用一下测试

//安装uvc_camera (可选,适用于需要USB摄像头且没有安装过ROS摄像驱动的情况)
sudo apt-get install ros-indigo-uvc-camera
开启三个终端:
第一个启动ROS服务:
$ roscore
第二个启动驱动:
$ rosrun uvc_camera uvc_camera_node device:=/dev/video0
第三个启动视频窗口:
$ rosrun image_view image_view image:=/image_raw
如果正常显示摄像头视频即成功


2.8安装依赖项

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

2.9

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

如果你需要openFabMap去闭环检测的话(可选)
在
lsd_slam_core/CMakeLists.txt
中去掉下列四行注释即可
#add_subdirectory(${PROJECT_SOURCE_DIR}/thirdparty/openFabMap)
#include_directories(${PROJECT_SOURCE_DIR}/thirdparty/openFabMap/include)
#add_definitions("-DHAVE_FABMAP")
#set(FABMAP_LIB openFABMAP )
需要注意openFabMap需要OpenCv nonfree模块支持,OpenCV3.0以上已经不包含,作者推荐2.4.8版本
其中nonfree模块可以由以下方式安装
$ sudo add-apt-repository --yes ppa:xqms/opencv-nonfree
$ sudo apt-get update
$ sudo apt-get install libopencv-nonfree-dev


2.10安装lsdslam

rosmake lsd_slam

在这里我的电脑出现了问题,说是QGLViewer.h中的getposition()函数调用不对,float不能转化成qreal类型,找了下发现我不知什么时候安装的QGLViewer在/usr/local/中,而在安装ROS indigo时也安装了一份QGLViewer在/usr/中,在/usr/中的那一份是对的,数据类型都是float的,在/usr/local中的那一份不对,我就把/usr/local中的那份删了,就没问题了。

还有就是在编译lsd_slam时可能有的Makefile中的调用路径有问题,一些boost库在指定路径中不能找到,索性我就把boost库复制到指定路径中,缺什么补什么,我这种方法只适合我自己使用吧……..

编译通过后,在http://vision.in.tum.de/research/vslam/lsdslam?redirect=1下载需要的测试数据库

运行LSD-SLAM
开启四个终端窗口
第一个启动ROS服务:
$ roscore
第二个启动摄像服务(USB摄像模式):
$ rosrun uvc_camera uvc_camera_node device:=/dev/video0
第三个启动LSD-viewer查看点云:
$ rosrun lsd_slam_viewer viewer
第四个启动LSD-core:
(1)数据集模式
$ rosrun lsd_slam_core dataset_slam _files:=<files> _hz:=<hz> _calib:=<calibration_file>
_files填数据集png包的路径,_hz表示帧率,填0代表默认值,_calib填标定文件地址
如:
$ rosrun lsd_slam_core dataset_slam _files:=<your path>/LSD_room/images _hz:=0 _calib:=<your path>/LSD_room/cameraCalibration.cfg
(2)USB摄像模式
$ rosrun lsd_slam_core live_slam /image:=<yourstreamtopic> _calib:=<calibration_file>
_calib同上,/image选择视频流
如:
$ rosrun lsd_slam_core live_slam /image:=image_raw _calib:=<your path>/LSD_room/cameraCalibration.cfg


运行图:(这里是截取的别人的,我的也大致一样)



接下来将详细学习下代码,另外orb_slam2我也将运行并查看效果后,在二者之间选择一个进行详细剖析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: