当前位置: 首页 > news >正文

从零实战SLAM-第九课(后端优化)

 在七月算法报的班,老师讲的蛮好。好记性不如烂笔头,关键内容还是记录一下吧,课程入口,感兴趣的同学可以学习一下。

-------------------------------------------------------------------------------------------------------------------------------

后端的目标:从带噪声的数据估计内在状态——状态估计问题。主流方法分为两大类:

❑ 渐进式(Incremental/Recursive)

❑ 批量式(Batch)

其中,渐进式(Incremental/Recursive)的思想和主流方法如下:

➢ 保持当前状态的估计,在加入新信息时,更新已有的估计(滤波)

➢ 线性系统+高斯噪声=卡尔曼滤波器

➢ 非线性系统+高斯噪声+线性近似=扩展卡尔曼

➢ 非线性系统+非高斯噪声+非参数化=粒子滤波器

➢ Sliding window filter & multiple state Kalman(MSCKF)

批量式(Batch)的思路为:

➢ 给定一定规模的数据,计算该数据下的最优估计(优化)

渐进式的作用是根据观测的结果,修正自己对位姿的估计。没有观测,则随着机器人的移动,自身的位姿误差会越来越大。

与之前保持一致,xk表示位姿,zk表示观测

则k时刻的位姿,与原始位姿、运动序列和观测序列有关

这其中涉及到当前时刻与之前各时刻位姿之间的关系,一般分为两种:

➢ 假设𝑘时刻状态只和𝑘-1时刻有关

➢ 假设𝑘时刻状态与先前所有时刻均相关

常用第一种,也叫作马尔科夫性。

.

其中,卡尔曼滤波用在线性模型、高斯噪声的情况之下

高斯分布的线性变换,仍然属于高斯分布。

计算过程很复杂,最后只要记住这几个公式即可。

当运动函数与观测函数为非线性函数时,用一阶Taylor展开

分析的工具为扩展卡尔曼滤波

扩展卡尔曼滤波的优缺点

❑ Advantage

➢ 推导简单清楚,适用各种传感器形式

➢ 易于做多传感器融合

❑ Disadvantage

➢ 一阶马尔可夫性过于简单

➢ 可能会发散(要求数据不能有 outlier)

➢ 线性化误差

➢ 需要存储所有状态量的均值和方差,平方增长

批量法的思路

Bundle Adjustment问题与图结构的关系:

➢ BA虽然是个纯优化问题,但亦可以用图模型清晰地表述出来

➢ 顶点为优化变量,边为运动/观测约束

➢ 本身还有一些特殊的结构

BA使用高斯-牛顿或者L-M算法计算

这里的雅可比矩阵为一个稀疏阵。

目标函数与雅可比矩阵的情况

雅可比矩阵与H矩阵的稀疏性特点

图模型结构与H矩阵之间的映射关系

利用H矩阵的特点,可以加速计算过程。

迭代法与批量发之间的区别

在SLAM中使用Bundle Adjustment,用来做关键帧和地图的管理

批量方法:

➢ 用BA优化一部分图

➢ 其余的固定

递归方法:

➢ 保留一定数量的关键帧

➢ 使用BA来优化窗口内的关键帧

➢ 新的关键帧到来时,边缘化老的关键帧

位姿图与BA之间的关系

实际当中Bundle Adjustment的计算量很大:

➢ 通常放在单独的后台线程中计算而无法实时

➢ 主要计算来自于大量的特征点

Pose Graph 即是省略了特征点的 Bundle Adjustment。

位姿图的计算过程

http://www.lryc.cn/news/126913.html

相关文章:

  • Python Opencv实践 - 图像金字塔
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的固定帧率(C++)
  • 计算机竞赛 python+大数据校园卡数据分析
  • DNNGP模型解读-early stopping 和 batch normalization的使用
  • 【目标检测】目标检测 相关学习笔记
  • 面试攻略,Java 基础面试 100 问(十六)
  • 章节5:脚本注入网页-XSS
  • ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031)
  • 迅捷视频工具箱:多功能音视频处理软件
  • linux--fork()详解
  • go_并发编程(1)
  • 第一百一十五回 权限管理包permission_handler
  • 【机器学习】sklearn数据集的使用,数据集的获取和划分
  • Mysql之 optimizer_trace 相关总结
  • 【Linux命令详解 | wget命令】 wget命令用于从网络下载文件,支持HTTP、HTTPS和FTP协议
  • DockePod信号处理机制与僵尸进程优化
  • NetApp StorageGRID 对象存储,使您能够跨公有、私有云和混合多云环境管理非结构化数据
  • 使用Java服务器实现UDP消息的发送和接收(多线程)
  • Linux--查看端口占用情况
  • 微信小程序|自定义弹窗组件
  • 【数据结构】实现顺序表
  • 【嵌入式环境下linux内核及驱动学习笔记-(19)LCD驱动框架2-FrameBuffer】
  • 自己动手写数据库系统:实现一个小型SQL解释器(中)
  • HTML 与 XHTML 二者有什么区别
  • fiddler抓包问题记录,支持https、解决 tunnel to 443
  • Kubesphere中DevOps流水线无法部署/部署失败
  • 使用Nginx解决跨域问题
  • 在 OpenCV 中使用深度学习进行年龄检测-附源码
  • 【BASH】回顾与知识点梳理(三十一)
  • Linux 终端命令之文件浏览(3) less