SLAM基础环境配置
点击下方卡片,关注“新机器视觉”公众号
视觉/图像重磅干货,第一时间送达
转自知乎作者:佳浩
原文链接:
https://zhuanlan.zhihu.com/p/385255026如今,各行各业都在向着人工智能,自动化,网联化方向发展,而SLAM(simultaneous localization and mapping,同步定位与构图)则是智能化方向上很火热的一个技术领域。本篇主要是写当拿到新的操作系统时,该如何配置一个基础开发环境,那么闲言少叙,让我们就此进入正题。
1.网络连接及软件源
网络连接
一个新系统的网络,可能需要配置一下网关才能够连接到现有网络上。如果直接能够连到网络上,可以跳过这一条。插上网线或者确认wifi后,在右上角网络配置里面选择需要的网络进行'Edit',确认IPV4的信息正常(一般配置192.168.1.XXX等类似的模式),便可以进行正常网络访问,下次重启时也会自动连接。
软件源设置
可以通过左上角的search按钮搜'Software & Updates',或者在'System Settings'里面找到这一项。主要修改两个地方,如下图。
一个是把从网络上下载源码勾选上,另一个是源选项,可以根据网络情况来自动选择源,也可以使用上交,清华,华中,阿里等的源,这里不会选的话建议自动。一般有点经验的话,直接修改镜像下载地址也可以。
更改好后,执行'sudo apt update'、'sudo apt upgrade -y'两条命令进行更新,大约几分钟就可以。
2.基础开发环境确认与搭建
配置好上述几点,你就可以按照自己的习惯来处理一下眼前这个单薄的系统了。举几个基本命令,可以查看一些系统信息,与windows任务管理的使用方法有些类似。如:使用'ifconfig'可以确认网络信息,使用'df'命令可以确认磁盘,使用'top'可以确认cpu及进程等。而SLAM技术的开发环境,根据功能需求或编程语言等划分也各有不同,此处举例说明一些基础库,IDE的确认与配置。
SLAM通用类别
①g++/gcc。作为最基础的编译工具,确认好它的版本是很关键的(命令行gcc/g++ -v 或者gcc/g++ -version)。从4.8到5.4再到更高级的版本,对于相同的源码编译出来的结果,或者说能否通过编译正确链接,是影响很大的,一般来说4.8.5和5.4.0是网上大部分代码的可用编译器版本,这里建议两个都安装,平常使用5.4.0,如果遇到低版本兼容问题(难点在于bug发生时能否顺利发现是因为编译器版本的问题,很可能某个模块高低版本都能编过,运行也都可以,但是有细小的不可捉摸的错误,很折磨),需要切换gcc版本编译,切换方法可以自行搜索。如果需要高版本适配,临时使用也是可以的;
②boost。boost是一个大类,含有丰富的功能,这里直接给出安装命令'sudo apt install libboost-all-dev -y',它主要把C++各个函数和你的模块协调起来,增强你对API的调用,实现功能,随便举个例子:多线程。确保有这个库,让你事半功倍。
③Eigen。Eigen是矩阵库,SLAM中大量的矩阵运算,以及用于数学计算的向量,多维数组等,Eigen提供了非常好的模板。理解起来就像是把线性代数带入了C++,让一步步累加起来繁琐的步骤可以直接通过矩阵变换或者类似的原理简便起来,例如:向量的点积叉积,雅可比黑塞矩阵运算等。安装命令:'sudo apt install libeigen3-dev -y'。
④PCL。PCL库是点云库,PCL可以对点云进行API式的操作,包括各种滤波,特征提取,聚类,旋转平移变换,可视化等十分强大的功能,在激光SLAM算法中堪称使用最多的库,甚至可以不加之一俩字。为了避免使用出错,PCL库的安装尽可能的选择编译源码,因此它并不是像别的确认一下或者随手一个命令就能解决的了的,在Github的PCL仓能看到,目前有1.7,1.8,1.9,1.10,1.11几个不同版本,以安装差异来区别:其中1.7是属于一类,1.8,1.9,1.10属于另一类,1.11属于新一类。此处安装差异指以源码编译方式安装或移植造成可能的错误。
⑤OpenCV。OpenCV库是主要处理视觉图像的库,在视觉SLAM算法中也是使用最多的一类,对此也要确认2系列和3系列的区别,由于接口和API的相当一部分不同,在代码写作时也会有较大差异,安装时尽可能计划清楚。安装命令'sudo apt install libopencv-dev'(一般镜像源上的OpenCV是2系列)
⑥Ceres。SLAM算法中一个著名的区分方向就是后端优化,如何用手上粗糙的数据给出精准的预测,或者是把数据融合成一个能够让人信服的结果,就是后端优化经常考虑的问题。而Ceres库就是为了后端优化而生,它本身源于谷歌,安装的时候也是从GitHub上下载源代码进行编译使用,因为它的安装还要求了一些依赖项,使用起来也会有比较多的说法。计划后续也会开一个专题来讲这个Ceres库的应用。
另外还有诸如g2o,py系列的一些工具等也比较常用,由于使用经验不足,就不在这里多说,且行且学习,相关问题可以交流。
IDE
IDE种类很多,见过多屏多IDE的代码大佬,也见过用gedit的魔幻选手,还有使用vi的祖师爷,不过就使用上来讲,还是固定一两个IDE来比较好。部分IDE举例:VSCode,QT Creator,Kdevelop,CLion等等。这里就稍微说说VSCode和QT Creator,因为每一个IDE从安装到配置,再到使用时的额外附加项,其实都有挺多坑,如果有必要的话,后期再聊,这里就是一个普通的安装科普。
①VSCode。VSCode现在是本人最喜欢的开发环境,安装简单,随手一个官网,就有详细的安装步骤。这里提出来说是因为VSCode集成了许多功能插件,写代码方面的帮助非常强大,还有一些奇妙的黑科技,甚至一些摸鱼奇招,感兴趣可以自己找,有空的话再多介绍。需要注意的是几个配置的json文件,包括寻库路径,编译参数等等,如果一个大工程是基于VSCode开发的话,代码移植性也会由于json文件的存在而提高许多,另外VSCode的插件版本也可以一同管理着大家的公共部分版本,在以控制变量法解决问题时非常有帮助,各模块版本管理也就方便了起来。
②QT Creator。QT Creator个人感觉是一个更加专业的代码开发环境,有点类似于windows下的VS,它的强大之处在于图形化界面开发以及工具开发,具备非常优秀的辅助调试能力,其特有的qmake也可以让代码安全等级更高,在配置中具备更多的高级选项,启动时可以加载触发文件就能浏览整个工程,也很方便。如果说VSCode像是一匹战马,你可以自由地更改方向和速度,那么QTCreator就像是一部战车,威力强大,装甲优良。个人使用过程中唯一遇到的难点就是QTCreator在包含部分头文件/库的时候,跳转功能会卡住甚至未响应。
③Kdevelop。安装简单,方便上手,在需要打开项目工程代码的时候,没有良好配备的VSCode或者QT,也不想用vim,nano甚至是诡异的gedit,Kdevelop也是个不错的选择。使用命令'sudo apt-get install Kdevelop-dev'。
IDE的选择,根据实际需来决定,就像是VSCode和QT Creator在本身上的一些区别一样,需要什么就用什么,甚至无图形界面的vi也是一代开发板编辑传奇呢,实在不行gedit也是可以完成任务的。
3.尝试一个Hello World
好啦,安装好了各种环境,不试一下怎么能行呢。随手写一个Hello World,检测一下你的编码能力吧。
std::cout << "Hello World!" << std::endl;