VINS-Mono阅读先导篇

2022-08-05 11:46:44 浏览数 (1)

一直对SLAM技术感兴趣,断断续续的研究过一段时间,这次又听了相关的讲座,啧(DJI自动驾驶的负责人,从0到1,应该算巨佬授课了)。总之就是一堆数学,编程就是个弟弟:

找不到什么好图了

其实这个SLAM的领域它不是很新,一直有人研究,不过是近期提上日程了。但是因为大家一直精力不在这里,所以就显得不是有很多系统的学习资料。

我倒是找到一本这样的书,感觉写的很好

此为目录

还有这本啦,一定会说的

这本书叫多视角几何

这本书我应该是写过一个中文的地址的文章的,就是我不记得名字了,感兴趣的找找?

我目前可以找到系统的资料就似乎这些了,但是其中还缺少很多数学的基石,哥们儿也说不多了,有机会继续叨叨。

任何理论最终都是要落地的,也就是说要有代码的实现,那开源项目就是一个极好的入手点。

VINS这个项目的star很多

IEEE18年收的论文

最后是沈博士,啧,也就是说其实是港科大的文章。我其实一直在看香港学校的一些科研成果,港科大不知道是低调还是怎么回事,其实出现在公共视野的时候不多。

单目视觉惯性系统(VINS)由相机和低成本惯性测量单元(IMU)组成,构成了公制六自由度(DOF)状态估计的最小传感器套件。然而,缺乏直接距离测量在IMU处理、估计器初始化、外在校准和非线性优化方面提出了重大挑战。在这项工作中,介绍了VINS-Mono:一种坚固耐用且多功能的单目视觉惯性状态估计器。方法从用于估计器初始化和故障恢复的强大过程开始。使用基于紧密耦合的非线性优化方法,通过融合预先集成的IMU测量和特征观察来获得高精度的视觉惯性里程计。环路检测模块与紧密耦合配方相结合,能够以最小的计算开销实现重新定位。还执行四个自由度姿态图优化,以强制实施全局一致性。在公共数据集和实际实验中验证了我们系统的性能,并与其他最先进的算法进行了比较。还在MAV平台上执行机载闭环自主飞行,并将算法移植到基于iOS的演示中。

VINS是ROS上面开发的,代码大概是1500的样子,还是1w5来着???

趁着ROS这个档口,我又想读一手ROS的实现源码,虽然现在ROS2大行其道,但是无所谓哇,能用就行。

特别的就是要看一份叫common的核心实现,下面这个其实是一个工程管理的代码,也无所谓了~

下载的源码

这个有很多的分支,自己去下载

我看的是这个版本的

ROS Groovy Galapagos是第六个ROS发行版,于2012年12月31日发布。在此版本中,我们专注于ROS的核心基础架构,使其更易于使用,更加模块化,更具可扩展性,跨大量操作系统/硬件架构/机器人工作。

rosbuild 包含用于管理基于 CMake 的 ROS 构建系统的脚本。

里面的工具命令

rosbash: 在bash中使用ros的各种shell命令。

rosbash_cfg: 包含rosboost-cfg工具所使用的脚本,用于确定你系统上boost的cflags/lflags/等等。

rosclean: rosclean:清理文件系统资源(如日志文件)。

roscreate: roscreate包含一个协助创建ROS文件系统资源的工具。它提供roscreate-pkg,它创建了一个新的软件包目录。包括适当的构建和清单文件。

rosmake: rosmake是一个ros依赖性提醒的构建工具,可以用来以正确的顺序构建所有的依赖项。

rosunit: ROS的单元测试包。它是rostest的一个低级库,处理单元测试,而rostest处理集成测试。

ros-noetic-devel:roscore相关实现,roslib的实现。

而带devel后缀的package,则包含使用这个package开发程序的所有的必需文件。

也就是说:

devel 包主要是供开发用,至少包括以下2个东西:

1. 头文件

2. 链接库

有的还含有开发文档或演示代码。

roslib是所有ROS客户端库和工具的基础依赖。它包含了常见的工具,如消息和服务的生成器,以及常见的消息定义,如Header和Log。它还包含了ROS Python节点和工具的通用路径启动代码。

还有VSCode还有ROS的插件,但是WIN10,十动然拒

还有一些功能

但是后面卸载了,用不上。

ros_comm堆栈包含 ROS 中间件/通信包。这些包统称为 ROS“图形”层。它们为主题、节点、服务和参数提供实现和工具。

就是在这里面的实现

开源无人机集群.1(ROS介绍)

ROS教程-节点广播和接收自定义信息

ROS教程-广播坐标系

Ubuntu18.04 ROS安装(死命填坑版)

ROS编译教程.1

Ubuntu 18.04杂记(ROS安装 indicator-sysmonitor)

还有几个,自己搜索一下。

在论文实现的里面还有大量的数值计算,所以也有Eigen:

这是它所有的计算模块,使用的时候导入对应的头文件就好

代码语言:javascript复制
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using Eigen::MatrixXd;
int main()
{
  MatrixXd m(2,2);//MatrixXd表示是任意尺寸的矩阵ixj, m(2,2)代表一个2x2的方块矩阵
  m(0,0) = 3;//代表矩阵元素a11
  m(1,0) = 2.5;//a21
  m(0,1) = -1;//a12
  m(1,1) = m(1,0)   m(0,1);//a22=a21 a12
  cout << m << endl;//输出矩阵m
}

一个简单的demo

代码语言:javascript复制
sudo apt-get install libeigen3-dev

安装的时候一个命令就OK。

Eigen只包含头文件,因此它不需要实现编译(只需要使用#include),指定好Eigen的头文件路径,编译项目即可。

Eigen头文件的默认安装位置是:“/usr/include/eigen3”.

另外也推荐一个叫Notepad3的文本工具

代码语言:javascript复制
https://arxiv.org/abs/1708.03852v1
代码语言:javascript复制
https://blog.csdn.net/loyer_kong/article/details/120554186
代码语言:javascript复制
https://zhuanlan.zhihu.com/p/145775510
代码语言:javascript复制
http://ros.org/wiki/rosbuild
代码语言:javascript复制
https://zhuanlan.zhihu.com/p/36706885

0 人点赞