一直对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