当前位置: 首页 > news >正文

Cartographer框架简述

catographer框架分为前端和后端

前端包括雷达数据处理;位姿预测;扫描匹配和栅格地图更新。

后端包括后端:线程池任务与调度;向位姿图添加节点,计算节点的子图内约束和子图间约束(回环检测);多分辨率地图;基于分支定界算法的粗匹配,优化问题的构建与求解。

前端

雷达数据处理

local_trajectory_builder_2d.AddRangeData

点云数据处理,具体包括多传感器时间同步,点云数据去畸,以及体素滤波。

位姿预测

local_trajectory_builder_2d.AddAccumulatedRangeData.ExtrapolatePose

利用pose,以及传入的里程计,imu数据计算出线速度和角速度,不同的情况选择参与运算的传感器不同。利用线速度角速度乘以时间预测平移和姿态。

详见《》

扫描匹配

扫描匹配的目的是找到雷达点云在栅格地图中的位置与角度。

扫描匹配包括相关性扫描匹配RealTimeCorrelativeScanMatcher2D和ceres扫描匹配

将相关性扫描匹配的位姿作为ceres扫描匹配的初始值。

详见《Cartographer 基于ceres的扫描匹配-CSDN博客》

更新概率栅格地图

将雷达数据写入概率栅格地图

详见《Cartographer 栅格地图更新-CSDN博客

后端

后端主要实现的是位姿图优化。向位姿图添加节点AddNode,计算节点的子图内约束和子图间约束(回环检测);多分辨率地图;基于分支定界算法的粗匹配,优化问题的构建与求解。

cartographer 中的节点共有两类---关键帧节点和子图节点。

关键帧指的是子图关键帧,而子图是由连续的若干个激光关键帧拼接到一起形成的子地图。

在carto中子图节点称为submap,关键帧节点称为node

构建约束是在这两类节点之间构建。

图中,三角表示子图,圆圈表示节点,由于传感器的一次扫描数据可能插入到多个不同的子图,所以同一个节点可能和多个子图之间存在一定的匹配关系。

子图内约束:

local 坐标系下,子图原点指向tracking_frame的坐标变换

    node和insertion_submaps之间的约束,由于在前端是,一个node只插入到了两个submap中,所以个node最多只有两个约束为子图内约束。

子图间约束:

根据global坐标计算初值,然后通过分支丁界算法粗匹配与ceres的精匹配,获取校准后的位姿,最后计算local坐标系下,子图原点指向校准后的节点间的坐标变换。

        使用分支定界算法之前需要先构建多分辨率地图。

构建优化问题,并求解:

  1. 确定2个节点在global坐标系下的相对位姿变换
  2. 通过其他方式再次获取这两个节点的相对位姿变换
  3. 对这2个先对位姿变换的差的最小二乘问题进行求解
  4. 进行求解之后会得到一个增量,将当前位姿加上这个增量后就得到了优化后的位姿

     cartographer中通过ceres添加残差项构建优化问题求解。

详见《》

相关文章:

  • 【踩坑专栏】主机ping虚拟机失败
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • 人工智能学习与实训笔记(二):神经网络之图像分类问题
  • 单例模式的介绍
  • 鸿蒙自定义侧滑菜单布局(DrawerLayout)
  • 《VitePress 简易速速上手小册》第8章 安全性与部署(2024 最新版)
  • ChatGPT丨成像光谱遥感技术中的AI革命:ChatGPT应用指南
  • Excel练习:双层图表
  • Linux | Ubuntu通过USB访问Redmi K40存储出现xxx was not providedby any .service files错误
  • 机器学习面试:逻辑回归与朴素贝叶斯区别
  • Oracle普通用户启停JOB报错ORA 27486权限不足
  • 【大数据】Flink 之部署篇
  • JVM知识——安全点
  • 【鸿蒙 HarmonyOS 4.0】网络请求
  • ElasticSearch聚合操作
  • 深入了解以太坊
  • 2017届校招提前批面试回顾
  • 5、React组件事件详解
  • Java IO学习笔记一
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • node和express搭建代理服务器(源码)
  • spring-boot List转Page
  • springMvc学习笔记(2)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue-cli在webpack的配置文件探究
  • 电商搜索引擎的架构设计和性能优化
  • 诡异!React stopPropagation失灵
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 排序(1):冒泡排序
  • 我是如何设计 Upload 上传组件的
  • 写给高年级小学生看的《Bash 指南》
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​学习一下,什么是预包装食品?​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # include “ “ 和 # include < >两者的区别
  • #Linux(权限管理)
  • (C语言)fgets与fputs函数详解
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (一)插入排序
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)德国人的记事本
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net wcf memory gates checking failed
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET成年了,然后呢?
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)