Cartographer 栅格地图更新

栅格地图更新过程

首先来了一帧雷达数据,对应到每一个栅格点,即观测得到该栅格点是occupied或者是Free。

在cartographer中,使用CorrespondenceCostValue(整数表示的空闲概率)表示栅格状态,所以现在的目的就是如何通过传感器的测量值(occupied/free)对栅格的空闲概率进行更新。

栅格分为miss栅格和hit栅格

栅格更新过程:

栅格的当前状态CorrespondenceCostValue为[0, 1~32768]

变量定义:

probability: 栅格被占用的概率

odds:占用与空闲的比率

orrespondenceCost:栅格是free的概率(orrespondenceCost + probability = 1)

当上一状态为unknown时,来了一个新状态为occupied,概率默认为0.55

当上一状态为已知时,定义上一时刻的栅格空闲概率为M_old[0, 0.1~0.9],栅格的概率更新公式如下。

在代码中如此实现

        CorrespondenceCostToValue(
            ProbabilityToCorrespondenceCost(ProbabilityFromOdds(
                odds * Odds(CorrespondenceCostToProbability(
                           (*kValueToCorrespondenceCost)[cell]))))) +
        kUpdateMarker);

odds 为odds(p_hit)

kValueToCorrespondenceCost 将整数[1~32768]映射到浮点数[0.1~0.9]

CorrespondenceCostToProbability 将空闲概率转化为占用概率

ProbabilityFromOdds odds逆运算,将odds转化为占用概率

ProbabilityToCorrespondenceCost 将占用概率转化为空闲概率

CorrespondenceCostToValue 将浮点概率映射到整数空闲概率

在本段中,使用了公式进行了栅格概率的更新,无非就是使用上一时刻的空闲概率[0, 1~32768],结合当前的hit概率,得到当前的空闲概率[0, 1~32768],hit的概率是固定值(0.55),那么就可以建立一张表,当上一时刻的空间概率为[0, 1~32768]任意值时,能快速查到到当前空闲概率。

miss栅格的更新过程同理。

使用查找表加速栅格更新过程

在cartographer中,采用了时间换空间的策略,使用了两张查找表,hit_table_, miss_table.。这两张表也称概率更新表,概率更新表存储着更新后的值,而对应该行的索引就是更新前的值。

  1. hit_table_解决新来测量值是occupied时,如何更新该点的CorrespondenceCostValue
  2. miss_table_解决新来测量值是free时,如何更新该点的CorrespondenceCostValue

1. 查找表初始化

查找表的更新过程就是把上一步的栅格更新过程的所有情况都走一遍。

// 将栅格是未知状态与odds状态下, 将更新时的所有可能结果预先计算出来

std::vector<uint16> ComputeLookupTableToApplyCorrespondenceCostOdds(
    float odds) {

  std::vector<uint16> result;
  result.reserve(kValueCount); // 32768


  // 当前cell是unknown情况下直接把odds转成value存进来
  result.push_back(CorrespondenceCostToValue(ProbabilityToCorrespondenceCost(
                       ProbabilityFromOdds(odds))) +
                   kUpdateMarker); // 加上kUpdateMarker作为一个标志, 代表这个栅格已经被更新了

  // 计算更新时 从1到32768的所有可能的 更新后的结果
  for (int cell = 1; cell != kValueCount; ++cell) {
    result.push_back(CorrespondenceCostToValue(ProbabilityToCorrespondenceCost(
                     ProbabilityFromOdds(odds * Odds(CorrespondenceCostToProbability((*kValueToCorrespondenceCost)[cell]))))) +
                    kUpdateMarker);

  }
  return result;
}

2.  利用查找表更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/402862.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习鸿蒙背后的价值?星河版开放如何学习?

现在是2024年&#xff0c;华为在1月18开展了鸿蒙千帆起仪式发布会。宣布了鸿蒙星河版&#xff0c;并对开发者开放申请&#xff0c;此次发布会主要是说明了&#xff0c;鸿蒙已经是全栈自研底座&#xff0c;鸿蒙星河版本的编程语言改为ArkTS/仓颉&#xff0c;内核改为鸿蒙原生内核…

5.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-测试需求与需求拆解

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;模拟游戏登陆器启动游戏并且完成注入 首先正常分析软件程序有没有漏洞&#xff0c;需要通过它的操作侵入&#xff0c;比如买东西&#xff0c;就通过买东西的按钮它背后有源代码就看源代码&#xff0c…

开启MySQL远程访问权限,允许远程连接

1、登录mysql数据库 mysql -u root –p 如果端口不是默认的3306&#xff0c;此处端口为3308&#xff0c;使用该指令&#xff1a; mysql –u root –port3308 -p 2、输入密码&#xff1a; 3、使用mysql&#xff0c;查看user表 use mysql; 4、查询user表&#xff0c;root账…

SpringBoot启动报错:Failed to load property source from ‘file:/D:.....

SpringBoot启动报错&#xff1a;Failed to load property source from file:/D:… SpringBoot启动爆如图的错误 2024-02-22 20:57:42.865 ERROR 23024 --- [ restartedMain] o.s.boot.SpringApplication : Application run failedjava.lang.IllegalStateExce…

Centos7环境下安装Docker详细步骤

目录 0.前言 1.卸载旧版 2.配置Docker的yum库 3.安装Docker 4.启动和校验 5.配置镜像加速 5.1.注册阿里云账号 5.2.开通镜像服务 5.3.配置镜像加速 0.前言 环境&#xff1a;Centos7 推荐&#xff1a;买个Centos7阿里或者腾讯云服务&#xff0c;这样就可以不用安装虚…

智慧养老驿站健康监测系统场景需求和技术要求

场景建设需求 1.场景建设核心任务目标 搭建养老驿站的健康检测系统平台&#xff0c;以智慧化手段整合数据、视屏、物联设备&#xff0c;全方位提升对政府、老人、养老机构、服务机构、服务人员等对象的服务支撑能力&#xff0c;赋能居家养老、社区养老、机构养老等多种养老模…

消息中间件之RocketMQ源码分析(十二)

Namesrv启动流程 Broker启动流程 BrokerStartup.java类主要负责为真正的启动过程做准备&#xff0c;解析脚本传过来的参数&#xff0c;初始化Broker配置&#xff0c;创建BrokerController实例等工作。BrokerController.java类是Broker的掌控者&#xff0c;它管理和控制Broker的…

2.21 Qt day2 菜单栏/工具栏/状态栏/浮动窗口、UI界面、信号与槽

思维导图 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;…

【Java 面试题】MySQL与Redis 如何保证双写一致性

目录 方案一:延时双删方案二: 删除缓存重试机制方案三:读取biglog异步删除缓存系列文章版本记录方案一:延时双删 延时双删流程 先删除缓存再更新数据库休眠一会(比如1秒),再次删除缓存。这个休眠一会,一般多久呢?都是1秒? 这个休眠时间 = 读业务逻辑数据

计算机网络:传输层知识点汇总

文章目录 一、传输层概述二、UDP协议三、TCP协议特点和TCP报文段格式四、TCP连接管理五、TCP可靠传输六、TCP流量控制七、TCP拥塞控制 一、传输层概述 我们通信的时候&#xff0c;虽然都说是主机之间的通信&#xff0c;但实际是主机之间的进程和进程通信。比如我和你发微信&am…

【AIGC】开源声音克隆GPT-SoVITS

GPT-SoVITS 是由 RVC 创始人 RVC-Boss 与 AI 声音转换技术专家 Rcell 共同开发的一款跨语言 TTS 克隆项目&#xff0c;被誉为“最强大中文声音克隆项目” 相比以往的声音克隆项目&#xff0c;GPT-SoVITS 对硬件配置的要求相对较低&#xff0c;一般只需 6GB 显存以上的 GPU 即可…

mysql 2-22

变量 查看系统变量 修改 用户变量 赋值 定义处理程序 流程控制 IF CASE LOOP语句 WHILE循环 REPEAT leave ITERATE 游标 使用步骤 全局系统变量持久化 触发器 查看触发器 优点 MYSQL8的新特性 移除的旧特性 窗口函数 公用表表达式 JDBC 存储引擎 MYISAM存储引擎 InnoDB存储引擎…

【已解决】c++如何将文件夹打包成zip

c将文件夹或者文件打包成zip是需要用到第三方库&#xff0c;本博文假设读者都已安装了zlib库了&#xff0c;这里就直接使用了。如果读者没有安装好&#xff0c;可以参考我的上一篇博文 vs2015零基础编译zlib从失败到成功 文章目录 1、配置目录2、源码3、代码效果 1、配置目录 …

Druid无法登录监控页面

问题表现&#xff1a;在配置和依赖都正确的情况下&#xff0c;无法通过配置的用户名密码登录Druid的监控页面 检查配置发现 配置的用户名和密码和请求中参数是一致的&#x1f914; Debug发现 ResourceServlet 是Druid的登录实现&#xff0c; 且调试发现usernameParam是null&am…

文件上传漏洞--Upload-labs--Pass131415--图片马

声明&#xff1a;Pass13、14、15 都使用相同手段--图片马进行绕过。 一、什么是图片马 顾名思义&#xff0c;图片马即 图片 木马。将恶意代码插入图片中进行上传&#xff0c;绕过白名单。 图片马制作流程&#xff1a; 1、在文件夹中打开 cmd&#xff0c;输入指令。 /b&…

【MySQL】数据库索引详解 | 聚簇索引 | 最左匹配原则 | 索引的优缺点

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

【JS逆向学习】同花顺(q.10jqka)补环境

逆向目标 目标网址&#xff1a;https://q.10jqka.com.cn/ 目标接口&#xff1a; https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/3/ajax/1/ 目标参数&#xff1a;cookie 逆向过程 老规矩&#xff0c;先分析网络请求&#xff0c;发现是 cookie 加…

2024年学习的最高薪酬编程语言

2024年学习的最高薪酬编程语言 10. Scala Scala是一种在Java虚拟机&#xff08;JVM&#xff09;上运行的函数式编程语言。它通常用于大数据处理、机器学习和后端Web开发。 关于Scala编程语言及其常见用途的要点如下&#xff1a; Scala是一种通用编程语言&#xff0c;运行在J…

Sora:OpenAI引领AI视频新时代

Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展&#xff0c;AI视频模型已成为科技领域的新热点。而在这个浪潮中&#xff0c;OpenAI推出的首个AI视频模型Sora&#xff0c;以其卓越的性能和前瞻性的技术&#xff0c;引领着AI视频领域的创新发展。让我们将一起探讨…

Uniapp真机调试没有检测到设备,请插入设备或启动模拟器后刷新再试

最近用HbuilderX开发遇到了一个问题&#xff0c;之前插上手机就能调试&#xff0c;但最近再写app的时候&#xff0c;插上手机&#xff0c;也打开了开发者模式&#xff0c;但就是检测不到设备。 后来发现是要打开MIDI模式。vivo手机路径为&#xff1a;系统管理与升级->开发者…