【视觉SLAM】1-概述

读书笔记

文章目录

  • 1. 经典视觉SLAM框架
  • 2. 数学表述
    • 2.1 运动方程
    • 2.2 观测方程
    • 2.3 问题抽象

1. 经典视觉SLAM框架

在这里插入图片描述

  • 传感器信息读取:相机图像、IMU等多源数据;
  • 前端视觉里程计(Visual Odometry,VO):估计相机的相对运动,生成局部地图,VO又称为前端(Front End);
  • 后端非线性优化(Optimization):接收不同时刻VO测量的相机位姿、回环检测信息,进行联合优化,得到全局一致的轨迹和地图,又称为后端(Back End);
  • 回环检测(Loop Closure Detection):判断机器人是否到达过先前的位置,若检测到回环,则把信息交由后端处理(对VO轨迹产生的累积漂移(Accumulating Drift)误差进行校正);
  • 建图(Mapping):根据估计的轨迹,建立与任务要求对应的地图。

SLAM中地图的形式主要分为度量地图拓扑地图两种:

  • 度量地图(Metric Map):强调精确表示地图中物体的位置关系,通常用稀疏(Sparse)与稠密(Dense)对其分类。选择一部分具有代表意义的物体称为路标(Landmark)(特征点、点云?);
  • 拓扑地图(Topological Map):强调地图元素之间的关系,它是一个图(Graph),由节点和边组成,只考虑节点间的连通性。

2. 数学表述

对于由相机和各类传感器如IMU组成的机器人来说,其在环境中的运动数据可通过两个途径获得:①由传感器数据估计,称为运动;②由相机图像数据估计,称为观测。为了对这两个过程进行数学表述,做如下定义:

  • 在机器人的连续时间运动内取离散时刻 t = 1 , ⋯ , K t=1, \cdots, K t=1,,K
  • x x x 表示机器人自身位置,则其各时刻位置记为 x 1 , ⋯ , x K x_1, \cdots, x_K x1,,xK
  • N N N个路标点表示为 y 1 , ⋯ , y N y_1, \cdots, y_N y1,,yN

分别用运动方程 f ( ⋅ ) f(\cdot) f()观测方程 h ( ⋅ ) h(\cdot) h() 来描述上述两个过程,这两个函数都是一种通用方程表示,这里不用纠结其具体表达式。

2.1 运动方程

x k = f ( x k − 1 , u k , ω k ) x_k=f(x_{k-1},u_k,\omega_k) xk=f(xk1,uk,ωk)
其中, u k u_k uk为运动传感器的输入, ω k \omega_k ωk为该过程的噪声。

2.2 观测方程

机器人在 x k x_k xk位置看到路标 y j y_j yj时,产生观测数据 z k , j z_{k,j} zk,j
z k , j = h ( y j , x k , v k , j ) z_{k,j}=h(y_j,x_k,v_{k,j}) zk,j=h(yj,xk,vk,j)
其中, v k , j v_{k,j} vk,j为观测噪声。

2.3 问题抽象

上述两方程描述了最基本的SLAM问题:已知运动测量读数 u u u、传感器读数 z z z时,如何求解定位问题(估计 x x x)和建图问题(估计 y y y)?

这时,可把SLAM问题建模成一个状态估计问题:如何通过带有噪声的测量数据,估计内部的、隐藏的状态变量。

按照运动和观测方程是否为线性噪声是否服从高斯分布进行分类,上述状态估计问题可分为线性/非线性高斯/非高斯系统。其中线性高斯系统(Linear Gaussian,LG)最简单,其无偏的最优估计可由卡尔曼滤波(Kalman Filter,KF)给出;而复杂的非线性非高斯系统(Non-Linear Non-Gaussian,NLNG)中,可使用扩展卡尔曼滤波器(Extended Kalman Filter,EKF)和非线性优化两大类方法求解。

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

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

相关文章

Isaac Sim+SKRL机器人并行强化学习

目录 Isaac Sim介绍 OmniIssacGymEnvs安装 SKRL安装与测试 基于UR5的机械臂Reach强化学习测评 机器人控制 OMNI GYM环境编写 SKRL运行文件 训练结果与速度对比 结果分析 运行体验与建议 Isaac Sim介绍 Isaac Sim是英伟达出的一款机器人仿真平台,适用于做机…

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用: 函数的局部变量和全局变量 局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。 money 5000000 n…

机器学习基础04

目录 1.朴素贝叶斯-分类 1.1贝叶斯分类理论 1.2条件概率 1.3全概率公式 1.4贝叶斯推断 1.5朴素贝叶斯推断 1.6拉普拉斯平滑系数 1.7API 2.决策树-分类 2.1决策树 2.2基于信息增益的决策树建立 2.2.1信息熵 2.2.2信息增益 2.2.3信息增益决策树建立步骤 2.3基于基…

The Internals of PostgreSQL 翻译版 持续更新...

为了方便自己快速学习,整理了翻译版本,目前翻译的还不完善,后续会边学习边完善。 文档用于自己快速参考,会持续修正,能力有限,无法确保正确!!! 《The Internals of PostgreSQL 》 不是 《 PostgreSQL14 Internals 》…

Android 无签名系统 debug 版本APK push到设备引起的开机异常问题分析(zygote进程)

问题背景 前置操作: 替换原system/priv-app 目录下已有的应用包未未签名的debug版本,然后重启。 现象: 无法正常开机,卡在开机动画,并且pm没有起来,因为执行adb install 命令是返回“cmd: Cant find se…

深度学习推荐系统的工程实现

参考自《深度学习推荐系统》——王喆,用于学习和记录。 介绍 之前章节主要从理论和算法层面介绍了推荐系统的关键思想。但算法和模型终究只是“好酒”,还需要用合适的“容器”盛载才能呈现出最好的味道,这里的“容器”指的就是实现推荐系统…

attention 注意力机制 学习笔记-GPT2

注意力机制 这可能是比较核心的地方了。 gpt2 是一个decoder-only模型,也就是仅仅使用decoder层而没有encoder层。 decoder层中使用了masked-attention 来进行注意力计算。在看代码之前,先了解attention-forward的相关背景知识。 在普通的self-atten…

Java 内存区域详解

对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像 C/C程序开发程序员这样为每一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一…

FluentUI使用

首先向Qt Qml FluentUI组件库的作者zhuzichu520致敬! 一、源码下载地址: 1)GitHub - zhuzichu520/FluentUI: FluentUI for QML 2)GitCode - 全球开发者的开源社区,开源代码托管平台 二、Qt6下载地址: qt-online-i…

【UE5】在材质Custom写函数的方法

UE材质的Custom本身会构建为函数,所以并不能在Custom定义函数,但当然还是有办法的 总结一些在custom写函数的方法 常规办法 常规办法就是使用结构体作为函数使用 以一个Lerp功能函数演示 让我们看看写法: struct VolBlendFunc //定义结…

分享 pdf 转 word 的免费平台

背景 找了很多 pdf 转 word 的平台都骗进去要会员,终于找到一个真正免费的,遂分享。 网址 PDF转Word转换器 - 100%免费市面上最优质的PDF转Word转换器 - 免费且易于使用。无附加水印 - 快速将PDF转成Word。https://smallpdf.com/cn/pdf-to-word

【LeetCode】每日一题 2024_11_14 统计好节点的数目(图/树的 DFS)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:统计好节点的数目 代码与解题思路 先读题:题目要求我们找出好节点的数量,什么是好节点?“好节点的所有子节点的数量都是相同的”,拿示例一…

【模块化大作战】Webpack如何搞定CommonJS与ES6混战(3)

在前端开发中,模块化是一个重要的概念,不同的模块化标准有不同的特点和适用场景。webpack 同时支持 CommonJS 和 ES6 Module,因此需要理解它们在互操作时 webpack 是如何处理的。 同模块化标准 如果导出和导入使用的是同一种模块化标准&…

SystemVerilog学习笔记(十):进程/细粒度进程控制

进程 进程或线程是作为独立实体执行的任何代码片段。fork-join块创建并行运行的不同线程。在下面的图-1中,可以看到进程的类型和进程控制。 序号进程描述1.fork-join只有所有子线程执行完毕时,父线程才会执行。2.fork-join_any只有任何一个子线程执行完…

javascript用来干嘛的?赋予网站灵魂的语言

javascript用来干嘛的?赋予网站灵魂的语言 在互联网世界中,你所浏览的每一个网页,背后都有一群默默工作的代码在支撑着。而其中,JavaScript就像是一位技艺精湛的魔术师,它赋予了网页生命力,让原本静态的页…

Golang | Leetcode Golang题解之第553题最优除法

题目: 题解: func optimalDivision(nums []int) string {n : len(nums)if n 1 {return strconv.Itoa(nums[0])}if n 2 {return fmt.Sprintf("%d/%d", nums[0], nums[1])}ans : &strings.Builder{}ans.WriteString(fmt.Sprintf("%d…

宝塔 docker 部署onlyoffice 服务

1.宝塔安装docker,直接下载安装就行 2.docker拉取onlyoffice镜像 docker pull onlyoffice/documentserver:5.3.1.26 5.4或更高的版本已经解决了连接数限制方法的Bug 3.创建容器 docker run -d --name onlyoffice --restartalways -p 暴露端口号:80 onlyoffice/documentserv…

InternVL 多模态模型部署微调实践

目录 0 什么是MLLM 1 开发机创建与使用 2 LMDeploy部署 2.1 环境配置 2.2 LMDeploy基本用法介绍 2.3 网页应用部署体验 3 XTuner微调实践 3.1 环境配置 3.2.配置文件参数解读 3.3 开始微调 4.体验模型美食鉴赏能力 0 什么是MLLM 多模态大语言模型 ( Multimodal Larg…

pgSQL-timescaledb复制表出现的问题

今日在工作中,需要复制一张timescaledb表,pgAdmin上复制一直未成功,或者我找错位置了。 1.我使用Navicate连接pgSQL,连上后选中相应表,右键复制结构即可 2.复制结构后,到pgAdmin中,将对应表下的…

Docker:技术架构的演进之路

前言 技术架构是指在软件开发和系统构建中,为了满足业务需求和技术要求,对系统的整体结构、组件、接口、数据流以及技术选型等方面进行的详细设计和规划。它是软件开发过程中的重要组成部分,为开发团队提供了明确的指导和规范,确…