(02)Cartographer源码无死角解析-(53) 2D后端优化→位姿图优化理论讲解、

news/2024/11/14 23:28:20/

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下:
(02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885
 
文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证{\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证}文末正下方中心提供了本人联系方式,点击本人照片即可显示WX官方认证
 

一、前言

通过前面的一系列博客,已经完成了2D点云扫描匹配:含相关性暴力搜索匹配以及ceres扫描匹配的讲解。总得来说,关于Cartographer前端数据处理以及前端位姿优化的相关代码已经深入解析。那么接下来,就是对后端部分代码讲解,这里暂时还是以2D后端优化为例,后续再向3D扩展。后端优化的的代码主要集中在如下文件:

src/cartographer/cartographer/mapping/internal/2d/pose_graph_2d.cc

 

二、理论分析

Cartographer 后端优化是使用位姿图的方式,如果了解g2o的朋友应该知道,图的核心在于点(节点)与边的建立,边主要起到约束作用,Cartographer 位姿图中包含了两种约束:子图内\color{red}子图内子图内子图间\color{red}子图间子图间 约束,另外在回环检测中会计算子图间约束。

1、什么是图

由节点和边组成的一种数据结构, 节点之间的关系可以是任意的, 图中任意两节点之间都可能相关(存在边)。

2、什么是位姿图

SPA 论文中对位姿图的定义: 位姿图是一组通过非线性约束连接的机器人位姿, 这些非线性约束是从对附近位姿共有的特征的观察中获得的。位姿图是一种图, 节点代表位姿, 边代表 2 个位姿间的相对坐标变换(也叫约束),如下三角形表示机器人位姿, 三角形之间的连线表示约束(坐标变换):
在这里插入图片描述
如果对于图优化比较陌生的朋友可以参考本人博客:史上最简SLAM零基础解读(10.1) - g2o(图优化)→简介环境搭建(slam十四讲第二版为例)

3.什么是优化

由于前端里程计会有累计误差, 那有没有一种方法可以将这种累计误差减小甚至消除掉呢?这就是优化的目的与作用。
在这里插入图片描述
左边表示没有优化之前、中间表示优化之后、右边表示真实地图。可以明显看到优化之后的精度提升较大。

 

五、结语

 
 
 


http://www.ppmy.cn/news/21337.html

相关文章

算法leetcode|34. 在排序数组中查找元素的第一个和最后一个位置(rust重拳出击)

文章目录34. 在排序数组中查找元素的第一个和最后一个位置:样例 1:样例 2:样例 3:提示:分析:题解:rustgoccpythonjava34. 在排序数组中查找元素的第一个和最后一个位置: 给你一个按…

【vue2】vuex基础与五大配置项

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:vuex基础认识、state、getters、mutations actions、modules使用 目录(文末原素材) 一、…

【面试】vue组件style中scoped的作用是什么?什么是scoped穿透?

vue组件style中scoped的作用是什么? 在Vue文件中的style标签上有一个特殊的属性——scoped。scoped属性是 HTML5 中的新属性,是一个布尔属性,如果使用该属性,则css样式仅仅只能应用到当前的Vue组件,避免组件之间样式相…

个人简历(前端)

简历导航个人基本信息为了节约你的时间,请先看这一段我能为公司提供一个什么样的程序员我会的和我不会的个人经历和个人想法工作履历关于我在上一家公司“创业”个人基本信息 标题信息姓名保密性别男学历本科(浙工商计算机专业)工作经验6年技…

docker run、exec和attach使用和区别

结论 docker run:创建和启动一个新的容器实例,操作对象是镜像,选项较多,如果你要创建和启动一个容器,只能用run;docker exec:在已运行的容器中,执行命令,操作对象是容器&…

【MyBatis持久层框架】配置文件实现增删改查实战案例(下)

前言 前面我们学习了 MyBatis 持久层框架的原生开发方式和 Mapper 代理开发两种方式,解决了使用 JDBC 基础性代码操作数据库时存在的硬编码和操作繁琐的问题。 在配置文件实现增删改查上篇中,我们详细讲解了常用的查询操作,例如查询所有数据…

model.train()与model.val()

一、问题描述 需要将mmpose框架下训练的模型单独保存出来,做后续处理。用torch.save()直接保存模型mmpose_model.pt,然后重新搭建模型,把保存的模型参数加载进去,得到scratch_model.pt使用scratch_model.pt进行推理,与…

界面组件DevExtreme v22.2亮点——UI模板库升级换代!

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac&#xff0c…