第一章 里程计标定

写在前面

我在CSDN上写了一套关于ros基础的图文教程,欢迎关注!!!


第一部分、 c++编译基础

一、hello slam
  1. 编写对应的c++代码
#include 
using namespace std; 

int main( int argc, char** argv )
{
    cout<<"Hello SLAM!"<
  1. 打开终端,进入对应文件目录开始编译
# 直接编译输出名为a.out
g++ helloSlam.cpp
# 指定输出名字
g++ helloSlam.cpp -o helloSlam
二、使用cmake
  1. 编写CMakeLists.txt
# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )

# 声明一个 cmake 工程
project( HelloSLAM )

# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( helloSLAM helloSLAM.cpp )
  1. 调用cmake对工程分析
cmake .

操作之后会在对应文件夹下生成一些中间文件,其中最重要的是makefile

  1. 调用make对工程进行编译
make

输出可执行文件helloSLAM(与cmakelist中的名称对应)

  1. 新建build文件管理生成的大量中间文件
mkdir build
cd build
cmake ..
make
三、 使用库

只有带main函数才可以生成可执行文件,对于某些只想直接使用其函数功能的文件,我们通常用库形式调用使用。
一个库往往是许多算法和程序的集合。

  1. 编写库函数
#include 

using namespace std;

void printHello(){
    cout << "this is shared library function!" << endl;
}
  1. 编写对应的头文件
#ifndef TESTLIB_SHAREDLIB_H
#define TESTLIB_SHAREDLIB_H
void printHello();
#endif //TESTLIB_SHAREDLIB_H
  1. 编写cmakelist.txt
    其中关键步骤分三步:
  • 添加可执行库:
add_library(库名:Lib   库函数名:useLib.cpp)

执行完成上述步骤后,会在对应build文件夹下生成库文件。库文件分两种,分别是中间加shared关键字的.so后缀的共享库文件和不加shared关键字的.a后缀的静态库文件。
两者的区别是:静态库每次调用都会生成一个副本,共享库只有一个副本。

  • 链接库:
target_link_libraries(可执行文件的名称:main    生成可执行库的名称:Lib)
  • 在可执行文件main.cpp 中include库文件的头文件
#include 
#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库的基本操作。

你可能感兴趣的:(第一章 里程计标定)