运行ORB-SLAM笔记_编译篇(一)
1.下载代码 https://github.com/raulmur/ORB_SLAM/ (同时也可以看看作者的牛叉论文,我是打算先用代码,再回头看论文)
2.打开后如下
就好像是用一件新产品一样,我们首先要看一下说明书“README.md”,
README.md介绍了很多关于这个工程的东西,比如作者,发表的论文,研究的人员,代码的下载以及更新
那么我们首先从有用的信息开始操作:(备注:以下内容都是我的个人理解,都是别人的东西,我拿来学习而已)
3.解决依赖项
3.1 Boost :用这个Boost库在SLAM运行过程中开辟不同的线程
3.2 ROS:使用ROS采集摄像头或者记录下来的视频(rosbag)的图像信息,进行可视化
我的电脑安装的是indigo版本的所以安装教程是:wiki.ros.org/indigo/Installation/Ubuntu
安装完成运行 roscore 出现如下界面说明安装成功,同时也就可以学习ROS的基本教程了
wiki.ros.org/ROS/Tutorials
3.3 OpenCV 使用OpenCV去处理图像特征,ORB-SLAM的OpenCV版本是OpenCV 2.4,下载和安装OpenCV
http://opencv.org/ 或者任意百度一下都有好多教程。
3.4 g20(第三方库) 这里用的是修改后的G2O版本,那么原始代码在 https://github.com/RainerKuemmerle/g2o ,G2O即是通用图优化,g2o是一个算法集的C++实现,根据前人求解非线性最小二乘的理论,根据具体的问题,选用最合适的算法,
为了能够编译G2O,需要安装一些东东是:BLAS, LAPACK and Eigen3,直接命令:
sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev
sudo apt-get install libeigen3-dev
3.5 DBow2(第三方库)DBow2是一种高效的回环检测算法,DBOW2算法的全称为Bags of binary words for fast place recognition in image sequence,使用的特征检测算法为Fast,描述子使用的是brief描述子,是一种离线的方法。使用了DBow2和DLib库的一些算法,进行位置识别和特征匹配,不需要为它添加其他依赖项(代码地址: https://github.com/dorian3d/DBoW2)
4.安装
4.1 确认已经安装了ROS以及他的依赖项 (boost, eigen3, opencv, blas, lapack).
添加所下在的ORB-SLAM的路径到环境变量下,比如我的ORB-SLAM的路径为:
所以需要打开配置ubuntu环境变量的~/.bashrc文件,在文件最底处添加如图所示的命令行:然后source ~/.bashrc.
4.2 build g2o 安照说明一步一步来
前往 /home/salm/Monocular/ORB_SLAM/Thirdparty/g2o ;
依次命令为: cd ~/Monocular/ORB_SLAM/Thirdparty/g2o
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
g2o编译成功。
4.3 Buid DB0W2 与编译g2o时相似命令如下
cd ~/Monocular/ORB_SLAM/Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make
4.4 Build ORB-SLAM,这里有一个提示**If you use ROS Indigo, remove the depency of opencv2 in the manifest.xml.**
(按照理解就是把manifest.xml中的opencv2注释就好了呗),如下图:
然后就按照步骤来执行,
更改之后就可以进入编译:
cd ~/Monocular/ORB_SLAM
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make
但是在执行到cmake .. -DROS_BUILD_TYPE=Release发现会有错误,
然后就开始百度搜索答案呗,我也是这样想的,就会看到此博客 http://blog.csdn.net/wishchin/article/details/50468950
就会提示说路径设置有问题,然后我就各种设置,每设置一次就编译一次,只记得用了好长时间,都没有成功,过了一段时间
想想 我应该把这三个都注释掉就有
<!--<depend package="opencv2"/>
<depend package="image_transport"/>
<depend package="cv_bridge"/> -->
如下图然后执行cmake .. -DROS_BUILD_TYPE=Release这样虽然生成了Makefile,但是在接下来的make肯定会出错的,因为我们把所有关于opencv的依赖项都给注释了
所以就导致编译出错了(但是这里可以我也没找到什么原因,为什么我按照说明书,却行不通,我怀疑是我的opencv没有安装好,或者路径设置不对,但是这些都不管了,我知道我已经安装了opencv)
(注释了三个依赖项然后make 的结果如下图)
可能也会出现其他错误,提示找不到opnecv的库函数,或者说找不cv_bridge等函数
所以我就按照网上找各种方案的就结合我就只是把manifest.xml文件注释了OPENCV2,进去到ORB_SALM文件下:
执行:
后面是我手动添加的opencv的链接库,
cmake .. && make -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect -lopencv_nonfree
如下图,
(也就是说在我的电脑上(ubuntu14.04 32位 ros_indigo)在camke 和make 都需要添加opencv 的链接库,编译成功了)
因为创建了两个工作空间导致我的程序又出错误了,之前运行
rosrun ORB_SLAM ORB_SLAM /home/salm/ORB_SLAM/Data/ORBvoc.txt /home/salm/ORB_SLAM/Data/Settings.yaml
rosrun ORB_SLAM ORB_SLAM ~/ORB_SLAM/Data/ORBvoc.txt ~/ORB_SLAM/Data/Settings.yaml
都是可以运行的,不知道为啥又出现错误了就是很不知怎么回事说我的路径有问题
后来我运行
rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml
(不是绝对路径,而是在ORB_SLAM路径下的绝对路径)就可以运行了
以下是我在整理问题是所遇到的有关的网页
askubuntu.com/questions/510606/error-adding-symbols-dso-missing-from-command-line
blog.csdn.net/dreamer_lhs/article/details/51297432
www.voidcn.com/blog/wishchin/article/p-4970975.html
blog.csdn.net/real_myth/article/details/51798557
blog.csdn.net/dourenyin/article/details/48055441
运行ORB-SLAM笔记_编译篇(一)的更多相关文章
- 运行ORB-SLAM笔记_使用篇(二)
1. 编译完成之后就可以使用了,按照说明我们可以知道,首先开启roscore
- Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码
通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...
- Python笔记_第二篇_面向过程_第二部分_2.路径、栈和队列、内存修改
这一部分分三个主题进行讲解,主要为后面的模块.包.第三方库的概念补充一些相关的内容. 1. 路径(Path): 相对路径和绝对路径. 举例1:我们先导入一个os库(模块)来观察一下路径 import ...
- Python笔记_第一篇_面向过程_第一部分_6.语句的嵌套
学完条件控制语句和循环控制语句后,在这里就会把“语言”的精妙之处进行讲解,也就是语句的嵌套.我们在看别人代码的时候总会对一些算法拍案叫绝,里面包含精妙和精密的逻辑分析.语句的嵌套也就是在循环体内可以嵌 ...
- Python笔记_第一篇_面向过程第一部分_6.循环控制语句(while 和 for)_
承接条件控制语句.条件控制语句像大树一样有很多的之差,那条路径通(也就是表达式判断为True)就会往哪一个树杈去运行,万涓溪水汇成大河.对于常用的程序结构形式,还有一种这篇文章就会讲解,那就是循环控制 ...
- Python笔记_第一篇_面向过程_第一部分_9.Ubuntu基础操作
第一部分 Ubuntu简介 Ubuntu(乌班图)是一个机遇Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的“Ubuntu”一词,意思是“人性”.“我的存在 ...
- Python笔记_第一篇_面向过程_第一部分_4.格式化输入和输出
开始Python编程首先要学习两类最常用(经常出现和使用)输入和输出.学习编程最重要的状态就是“人机交互”,所以这两类函数显得尤其重要. 第一部分 格式化输入 1.1 函:input 语:inpu ...
- Python笔记_第一篇_面向过程_第一部分_2.内存详解
Python的很多教材中并没有讲内存方面的知识,但是内存的知识非常重要,对于计算机工作原理和方便理解编程语言是非常重要的,尤其是小白,因此需要把这一方面加上,能够更加深入的理解编程语言.这里引用了C语 ...
- Python笔记_第一篇_面向过程_第一部分_1.Python环境的设置(含虚拟机)
*Python环境的设置 Python的环境设置也就是所需工作平台的软件搭建.常用的搭建平台IOS系统+Linux系统和Windows+Linux系统的搭建.这里主要说明的是Windows+Linux ...
随机推荐
- WCF MSMQ
基于WCF MSMQ 的企业应用解决方案 最近研究了一下基于MSMQ的WCF应用,从书上.网上查了很多资料,但始终没能彻底理解WCF-MSMQ的工作原理,也没能得到一个合理的应用解决方案.索性还是 ...
- ASP.NET MVC相关
Orchard源码分析(7):ASP.NET MVC相关 概述 Orchard归根结底是一个ASP.NET MVC(以后都简称为MVC)应用,但在前面的分析中,与MVC相关内容的涉及得很少.MVC提供 ...
- 目标指向、Icon图标的错误
VS打包后生成快捷方式:目标指向.Icon图标的错误 1.目标指向错误: 在安装***.msi文件后,对快捷方式-->右键-->属性: 发现目标并非指exe文件. 于是我新建了一个快捷方式 ...
- [RM 状态机详解1] RMApp状态机详解
概述 Apache Hadoop 2.0在Hadoop 1.0基础上做了许多的重构工作,代码上的重构最大的变化在于引入状态机处理各个角色的状态与变迁,使用状态机是得代码结构更加清晰,方便异步处理各种操 ...
- tomcat安装和基本配置
首先,默认电脑上已经配置好java环境. 在http://tomcat.apache.org/这里下载tomcat二进制版本,下载到本地后随意解压在某个盘, 我解压在D:\apache-tomcat- ...
- js中getByClass()函数
js中getByClass()函数进化史 对于js来说,我想每一个刚接触它的人都应该会抱怨:为什么没有一个通过class来获取元素的方法.尽管现在高版本的浏览器已经支持getElementsByCla ...
- videojs设置播放点
videojs提供了currentTime的函数可以设置当前的播放时间,但是在实际运用当中出现了问题 var vid1 = videojs('vid1'); vid1.src('http://vide ...
- Arduino 各种模块篇 RGB LED灯
示例代码: 类似与这样的led,共阴rgb led,通过调节不同的亮度,组合成不同的颜色. 示例代码: /* 作者:极客工坊 时间:2012年12月18日 IDE版本号:1.0.1 发布地址:www. ...
- 遍历Javascript数组的一种方法!
应用场景: 如果您的数组只用一次的话就适用这种方法,因为遍历完后数组便清空了.代码如下: var arr=[1,5,6,2,3]; for(;i=arr.shift();){ console.log( ...
- 百度地图在某架构下找不到符号.a文件的问题
1.现象: 就是说找不到符号给i386的架构(就是模拟器).或者找不到符号给arm架构(真机). ld: warning: ignoring file /Users/pufang/xcode/demo ...