Ubuntu14.04编译maplab遇到的一些问题及解决方法
1、安装ROS及初始配置
ROS的安装方法参考原作者网页和另一个网页,我的是Ubuntu14.04,ROS版本对应为indigo。虚拟机内存设置为4G,1个处理器,核心数为4
没办法复制,手敲下来的难免有些小错误,错别字啥的,所以尽量用tab补全,少copy我的代码,废话少说,进入正题!
原作者是在窗口中创建的环境变量,我是在手动在 /etc/profile 中添加的。打开 /etc/profile ,最后添加内容:
export ROS_VERSION=indigo
export CATKIN_WS=~/maplab_ws
保存退出,执行 source /etc/profile
然后创建工程:
mkdir -p $CATKIN_WS/src
cd $CATKIN_WS
catkin init
catkin config --merge-devel
catkin config --extend /opt/ros/$ROS_VERSION
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
这里的catkin是ROS下的一个工具,相关指令参考英文网站。
然后安装原作者的意思,就要下载源码了。由于git的龟速下载,我就在Windows下download了zip包,然后拷到src下就编译,结果错误一大堆。后来才发现这些zip包是不完整的,所以,只能乖乖git了!!放心,用不了一年~~
下载maplab源码:
cd $CATKIN_WS/src
git clone https://github.com/ethz-asl/maplab.git --recursive
下载完后,接着下载依赖:
git clone httpl://github.com/ethz-asl/maplab_dependencies --recursive
2、编译
接下来,你懂得,进入错误-解决-错误环节!下面是我遇到的一些问题,总结了前人一些经验,也有自己新遇到的。原作者提供了一些问题及解决方法,可以看一下。
开始编译:
进入maplab_ws文件夹,执行:
catkin build maplab
然后,出现错误:
“Workspace packages have changed, please re-source setup files to use them.”
看一下ROS官方文档,你就知道,需要执行项目下的setup脚本:
source devel/setup.bash
然后重新编译(接下来你会重复很多次这个指令哈哈...):
catkin build maplab
接着,错误为:
“make[2]: *** [opencv3_src-prefix/src/opencv3_stc-stamp/opencv3_src-download] Error 1”、“make[1]: *** [CMakeFiles/opencv3_src.dir/all] Error 2”之类的错误,原因是opencv3没有下载成功,日志里可以查看详细信息,原作者也提到,可以查看相关CMakelists.txt中的网址,手动下载,再解压到相关文件夹。我就照着做了,结果发现重新编译时,程序会把我拷进去的opencv3.2.0给删掉,无语(简直一万匹***飞奔而过!!!!!)
所以老夫智能剑走偏锋背水一战瞎**乱搞了,没错,就是这样!!改他的下载opencv3的脚本文件(一会还要改回来的):
打开 opencv3_catkin/opencv3_src-prefix/src/opencv3_src-stamp/download-opencv3_src.cmake 文件,将里面第14行的注释符号(‘#’)去掉,也就是去掉了下载包的时间限制,同理,
打开 opencv3_catkin/opencv3_contrib-prefix/stc/opencv3_contrib-stamp/download-opencv3_contrib.cmake ,将第14行注释符号去掉。
然后重新编译,慢慢等吧,龟龟龟龟龟速 git !!
放心,一定会出错的!因为我们修改了人家的文件嘛!错误大概是 status之类的NOTFOUND。
查看相应的3.2.0.zip是否已经下载完毕,一个82M左右、一个56M左右。啥?你不知道这两个包下载到了哪两个文件夹?那你还搞个锤子哦~,这种最基本的问题我就不管了哈(友情提示:在某些个cmake文件中)
如果两个都已经下载好了,那么把刚才两个文件中原来注释的两行恢复,即重新注释掉,重新编译(catkin build maplab)
慢慢等吧,opencv的编译有点耗时,4G内存,固态硬盘的话大概几十分钟
应该还会出现错误,比如ceres下载失败,跟之前opencv3差不多的问题,不过查看了日志你会发现有区别的。opencv3是因为 git 下载慢所以我们去掉了下时间限制,但 ceres 这个是完全连接不到网站啊啊啊,可能是我没FQ的原因??不重要,改个网址就行了
打开 ceres_catkin/ceres_src-prefix/tmp/ceres_src-gitclone.cmake ,第29行网址改为 “https://github.com/ceres-solver/ceres-solver”,保存退出,重新编译。
假如你遇到这个错误(那你一定是个不听话的孩子):
g++:internal compiler error: Killed (program cc1plus) ..........
为啥这么说嘞,请看本文第一行。关机,把虚拟机核心数设置为4,再重新编译(记得先source项目下的setup脚本)
完成!