《SLAM十四讲》学习笔记——第二章
写在前面
正在学习高翔老师的视觉slam十四讲。为了记录个人认为的书中重点和注意事项,方便以后查阅,写下这篇内容。
一、ubuntu系统的安装
书中推荐安装ubuntu14.04版本,但经过多次尝试,本人笔记本无法正常安装使用ubuntu14版本。于是最终安装了ubuntu16.04版本系统,但仍没有解决无法正常使用独显的问题。
1.1安装ubuntu双系统的准备
- 下载ubuntu IOS镜像文件
官方下载速度很慢,个人使用 网易的镜像源。值得注意的一点是:desktop版本为常规版本,server为无图形界面的版本。所以应下载desktop版本。 - 下载UltraiSO工具
ultrailso软件是用来制作u盘启动盘。官方下载地址。官方可以免费下载试用,破解版自行寻找。 - 制作u盘启动盘
该步骤会将U盘格式化,请提前备份。
打开ultrailso…
4.等有时间再写接下来的内容,毕竟这部分不是重点。
二、库安装
g++(一般已经安装)
sudo apt-get install g++
cmake
sudo apt-get install cmake
集成开发环境(IDE) Kdevelop
sudo apt-get install kdevelop
没错,自动安装的命令都是这样,注意要小写。
三、程序
3.1 g++
g++本质是一个C++编译器。使用g++编译一个可执行文件(如 helloSLAM.cpp),
g++ helloSLAM.cpp
之后,所在目录会多出一个a.out文件(这是默认生成名)。输入如下命令运行
./a.out
3.2 cmake
cmake作用:当程序越来越复杂,互相调用越来越多,就需要用到cmake来进行编译。
cmake最核心需要两个文件:CMakeLists.txt 和testSLAM.cpp
3.2.1 CMakeLists.txt
CMaKeLists.txt文件,主要是声明对该目录文件所要作什么事情。最基本的样式如下
#声明要求的cmake最低版本
cmake_minimum_required( VERSION 2.8 )
#声明一个cmake工程
project(TestSLAM)
#声明一个可执行文件
add_executable( testSLAM testSLAM.cpp )
该文件方便我们对工程进行扩展和补充。
3.2.2 .cpp文件
testSLAM.cpp文件为程序的主函数部分,包含main函数。
3.2.3编译与执行
使用cmake命令编译c++程序,需在该文件夹打开终端,输入如下命令:
mkdir build
cd build
cmake ..
make
注意,以上命令只是编译。如编译成功,则会产生testSLAM文件。执行如下:
./testSLAM
3.3 使用库
3.3.1 什么是库?库的作用?
在C++工程中,只有main函数会生成可执行程序。其他代码,我们将其打包成库,供其他程序调用。
3.3.2 库的分类
在Linux中,库文件分为静态库和共享库两种。
静态库以 .a 作为后缀,每次被调用都会生成一个副本,移植时更不容易出错。
共享库以 .so 作为后缀,共享库只有一个副本,所以更省空间。
3.3.3 库的编写与生成
编写库文件需要三个文件: .cpp文件、CMakeLists.txt文件、 .h文件 。
其步骤是:
- 编写.cpp文件(库的主体)
- 编写CMakeLists.txt文件(用于编译生成库压缩包)
- 在文件夹里打开终端,编译生成库压缩包
- 编写.h头文件(方便调用查阅)
.cpp 文件里编写库中的函数,是库文件的主体。这里假设我们的文件为libtestLib.cpp。
CMakeLists.txt文件用于生成库文件压缩包。编写如下:
#生成静态库testLiib
add_library( testLib libtestLib,cpp )
#生成共享库testLib_shared
add_library( testLib_shared SHARED libtestLib.cpp )
有以上两个文件后,就可以编译生成库文件压缩包了。命令如下:
cd build
cmake ..
make
这时build文件夹就会生成testLib.a(或testLib_shared.so)文件。
得到库函数压缩包后,还需要编写**.h文件**,以声明库中包含的函数,方便查阅与调用。常规编写模式如下:
#ifndef LIBTESTLIB_H_
#define LIBTESTLIB_H_
//此处写函数声明,例如:
void printHello();
#endif
3.3.4 调用库
为了调用库,须在主程序的CMakeLists.txt文件和.cpp文件做如下更改。
CMakeLists.txt中将库链接至工程
#在add_executable( 生成文件名 主程序.cpp )后添加
#target_link_libraries( 生成文件名 库文件名 )
target_link_libraries( testSLAM tsetLib_shared )
.cpp文件添加包含库头文件
#include "libtestLib.h"
3.4 Kdevelop
3.4.1基本使用
在该书中,主要使用打开CMakeLists.txt方式完成编程。本人习惯先在文件夹中创建CMakeLists.txt和.cpp文件。然后打开Kdevelop,在左侧点击“Projects”->“Open project”,打开CMakeLists.txt文件。
生成工程后,再编写CMakeLists文件,.cpp文件。然后写好主体后build一遍。然后继续编程。
3.4.2 调试
在编程栏左侧添加好断点,点击“Debug”进行调试。
在左侧“Variables”可查看变量值。
快捷键:单步运行(F10)、单步跟进(F11)、单步跳出(F12)。
3.4.3 常见错误
使用Kdevelop时,“Execute”经常出现以下两种问题:
- No valid executables specified
- Could not start program.Make sure that the path is specified correctly
这为启动项问题。解决方法如下:点击上方“Run”->“Configure Lanuches”,删除原本的Launcher。然后点击“Add New”,添加新的Launcher。回主界面“Build”后,再点击下图红圈位置,在build文件夹中选择生成文件(无后缀的)即可。