SLAM 概述

SLAM首先要解决自主运动的两大基本问题

  1. 我在什么地方?——定位
  2. 周围环境是什么子?——建图

SLAM与定位与建图又有着联系:内外兼修 ;定位侧重对自身的了解,建图侧重对外在的了解;它与两者又相互关联;准确的定位需要精确的地图;精确的地图来自准确的定位。

本文是 SLAM 入门概述,从”我在哪里、周围环境是什么”两大基本问题出发,梳理了视觉 SLAM 的前端视觉里程计、后端优化、回环检测与建图四大模块,并给出运动方程与观测方程的数学描述。文章还介绍了内质与外质传感器、单目/双目/RGB-D 相机的分类及各自的深度获取方式。

定位与建图,内外兼修方得完整地图

阅读更多...

处理 H 自由度的不同方法

视觉-惯性状态估计过程中有四个自由度需要进行额外处理,它们是一个平移变量(3个自由度)和绕重力轴方向的旋转(1个自由度)。

视觉惯性状态估计最多可以达到四自由度的转换(围绕重力的旋转和平移),因此必须正确处理额外的自由度 。尽管在实践中使用了不同方法处理多余自由度,但没有任何研究来系统地分析它们的差异。本文介绍了在基于优化的视觉惯性状态估计中处理量测自由度的不同方法的对比分析。通过实验比较了三种常用方法:

  1. 将不可观察的状态固定为给定值,
  2. 在这些状态上设置先验
  3. 在优化过程中让状态自由地优化。

实验表明:

  1. 三种方法的准确性和计算时间相似,自由量测方法稍快一些;
  2. 自由优化法的协方差估计似乎有很大的不同,但实际上与其他方法紧密相关。

本文对比了基于优化的视觉惯性状态估计中处理不可观测自由度的三种方法:固定规范状态、施加规范先验与自由优化。文章指出 VI 系统存在绕重力方向的旋转与整体平移共四个测量自由度,实验表明三种方法的精度与计算时间相近,自由方法略快,且其协方差估计经变换后与其他方法的结果密切相关。

不可观自由度处理得当,状态估计稳健可靠

阅读更多...

CMake 指令手册

Cmake 是 kitware 公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品,最终形成体系,成为一个独立的开放源代码项目。

本文主要记录书写Cmake的大致流程

本文按书写 CMakeLists.txt 的流程,逐一剖析 project、ADD_EXECUTABLE、SET、FIND_LIBRARY 等常用指令,讲解内部构建与外部构建的区别,并附上可直接套用的 CMake 基础模板与常用变量速查表。

写好 CMake,构建事半功倍

阅读更多...

C++ 多线程编程

多线程是学习SLAM过程中不可缺少的一步,正确的使用多线程能使SLAM系统的运行速度提升很多,达到更高的精度和速度。本节就来学习SLAM中的多线程编程方法。

本文讲解 SLAM 学习中常用的 C++ 多线程编程,从线程的概念与优点讲起,介绍了 C++11 标准库中 std::thread 的创建、join/detach 与终止方法,并覆盖互斥锁(lock_guard、unique_lock)和信号量等同步机制。文末通过按序打印、交替打印 FooBar、哲学家进餐等经典并发例题演示实际用法。

多线程用好,并发计算快人一步

阅读更多...

ORB-SLAM2 双目立体匹配

本节主要学习ORB_SLAM2中的双目立体匹配算法的实现过程

本文从源码层面学习 ORB_SLAM2 双目稀疏立体匹配的实现(主要在 frame.cc):梳理从帧 ID 分配、图像金字塔参数设置、左右图双线程提取 ORB 特征,到特征点去畸变、双目特征匹配与深度计算的完整流程。

稀疏点匹配成功,稠密深度随之而来

阅读更多...

堆与优先队列

堆(heaps)是一种特殊的数据组织方式,STL 中的 priority_queue 容器适配器底层就是采用堆来组织数据存储的。为了弄明白堆是什么,首先要搞清楚什么是树存储结构。

本节就来学习C++中点的堆于优先队列。

本文学习 C++ 中的堆与优先队列,先讲解二叉堆的概念、大顶堆与小顶堆的性质以及用数组存储堆的方式,再介绍 STL 中 priority_queue 的常用操作。文章指出优先队列本质上就是堆,入队出队复杂度为 O(log n),最后以”数据流中的中位数”面试题演示堆的实际应用。

堆顶即最值,优先队列取舍有序

阅读更多...

C++ 位运算

本节主要学习C++中的位运算。

位运算符列表如下:

操作符 功能 用法
~ 位求反 ~expr
<< 左移 expr1 << expr2
>> 右移 expr1 >> expr2
& 位与 expr1 & expr2
^ 位异或 expr1 ^ expr2
| 位或 expr1 | expr2

本文介绍 C++ 位运算的常用技巧,列出位求反、移位、与或异或六种操作符,并给出求二进制中 1 的个数、对齐到 8 的倍数、取整型最值、判断符号、交换两数及提取与修改指定位等经典用法与代码。

位运算虽简,威力不容小觑

阅读更多...

OpenCV 重要函数

本节用来总结SLAM学习过程中,用到的重要的opencv函数

本文总结 SLAM 学习中常用的 OpenCV 函数,重点介绍 calcOpticalFlowPyrLK 金字塔 LK 光流函数的参数含义与用法,并补充 circle 画圆与 goodFeaturesToTrack 角点检测函数的参数说明及 VINS-Fusion 应用示例。

熟悉参数含义,SLAM 开发得心应手

阅读更多...
  • © 2019-2026 guoben

微信