视觉SLAM十四讲源码的正确打开方式:第3讲 三维空间刚体运动

本文介绍了学习SLAM过程中遇到的实际操作困难,特别是针对《视觉SLAM十四讲》第三讲的实践部分,详细讲解了如何安装和使用Eigen库,包括编译工程和运行示例。还探讨了Eigen几何模块,展示了坐标变换的代码实现,并提供了解决可视化演示中文件路径问题的方法。
摘要由CSDN通过智能技术生成

当你下定决心开始学习SLAM时,看到《视觉SLAM十四讲》的你是否欣喜若狂?
当你学完理论知识准备在实践章节大显身手时,发现源码完全不会跑的你又是否一脸懵逼?
不要怕!
和李哈哈一起刷夜,我们一起康康每讲的实践部分,到底怎么玩。

写在前面的话

和很多初学SLAM的小伙伴一样,我对SLAM、对Linux,甚至对C++都不清楚😴
看了看SLAM十四讲感觉突然有点感觉的时候,实践部分又完全无从下手😟
针对以上这种情况,我决定将自己完成实践部分作业的过程分享出来😚
希望那些和我一样刚开始学习SLAM的小伙伴,能够与我产生共鸣😝
如果对你能有一丢丢帮助,🏀⚽️观众老爷们点个赞👍👍👍👍👍👍

其他各讲实践索引

你可以从这里直接跳转到其他讲的实践讲解:
视觉SLAM十四讲源码的正确打开方式:第1讲 预备知识
视觉SLAM十四讲源码的正确打开方式:第2讲 初识SLAM
视觉SLAM十四讲源码的正确打开方式:第3讲 三维空间刚体运动
李哈哈视觉SLAM十四讲源码的正确打开方式:第4讲 李群和李代数

实践3.2:Eigen

把从GitHub上下载的源码打开,把其中的ch3文件夹拷贝到桌面
如果不知道源码在哪里/怎么下载,可以从索引查看第1讲的内容
我习惯将需要用到的文件拷贝到桌面或桌面的某个文件夹进行测试


本节将讲解如何使用Eigen表示矩阵和向量,在下一节的实践引申至旋转矩阵与变换矩阵的计算。
本节的代码在ch3/useEigen
Eigen 是一个 C++ 开源线性代数库。它提供了快速的有关矩阵的线性代数运算,还
包括解方程等功能。许多上层的软件库也使用Eigen进行矩阵运算,包括 g2oSophus 等。

安装Eigen

安装Eigen的方法书上写的直接用就没啥问题(我就是这么装的)
终端输入:

sudo apt-get install libeigen3-dev

Eigen的头文件默认位置为"/usr/include/eigen3",可以命令行输入以下指令查看电脑安装的位置:

sudo updatedb
locate eigen3

作者提到,Eigen的特殊支出在于,它是纯用头文件搭建起来的库(一般的库应该有头文件&库文件)
所以,在使用时,只需要引入Eigen的头文件,而不需要链接库文件

编译工程

说到这一步,我就来精神了昂!
从何说起呢?😘
很久很久之前,当我开心地打开ch3这个文件夹,以为简单的编译运行就能跑了
然而这个文件的结构完全让我不知所措
最关键的是,书上写的用来指导编译这个程序的CMakeList.txt只有一句话:

include_directories("/usr/include/eigen3")

但是我打开的CMakeList.txt长这个样子:

cmake_minimum_required(VERSION 2.8)
project(useEigen)

set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-O3")

# 添加Eigen头文件
include_directories("/usr/include/eigen3")
add_executable(eigenMatrix eigenMatrix.cpp)

更离谱的是,ch3里边有四个实践的文件夹:
在这里插入图片描述
刚刚提到的CMakeList.txtuseEigen这个文件夹里的,外边居然还有一个CMakeList.txt!😥
这和我在第2讲看到的工程结构完全不一样啊!
直觉告诉我,作者把一整讲的所有源码都放在了一起,用最外层的CMakeList.txt统一调度
后来看来确实如此
看到这里的时候,我果断停下滚去学CMake
学习的成果在这里:(这篇文章我觉得自己写的还是不错的,起码花里胡哨的😏)
CMake自学记录,看完保证你知道CMake怎么玩!!!
非常希望大家粗略的看一下上文,找到里边提到的教程自己做做demo试试看
毕竟迟早要学的嘛
学成归来,开始编译工作,我的方法是在根目录创建一个build文件夹,用来存放编译生成的中间文件:(根目录就是打开ch3之后所在的地方)
在这里插入图片描述
useEigen目录为例,此时该目录文件如下:
在这里插入图片描述

build目录下打开终端,使用编译指令:

cmake ..

该指令后边的两个.是指对上一级目录进行cmake
此时build目录下生成了useEigen目录,其内容如下:
在这里插入图片描述

之后我们仍在build目录下,使用编译指令:

make

这时build目录下的useEigen目录如下:
在这里插入图片描述
可以看到生成了可执行文件eigenMatrix
至此运行前的编译准备过程就完成了


简单说一下这两个指令在干嘛
cmake:根据CMakeList.txt的内容生成编译文件CMakeFiles
make:根据CMakeFiles以及源文件生成可执行文件
由于我们创建了一个build文件夹,所以编译的中间文件及生成的可执行文件保存在了buil目录下
这样说可能不是完全正确,因为我对在build目录下编译的原理还不是很清楚,后续搞懂了回来填坑
应该要再创建一个bin目录来把可执行文件放进去统一管理,但这里先不考虑这个了,抓住主要矛盾就好啦🚩

运行useEigen

使用./命令来运行二进制可执行文件,具体运行方法可以输入以下指令:

./useEigen/eigenMatrix 

在命令行中输入指令效果如下:
在这里插入图片描述关于代码的讲解可以参照这篇还不存在的文章🚩
实践3.2:Eigen
师傅别念了,已经在写了啦😟
关于本节的代码,我加了一丢丢注释,贴在下边啦:

#include <iostream>

using namespace std; //使用std名称空间

#include <ctime>
// Eigen 核心部分
#include <Eigen/Core>
// 稠密矩阵的代数运算(逆,特征值等)
#include <Eigen/Dense>

using namespace Eigen; //使用Eigen名称空间

#define MATRIX_SIZE 50

/****************************
* 本程序演示了 Eigen 基本类型的使用
****************************/

int main(int argc
  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值