从零开始学习SLAM|技术路线
概念
视觉SLAM(Simultaneous Localization and Mapping)系统中,整个过程通常分为 前端 和 后端 两个主要部分。前端处理的是从传感器数据(如相机图像、激光雷达等)中提取和处理信息,用于实时定位和建图,而后端则负责全局优化、地图生成和精确化。
SLAM前端
前端的核心任务是处理传感器数据(如图像、IMU等)并生成与位姿相关的局部信息。主要包括 特征提取、匹配、位姿估计 和 局部优化。
前端 有时被称为 视觉里程计(Visual Odometry,VO)。在 视觉SLAM 系统中,前端的任务通常包括 从相机图像中估计相机的相对运动,这正是视觉里程计的核心任务。
1.1 视觉里程计(VO):
视觉里程计是指通过连续的图像序列来估计相机的 相对运动(即位移和旋转)。它只关注相机的运动估计,而不依赖于全局地图或回环检测,通常用于短期、局部的运动估计。是前端的一部分,负责估计相机的相对运动。
前端除了执行视觉里程计(估计相机相对运动)外,还会进行一些其他任务,例如:特征提取与匹配、位姿估计(通过方法如PNP等)、局部地图构建(局部优化),滑动窗口优化等。
步骤
- 传感器数据预处理
点云滤波:点云数据通常包含噪声和离群点,需要通过滤波方法进行清理。常见的滤波方法包括统计滤波(Statistical Outlier Removal)、体素滤波(Voxel Grid Filter)、直通滤波(Pass-through Filter)等。滤波之后还会进行点云平滑(冲裁样)
图像预处理:对于视觉SLAM,图像的预处理包括去畸变、灰度化、降噪等操作。
利用图像生成点云的代码:可以看我这篇文章 点云滤波与重采样可以看这篇文章
1.1 特征提取
关键点检测:从图像中提取关键点(如角点、边缘、特征点等),常见的算法包括 SIFT、SURF、ORB、FAST、BRIEF 等。
特征描述符生成:为每个关键点生成描述符(特征向量),描述符用于匹配不同视角下的相同物理点。常见的描述符有 ORB、BRIEF 等。
1.2 特征匹配
局部匹配(粗匹配):通过描述符,在不同时间的图像中找到相同或相似的特征点。例如,通过 暴力匹配(Brute-Force) 或 FLANN(Fast Library for Approximate Nearest Neighbors) 来匹配特征点。
精匹配:如ICP
外点剔除:使用 RANSAC 算法去除错误匹配点(外点),确保匹配点的准确性。
1.3 位姿估计
PnP (Perspective-n-Point):根据已知的3D点和其在图像中的投影,估计相机的旋转和位移,进而求得相机的 位姿(位置与朝向)。常用的方法包括 EPnP、UPnP。
光流法(Optical Flow):通过估计像素点在连续图像帧之间的运动,来计算相机的相对位姿。
1.4 局部地图构建
将多帧点云数据融合到一个统一的坐标系中,形成完整的环境地图。
局部优化:根据前端估计的相机位姿,进行局部地图的更新。通过 局部地图(如特征点、深度图、关键帧等)来帮助改进定位精度。
1.5 滑动窗口优化(Sliding Window Optimization)
滑动窗口:为了保持实时性,通常只处理一小部分最近的帧(例如,前几帧或一段时间的帧)。滑动窗口优化能够减少计算负担,同时保证定位精度。
局部一致性:前端会维持一个 滑动窗口,随着新帧的加入,窗口中只保留当前的几帧,这样能够在局部范围内进行优化,使得前端的估计更加精确。
SLAM后端
后端主要负责全局优化,包括 回环检测、全局图优化 和 地图精细化。它主要是处理前端产生的数据,通过全局优化来纠正位姿的漂移和误差。
2.0 多传感器融合
IMU与视觉数据融合:通过时间戳对齐和姿态对齐(如四元数插值)将IMU数据与视觉数据融合,以提高定位精度
2.1 回环检测(Loop Closure Detection)
回环检测:当机器人回到已知的位置时,后端需要检测到这个回环(即,识别该位置已经被之前的帧访问过)。这有助于减少累积误差,恢复全局一致性。
方法:常用的回环检测算法包括基于 Bag of Words 的方法、 FabMap、 ORB-SLAM 的回环检测等。
2.2 图优化(Graph Optimization)
图模型:后端通过构建 图优化模型,将机器人位姿和地标视为图的节点,而它们之间的相对约束(如运动约束、观测约束)则是图中的边。图的边通常对应前端得到的相对位姿、地标观测等约束。
非线性优化:使用 非线性最小二乘法 或 Levenberg-Marquardt 算法来优化图中节点的位置,最小化边约束的误差。常见的优化框架包括 g2o、Ceres Solver。
2.3 地图优化
地图更新:后端根据优化后的位姿和地图信息来更新全局地图。随着回环检测的成功,地图会得到纠正和优化。
图优化:地图的精细化不仅包括位姿优化,还包括 地标位置 的优化和重定位,确保整个地图的一致性和精确度。 如Bundle Adjustment 方法,见文章中的代码部分
2.4 姿态修正与全局一致性
姿态校正:由于前端的累积误差,后端的全局优化会对机器人的姿态进行修正,确保地图和轨迹的准确性。
全局一致性:图优化后的结果不仅能修正回环检测引入的误差,还能确保地图在全球范围内的一致性。
2.5 地图构建与精细化
地图生成:通过前端和后端的共同工作,最终生成的地图包含了机器人的位姿轨迹以及环境中的特征点或地标。
稀疏/密集地图:根据所使用的算法和传感器类型,地图可以是 稀疏地图(由特征点组成)或 密集地图(如通过深度图或语义分割得到的更丰富的地图数据)。
前端与后端的协同工作
前端的作用:实时获取传感器数据,估计局部的位姿变化,并不断更新局部地图。前端通常依赖于滑动窗口优化、特征匹配和位姿估计,保证实时性和定位精度。
后端的作用:对前端的输出进行全局优化,确保全局轨迹的一致性和精确性,尤其是在回环检测和图优化过程中,解决长期累积的误差问题。
视觉SLAM的典型系统架构
ORB-SLAM:一个经典的视觉SLAM系统,使用 ORB 特征进行匹配,支持回环检测和图优化,适用于大规模的环境。
LSD-SLAM:密集SLAM系统,基于直接法(不依赖特征提取和匹配),直接使用图像的像素强度进行位姿估计和地图构建。
VINS-Mono:一个基于单目相机和IMU的视觉惯性SLAM系统,结合了视觉和惯性传感器的数据进行位姿估计。
相关文章:
从零开始学习SLAM|技术路线
概念 视觉SLAM(Simultaneous Localization and Mapping)系统中,整个过程通常分为 前端 和 后端 两个主要部分。前端处理的是从传感器数据(如相机图像、激光雷达等)中提取和处理信息,用于实时定位和建图&am…...
vue3:十一、主页面布局(修改顶部导航栏样式-右侧:用户信息+退出登录+全屏显示)
一、效果 完成效果,增加顶部导航栏,右侧用户信息(其中个人中心需要后续进行页面开发,这里只写了退出登录功能),以及全屏功能 二、搭建并引入右侧组件 将右侧内容封装到单独的组件,直接引入(像左侧导航条等内容也是可以做成这种形式) 1、新建右侧组件的页面 在layout中…...
车载客流记录仪简介
一、产品概述 车载客流记录仪技术是采用智能视频分析算法,通过人体形态特征(头部和肩部)及上下车的运动规律研判,在设定区域内分析出上下车人数数量,实现相关人数数据的统计和记录。能够为公共交通企业、公共交通管理…...
2025新版懒人精灵零基础及各板块核心系统视频教程-全分辨率免ROOT自动化开发
2025新版懒人精灵零基础安装调试lua基础UI设计交互常用方法封装项目实战项目打包安装板块-视频教程(初学者必修课) 1.懒人精灵核心API基础和lua基础视频教程:https://www.bilibili.com/video/BV1Vm9kYJEfM/ 其它板块教程(包含:对接AI、实战、插件、UI、…...
从 Java 到 Kotlin:在现有项目中迁移的最佳实践!
全文目录: 开篇语 1. 为什么选择 Kotlin?1.1 Kotlin 与 Java 的兼容性1.2 Kotlin 的优势1.3 Kotlin 的挑战 2. Kotlin 迁移最佳实践2.1 渐进式迁移2.1.1 步骤一:将 Kotlin 集成到现有的构建工具中2.1.2 步骤二:逐步迁移2.1.3 步骤…...
矩阵运营的限流问题本质上是平台与创作者之间的流量博弈
矩阵运营的限流问题本质上是平台与创作者之间的流量博弈,要系统性解决这一问题,需从技术规避、内容优化、运营策略三个维度构建防御体系。以下结合平台算法逻辑与实战案例,深度解析限流成因及破解之道: 一、技术层:突…...
一种Spark程序运行指标的采集与任务诊断实现方式
一种Spark程序运行指标的采集与任务诊断实现方式 编写时间:2023年8月2日 第一次校准时间:2023年8月2日 文章目录 一种Spark程序运行指标的采集与任务诊断实现方式数据链路采集器的类图CustomSparkListener采集的指标task相关stage相关Job相关Executors相关诊断诊断分类调度阶…...
Gazebo 仿真环境系列教程(一):环境安装与基础使用
文章目录 一、版本说明与技术背景1.1 Gazebo 版本分支1.2 版本选择建议 二、系统环境准备2.1 硬件要求2.2 软件依赖 三、Gazebo Garden 安装流程3.1 添加官方软件源3.2 执行安装命令3.3 环境验证 四、Gazebo Classic 安装方法4.1 添加软件仓库4.2 安装核心组件4.3 验证安装 五、…...
Nginx 中间件
Nginx(发音为 "engine-x")是一款开源的高性能 HTTP 服务器和反向代理服务器,最初由 Igor Sysoev 开发。 它以其高性能、稳定性、丰富的功能集和低资源消耗而闻名,广泛应用于全球的 Web 服务架构中。 作为中间件&#…...
记录学习的第三十一天
今天只做了一道每日一题。 说实话,根本不会做呀,该怎么办? 以下是我看了题解之后的思路(适合新手): 1.首先肯定是要求出整个数组的不同数字有多少个的使用set来操作 2.右指针开始进入窗口,把元素放进哈希…...
Framework.jar里的类无法通过Class.forName反射某个类的问题排查
1,背景 我们想要在system_server进程里扩展一些我们自己的功能。 考虑到解耦和编译依赖的问题,我们用PRODUCT_SYSTEM_SERVER_JARS预置我们的类,然后用反射jar里面的类的方式来实现代码引用。 2,遇到的问题 在SystemServer.jav…...
架构-信息安全技术基础知识
一、信息安全基础 1. 信息安全的5个基本要素(重点) 机密性:确保信息不泄露给未授权的人或程序。 ▶ 举例:银行用户的账户密码必须保密,防止黑客窃取。完整性:保证信息不被非法修改,保持准确和…...
项目班——0419——chrono时间库
1、写日志需要时间库 C11时间库chrono源自于boost 1.时间间隔 duration 2.时间点 timepoint 3.时钟 clock 系统时钟system_clock,稳定时钟steady_clock,高精度时钟high_resolution_clock 例子 1、休眠100毫秒 2、输出当前时间 获取当前时间戳 s…...
Unity后处理全解析:从入门到优化
在游戏开发的世界里,Unity作为一款强大的游戏引擎,为开发者们提供了丰富的功能和工具。其中,后处理(Post-Processing)技术是提升游戏画面质量和视觉效果的重要手段之一。今天,我们就来深入探讨一下Unity后处理的相关内容,包括基本概念、使用说明、常见效果、优化技巧以及…...
得物业务参数配置中心架构综述
一、背景 现状与痛点 在目前互联网飞速发展的今天,企业对用人的要求越来越高,尤其是后端的开发同学大部分精力都要投入在对复杂需求的处理,以及代码架构,稳定性的工作中,在对比下,简单且重复的CRUD就显得…...
针对密码学的 EM 侧信道攻击
基于电磁的侧信道攻击是非侵入式的,这意味着攻击者无需物理接触设备即可窃取信息。我们将了解这些电磁侧信道攻击的工作原理。 我们之前介绍了侧信道攻击的概念:它们是什么,以及为什么它们会成为重大的硬件安全威胁。在众多形式的侧信道攻击中,最强大的一种是电磁 (EM) 攻…...
el-setup- 修改样式(vue3)
一 第一步 <template><el-steps :active"activeStep" align-center><el-stepv-for"item in stepData":key"item.value":class"{ currentStep: activeStep item.value }"><template #icon><div class"…...
CPT204 Advanced Obejct-Oriented Programming 高级面向对象编程 Pt.8 排序算法
文章目录 1. 排序算法1.1 冒泡排序(Bubble sort)1.2 归并排序(Merge Sort)1.3 快速排序(Quick Sort)1.4 堆排序(Heap Sort) 2. 在面向对象编程中终身学习2.1 记录和反思学习过程2.2 …...
【低配置电脑预训练minimind的实践】
低配置电脑预训练minimind的实践 概要 minimind是一个轻量级的LLM大语言模型,项目的初衷是拉低LLM的学习门槛,让每个人都能从理解每一行代码开始, 从零开始亲手训练一个极小的语言模型。对于很多初学者而言,电脑配置仅能够满足日…...
flutter 小知识
FractionallySizedBox组件 FractionallySizedBox是Flutter中的一个特殊布局小部件,它允许子组件的尺寸基于父组件的尺寸来计算。这意味着子组件的尺寸是父组件尺寸的一个比例,这使得布局在不同屏幕尺寸下保持一致性1。 ListWheelScrollView Lis…...
高性能服务器配置经验指南3——安装服务器可能遇到的问题及解决方法
文章目录 1、重装系统后VScode远程连接失败问题2、XRDP连接黑屏问题1. 打开文件2. 添加配置3. 重启xrdp服务 在完成 服务器基本配置和 深度学习环境准备后,大家应该就可以正常使用服务器了,推荐使用VScode远程连接使用,比较稳定方便&#x…...
Vue实战(08)解决 Vue 项目中路径别名 `@` 在 IDE 中报错无法识别的问题
一、引言 在 Vue 项目开发过程中,路径别名是一个非常实用的特性,它能够帮助开发者简化文件引用路径,提高代码的可读性和可维护性。其中, 作为一个常见的路径别名,通常被用来指向项目的 src 目录。然而,…...
处理任务“无需等待”:集成RabbitMQ实现异步通信与系统解耦
在前几篇文章中,我们构建的Web应用遵循了一个常见的同步处理模式:用户发出HTTP请求 -> Controller接收 -> Service处理(可能涉及数据库操作、调用其他内部方法)-> Controller返回HTTP响应。这个流程简单直接,…...
ASP.NET Core 主机模型详解:Host、WebHost与WebApplication的对比与实践【代码之美】
🎀🎀🎀代码之美系列目录🎀🎀🎀 一、C# 命名规则规范 二、C# 代码约定规范 三、C# 参数类型约束 四、浅析 B/S 应用程序体系结构原则 五、浅析 C# Async 和 Await 六、浅析 ASP.NET Core SignalR 双工通信 …...
编译型语言、解释型语言与混合型语言:原理、区别与应用场景详解
编译型语言、解释型语言与混合型语言:原理、区别与应用场景详解 文章目录 编译型语言、解释型语言与混合型语言:原理、区别与应用场景详解引言一、编译型语言1.1 工作原理1.2 典型的编译型语言1.3 优点1.4 缺点 二、解释型语言2.1 工作原理2.2 典型的解释…...
AI工程pytorch小白TorchServe部署模型服务
注意:该博客仅是介绍整体流程和环境部署,不能直接拿来即用(避免公司代码外泄)请理解。并且当前流程是公司notebook运行&本机windows,后面可以使用docker 部署镜像到k8s,敬请期待~ 前提提要:工程要放弃采购的AI平台…...
Ubuntu 一站式部署 RabbitMQ 4 并“彻底”迁移数据目录的终极实践
1 安装前准备 sudo apt update -y sudo apt install -y curl gnupg apt-transport-https lsb-release jq若计划将数据放到新磁盘(如 /dev/nvme0n1p1): sudo mkfs.xfs /dev/nvme0n1p1 sudo mkdir /data echo /dev/nvme0n1p1 /data xfs defau…...
华为手机怎么进行音频降噪?音频降噪技巧分享:提升听觉体验
在当今数字化时代,音频质量对于提升用户体验至关重要,无论是在通话、视频录制还是音频文件播放中,清晰的音频都能带来更佳的听觉享受。 而华为手机凭借其强大的音频处理技术,为用户提供了多种音频降噪功能,帮助用户在…...
拥抱健康生活,解锁养生之道
在生活节奏日益加快的当下,健康养生已成为人们关注的焦点。科学的养生方法,能帮助我们增强体质、预防疾病,以更饱满的精神状态拥抱生活。 合理饮食是养生的基石。《黄帝内经》中提到 “五谷为养,五果为助,五畜为益&…...
深入理解Java阻塞队列:原理、使用场景及代码实战
🚀 文章提示 你将在这篇文章中收获: 阻塞队列的核心特性:队列空/满时的阻塞机制 四种操作方式对比:抛异常、返回特殊值、永久阻塞、超时阻塞 SynchronousQueue的独特设计:同步队列的生产者-消费者强耦合 代码实战&a…...
vue3--手写手机屏组件
<!--* 手机预览* Author: Hanyang* Date: 2022-12-09 09:13:00* LastEditors: Hanyang* LastEditTime: 2023-01-12 15:37:00 --> <template><divclass"public-preview-mobile"ref"previewMobileRef":class"showMobile ? animation-sh…...
【Elasticsearch】入门篇
Elasticsearch 入门 前言 官方地址:Elastic — 搜索 AI 公司 | Elastic ES 下载地址:Past Releases of Elastic Stack Software | Elastic 文档:什么是 Elasticsearch?|Elasticsearch 指南 简介 Elasticsearch 是一个分布式、…...
Unity 使用 ADB 实时查看手机运行性能
Unity 使用 ADB 实时查看手机运行性能 前言操作步骤ADB工具下载ADB工具配置手机进入开发者模式并开启USB调试使用ADB连接手机Unity打包设置使用Profiler实时查看性能情况优化建议 常见问题 前言 通过 ADB(Android Debug Bridge)连接安卓设备,…...
蓝桥杯 1. 四平方和
四平方和 原题目链接 题目描述 四平方和定理(又称拉格朗日定理)指出: 每个正整数都可以表示为 至多 4 个正整数的平方和。 如果将 0 包括进去,则每个正整数都可以恰好表示为 4 个非负整数的平方和。 例如: 5 0 …...
Nginx 配置参数全解版:Nginx 反向代理与负载均衡;Nginx 配置规范与 Header 透传实践指南;Nginx 配置参数详解
Nginx 配置参数全解版:Nginx 反向代理与负载均衡;Nginx 配置规范与 Header 透传实践指南;Nginx 配置参数详解 Nginx 反向代理与负载均衡配置,Header 透传到后端应用(参数全解版)一、Nginx 反向代理与负载均…...
数据分析之技术干货业务价值 powerquery 分组排序后取TOP
在电商中,我们要对货品进行分析,由于所有的销售数据都在一起,货品信息也在一起,两个表建立了关系之后,要看每个品类的TOP款有哪些,每个品类的TOP款是什么要怎么做呢? 下面是我做数据的思路&…...
windows中kafka4.0集群搭建
参考文献 Apache Kafka windows启动kafka4.0(不再需要zookeeper)_kafka压缩包-CSDN博客 Kafka 4.0 KRaft集群部署_kafka4.0集群部署-CSDN博客 正文 注意jdk需要17版本以上的 修改D:\software\kafka_2.13-4.0.0\node1\config\server.properties配置文…...
数据分析案例:医疗健康数据分析
目录 数据分析案例:医疗健康数据分析1. 项目背景2. 数据加载与预处理2.1 加载数据2.2 数据清洗3. 探索性数据分析(EDA)3.1 再入院率概览3.2 按年龄分组的再入院率3.3 住院时长与再入院4. 特征工程与可视化5. 模型构建与评估5.1 数据划分5.2 训练逻辑回归5.3 模型评估6. 业务…...
数据分析之 商品价格分层之添加价格带
在分析货品数据的时候,我们会对商品的价格进行分层汇总,也叫价格带, 一、价格带的定义 价格带(Price Band):将商品按价格区间划分(如0-50元、50-100元、100-200元等ÿ…...
跨浏览器音频录制:实现兼容的音频捕获与WAV格式生成
在现代Web开发中,音频录制功能越来越受到开发者的关注。无论是在线会议、语音识别还是简单的语音留言,音频录制都是一个重要的功能。然而,实现一个跨浏览器的音频录制功能并非易事,因为不同浏览器对音频录制API的支持存在差异。本…...
JavaScript 的“世界模型”:深入理解对象 (Objects)
引言:超越简单值,构建复杂实体 到目前为止,我们学习的变量大多存储的是单一的值,比如一个数字 (let age 30;)、一个字符串 (let name "Alice";) 或一个布尔值 (let isActive true;)。这对于简单场景足够了&am…...
【国产化之路】VPX-3U :基于D2000 /FT2000的硬件架构到操作系统兼容
在国产化和高性能计算、嵌入式系统领域日益受到重视的今天,VPX3U架构以其标准化和模块化的特性广受关注。本文将从硬件架构、系统软件、接口拓展及典型应用等方面,深入剖析整体设计思路与工程实现,供友友们参考和讨论。 一、总体架构与设计目…...
深入探索RAG(检索增强生成)模型的优化技巧
📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4o-mini模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...
架构-软件架构设计
一、软件架构基础概念 1. 软件架构的定义 通俗理解:软件架构是软件系统的“骨架”,定义了系统的结构、行为和属性,就像盖房子的设计图纸,规划了房间布局、承重结构和功能分区。核心作用: 沟通桥梁:让技术…...
免费的 HTML 网页托管服务
字根云平台最近上线了一项新的服务: HTML 网页托管。 HTML 网页免费托管 免费HTML静态页面文件托管-字根秀秀 www.cuobiezi.net/showshow/ 网页托管主要支持的功能: 1. 托管静态的 HTML 网页(不包含图片,图片请使用专业图床&a…...
Ubuntu服务器上如何监控Oracle数据库
在 Ubuntu 服务器上监控 Oracle 数据库,虽然不像在 Windows 或某些企业 Linux(如 RHEL)那样有现成的 GUI 工具,但你完全可以通过命令行工具、脚本、开源监控平台来实现全面监控,包含: 数据库性能指标&#…...
什么是CMMI认证?CMMI评估内容?CMMI认证能带来哪些好处?
CMMI认证详解:概念、评估内容与核心价值 一、什么是CMMI认证? CMMI(Capability Maturity Model Integration,能力成熟度模型集成)是由美国卡内基梅隆大学软件工程研究所(SEI)开发的一套全球公…...
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRectF)
文章目录 类描述构造方法主要方法1. 基础属性2. 边界操作3. 几何运算4. 坐标调整5. 转换方法6. 状态判断 类特点总结1. 浮点精度:2. 坐标系统:3. 有效性判断:4. 几何运算:5. 类型转换:6. 特殊处理: 典型应用…...
arm64适配系列文章-第五章-arm64环境上redis的部署
ARM64适配系列文章 第一章 arm64环境上kubesphere和k8s的部署 第二章 arm64环境上nfs-subdir-external-provisioner的部署 第三章 arm64环境上mariadb的部署 第四章 arm64环境上nacos的部署 第五章 arm64环境上redis的部署 第六章 arm64环境上rabbitmq-management的部署 第七章…...
Ubuntu / WSL 安装pipx
一、安装pipx 在 Ubuntu / WSL 上可以用两种方式安装,推荐第二种(官方脚本)或第三种(pip 安装最新版本并自动配置 PATH)。 1. apt 安装(最快,但版本往往偏旧) sudo apt update su…...