【激光SLAM】基于图优化的激光SLAM 方法(Grid-based)

文章目录

  • Graph-based SLAM
    • 数学概念
  • 非线性最小二乘(Non-Linear Least Square)
    • 解决的问题
    • 误差函数
    • 线性化
    • 流程
  • 非线性最小二乘在SLAM中的应用
    • 图的构建(SLAM前端)
    • 误差函数
    • 误差函数的线性化
    • 固定坐标系
    • 构建线性系统
    • 求解
  • Cartographer介绍

Graph-based SLAM

数学概念

非线性最小二乘(Non-Linear Least Square)

解决的问题

  • 给定一个系统,其状态方程由f(x) = z描述。其中:
    • x为该系统的状态向量——即需要估计的值(在激光SLAM中就是机器人的位姿)
    • f(x)是一个非线性的映射函数
    • 状态向量x,可以通过非线性函数f(x)映射得到z,此时的z为预测得到
    • z表示系统的可观值,可以通过传感器进行直接观测
  • 给定该系统的n个混有噪声的观测值(z1,…,zn),估计状态向量x,使得其经过f(x)映射之后的预测值和观测值的误差最小
  • 跟非线性最小二乘基本相同,不同之处在于f(x)是一个非线性函数

误差函数

目标为最小化预测和观测的差,因此误差即为预测和观测的差:

假设误差服从高斯分布,因此其对应的信息矩阵为Σi,即观测值的可靠性。如果越信任该观测值,Σ就越大,则E就越大,越优先最小化这个误差。则因此该观测值误差的平方定义为:

每一个观测值都有不同的可靠性,因此我们实际上采用加权最小二乘,对每一个误差项我们都有一个权重矩阵(即信息矩阵)来进行加权。所以非线性最小二乘的目标函数为:


直接想法: 求F(x)关于变量x的导数,令其等于0,求解方程即可。
对于线性问题,该方法可以正确,但是对于非线性问题不正确。因此,对于F(x)这样关于x的非线性方程。我们使用泰勒展开对其线性化

线性化

F(x)是关于x的非线性函数的原因是,误差函数ei(x)是一个非线性函数。因此直接对误差函数ei(x)进行线性化即可:

其中J为映射函数对状态向量x的导数,称之为Jacobian矩阵:

因此函数F(x)的可化解为:

F(x+Δx)为关于变量∆x的二次函数,其极值可通过令其关于∆x的导数等于0求解得到:

令x = x + ∆x,然后不断迭代,直至收敛即可。

流程

  1. 线性化误差函数:

  2. 构建线性系统:

  3. 求解线性系统:

  4. 更新解,并不断迭代直至收敛:

非线性最小二乘在SLAM中的应用

图的构建(SLAM前端)

误差函数


误差函数的线性化



固定坐标系

观测值观测到的值两个位姿之间的相对位姿。但是满足相对位姿约束的解有无穷多组。为了让解唯一,必须加入一个约束条件让某一个位姿固定,一般选择第一个位姿,即:

等价于加入的约束为:

求解的线性系统为:

因此等价于:

构建线性系统

求解

Cartographer介绍

  • 基于图优化的SLAM算法
  • 比较完善的匹配系统,包含建图和定位
  • 目前效果最好的开源激光SLAM系统
  • 有人在专门的维护,不断增加新的特性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

µC/OS-II---任务就绪表

目录 任务就绪表的结构使任务进入就绪状态OS_LOWEST_PRIO <= 63(以28为例)OS_LOWEST_PRIO <= 254(以65为例)使任务脱离就绪状态获取任务就绪表中优先级最高的就绪任务优先级判定表OSUnMapTbl[ ]OS_LOWEST_PRIO <= 63OS_LOWEST_PRIO <= 254任务就绪表的结构 由两…

matlab 凸轮轮廓设计

1、内容简介 略 46-可以交流、咨询、答疑 2、内容说明 略 4 取标段的分析 取标装置是贴标机的核心部件之一&#xff0c;是影响贴标质量和贴标精度的重要因素&#xff0c;取标段是通过取标板与标签的相切运动使得涂有胶水的取标板从标签盒中粘取标签纸[4]&#xff0c;理论…

程序员的护城河是什么?最终走向……?

程序员未来会大量失业&#xff0c;就是因为社会需求少&#xff0c;导致开发者岗位减少&#xff0c;人力资源过剩所导致。Android刚开始的零几年非常火热&#xff0c;是个人都要。到如今的内卷&#xff0c;高级开发都拿着中低程序员的薪资。这是因为头部大厂形成标准化&#xff…

键盘录入 Scanner 详解

键盘录入 涉及方法 next&#xff08;&#xff09;、nextLine&#xff08;&#xff09;、nextInt&#xff08;&#xff09;、nextDouble&#xff08;&#xff09; 键盘录入得到的字符串是new出来的 1&#xff09;next&#xff08;&#xff09;、nextLine&#xff08;&#x…

【总结】Maxwell学习笔记

1.Maxwell简介 Maxwell 是一款用Java编写的MySQL变更数据抓取软件&#xff0c;它会实时监控Mysql数据库的数据变更操作&#xff08;包括insert、update、delete&#xff09;&#xff0c;并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流数据处理平台 官网地址&#xff1a;M…

PTA - 求奇数分之一序列前N项和

本题要求编写程序&#xff0c;计算序列 1 1/3 1/5 ... 的前N项之和。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中按照“sum S”的格式输出部分和的值S&#xff0c;精确到小数点后6位。题目保证计算结果不超过双精度范围。 输入样例: 23输出样例: …

Java 面试题基础(六)

Java 面试题基础&#xff08;六&#xff09; 前言1、深拷贝和浅拷贝&#xff1f;2、poll() 方法和 remove() 方法的区别&#xff1f;3、DelayQueue实现延时任务原理&#xff1f;4、ArrayList 与 LinkedList 的区别&#xff1f;5、用哪两种方式来实现集合的排序&#xff1f;6、L…

css控制元素像素计算方式

box-sizing: border-box; 是一个CSS属性&#xff0c;用于更改元素盒模型的计算方式。 在CSS中&#xff0c;每个元素都被视为一个盒子&#xff0c;这个盒子由内容、内边距&#xff08;padding&#xff09;、边框&#xff08;border&#xff09;和外边距&#xff08;margin&…

FFmpeg的HEVC解码器源代码学习笔记-2

摘要 这篇主要厘清FFmpeg如何调用多种视频编解码代码进行解码的主要函数调用逻辑 背景 FFmpeg作为一个视频编解码开源框架&#xff0c;被企业和个人广泛使用&#xff0c;但是一直不清楚他是怎么调用多种编解码器的&#xff0c;由于现在想做一个HEVC的码流分析器&#xff0c;…

利用HubSpot出海营销CRM扩大企业在东南亚市场的影响力

东南亚市场作为全球最具活力和潜力的市场之一&#xff0c;吸引着越来越多的企业前来拓展业务。在这个竞争激烈的市场中&#xff0c;如何高效地管理营销和客户关系成为了企业成功的关键。今天运营坛将介绍如何利用HubSpot这一出海营销CRM工具&#xff0c;实现在东南亚市场的影响…

本地部署ChatGPT

发布一下我之前做的一个本地大模型部署,不需要API key,但要有自己的账号 利用Docker 的Pandora做本地ChatGPT模型部署 先下载安装Docker,设置好运行如下 会要求升级核心,cmd运行如下命令就OK 安装Pandora 再管理员cmd中输入如下命令拉取Pandora镜像 docker pull pengzhi…

js之事件代理/事件委托

事件代理也叫事件委托&#xff0c;原理&#xff1a;利用DOM元素的事件冒泡&#xff0c;指定一个事件的处理程序就可以管理某一类型的所有事件。 事件冒泡和事件捕获 如上图所示&#xff0c;事件传播分成三个阶段&#xff1a; 捕获阶段&#xff1a;从window对象传导到目标节点&…

Nginx的重定向,nginx.conf中location的匹配,rewrite介绍,Nginx发内置变量

目录 一、Nginx的内置变量 二、Nginx中的配置选项和指令 三、Nginx常见的正则表达式 四、location匹配 4.1、location分类 4.2、location常用的匹配规则 4.3、location优先级 4.4、实际网站中使用的匹配规则 五、rewrite介绍 5.1、rewrite作用 5.2、rewrite跳转实现 5.…

【MySQL面试复习】详细说下事务的特性

系列文章目录 在MySQL中&#xff0c;如何定位慢查询&#xff1f; 发现了某个SQL语句执行很慢&#xff0c;如何进行分析&#xff1f; 了解过索引吗&#xff1f;(索引的底层原理)/B 树和B树的区别是什么&#xff1f; 什么是聚簇索引&#xff08;聚集索引&#xff09;和非聚簇索引…

猫毛过敏却想养猫时?如何缓解猫毛过敏?宠物空气净化器推荐

作为一个新养猫的主人&#xff0c;一开始并没有发现对猫咪过敏。直到养了半年才意识到这个问题&#xff0c;而此时我已经和猫咪有了深厚的感情。我不想放弃我的猫咪&#xff0c;但是留着它的话&#xff0c;我经常会因为流眼泪、打喷嚏、眼睛发红等过敏症状而影响日常生活&#…

Unity编辑器扩展之Text组件中字体替换工具

想要批量化替换项目预制体资源中Text组件引用的Font字体文件&#xff0c;可以采用以下步骤。 1、在项目的Editor文件中&#xff0c;新建一个名为FontToolEditor的C#脚本文件&#xff0c;然后把以下代码复制粘贴到新建的FontToolEditor的C#脚本文件中。 using System.Collect…

【深度学习笔记】3_14 正向传播、反向传播和计算图

3.14 正向传播、反向传播和计算图 前面几节里我们使用了小批量随机梯度下降的优化算法来训练模型。在实现中&#xff0c;我们只提供了模型的正向传播&#xff08;forward propagation&#xff09;的计算&#xff0c;即对输入计算模型输出&#xff0c;然后通过autograd模块来调…

哪只基金更值得买入?学会这套BI基金分析逻辑,稳赚不赔

投资基金是一种出色的理财方式&#xff0c;对于初次涉足基金领域的投资者而言&#xff0c;首先需要解决两个关键问题&#xff1a;一是基金是否值得投资&#xff1f;二是如何选择适合自己的基金&#xff1f; 以往盲目跟随成功的基金经理&#xff0c;或者仅仅依赖历史涨跌经验的…

消息中间件之RocketMQ源码分析(十七)

Broker CommitLog索引机制的数据结构 ConsumerQueue消费队列 主要用于消费拉取消息、更新消费位点等所用的索引。源代码参考org.apache.rocketmq.store.ConsumerQueue.该文件内保存了消息的物理位点、消息体大小、消息Tag的Hash值 物理位点:消息在CommitLog中的位点值消息体…

Android 水波纹扩散效果实现

人生只是一种体验&#xff0c;不必用来演绎完美。 效果图 View源码 package com.android.circlescalebar.view;import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.…