Cartographer前后端梳理
0. 简介
最近在研究整个SLAM框架的改进处,想着能不能从Cartographer中找到一些亮点可以用于参考。所以这一篇博客希望能够梳理好Cartographer前后端优化,并从中得到一些启发。carto整体是graph-based框架,前端是scan-map匹配,后端是SPA优化。前端又分为CSM+Ceres两个部分,完成匹配后则会进入子图生成维护中。在子图维护以及优化后放入后端优化,完成全局地图优化和回环检测。下图来自cartographer 代码分析

前端优化
前端负责数据的初步处理、局部地图的构建以及与即时定位相关的工作。主要流程包括:
- 传感器数据输入:前端接受来自多种传感器的数据输入,包括激光雷达(LiDAR)、惯性测量单元(IMU)、里程计等。
- 数据预处理:
- 时间同步:不同传感器的数据时间戳可能不一致,需要进行时间同步。
- 数据滤波:对 LiDAR 数据等进行滤波,移除异常或噪声数据。
- 转换坐标系:将数据转换到统一的坐标系中。
- 局部地图构建:
- 扫描匹配:将当前帧的 LiDAR 数据与上一帧或者局部地图进行匹配,估计机器人的位置和姿态。
- 插值和融合:利用 IMU 数据进行插值,融合不同传感器的信息,减少漂移。
- 生成子图:
- 前端会在特定时间或距离阈值内生成一个子图(Submap)。这个子图包含一段时间内的传感器数据,用来表示局部地图。
- 发送到后端:局部优化完成后,将子图数据传输给后端进行全局优化。
子图流程
子图在前端和后端之间起到重要的连接作用。它的主要流程如下:
- 子图生成:
- 前端会在一定时间间隔或移动距离达到阈值后,生成一个新的子图。
- 子图代表在这个时间段或距离内的局部地图数据,通常包含来自 LiDAR、IMU、相机等传感器的数据。
- 每个子图在生成时会在局部进行优化,包括与邻近帧的扫描匹配,生成初步的位姿估计。
- 子图固定:
- 一旦子图生成并初步优化完成,它就被固定,以便后续优化中使用。
- 固定的子图包含其位姿估计和点云数据。
- 子图插入(下面都是是后端对子图的操作):
- 前端将生成的子图传递给后端,后端将它插入全局位姿图中。
- 后端根据前端的初步位姿估计,将新子图与全局图进行连接,确保其在全局地图中的初始位置正确。
- 子图连接:
- 子图会在后端进行相邻子图的连接,以确保当前子图与邻近子图保持一致。
- 这包括回环检测,如果检测到闭环,则会标记两个相关子图之间的连接关系,为后续的全局优化做准备。
- 全局优化:
- 子图的位姿经过图优化算法进行全局优化(如 Ceres Solver),从而调整它们在全局地图中的相对位置和方向。
- 优化完成后,每个子图的位姿在全局地图中得到修正。
- 生成全局地图:
- 优化后的子图拼接形成完整的全局地图。
- 子图的位姿修正确保了全局地图的精度和一致性。
后端优化
后端负责全局的地图优化、回环检测和地图更新。主要流程包括:
- 子图数据接收:
- 后端接收来自前端的子图数据,包括子图的初始位姿、点云和其他传感器信息。
- 每个子图在前端进行过初步的局部优化,后端会根据它们之间的相对位姿进行进一步优化。
- 构建位姿图:
- 后端为每个子图建立位姿节点,将其作为位姿图(Pose Graph)中的一个节点。
- 位姿图中的边表示相邻子图或检测到回环的子图之间的相对位姿关系。
- 检测回环:
- 回环检测是后端优化的重要步骤,可以提高全局地图的一致性。
- 利用特征匹配或扫描匹配的方法,后端搜索当前子图与先前已处理过的子图之间的相似性,以检测是否存在回环。
- 如果检测到回环,将在位姿图中添加边,表示当前子图与历史子图之间的关系。
- 添加其他约束:
- 根据惯性测量单元(IMU)、GPS、里程计等其他传感器数据,后端可以为位姿图中的节点和边添加更多的约束。
- 这些约束有助于在优化时保持全局一致性和准确性。
- 全局图优化:
- 在构建了完整的位姿图并添加各种约束后,利用图优化算法(如Ceres Solver)对整个位姿图进行全局优化。
- 通过最小化每个节点和边的残差误差,优化算法计算出全局一致的子图位姿。
- 子图位置调整:
- 全局优化后,每个子图的位置和方向将得到调整,使它们在全局地图中准确对齐。
- 这有助于在拼接各个子图时确保地图的整体一致性。
- 地图更新:
- 子图的优化位姿用于重新生成最终的全局地图。
- 所有子图拼接后,生成的高分辨率地图将更准确地反映整个环境。
- 反馈给前端:
- 优化后的位姿图可以反馈给前端,帮助前端进行更准确的局部定位。
- 同时,地图的优化也将进一步指导后端未来的优化方向。
1. 前端优化
Carto先用了CSM做粗匹配,然后用Ceres做精匹配,并使用了分支定界的方法来加速。

1.1 CSM优化
由于Ceres scan matcher这是一个实时的局部优化,需要一个好的初始位姿估计。所以需要real time CSM把位姿估计器传来的预测值更新为一个好的初值,如果没有real time CSM,就还用位姿估计器传来的预测值作初值。Ceres Scan Matcher以初值作为先验,并找到最佳的点,该点就是通过scan match获得的在子地图中的位置,实现方式是 interpolating the submap and sub-pixel aligning the scan. 前端的两个scan matcher其实都是 scan to map 问题,让当前观测和已知环境最匹配。
CSM说白了就是穷举。我先对scan在map中的pose做个大致估计(例如通过里程计来预测),然后在这个pose周围穷举所有的pose,找到匹配最好的那个。
详细可以参考:前端 3. Real Time Correlative Scan Matcher。相关代码可以参考CSM快速匹配与多分辨率匹配代码实现。

1.2 Ceres
在通过real time CSM或者位姿估计器传来的预测值作为初值后,然后需要通过 ceres scan matcher 优化才能插入到子图中。前端的两个scan matcher其实都是 scan to map 问题,让当前观测和已知环境最匹配。ceres匹配对初值要求相当高,匹配后的结果会考虑其与初始位置偏差进行权重化,说明 cartographer认为其匹配后的值应该与初值相差不大。 Ceres扫描匹配器优化包含了三个残差项:点云与grid的匹配残差、位置(平移)残差、角度(旋转)残差。位置、角度两残差顶多就是对匹配位姿的约束,防止点云匹配的结果和初值差太多,真正的扫描匹配的主角是点云匹配残差。
点击Cartographer前后端梳理 - 古月居 (guyuehome.com)可查看全文
相关文章:
Cartographer前后端梳理
0. 简介 最近在研究整个SLAM框架的改进处,想着能不能从Cartographer中找到一些亮点可以用于参考。所以这一篇博客希望能够梳理好Cartographer前后端优化,并从中得到一些启发。carto整体是graph-based框架,前端是scan-map匹配,后端…...
Java面试题系列 - 第3天
题目:Java集合框架详解与高效使用策略 背景说明:Java集合框架是Java标准库的重要组成部分,提供了一系列容器类,如List、Set、Map等,用于存储和操作集合数据。熟练掌握集合框架的使用,对于编写高效、健壮的…...
【Spring Boot】Spring Boot简介
1、概述 Spring Boot是一个用于创建独立、生产级别的基于Spring的应用程序的开发框架。旨在简化Spring应用的初始搭建和开发过程。它通过自动配置和大量默认配置,使得开发者能够快速搭建一个独立的Spring应用,无需进行大量的手动配置。 2、主要特点 快…...
Akamai+Noname强强联合 | API安全再加强
最近,Akamai正式完成了对Noname Security的收购。本文我们将向大家介绍,经过本次收购后,Akamai在保护API安全性方面的后续计划和未来愿景。 Noname Security是市场上领先的API安全供应商之一,此次收购将让Akamai能更好地满足日益增…...
第四届BPAA算法大赛成功举办!共研算法未来
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…...
2024第三届中国医疗机器人大会第一轮通知
2024第三届中国医疗机器人大会第一轮通知 大会背景 医疗机器人技术正以前所未有的速度在主流医学领域取得卓越进展,新应用、新技术不断涌现,使得该领域在过去一年中取得了令人惊叹的增长。然而,这仅仅是冰山一角,未来的发展空间仍…...
常见算法和Lambda
常见算法和Lambda 文章目录 常见算法和Lambda常见算法查找算法基本查找(顺序查找)二分查找/折半查找插值查找斐波那契查找分块查找扩展的分块查找(无规律的数据) 常见排序算法冒泡排序选择排序插入排序快速排序递归快速排序 Array…...
自动缩放 win7 远程桌面
https://mremoteng.org/download 用这个软件,下载 zip 版,不需要管理员权限 在这里找到的,选票最高的一个就是 https://superuser.com/questions/1030041/remote-desktop-zoom-and-full-screen-how-win10-remote-win7-2008-2003-ho...
微机原理与单片机 知识体系梳理
单片机笔记分享 我个人感觉单片机要记的东西很多,也很琐碎,特别是一些位、寄存器以及相关作用等,非常难以记忆。因此复习时将知识点整理在了一起做成思维导图,希望对大家有所帮助。内容不是很多,可能有些没覆盖全&…...
低音炮内存卡格式化后无法播放音乐文件
试了多次 不支持ntfs不支持exfat 仅支持fat32 FAT32与exFAT的区别主要体现在来源、单个文件限制、适用情况以及兼容性方面。12 来源: FAT32是Windows平台的传统文件格式,首次在Windows 95第二版中引入,旨在取代FAT16,具有良好的…...
手动将dingtalk-sdk-java jar包打入maven本地仓库
有时候,中央镜像库不一定有自己需要的jar包,这时候我们就需要用到该方法,将jar打入maven本地仓库,然后项目中,正常使用maven的引入规则。 mvn install:install-file -Dmaven.repo.local=D:\software\maven\apache-maven-3.6.3-bin\apache-maven-3.6.3\repo -DgroupId=ding…...
C++:构造函数是什么东西
一、构造函数是什么 在C中,构造函数是一种特殊成员函数,它有一下几个明显的特征: 1、它自动在创建新对象时被调用。 2、其名称与类名相同, 3、没有返回类型, 4、通常没有参数(除了默认情况下的隐式thi…...
工作两年后,我如何看待设计模式
在软件工程中,设计模式是经过反复验证的最佳实践,用于解决在软件设计中经常遇到的一类问题。它们为开发者提供了一种通用的解决方案和语言,使得复杂的编程问题得以简化,代码结构更加清晰,可维护性大大提高。简而言之&a…...
01 Web基础与HTTP协议
1、域名和DNS 1.1 域名的概念 如果说一个主机,没有名字也可以完全用IP来代替,但是IP地址不好记忆。例如说,我们记一些网站的名称百度、新浪、搜狐等很好记,但是如果要去记百度的IP、新浪的IP、以及搜狐的IP地址,那将会…...
Java求自然常数e的近似值(课堂实例1)
❤❤引言🎃🎃 ❤点关注编程梦想家(大学生版)-CSDN博客不迷路~~~~~~❤ 自然常数 𝑒e 是数学中一个非常重要的常数,约等于 2.71828,它在自然对数、复合利息计算等领域有着广泛的应用。本文将介绍如…...
简过网:什么是咨询工程师?我不允许还有人不知道!
咨询工程师真的有必要考吗?近期小编收到很多关于咨询工程师的的问题,今天,小编给大家整理汇总了一下关于咨询工程师的相关问题,希望能够帮助到大家! 一、什么是咨询工程师? 咨询工程师是从事工程咨…...
数据泄露时代的安全之道:访问认证的重要性
引言 想象一下:你一觉醒来,收到一条通知——你的公司遭遇了数据泄露。你感到恐惧,因为这意味着客户数据被曝光,公司声誉受损,还有巨额罚款在等着你。在当今的数字化环境中,这种情况太常见了。全球各地的组…...
XLSX + LuckySheet + LuckyExcel + Web Worker实现前端的excel预览
文章目录 功能简介简单代码实现web worker 版本效果参考 功能简介 通过LuckyExcel的transformExcelToLucky方法, 我们可以把一个文件直接转成LuckySheet需要的json字符串, 之后我们就可以用LuckySheet预览excelLuckyExcel只能解析xlsx格式的excel文件&a…...
Java版本迭代的过程(Java面经)
Java 5: 泛型与注解 泛型:使得Web应用可以编写更加类型安全的代码,特别是在处理各种数据结构时,如集合框架的使用。注解:极大地简化了配置管理,Spring框架的崛起得益于Java 5的注解支持,使得依赖注入和AOP…...
深入了解java锁升级可以应对各种疑难问题
对于java锁升级,很多人都停留在比较浅层的表面理解,一定程度下也许够用,但如果学习其中的细节,我们更好地理解多线程并发时各种疑难问题的应对方式! 因此我将锁升级过程中可能涉及的大部分细节或者疑问都整合成了一篇…...
Kook Zimage真实幻想Turbo快速调试:找到属于你的幻想风格黄金参数组合
Kook Zimage真实幻想Turbo快速调试:找到属于你的幻想风格黄金参数组合 1. 认识Kook Zimage真实幻想Turbo Kook Zimage真实幻想Turbo是一款专为个人GPU设计的轻量化幻想风格图像生成系统。它基于Z-Image-Turbo极速文生图底座,通过独特的权重融合技术&am…...
USB2.0供电那些事儿:为什么你的外设总是供电不足?
USB2.0供电困境解析:从原理到实践的全面解决方案 当你的移动硬盘突然断开连接,或者外接键盘间歇性失灵时,很可能正遭遇USB2.0供电不足的经典难题。这种看似简单的接口背后,隐藏着复杂的电力分配机制与设备兼容性博弈。本文将带你穿…...
ssm+java2026年毕设私人医生预约系统【源码+论文】
本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于在线医疗问诊服务的研究,现有研究主要以综合性互联网医疗平台的宏观发展分析为主,专门针对基于SSM…...
nli-distilroberta-base代码实例:Python调用DistilRoBERTa实现Entailment识别
nli-distilroberta-base代码实例:Python调用DistilRoBERTa实现Entailment识别 1. 项目概述 自然语言推理(Natural Language Inference, NLI)是自然语言处理中的一项重要任务,用于判断两个句子之间的逻辑关系。nli-distilroberta-base是基于DistilRoBER…...
Halcon HImage转Bitmap性能大比拼:实测unsafe方案比安全方案快30倍的背后原因
Halcon HImage转Bitmap性能优化实战:从30倍差距到工业级解决方案 在工业视觉检测和实时图像处理领域,毫秒级的性能差异可能意味着生产线能否稳定运行。最近在为一个汽车零部件检测系统做性能优化时,我意外发现Halcon的HImage转Bitmap操作竟成…...
快速验证控制逻辑:用快马平台十分钟搭建pid算法仿真原型
今天想和大家分享一个快速验证PID控制算法的小技巧。作为一名自动化工程师,经常需要调试各种控制参数,传统方法要搭建物理实验环境或者用MATLAB仿真,都很费时。最近发现用InsCode(快马)平台可以十分钟就做出一个可交互的PID仿真原型ÿ…...
【AI+教育】AI总犯“金鱼记忆”?揭秘大模型长期记忆架构,让它真正记住你!
在和AI对话时,你是否有过这样的抓狂时刻:前脚刚告诉它“我叫小明,我不吃香蕉”,五分钟后它又热情地向你推荐香蕉饼? 目前的多数大语言模型就像拥有“金鱼记忆”,一刷新就忘得一干二净。为了让智能体(Agent)能像真正的老朋友一样懂你,我们设计了一套长期记忆功能模块。…...
WebLaTeX:重构LaTeX创作流程的颠覆式解决方案
WebLaTeX:重构LaTeX创作流程的颠覆式解决方案 【免费下载链接】WebLaTex A complete alternative for Overleaf with VSCode Web Git Integration Copilot Grammar & Spell Checker Live Collaboration Support. Based on GitHub Codespace and Dev contai…...
PMOD接口概述
简介 PMOD接口外设模块特点:低频,少量IO引脚。 两种物理规格:6针接口(4IO, 1VCC, 1GND)、12针接口(8IO, 2VCC, 2GND)。 支持的接口协议:SPI、I2C、UART、I2C、H桥、GPIO。 外设模块与主机连接方式:模块直连主机、通过6Pin或12Pin线缆或者12Pin转双6Pin分叉线缆。 外设…...
WSABuilds系统调用:Windows与Android内核交互机制解析
WSABuilds系统调用:Windows与Android内核交互机制解析 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root sol…...
