当前位置: 首页 > 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添加残差项构建优化问题求解。

详见《》

相关文章:

Cartographer框架简述

catographer框架分为前端和后端 前端包括雷达数据处理;位姿预测;扫描匹配和栅格地图更新。 后端包括后端:线程池任务与调度;向位姿图添加节点,计算节点的子图内约束和子图间约束(回环检测)&…...

适用于 Linux、Windows 和 macOS 的免费 ONLYOFFICE 桌面应用程序

前言: 最近也是发现了一款特别好用的免费ONLYOFFICE 桌面应用程序忍不住分享给大家,这款编辑器能够打开、阅读和编辑多种文件类型,包括.docx文档、.pptx幻灯片和.xlsx表格等开放XML格式的Office文档。此外,ONLYOFFICE桌面编辑器还…...

C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】

C面向对象程序设计-北京大学-郭炜【课程笔记(四)】 1、this指针1.1、this指针的作用1.2、this指针和静态成员函数 2、静态成员变量和静态成员函数2.1、基本概念2.2、基本概念总结2.3、如何访问静态成员2.4、静态成员变量的使用场景(重要&…...

前端构建效率优化之路

项目背景 我们的系统(一个 ToB 的 Web 单页应用)前端单页应用经过多年的迭代,目前已经累积有大几十万行的业务代码,30 路由模块,整体的代码量和复杂度还是比较高的。 项目整体是基于 Vue TypeScirpt,而构…...

react实现拖拽的插件

插件一:dnd-kit 插件官网链接https://docs.dndkit.com/introduction/installation 插件二:react-beautiful-dnd https://github.com/atlassian/react-beautiful-dnd/tree/master 两个插件的区别: 插件一可以做到从区域A拖住到区域B 插件二…...

解决Uncaught SyntaxError: Cannot use import statement outside a module(at XXX)报错

报错原因:这个错误通常是因为你正在尝试在一个不支持 ES6 模块语法的环境中使用 import 语句。这可能是因为你的代码是在一个只支持 CommonJS 或 AMD 模块系统的环境中运行的,或者你的代码运行的环境没有正确配置以支持 ES6 模块。如果是在浏览器环境&am…...

PHP如何利用post与get方式传值接收数据

目录 一、POST传值1. 使用curl库发送 POST 请求:2. 使用file_get_contents()函数发送 POST 请求:3. 使用stream_socket_client()函数发送 POST 请求:4. 利用from表单提交数据: 二、GET传值1. 使用http_build_query()函数构建 URL …...

在Mac上搭建MongoDB环境

最近工作中需要装MongoDB环境,搭建过程中遇到了一些问题,在这里记录一下安装MongoDB环境的方法以及问题的解决方法。有两种安装MongoDB的方法:brew安装和手动安装。 目录 使用Homebrew安装MongoDB 手动安装MongoDB(不使用Homebr…...

第三十九天| 62.不同路径、63. 不同路径 II

Leetcode 62.不同路径 题目链接:62 不同路径 题干:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “…...

提高代码质量的 10 条编码原则

提高代码质量的 10 条编码原则 本文转自 公众号 ByteByteGo,如有侵权,请联系,立即删除 今天来聊聊提高代码质量的 10 条编码原则。 软件开发需要良好的系统设计和编码标准。我们在下图中列出了 10 条良好的编码原则。 01 遵循代码规范 我们…...

SHERlocked93 的 2017 年终总结

回家的路上有点无聊,简短回顾一下2017年的得失收获 开始两个月3月到5月用C#完结了一个烂尾的wpf小项目,对自己前半年的.net生涯也算是一个句号(虽然不知道最后有没有采用),后面由于项目组转变技术栈,选择了…...

【FreeRTOS基础入门】任务通知

文章目录 前言一、任务通知介绍1.1 任务通知怎么通信1.2 任务通知与其他通信方式的区别1.3 优势及限制任务通知的优势任务通知的限制 1.4 内部原理 二、任务通知的使用2.1 发出与接收通知简化版2.1 发出与接收通知专业版 总结 前言 FreeRTOS 提供了丰富而灵活的任务通知机制&a…...

python opencv比较图片相似度

目录 一:均值哈希算法 二:三直方图算法 三:单通道直方图 一:均值哈希算法 均值哈希算法是一种快速比较图像相似度的方法。它首先将图像转化为灰度图像,然后计算图像的均值,接着将每个像素的...

校园兼职|大学生校园兼职小程序|基于微信小程序的大学生校园兼职系统设计与实现(源码+数据库+文档)

大学生校园兼职小程序目录 目录 基于微信小程序的大学生校园兼职系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户​微信端功能模块​ 2、管理员服务端功能模块 (1) 兼职管理 (2)论坛管理 (3&…...

linux系统离线安装docker服务教程

1、下载、上传docker-20.10.0.tgz压缩包至服务器,其中,docker下载地址https://download.docker.com/linux/static/stable/x86_64/ 2、新建安装docker脚本docker-install.sh #!/usr/bin/env bash tar -xvf docker-20.10.0.tgzcp docker/* /usr/bin/cat …...

【青龙】快速搭建青龙面板,部署属于你自己的应用!

青龙面板是一个支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台。 废话不多说,直接开始。 这里使用一台 雨云 的云服务器作为演示。雨云注册地址:https://www.rainyun.com/ 优惠码:lz932 使用优惠码注册后绑定微信可获得8折…...

shell脚本实现Mysql分库分表备份

一.数据库的分库分表? 12张图把分库分表讲的明明白白!阿里面试:我们为什么要分库分表https://mp.weixin.qq.com/s?__bizMzU0OTE4MzYzMw&mid2247547792&idx2&sn91a10823ceab0cb9db26e22783343deb&chksmfbb1b26eccc63b784879…...

【算法 - 动态规划】从零开始学动态规划!(总纲)

动态规划 动态规划(Dynamic Programming,DP)是一种优化问题求解方法,通常用于解决具有 重叠子问题 和 最优子结构 性质的问题。它的基本思想是将原问题分解成更小的子问题,通过求解和保存这些子问题的解,避…...

从 Elasticsearch 到 Apache Doris,统一日志检索与报表分析,360 企业安全浏览器的数据架构升级实践

导读:随着 360 企业安全浏览器用户规模的不断扩张,浏览器短时间内会产生大量的日志数据。为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检…...

【力扣 - 二叉树的直径】

题目描述 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 提示: 树中节点数目在范围 [1, 10000] 内…...

突破百度网盘限速:Mac用户7分钟解锁SVIP级下载体验

突破百度网盘限速:Mac用户7分钟解锁SVIP级下载体验 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘非会员100KB/s的龟速下载…...

华为eNSP ACL实战:基于服务与网段的多维度访问控制

1. 华为eNSP ACL实战入门指南 第一次接触华为eNSP的ACL配置时,我也被那些规则搞得头晕眼花。直到有次公司内网出了安全问题,老板要求我立刻隔离市场部和研发部的网络访问,才逼着我真正搞懂了ACL的玩法。现在我就用最直白的语言,带…...

Sentinel-1A极化矩阵处理实战:用SNAP生成C2矩阵的7个关键参数解析与效果对比

Sentinel-1A极化矩阵处理实战:用SNAP生成C2矩阵的7个关键参数解析与效果对比 当处理Sentinel-1A极化SAR数据时,C2矩阵的生成质量直接影响后续地物分类、变化检测等应用的精度。许多初学者在使用SNAP的Polarimetric-Matrices算子时,往往直接采…...

智能车小白也能懂的舵机PD控制:从电感差比和到方向控制,保姆级避坑指南

智能车方向控制入门:用PD算法驯服你的舵机 第一次看到智能车在赛道上流畅过弯时,很多人都会好奇——这辆小车是如何感知赛道边界并精准控制方向的?作为电磁组智能车的核心部件,舵机就像车辆的"方向盘",而PD控…...

__attribute__((unused))的妙用:如何优雅地处理未使用的变量与参数

1. 为什么我们需要__attribute__((unused)) 在C/C开发中,编译器警告就像一位严格的代码审查员,时刻提醒我们可能存在的问题。但有时候,我们确实需要定义一些暂时不使用的变量或参数,比如为了保持接口兼容性,或者在某些…...

终极免费方案:3分钟掌握英雄联盟身份伪装完整指南

终极免费方案:3分钟掌握英雄联盟身份伪装完整指南 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款基于官方LCUAPI开发的英雄联盟个性化展示工具,通过安全合规的方式实现游戏身份伪装、…...

帧差法实战避坑:为什么你的运动检测总是有‘鬼影’?三帧差法参数调优全解析

帧差法实战避坑:为什么你的运动检测总是有‘鬼影’?三帧差法参数调优全解析 当你第一次尝试用帧差法实现运动检测时,那种兴奋感可能很快就会被现实浇灭——屏幕上那些模糊的拖影、闪烁的噪点,还有那些明明没有物体移动却不断跳动的…...

自然语言生成:为AI原生应用注入新活力

自然语言生成:为AI原生应用注入新活力 关键词:自然语言生成(NLG)、AI原生应用、大语言模型、文本生成、多模态交互 摘要:自然语言生成(NLG)是AI领域的“语言魔法”,能让机器像人类一…...

在对话中处理数学方程时,OpenClaw 的 LaTeX 渲染引擎支持哪些宏包?

在讨论OpenClaw的LaTeX渲染能力时,很多人会直接去翻官方文档或者技术手册。但如果你真的在项目里用过它,尤其是处理过那些复杂的数学对话场景,就会发现文档里写的东西和实际能用的东西,中间往往隔着一层实践的距离。 OpenClaw在设…...

手把手教你搭建轻量级Gitea代码托管平台:Windows本地部署实战

1. 为什么选择Gitea作为本地代码托管平台 作为一个长期在Windows环境下开发的程序员,我深知一个轻量级代码托管平台的重要性。以前我也用过Gitblit这类工具,但随着项目复杂度提升,越来越需要一个更现代的解决方案。Gitea就像是为个人开发者量…...