丰台企业网站建设/河北网络推广技术
文章目录
- 一、为什么要讲非线性优化
- 二、运动模型和观测模型
- 三、最大似然估计
- 四、SLAM中最小二乘的应用
- 五、总结
一、为什么要讲非线性优化
相信大家在学习一段时间SLAM后,会发现两个问题。第一个是代码能看懂,但是不知道为什么这样做(特别是优化部分)。第二个问题就是数学问题,SLAM最难最迷人的部分在于它很多原理归结到了数学问题上。在看优化的时候,因为g2o库的原因,很多数学公式的内在逻辑没有在代码中展现出来,这几篇文章将从最开始的运动模型和观测模型,一步步的推导到优化中用到的列文伯格-马夸尔方法。将非线性优化放在这里将是因为大家已经有了一定的基础,理解起来会更加的容易。
二、运动模型和观测模型
上述公式是最简单的运动模型和观测模型,x表示相机的位姿,y表示路标的坐标,z表示路标在相机中的像素坐标。我们将其与ORB-SLAM2联系起来,这里的x可以表示每一帧相机的位姿,y表示地图点的世界坐标,z表示地图点在某一帧中的投影像素坐标(特征点的像素坐标)。w和v分别表示运动模型和观测模型中的噪声。通常认为噪声符合高斯分布,如上图所示。这两个模型相机位姿x和像素点坐标z看起来像是待求量,但是在学过一段时间SLAM后就知道,我们关注的是相机的位姿和地图点的时间坐标,也就是x和y。
三、最大似然估计
在上述的两个模型中讲到,我们要求的量是x和y,也就是在u和z的条件下求x和y,这里的u(在追踪线程的恒速跟踪模型中,跟踪速度就相当于u)和z(我们提取的特征点在某一帧中的去畸变坐标)是已知量。故我们要求的是在u和z的情况下x和y的值。这看起来是一个直接计算的问题,但是其中要噪声的干扰使得我们无法求得一个准确得x和y,我们能做的是找出尽可能小得误差下相机得位姿和地图点坐标(x和y)。这个问题就转换成一个概率问题:
我们利用贝叶斯公式将其展开:
可以看出分母与x和y无关,可以将看作比例系数,正比于似然乘以先验。求出x、y条件下z、u的最大概率可以反推,z、u条件下x、y的最大概率,而由于SLAM中没有先验,即求最大似然。
四、SLAM中最小二乘的应用
我们这里以观测模型为例子,讲解单个误差的构成。由上述的观测模型和噪声的高斯特性可以推出下面的公式,我用比较抽象的简笔画简述了原因:
高斯模公式如下图所示,让其取负对数更加容易求解后面的问题
由于对数函数是单调增加的函数,取负对数就是单调减少,故要求最大似然,就要求负对数函数的最小值对应的x,这个公式的第一项与x无关也可以省略,我们将观测模型的高斯表达式代入,即我们要求的是:
我们一开始是以观察模型的一个误差为例,其他误差也是相同的道理,我们将所有的误差累加到一起,求最小值,所得到的x和y才是我们最终需要的x和y。因为我们最终的目的是相机的位姿和地图点的坐标准确,所以不因该求单个误差最小时的x和y,而是所有误差加起来最小时的x和y,即:
公式中的第一项时累积运动误差,第二项为累积观测误差。我们从公式中可以看出,误差项越多,单个误差对相机位姿个地图点坐标的影响就越小,这就是我们在学习优化时怎加约束的原因。
五、总结
本次讲解的内容文字可能不太直观难懂,我自己花了两页纸的空间以流程的形式一步步的进行了推导,能更直观看出每一个步骤直接的因果关系以及推到过程。
相关文章:

ORB-SLAM2 ---- 非线性优化在SLAM中的应用(一)
文章目录 一、为什么要讲非线性优化二、运动模型和观测模型三、最大似然估计四、SLAM中最小二乘的应用五、总结 一、为什么要讲非线性优化 相信大家在学习一段时间SLAM后,会发现两个问题。第一个是代码能看懂,但是不知道为什么这样做(特别是优…...

FastAPI中创建一个多App架构
1. 创建项目结构 首先,设计一个合理的项目结构。这里以三个Apps为例:users、items 和 orders。2. 项目结构 my_fastapi_project/ ├── main.py ├── app/ │ ├── __init__.py │ ├── users/ │ │ ├── __init__.py │ │ ├─…...

计算机网络原理之HTTP与HTTPS
一、前言 为了理解HTTP,我们有必要事先了解一下TCP/IP协议簇。 通常我们使用的网络(包括互联网)是在TCP/IP协议簇的基础上运作的。而HTTP属于它内部的一个子集。 计算机与网络设备要相互通信,双方必须基于相同的方法。比如&#…...

完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)开发板的鸿蒙系统(失败)
基本上完全按照手册来的,除了Ubuntu虚拟机使用了22.04 Jammy版本,鸿蒙手册里是20.04 版本,主要是鸿蒙里3年前的手册了,所以就擅自用了高版本。 据此还想到一点,鸿蒙LiteOS,还挺稳定的,3年也没有…...

vsphere vcenter web 界面的介绍
这是主页的页面...

【pyspark学习从入门到精通23】机器学习库_6
目录 分割连续变量 标准化连续变量 分类 分割连续变量 我们经常处理高度非线性的连续特征,而且只用一个系数很难拟合到我们的模型中。 在这种情况下,可能很难只通过一个系数来解释这样一个特征与目标之间的关系。有时,将值划分到离散的桶中…...

FPGA实战篇(呼吸灯实验)
1.呼吸灯简介 呼吸灯采用 PWM 的方式,在固定的频率下,通过调整占空比的方式来控制 LED 灯亮度的变化。 PWM(Pulse Width Modulation ),即脉冲宽度调制,它利用微处理器输出的 PWM 信号,实现对…...

面经自测——自我介绍
前言 这是作者新开的坑,一切题目都是从网上找的原题,为了总结网上有关的面经,以便在真实面试中较为流利的回答面试官的问题 面试之——自我介绍 自我介绍是面试中最常见的问题之一,主要目的是让面试官了解你的背景、技能和职业…...

在 LS-DYNA 中将应力转换为用户定义的坐标系
介绍 通常,使用 LS-DYNA 或 Ansys Mechanical 等仿真工具解决工程问题需要将张量结果与解析解进行比较。一个这样的例子是加压圆柱体,其中圆周应力或环状应力是感兴趣的主要应力度量。例如,如果对具有复杂端部处理的几何结构进行此类仿真&am…...

【Spark】 groupByKey与reduceByKey的区别
groupByKey 操作:将相同键的所有值收集到一个集合中。实现:不会在map端进行局部聚合,而是直接将所有相同键的数据传输到reduce端进行聚合。缺点:由于没有本地聚合,groupByKey会导致大量的数据传输和shuffle,…...

数据库与数据库管理系统概述
title: 数据库与数据库管理系统概述 date: 2024/12/7 updated: 2024/12/7 author: cmdragon excerpt: 在信息化迅速发展的时代,数据已成为企业和组织的重要资产。数据库与数据库管理系统(DBMS)是高效存储、管理和利用数据的核心工具。本文首先定义了数据库的基本概念和特…...

(简单5步实现,免费且比GPT4.0更好用)部署本地AI大语言模型聊天系统:Chatbox AI + 马斯克grok2.0大模型
摘要: 本文将指导您如何部署一个本地AI大语言模型聊天系统,使用Chatbox AI客户端应用和grok-beta大模型,以实现高效、智能的聊天体验。 引言: 由马斯克X-AI发布的Grok 2大模型以其卓越的性能超越了GPT4.0。Grok模型支持超长文本…...

滚珠螺杆导程的定义与重要性
滚珠螺杆导程是指螺杆每旋转一圈时,螺母(或与之配合的移动部件)沿螺杆轴线方向移动的距离。这个参数在机械设计和制造中非常重要,因为它直接影响到传动系统的速度、精度和效率。 导程是滚珠螺杆的重要参数之一,它与切削…...

【特殊子序列 DP】力扣509. 斐波那契数
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 n > 1 给定 n &…...

linux 架构详解
Linux 是一种开源的操作系统内核,最初由 Linus Torvalds 于 1991 年创建。它是一个基于 Unix 的操作系统内核,用于构建完整的操作系统。Linux 架构是指 Linux 操作系统的内部结构和组成组件的工作方式。 整体架构 Linux系统通常被看作是一个层次化的结…...

Spring Data Elasticsearch
简介说明 spring-data-elasticsearch是比较好用的一个elasticsearch客户端,本文介绍如何使用它来操作ES。本文使用spring-boot-starter-data-elasticsearch,它内部会引入spring-data-elasticsearch。 Spring Data ElasticSearch有下边这几种方法操作El…...

OpenGL编译用户着色器shader
shader相信很多朋友们都听说过,shader就是运行再GPU上的程序。虽然是这么说,但是我们发现,很多IDE开发工具比如说visual studio 没有办法直接去运行shader代码。这是因为,许多编译器不会自动将shader文件编译成可执行的代码然后发…...

过期策略、内存淘汰机制
1.过期策略:请求时删除 定期删除 请求时删除:使用key之前,检查是否过期,属于一种被动的处理方式。 因此,过期时间到了不表示这个key真的被删除了 定期删除:Redis默认每隔100ms检查,有过期ke…...

Scala的正则表达式
package hfdobject Test35_3 {def main(args: Array[String]): Unit {println("a\tb")//定义一个规则 正则表达式//1. .表示除了换行之外的其他的任意单个字符//2. \d等于[0-9] 匹配一个数字//3. \D除了\d之外的其他的任意字符,表示非数字//4. \w等价于[…...

关于睡懒觉
我们经常听到一个词:睡懒觉。 我认为,睡懒觉这个词,是错误的。 人,是需要睡眠的,睡不够,就不会醒。睡够了,自然会醒,也不想继续睡。不信你试试,睡够了,你…...

【算法day10】栈与队列:拓展与应用
题目引用 逆波兰表达式求值滑动窗口最大值前k个高频元素 1.逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 ‘’、‘-’、‘*’ 和…...

爆肝Android JNI - 延展Android蓝牙JNI学习
零. 前言 由于Bluedroid的介绍文档有限,以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等),加上需要掌握的语言包括Java/C/C++等,加上网络上其实没有一个完整的介绍Bluedroid系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员…...

总篇:Python3+Request+Pytest+Allure+Jenkins接口自动化框架设计思路
1、技术选型 Python3 Python 是一种广泛使用的高级编程语言,具有简洁、易读、易维护的特点。 Python 拥有丰富的第三方库,可以方便地进行接口测试的开发。 Request Request 是一个强大的 HTTP 库,用于发送 HTTP 请求和处理响应。 Request 支持多种 HTTP 方法,如 GET、P…...

Java的Map介绍以及常见方法和三种遍历方式
Java的Map介绍以及常见方法和三种遍历方式 1 Java 中的 Map 介绍 在 Java 中,Map 是一个接口,它提供了一种存储键值对(key-value pairs)的方式。每个键(key)都关联着一个值(value)…...

C/C++基础知识复习(39)
1) 什么是封装性?C中如何实现封装? 封装性(Encapsulation)是面向对象编程中的一个重要概念,它指的是将对象的状态(数据)和行为(方法)绑定在一起,并且通过访问…...

自建服务器,数据安全有保障
在远程桌面工具的选择上,向日葵和TeamViewer功能强大,但都存在收费昂贵、依赖第三方服务器、数据隐私难以完全掌控等问题。相比之下,RustDesk 凭借开源免费、自建服务的特性脱颖而出!用户可以在自己的服务器上部署RustDesk服务端&…...

CCF-GESP 编程能力认证 C++ 七级 2024年9月份判断题详细解析
链接:CCF-GESP 编程能力认证 C 七级 2024年9月份选择题详细解析-CSDN博客 目录 第 1 题 第 2 题 第 3 题 第 4 题 第 5 题 第 6 题 第 7 题 第 8 题 第 9 题 第 10 题 第 1 题 表达式 a << 1 的结果为 a(错误) 【a是字符常…...

使用Vue3+Echarts实现加载中国地图,点击省份地图下钻(完整教程)
一. 前言 在众多 ECharts 图表类型中,开发者始终绕不开的有各种各样的地图开发,关于地图开发,可能比其他图表相对繁琐一些,其实说简单也简单,说复杂也复杂,其中不乏有层级地图、3D 地图等,感觉…...

NUMA-非统一内存访问架构
NUMA(Non-Uniform Memory Access) 是一种计算机内存架构,主要用于多处理器系统。NUMA架构中的每个处理器都连接到自己的本地内存,并且可以访问其他处理器的内存,但访问其他处理器的内存速度较慢。 内核通过调度优化进…...

初识交换机和路由器
目录 初识交换机和路由器交换机路由器主要区别工作流程如果是交换机:如果是路由器 初识交换机和路由器 左为路由器,右为交换机 交换机 交换机的前身是集线器,集线器是物理层的设备,有很多接口,当一台计算机A想发消息…...