分类: SLAM

论文笔记:Deep Closest Point: Learning Representations for Point Cloud Registration

DCP 是一篇基于 Deep Learning 来解决 ICP 问题的,其中 Deep Learning 部分主要用于做匹配,后端仍然沿用 SVD 的方法。比很多 MLP 直接出 Pose 的合理,也取得了更好的效果。在与传统方法例如 Go-ICP 以及深度学习方法 PointNetLK 的对比中,都取得了一定的优势。1 经典 ICP 问题 这一部分在之前的论文笔记中已经有了比较详细的阐述,参见:使用 SVD 方法求解...

使用 SVD 方法求解 ICP 问题

本文是结合《Least-Squares Rigid Motion Using SVD》和《Least-Squares Fitting of Two 3-D Point Sets》两篇文章写的一个总结,里面有一些是自己的理解不一定正确。 1 问题定义 假设我们有两个点云集合 和 ,则我们定义的 ICP 问题是通过最小化点对之间距离获得相应的 Pose: 其中 代表每个点的权重。R 和 t 是我们所要求的旋转矩阵和平移向量。 2 计算平移 我们分两步求解旋转和平移,首先求解 t。固定...

论文笔记:Dynamic Graph CNN for Learning on Point Clouds

DGCNN 是对 PointNet 的改进,PointNet 网络每个点单独提取特征缺乏局部关联。DGCNN 提出了 EdgeConv 就是对它的改进。 1 网络结构 DGCNN 网络结构如下图所示,可以看出其整体架构和 PointNet 是基本一致的,主要区别就是将其中的 MLP 替换成了 EdgeConv。2 EdgeConv 2.1 EdgeConv 结构上图是 EdgeConv 的示意图。假设一个F维点云 其中 F 表示每个点的维度,最简单的可能是 x,...

论文笔记:GCNv2: Efficient Correspondence Prediction for Real-Time SLAM

GCNv2 是一个专门针对几何匹配的描述子网络,是对 GCN 的改进版主要工作如下:1)与常见深度学习特征匹配的性能并且显著减少了前向运算的时间;2)加入了二值化层,生成二值特征。 1 GCNv2 网络结构 GCNv2 网络结构如下图所示:这一结构不必赘述,其实跟 SuperPoint 很像,不过 Descriptors 部分是把 Keypoints 直接拿来取了相应的部分。PixelShuffle (有人也叫作 Sub-pixel Convolution 或者亚像素卷积)在文章(《Real-Time Single Image and Video Super-Resolution Using an Efficient...

DTAM 中的 Cost Volume 笔记

DTAM 是比较经典的基于 RGBD 的 SLAM 算法,其中的 Cost Volume 部分也是后续比较常见的模块,这里进行一下记录。 1 定义说明 定义 表示从相机坐标系 到世界坐标系 的变换矩阵: 其中 表示旋转矩阵, 表示平移向量。 则对于空间中一个点具有如下变换关系: 以及投影操作: 反投影操作: 其中 表示像素 对应的逆深度。 则 2D...

Semantic SLAM 文章收集

截至目前 Semantic SLAM (注意不是 Semantic Mapping)工作还比较初步,可能很多思路还没有打开,但可以预见未来几年工作会越来越多。语义 SLAM 的难点在于怎样设计误差函数,将 Deep Learning 的检测或者分割结果作为一个观测,融入 SLAM 的优化问题中一起联合优化,同时还要尽可能做到至少 GPU 实时。 这一篇博客我将尽力收集一些有代表性的文章,提供下载和简单思路的理解,但个人精力、能力有限也欢迎大家随时提供更多更好的文章。 1、《Probabilistic Data Association for Semantic SLAM》 ICRA 2017语义 SLAM 中的概率数据融合,感觉应该算开山鼻祖的一篇了。这篇也获得了 ICRA...

欧拉积分、中点积分与龙格-库塔积分

在 SLAM 系统中经常用到各种不同的数值积分方法,工程上最常见的有三种:欧拉积分(Euler method)、中点积分(Midpoint method)和龙格-库塔法积分(Runge–Kutta methods)。他们的区别就是如何用数值方法模拟一个斜率。这里简单总结如下: 一、欧拉积分 设有如下微分方程: 并且 和 时刻的差为 ,则欧拉积分定义为: 也就是说用 t 时刻的斜率作为整个 时刻的导数。 二、中点积分 设有如下微分方程: 并且 和 时刻的差为 ,则显式中点积分定义为: 则隐式中点积分定义为: 也就是说用 时刻的斜率作为整个 时刻的导数。 欧拉积分与中点积分都是一阶近似并没有本质不同,二者只是一阶导数所取位置不同,他们的性能也有差别,如下图所示,作为一阶积分近似方法来讲,中点积分有时会稍好一些(带来更快的收敛速度)。图示为方程 ...

VI ORB SLAM2 与 VINS 对比实验

一、实验说明 之前做了一些 VI ORB SLAM2 与 VINS Mono 性能的对比试验,由于 VI ORB SLAM2 并没有官方的版本,我们主要使用王京实现的一个版本(https://github.com/jingpang/LearnVIORB)来做测试(我们加入了双目 VIO 部分,但不论单目还是双目该版本实现与官方版本性能有较大差距)。VINS Mono (https://github.com/HKUST-Aerial-Robotics/VINS-Mono)是港科大开源的一个单目 VIO 算法,速度快而且性能不错,同样受到很大关注。本篇博客我们对二者进行了一些粗浅的实验对比。 说明如下: 1、实验主要指标为 RMSE: 其中: 代表真值, 代表估计值。 2、实验采用 EuRoC 测试集(https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets)。以下是一些初步的实验结果,做一记录。因为没有深入研究和调试,试验次数也比较有限,不一定具有代表性。如大家有任何改进建议或者疑问欢迎留言。 二、实验结果 1、ORB 与 VI...

使用 evo 工具评测 VI ORB SLAM2 在 EuRoC 上的结果

最近把 ORB SLAM2 作者融合 IMU 版本的算法 《Visual-Inertial Monocular SLAM with Map Reuse》 论文读了一遍,作者没有开放源代码,所以我是使用王京实现的一版开源代码(https://github.com/jingpang/LearnVIORB)进行了一些实验。LearnVIORB 代码有一些崩溃的 bug,在 Mac 上面编译有问题,不过实现了作者文中的基本思想,是非常好的一份实现。 由于只有 EuRoC 测试集有 VIO 的数据,我使用了 EuRoC 测试集进行测试,不过在实际运行中遇到了几个问题。 0、系统环境 macOS Sierra v10.12.6 1、evo...

[ROS] 多传感器卡尔曼融合框架 Ethzasl MSF Framework 编译与使用

多传感器融合是机器人导航上面一个非常基本的问题,通常在一个稳定可用的机器人系统中,会使用视觉(RGB或RGBD)、激光、IMU、马盘等一系列传感器的数据来最终输出一个稳定和不易丢失的姿态。Ethzasl MSF Framework 是一个机器人上面的多传感器融合框架,它使用了扩展卡尔曼的原理对多传感器进行融合。同时内部使用了很多工程上的 trick 解决多传感器的刷新率同步等问题,API 封装也相对简单,非常适合新手使用。 0、系统环境: Ubuntu 14.04.3 ROS indigo 1、新建 MSF 工作目录: 在命令行执行如下命令: Shell mkdir -p MSF/src cd ./MSF/src catkin_init_workspace 123 mkdir -p MSF/srccd ./MSF/srccatkin_init_workspace 退出 src 目录到 PATH_TO_MSF 根目录下,编译生成 ROS 工程文件: Shell cd .. catkin_make 12 cd...