第一部分、 c++编译基础
一、hello slam
- 编写对应的c++代码
#include <iostream>
using namespace std;
int main( int argc, char** argv )
{
cout<<"Hello SLAM!"<<endl;
return 0;
}
- 打开终端,进入对应文件目录开始编译
# 直接编译输出名为a.out
g++ helloSlam.cpp
# 指定输出名字
g++ helloSlam.cpp -o helloSlam
二、使用cmake
- 编写CMakeLists.txt
# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )
# 声明一个 cmake 工程
project( HelloSLAM )
# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )
# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( helloSLAM helloSLAM.cpp )
- 调用cmake对工程分析
cmake .
操作之后会在对应文件夹下生成一些中间文件,其中最重要的是makefile
- 调用make对工程进行编译
make
输出可执行文件helloSLAM(与cmakelist中的名称对应)
- 新建build文件管理生成的大量中间文件
mkdir build
cd build
cmake ..
make
三、 使用库
只有带main函数才可以生成可执行文件,对于某些只想直接使用其函数功能的文件,我们通常用库形式调用使用。
一个库往往是许多算法和程序的集合。
- 编写库函数
#include <iostream>
using namespace std;
void printHello(){
cout << "this is shared library function!" << endl;
}
- 编写对应的头文件
#ifndef TESTLIB_SHAREDLIB_H
#define TESTLIB_SHAREDLIB_H
void printHello();
#endif //TESTLIB_SHAREDLIB_H
- 编写cmakelist.txt
其中关键步骤分三步:
- 添加可执行库:
add_library(库名:Lib <SHARED> 库函数名:useLib.cpp)
执行完成上述步骤后,会在对应build文件夹下生成库文件。库文件分两种,分别是中间加shared关键字的.so后缀的共享库文件和不加shared关键字的.a后缀的静态库文件。
两者的区别是:静态库每次调用都会生成一个副本,共享库只有一个副本。
- 链接库:
target_link_libraries(可执行文件的名称:main 生成可执行库的名称:Lib)
- 在可执行文件main.cpp 中include库文件的头文件
#include <iostream>
#include "sharedLib.h"
int main() {
printHello();
std::cout << "Hello, World!" << std::endl;
return 0;
}
最终输出:
this is shared library function!
Hello, World!
第二部分
附上对应的作业地址:
https://github.com/allenhsu6/Odom_Calibration
这个所谓的里程计标定,其实就是利用激光雷达的信息,矫正里程计的系统误差。默认认为两者之间存在某种线性关系。通过线性最小二乘法求解!
在这个作业中我们学习了eigen库的基本操作。
网友评论