阅读笔记: Robust Vehicle Localization in Urban Environments Using Probabilistic Maps

news/2024/4/18 19:26:20/文章来源:https://www.cnblogs.com/x-bene/p/16606870.html

摘要

此篇是对Map-Based Precision Vehicle Localization in Urban Environments[4]工作的改进,在精度、地图更新、对环境改变和动态障碍物的鲁棒性方面都有所提升。具体而言,环境没有被建模为一个固定的反射强度网格,而是被建模成概率网格,每个网格都独立表达为一个对反射强度的高斯分布。这样就可以优先使用贝叶斯推断加权最可能是stationary的地图部分,从而减少不确定度和灾难性错误。进一步地,通过使用离线SLAM来对齐同一环境的多个passes(在时间上可能相差几天甚至几个月),可以构建一个越来越鲁棒的用于定位的地图。

II 概率地图

我们对建图的最终目标是获得一个对观测环境的网格化表达,这些网格同时保存了在那个位置上观测到的平均反射强度和这些值的方差。我们通过三步来获得这样一张图:首先,我们对所有轨迹进行后处理让重叠区域都对齐。然后,我们标定每一个laser beam的反射强度让beams都有相同的响应曲线。最后,我们将标定后的激光返回值从对齐的轨迹上投影到一个高分辨率的概率地图上。

A 使用GraphSLAM的地图对齐

给定一个或多个包含GPS,惯导,激光数据的logfile,我们希望refine这些轨迹从而将重叠区域对齐。具体而言,如果logfiles中存在空间上很近单时间上分隔的section,这些section中的vehicle pose必须进行校正从而让两个section合理地对齐。这个任务在[4]中就已经实现。简要地说,GraphSLAM用于优化一个目标函数,这个目标函数中,相邻的vehicle pose由惯导和odometry数据连接,vehicle pose连接到它们的全局估计位置,从logfile中匹配上的section由它们之间计算出来的对齐偏移量连接。
这一次的实现中,匹配的poses之间的对齐偏移量通过对来自两个section中的一簇5个相邻的360度laser scan进行ICP进行计算,x,y,z,yaw,pitch, roll全都优化。一旦一系列匹配计算好,GraphSLAM最小化目标函数从而轨迹得到更新。

B 激光标定

在生成地图之前,对不同的laser beam进行标定使得它们对具有同样亮度的物体具有相似的响应是很重要的。对于良好标定的激光雷达,这一步省略是没有影响的。但是从标定很差的激光雷达生成的概率地图有两个缺点:其一,每个网格的强度均值将严重依赖与那个激光束恰好打到它;其二,计算出来的强度方差将显著比实际的大。实际上,我们发现每次使用时都重新标定是不必要的,不过使用出厂标定毫无疑问也是不够的。因此我们只标定一次,得到的标定表将用于后续建图和定位。
我们不是对每一个laser beam计算一个单一的参数(虽然与未标定的数据相比可能也有提升),而是对每个beam计算一个完整的响应曲线。这样我们就有对每个beam有一个从观测的强度到输出的强度的完整映射函数。
我们没有使用一个固定的标定目标,而是提出一种无监督的标定方法,可以在任意环境开一圈的时候执行。为了计算每个beam的标定响应函数,当车辆穿过一系列poses时,我们投影来自logfile的激光测量,对于每一个地图网格,保存强度值和hit到该网格的 beam相应的ID。对于每个beam j观测到的8-bit强度值a,beam j对于观测强度a的响应值简单地通过 beam j返回强度为a的所有网格中的其它beam的强度平局值来得到。
具体而言,令T为一系列观测\(\{z_1, ..., z_n\}\),其中z_i为包含beam ID,range测量,强度测量和地图cell ID的4元组\(<b_i, r_i, a_i, c_i>\)。那么我们可以得到
image
其中N和M为地图的维度。则观测强度为a的beam j的标定输出c(a,j)可以在single pass计算得到:
image
也就是说,当beam j观测到强度a时,标定的输出为所有beam j观测到强度为a的地图网格内其它beam强度读数的条件期望。
这个等式对所有的64x256个j和a的组合。因此一个标定文件时一个64乘256的强度映射函数;没有被直接观测到的值可以直接插值得到。只需要计算一次并保存到一个查询表。该方法对标定环境没要求,动态障碍的存在也影响不大。

C 地图创建

给定标定后的laser和一个或多个轨迹对齐后的logfile,就可以生成一个高精地图了。为了构建一个概率地图,每个地图网格不仅保存所有强度的均值,还保存它们的方差。像[13]那样显式地通过多次photographs来估计实际的反射率对我们的方法是没必要的,只需要简单地考虑观测到的强度方差就能实现我们的建图和定位目标。
生成概率地图的算法是直观的。随着车辆穿过它的一系列位姿,激光点投影到一个x, y正交平面,每个地图网格表达了15cm x 15cm的地面块。每个网格都维护一个intermediate values以在每次有新的观测时更新它的强度值和协方差。

III. 在线定位

一旦我们建好环境的地图,就可以用于实时定位。我们表达用一个2维的直方图滤波器来表达可能的x和y的offsets的似然分布。与往常一样,滤波器由两部分组成:运动更新,在我们基于运动的估计中降低置信度;以及观测更新,在我们基于数据的估计中增加置信度。

A. 运动更新

我们的GPS/IMU系统以200Hz提供惯性更新和全局位置估计。通过积分惯性更新我们维护一个“smooth coordinate”系统,它对GPS位姿跳动具有不变性,但是不可避免地会随时间漂移。幸运的是,由于smooth坐标系通过积分速度进行更新,它相对于真实全局坐标系统的offset可以以一个高斯噪声的随机游走精确地建模。显然,恢复两个坐标系之间的offset等效于知道我们的真实全局位置,所以这个offset是我们努力要估计的。
这样,我们滤波器中的运动模型非常简单。我们只需要建模smooth和global之间的drift,而不用建模车辆自车运动的不确定性。车辆运动模型实际上并不是被忽略了,而是在紧耦合的GPS/IMU系统内部被精确地使用,从而最小化smooth和global之间漂离的速度。由于smooth的漂移被建模为零均值高斯噪声,运动模型更新每一个网格的概率如下:
image
其中\(\overline P(x,y)\)为运动更新后的车位于网格(x,y)中的后验概率,\(\eta\)为归一化因子,\(\sigma\)为描述smooth系统漂移速率的参数。

B. 观测更新

直方图滤波器中的第二个部分是观测更新,使用实时接收到的laser scan来refine车辆的位置估计。
我们处理实时laser scan的方式于之前描述的建图过程是相同的。也就是说,以与我们地图完全相同的方式通过积累的传感器数据构建一个rolling grid(增量式构建?),而不是把每个laser return都作为网格的观测。这个方法让我们可以直接比较从传感器数据构建的cells和来自地图的cells,并且避免了过渡赋权给那些有很多return的网格(例如树和大的动态物体)。
如果记z为传感器数据,m为地图,x和y为可能的相对GPS pose(?)的偏移,则由贝叶斯法则:

\[P(x,y|z,m) = \eta \cdot P(z | x, y, m) \cdot P(x, y) \]

我们可以将GPS/IMU pose的不确定度近似为方差大小为\(\sigma_{GPS}^2\)的高斯,从而就可以简单估计P(x, y)为GPS高斯和运动更新之后的后验置信度的乘积:

\[P(x, y) = \eta \cdot exp((x^2+y^2)/(-2\sigma_{GPS}^2)) \cdot \overline P(x, y) \]

为了计算给定offset (x,y)和地图m下传感器数据z的概率,我们累乘所有网格的概率,这一概率由观测到的传感器数据网格的平均强度和对应的地图网格的平均强度以及它们的协方差给出。这个值然后施加一个指数幂\(\alpha < 1\),以考虑数据不是完全不独立的事实。比如说由于系统标定误差或者多帧测量到的环境中小幅结构改变。
我们称地图和传感器数据中的标准差二维数组分别为\(m_\sigma\)\(z_\sigma\)。对平均强度值也是用同样的记号,则有:
image
为了对局部过时地图实现鲁棒性,我们进一步为地图和传感器数据的强度值impose一个极小的融合的标准差?这对环境改变有点用。出于计算考虑我们严格限制对\(P(x, y | z, m)\)的计算限制在GPS估计的几米内。然而这个搜索半径很快就需要增加如果是用不那么精确的GPS系统。

C. 最可能的估计

直接选Max可能会有抖动的风险。另一个选择是使用后验分布的质心,这可以提升一致性,但是可能偏离中心太多。作为一个折衷,我们使用具有variation的质心。即,我们对\(P(x, y)\)加一个指数幂\(\alpha > 1\),如下:
image

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

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

相关文章

交互技术之AJAX

​/* *作者:呆萌老师 *☑csdn认证讲师 *☑51cto高级讲师 *☑腾讯课堂认证讲师 *☑网易云课堂认证讲师 *☑华为开发者学堂认证讲师 *☑爱奇艺千人名师计划成员 *在这里给大家分享技术、知识和生活 *各种干货,记得关注哦! *vx:it_daimeng */ AJAX: Asynchronous Javascript A…

Mobile-terminal-development-experiment-5-experiment-report

2022年夏季《移动软件开发》实验报告 姓名:王思恩 学号:20020007070姓名和学号? 王思恩,20020007070本实验属于哪门课程? 中国海洋大学22夏《移动软件开发》实验名称? 实验5:第一个android应用小程序博客地址? https://www.cnblogs.com/wang-si-en/Github仓库地址? h…

函数式接口-常见函数式接口-Predicate接口

常见函数式接口 JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供 Predicate接口 有时候我们需要对某种类型的数据进行判断 从而得到一个boolean值结果 这时可以使用Predicate<T>接口 抽象方法:test Predicate接口中包含…

在网站上更改鼠标样式

笔者研究了一下,发现仅通过CSS(不知道还有没有别的方法)没办法达到笔者真正想改变鼠标指针样式的目的 和自己在电脑上安装鼠标指针样式不同,网站上鼠标指针没法根据鼠标指针自身状态而更改样式,而只能通过CSS选择器,根据网页元素的状态来更改鼠标指针样式CSS选择器参考手…

html table 美化-html如何用css美化表格

html用css美化表格的方法:首先创建一个HTML示例文件;然后在body中创建table表格;最后通过style标签给表格添加css样式即可。 代码 下面通过示例来看看。 /*表格样式*/ table {width: 90%;background: #ccc;margin: 10px auto;border-collapse: collapse;/*border-collapse:c…

Live2d Widget

写在最前 最早的时候看别人的博客很多都有一个可爱的看板娘,然后就找了教程给自己也整了一个。因为找到的教程都是稂莠不齐的,原作者自己说的也略显含糊(其实是我自己看不懂)。总之秉承着一如既往的小白风格。把网上的教程做个整合。 效果正式步骤 1.首先克隆仓库: https:…

条条大路通罗马

https://www.acwing.com/problem/content/1579/思路: 最短路里面的经典题型,在最短路的时候维护多个变量。 #include<bits/stdc++.h> #include<unordered_map> using namespace std; const int N = 250; unordered_map<string, int> mp; //对字符串离散化…

我对EE学科知识体系的一点理解

前言 研究生一年级的分都出完了,鉴于学分已经修够了,可以说学生时期上课、写作业、考试的日子也基本上到头了。 有幸高中升大学时挑选了一个自己感兴趣的专业(电子信息工程),学习之路虽然难言轻松,但还是乐在其中的。按照本科4年+研究生1年来算,共5年的学习时间,北京理…

向QtableWidget中添加自定义widget崩溃异常: 0xC0000005

1.问题描述 想给QTableWidget添加QCheckBox,代码如下,tableWidget->setCellWidget老是崩溃(0x0F954E63 (qwindows.dll)处(位于 QStockView.exe 中)引发的异常: 0xC0000005: ),我用的其他的tableWidget添加QCheckBox却是正常的。搞了一天;QCheckBox* pCheckBox = new Q…

basic_find

一直对输入数据进行跟踪 发现整体的混淆架构 main是一个 类似于一种switch的vm 这个题有一个特征 就是如果这题里面一个函数真正有用的话,他会使用很多switch来掩饰 而如果没有往往是简单运作一下就跳过了 所以顺着这个线索去追踪 刚好是最实用的比如在这个函数里 前面几个函数…

10--DSL查询文档-查询分类和基本语法

elasticsearch的查询依然是基于JSON风格的DSL来实现的。DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: (1) 查询所有:查询出所有数据,一般测试用。 例如:match_all (2) 全文检索(full text)查询:利用分词器…

2022第六届河南省高等学校信息安全对抗大赛(ISCC2022)——古典

1. 古典 题目提示为古典,下载后发现是一个txt文本,打开ON4W45D3G44TC4TSGU3DKLLOONYXELJUG43TELJYHFXDOLJWOBYXC4JWOEYDQNRTON6Q==== 发现这是个BASE32的解码,利用解码工具的synt{791rr565-nsqr-4772-89n7-6pqqq6q0863s} 然后根据题目提示古典,使用凯撒解码的(因为古典加密…

笔记本网卡总断连,如何使得网卡不自动休眠?

笔记本网卡总断连,如何使得网卡不自动休眠? 总结 家里面的笔记本拿来开机做服务器,但是出门在外的时候没法远程连接回服务器,回到家发现是因为网卡休眠了。很抓狂。 通过以下方法关闭网卡的自动休眠。重新安装网卡驱动修改注册表OK参考 修改注册表 https://www.zhihu.com/q…

硬件结构 硬盘--

CPU 的高速缓存,通常可以分为 L1、L2、L3 这样的三层高速缓存,也称为一级缓存、二级缓存、三级缓存。在 Linux 系统,我们可以通过这条命令,查看 CPU 里的 L1 Cache 「数据」缓存的容量大小: $ cat /sys/devices/system/cpu/cpu0/cache/index0/size 32K 内存用的芯片和 CPU…

linux kernal note

linux kernal note 内核体系结构 内核由五个模块构成 进程调度模块(核心) 内存管理模块 文件系统模块 进程间通信模块 网络接口模块内存管理 内存条分区 内存分为以下几个功能模块:从前到后为内核模块、高速缓存区(包含显存和BIOS ROM)、虚拟盘、主内存区。linux分页分段管…

Hadoop及其三大组件原理

Hadoop是什么? 由Apache基金会开发的分布式系统基础架构 海量数据的存储和分析计算 Hadoop架构历史: 1.0 HDFS和MapReduce 2.0 在1.0基础上增加了YARN(任务调度),解放了MapReduce 3.0 和2.0类似,着重优化 Hadoop优势: 1)高可靠性 多数据副本 2)高扩展性 动态扩展,动态…

Java 断点下载(下载续传)服务端及客户端(Android)代码

原文: Java 断点下载(下载续传)服务端及客户端(Android)代码 - Stars-One的杂货小窝最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一下关于贴上关于实现服务端(Spring Boot)与客户端(Android)是如何实现下载续传功能 断点下载功能(…

深入flex 中align-items属性

设置外层盒子flex 显示宽度为自己盒子本身宽度 高度被拉高整个盒子设置为垂直方向的对齐方式 align-items:flex-start 盒子不将被拉伸 显示元素本身的高度align-items:center 盒子不将被拉伸 显示元素本身的高度align-items:stretch 元素拉伸

软件测试入门三(软件bug)

一、什么是软件bug 一个手机,如果他的屏幕碎了、裂了,拐角磕碰瑕疵,这些都是手机的缺陷。 软件就好比这款手机,出现了各种各样的问题,就是软件的bug(缺陷) 软件在测试过程中发现的bug,属于正常情况,因为能够在测试过程中被发现得到修改,如果bug出现在线上,就是线上事…

Activiti可视化流程管理器

1.简介 Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。在Java工作流引擎中可谓是主流,我们的项目也是使用的这个框架进行流程相关的开发。与流程息息相关的就是我们的流程定义BPMN文件…