高德在提升定位精度方面的探索和实践

2019杭州云栖大会上,高德地图技术团队向与会者分享了包括视觉与机器智能、路线规划、场景化/精细化定位时空数据应用、亿级流量架构演进等多个出行技术领域的热门话题。现场火爆,听众反响强烈。我们把其中的优秀演讲内容整理成文并陆续发布出来,本文为其中一篇。

阿里巴巴高级地图技术专家方兴在高德技术专场做了题为《向场景化、精细化演进的定位技术》的演讲,主要分享了高德在提升定位精度方面的探索和实践,本文根据现场内容整理而成(在不影响原意的情况下对文字略作编辑),更多定位技术的实现细节请关注后续系列文章。

以下为方兴演讲内容的简版实录:

今天要分享的主题是关于定位的场景化、精细化。高德定位,并不只是服务于高德地图本身,而是面向所有的应用开发者和手机设备厂商提供定位服务。目前已有30万以上的APP在使用高德的定位服务。

用户每天会大量使用定位服务,比如看新闻、打车、订外卖,甚至是购物,首先都是要获得位置信息,有了更精准的位置信息,才可能获得更好的服务体验。

高德地图有超过1亿的日活用户,但是使用定位的有好几个亿,每天的定位请求数量有一千亿次。如此大的数据量,高德定位服务可以保持毫秒级的响应速度,我们在这里面做了很多工作。此外,我们还提供全场景的定位能力,不管为手机、车机还是任何厂家,都能提供位置服务。

我今天从四个方面介绍,分别是:

  • 定位面临的挑战
  • 高德地图全场景定位
  • 分场景提升定位精度
  • 未来机遇

定位面临的挑战

大家可能都知道GPS,GPS在大部分情况下可以提供很好的精度,但是对于某些场景还是不够,比如驾车,GPS给出的精度大概是10米,如果仅靠GPS定位甚至无法区分出在马路的哪一侧。

第二个场景是在室内,室内收不到GPS信号,这样的场景下如何实现比较准确的定位?第三个场景是如何在精度和成本之间取得平衡,因为不可能为了追求一个很好的精度去无限投入成本。只有通过海量大数据挖掘,算法和数据质量的提升,达到效果的持续优化,才能达到最终对各种场景的全覆盖。

有很多技术可以选择,除了GPS定位,还有基于网络定位、Wifi基站,原理就是通过扫描到的Wifi和基站列表、信号强度,进行数据库查找,找到Wifi位置,定位。

除此之外还有惯性导航定位,惯性导航是一种相对定位的方式,可以不断计算跟上次定位的偏移量,有了初始定位之后,根据连续计算可以获得最终的位置。

还有根据地图匹配定位,比如GPS的点落在一个湖里,显然是有问题的,可以通过地图匹配,找到最近的一条路,这时候精度就得到了提升。

还有一些定位方式最近几年变得很热门,例如视觉、雷达、激光,自动驾驶的概念推动了这些技术的发展,这些方式各有各的定位精度和差异性。例如视觉,在实践中往往需要大量计算和存储的开销。

很多时候,还是要基于Wifi的定位,获得初始定位,然后在不同场景下不断的优化,通过不同的数据源提升精度。

高德地图如何实现全场景定位

高德主要分为两个业务场景,手机和车机。在手机上主要是GPS+网络定位。驾车的场景下,我们还会做一些根据地图的匹配,实现对特殊道路的支持。

以往,很多用户会反馈说会遇到GPS信号不好,导致无法定位、无法导航的情形。约有60%的情况是因为用户位于地下停车场或者在隧道里,约30%的情况是附近有严重的遮挡,比如在高架桥下,或者在很高的高楼旁。这些都会造成对GPS比较严重的遮挡。

我们打电话的时候,连接的基站可能就在一公里范围内,这样短的距离传输信号还时常会出现信号中断,如果GPS信号距离两万多米的高度,出现问题的可能性还是存在的。所以必须通过其他方式,例如地图匹配或者惯性导航来对GPS进行补充。

在室内的场景,需要解决的是如何去挖掘Wifi基站的位置,提升精度。

在车机的场景,我们会结合更多来自于汽车的数据输入来帮助我们。

定位的基础能力

网络定位本质上是一个数据闭环,每个人在定位的时候,实际上是发送了本身的基站和Wifi列表,发送的数据一方面可以用来定位,另一方面也可以用做数据训练。数据训练主要产出两种数据,一个是Wifi基站的位置,通过数据挖掘,我们就可以获得大概的位置(初始定位),但是精度比较差。第二个是产生更详细的空间信号强度分布图。有了这个图以后,就可以进行比较精准的定位了,根据信号强度判断我距离这个基站和Wifi有多远,从而对精度进行改进。

数据闭环完成以后,就是一个正向的反馈,数据越多,训练结果越多,定位结果就越准确,从而吸引更多的用户来使用(产生数据)。这就是通过数据挖掘,不断提升精度的闭环。

算法部分,我们也经过了不断的迭代。最早是基于经典的聚类模型,就是扫描基站Wifi列表,聚类以后选择其中一处作为我的位置,这个方法效率比较高,很快可以得到结果,但是精度很差。

第二步,我们把空间进行了精细的划分,在每个网格内统计一些基础的特征,比如历史上的点定位的数量、定位的次数、Wifi的数量等等,计算出一个网格的打分,再对网格进行排序,最后你的定位点就是这个网格。通过这种方法,30米精度的占比提升了15%。

这种方法也有局限性,人工调参带来的收益是有限的,调到一定程度就没办法再提升了。所以,第三步就是把机器学习算法引入这个过程,利用监督的学习提升到最佳的模型和参数,这样可以在特定场景下获得显著提升。主要的场景就是解决大误差的Case。

一个比较典型的问题就是,扫描到的基站Wifi可能只有一个基站、一个Wifi,没有别的信息了。这个基站Wifi又离的特别远,无论选择基站还是Wifi,都有50%的概率是算错了。有监督学习,就可以把海量的配送拿出来,精细化的挖掘细微的差异,达到全局最优的效果,在某一情况下选基站,某一情况下选Wifi。把犯错的比例降低了50%。

上图就是我们的线上神经网络的模型,神经网络用于在线服务现在是比较流行的方式,我们在这里实际上是利用基站和Wifi的信号强度和混合特征作为特征输入,同时把历史位置也作为序列放进来,这个历史位置特征会放入一个RNN模型,预测现在的位置,使用预测的结果和基站Wifi列表特征,再往下预测,最后是网格的打分。最终输出一个概率最高的网格作为输出。

这个方法最大的挑战并不是在算法,而是算法效果和工程上的可实现性,如何能够达到最优。高德每天有上千亿次的调用,延时要在10毫秒以内。

另外,数据量很大,所有的数据,每条都有很多特征,在线的数据存储大概有几十个TB,这个数据量也不可能放在在线服务里做,所以要做相应的优化。

我们做了三个方面的优化,第一是分级排序。把定位过程变成一个显微镜步骤,先做一个很粗略的定位,然后逐步收敛到很精确的位置。粗略定位的时候可以用很大的网格,用很少的特征,快速过滤掉一些不可能的位置。

然后,在很精细的网格里,用更多的特征、更多的网格进行排序。通过这种方法,就可以极大提升计算的效率,把一些不必要的计算过滤掉。

第二是模型简化。虽然深度学习的效果很好,但是不可能在线上用很复杂的模型,我们通过减少层数和节点数,把浮点数精度降低。

第三是特征压缩。这里面有特色的一点是我们根据模型进行的压缩,原始特征的输入的数量是很大的,我们增加一个编码层,输入的特征经过编码层以后,只输出两个字节的特征。我们把在线、离线的数据处理好以后,最后在线只存储两个字节。通过这种方法,在线特征的数据量降低了10倍,降低到1个TB以内。以上是解决的几个主要问题。

不同场景下的精度提升

在室内场景,经常会定位到室外去,这跟刚才介绍的序列流程是有关系的,因为采集过程更大概率是在室外,序列后的Wifi位置都在马路上,所以定位最后的概率也是在马路上,但是这对用户体验是很差的。比如打车,可能在室内叫车,定位在对面的马路上,但这条马路可能是不对的,需要找到我在哪个楼里,离哪个道路比较近。

怎么解决这个问题?一种方法是通过数据采集,就是在室内进行人工的采集,使训练数据的数据分布跟实际的预测数据分布保持一致,这种方法当然精度比较好,但是主要缺陷是成本非常高,目前也只是在热门商场和交通枢纽进行这样的数据采集,这肯定不是一个可扩展的方法。

我们的方法是想通过引入更多的数据优化定位过程。如果能基于地图数据挖掘出Wifi和POI的关系,就可以用数据关联提升精度。比如扫到一个Wifi,名字叫KFC,有一个可能就是你在肯德基里,这个方法比较简单。实际用的方法会更加复杂。

我们是利用Wifi信号的分布反向挖掘出位置,上图里蓝色的部分就是楼块的位置,红色的点是Wifi的真实位置,绿色的点是采集到Wifi的位置,绿色越亮,代表这个地方的信号强度越强,通过这个图放入图像学习,比如用CNN挖掘出它的位置以后,我们就可以建立一个Wifi跟楼块或者跟POI的关联,通过这个方法可以使全量Wifi的30%都能关联上相应的POI或者楼块。

在线的时候需要知道用户什么时候在室内,什么时候在室外。我们用的是利用信号强度特征做区分的算法,在室内室外扫描到的Wifi列表和强度会有很大差别,通过这个差别可以训练出模型。绿色的点预测为室内的点,蓝色的点是室外的点。通过这种方法,定位精度提升了15%。

驾车场景,导航过程中可能会遇到的常见问题。第一个问题是无法定位,开到停车场或者有遮挡的地方,第二个场景是点会有漂移,因为GPS受到建筑或者其他遮挡的时候,会产生精度下降的情况。第三种情况是无法区分主路,可能会错过路口。

对于以上问题,我们采用的是“软+硬”融合定位,软的部分包括两部分,一个是基于移动定位,第二个是根据地图匹配。经过两个“软+硬”结合之后,我们在GPS 10米精度做到90%以上,可以实现高架主路和停车场的持续导航。

这里面关键的就是如何实现融合定位,比较有特色的一点就是我们做车机的传感器模块是低成本的,成本不到100元,其他类似产品成本是比较高的,可能需要几千块钱。使用低成本的器件,能够更容易得到普及。缺点是精度比较差,定位准确性差一些。要通过软件的方法弥补硬件上的缺点。

我们的解决办法分成三个步骤,首先是航向融合。陀螺仪有相对的角度可以算出来,加速器可以算出地球引力的方向,这两个结合以后就可以建立一个滤波方程,把真实的方向持续不断的输出。第二,把三维的方向和GPS的结果进行一次融合,就可以计算出修正后的位置。第三步,再和地图匹配做对比,因为我们知道它的方向、位置以后,就知道它是在上坡还是下坡,是在高架上还是高架下。还有一点,匹配后的位置跟GPS原始位置做对比,如果差别很大,GPS可能发生了偏移,我们就把GPS舍弃掉,只用惯性导航推算。

这里面有三个特点,第一,参数动态标定,不需要对器件有初始的标的,我们通过三维的计算出方向,用地图匹配反馈。关于地图匹配的部分,核心是我们利用HMM的算法进行位置的匹配,推算每个点的道路。这里面比较关键的概率,一个是发射概率,一个是位置转移概率。

第二,我们把角度也考虑进来,角度的变化同样用于决策转移概率,这里面跟位置转移概率的区别就是引入了速度做变量,不同的速度下,发生转角的概率是不一样的,速度慢了可能会转向,速度快也可能转向,所以我们针对每个速率都有一个曲线。

上图是定位效果,红色的点是实际修正后的轨迹,蓝色的点是原始的GPS点,下面是在高架下的效果,可以看到高架下GPS点已经非常发散了,飘的到处都是,但是修正之后跟绿色的点是重叠的。下面的图是在停车场里,在停车场进去的时候,蓝色的点就已经消失了,但是红色的点可以很好的还原出用户在停车场里持续的轨迹。

高精定位方面,高德主要建立两种定位能力,一种是基于图像定位,一种是基于融合定位。图像定位是只用图像就可以形成比较好的分米级精度,融合定位主要是引入了两个新的定位技术,一个是VSLAM,一个是差分GPS。这两个方法分别应用于有GPS和没有GPS的情况,可以提供很好的精度。VSLAM可以做到误差很小,因为可以有图像的方法进行修正。

自动驾驶是一个方向,并且需要从辅助驾驶过渡到自动驾驶,但系统性变化到来之前会有阶段性的变化,就是服务于人的导航服务的精细化,即车道级导航。车道级导航需要高精地图,至少是分米级的精度。

对未来定位技术发展的理解。基础能力部分,我们认为5G的出现会为定位提供一种新的可能性,因为5G的频率比4G更高,波长会更短。它可以测距,以前基于基站和Wifi的定位都是基于信号强度的。但是5G支持了测距以后,它就可以提供一个很好的精度,所以可能会出现一种方式,基于5G的定位可以达到类似GPS的效果。

第二是融合定位,随着各种新的数据源不断出现,用新的算法去发挥不同数据源的特点,从而达到整体效果的提升。驾车部分,视觉定位和差分GPS技术的逐渐普及。室内部分,有超宽带的定位,除此之外还有蓝牙和Wifi的精准定位。在最新的技术标准里,也都支持了测距和测角的技术,也就是未来新的蓝牙或者Wifi的APP,可能就能提供一部分的定位能力。

所以,未来10年内,我们可能会看到这几种方式相互融合,精度会得到质的改变。以上就是我介绍的内容,谢谢大家!

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

Nginx 反向代理

文章目录一、软件安装验证1. Linux安装nginx2. Tomcat10 下载和配置 Linux 环境3. 服务器部署二、软件安装验证2.1. 启动tomcat2.2. nginx配置2.3. 关键配置2.4. 启动nginx2.5. 测试验证一、软件安装验证 1. Linux安装nginx https://blog.csdn.net/weixin_40816738/article/d…

收益 or 挑战?Serverless 究竟给前端带来了什么

导读:前端开发者是最早享受到 “Serverless” 好处的群体,因为浏览器就是一个开箱即用、甚至无需为计算付费的环境!Serverless 把前端开发体验带入了后端,利用 FaaS 与 BaaS 打造一套开箱即用的后端开发环境。本文作者将从前端角度…

阿里云数据库四位小伙伴聚齐!共同开启生态合作新篇章!

随着用户的不断扩大,阿里云数据库能够帮助用户节省大量的基础运维工作,但是基于数据库业务侧的诊断、调优、护航等工作也是必不可少的。为了满足更多的市场需求,阿里云数据库团队发起数据库合作计划,招募具备优秀专业服务能力的伙…

一行代码引来的安全漏洞,就让我们丢失了整个服务器的控制权

来源 | 程序员石头责编| Carol封图 | CSDN 付费下载自视觉中国之前在某厂的某次项目开发中,项目组同学设计和实现了一个“引以为傲”,额,有点夸张,不过自认为还说得过去的 feature,结果临上线前被啪啪打脸,…

金融行业怎么用AI?蚂蚁金服是这么做的

伴随着金融科技的不断创新,人工智能技术已成为金融行业的重要驱动力。 在9月27日于杭州云栖小镇召开的云栖大会“金融智能”专场上,蚂蚁金服集团副总裁、AI首席科学家、达摩院金融智能负责人漆远博士做了开场演讲,向与会嘉宾分享了金融智能方…

SpringBoot 集成 MyBatisPlus 模板

<dependencies><!--对象、字符串等元素判断--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.9</version></dependency><!--json处理--><depend…

贾扬清:把生命浪费在有意思的事情上

今天&#xff0c;是1024程序员节。在这个“攻城狮”自带光芒的日子里&#xff0c;阿里妹请来AI大神贾扬清&#xff0c;作为一位开发者&#xff0c;聊一聊他自己的开发者经历&#xff0c;希望对你有所启发。 贾扬清 阿里巴巴集团副总裁、高级研究员 阿里巴巴计算平台事业部总裁 …

MongoDB 入门,我是花了心思的

作者 | 沉默王二责编 | Carol封图 | CSDN 付费下载自视觉中国有时候不得不感慨一下&#xff0c;系统升级真的是好处多多&#xff0c;不仅让我有机会重构了之前的烂代码&#xff0c;也满足了我积极好学的虚荣心。你看&#xff0c;Redis 入门了、Elasticsearch 入门了&#xff0c…

码农节快乐|一个系统,高效解决复杂事件采集-计算-实时触达

PartI&#xff1a; 1024 今天是1024&#xff0c;一个特别的数字&#xff0c;比如某网站内容的解压密码通常都是1024&#xff0c;想求一个种子留言也是1024。1024是属于广大程序猿&#xff08;又称码农&#xff09;的节日&#xff0c;在这样一个节日里&#xff0c;各种“黑”程…

SpringBoot集成Myabtis

二、SpringBoot集成Myabtis 2.1. pom 依赖 <!--版本控制-><properties><java.version>1.8</java.version><oracle.version>11.2.0.3</oracle.version><mysql.version>8.0.20</mysql.version></properties><!--Mybat…

DevOps 在移动应用程序开发中扮演什么角色?

作者 | VARUN BHAGAT译者 | 火火酱&#xff0c;责编| Carol封图 | CSDN 付费下载自视觉中国全球智能手机用户数量已经超过30亿。据估计&#xff0c;未来几年用户人数将增加至数亿人。智能手机用户和应用程序下载量的这种稳定增长证明了移动应用程序行业的蓬勃发展。如今在这个技…

她说:行!嫁人就选程序员!

本文的重点是&#xff1a;“为什么年轻漂亮的小姑娘都瞄准了程序员小哥哥”“理发38&#xff1f;太奢侈了&#xff01;淘宝20买套剪刀自己可以用好几年。”“衣服太贵了&#xff0c;我觉得优衣库的那件打折就已经很好了”“上个月的一千块钱的零花钱没花完&#xff0c;这个月先…

数学之美:嵌入式编程凹凸性之妙用(附C代码)

来源 | 嵌入式客栈今天遇到一个网友问一个问题&#xff0c;他有一个传感器测量一个物理量&#xff0c;需要判断其变化趋势&#xff0c;我给了一些建议&#xff0c;这里将这个建议展开做些深入分析&#xff0c;并分享给大家。本文想借此表达一下个人的一个观点&#xff0c;做开发…

从地摊看云计算:规模产业历程大揭秘

作者 | 马超责编 | 夕颜头图 | CSDN下载自视觉中国出品 | CSDN&#xff08;ID:CSDNnews&#xff09; 地摊经济的突然兴起&#xff0c;可能是2020年发生在中国最神奇的一幕了&#xff1a;刚刚还在直播间内直播的带货的企业老板&#xff0c;转眼间又来到地摊来叫卖产品了。当然也…

SpringCloud Gateway 快速入门_01

文章目录一、网关模块搭建1. 引入依赖2. 配置3. 启动类二、产品服务模块搭建2.1. 引入依赖2.2. 配置2.3. 控制层2.4. 启动类2.5. 启动产品模块三、启动中间件3.1. nacos启动3.2. 启动gateway3.3. 配置域名映射四、测试验证4.1. 测试产品服务4.2. 网关访问产品一、网关模块搭建 …

这件事,阿里爱了10年

阿里云双11亿元补贴提前领&#xff0c;进入抽取iPhone 11 Pro&#xff1a;https://www.aliyun.com/1111/2019/home?utm_contentg_1000083110 原文链接 本文为云栖社区原创内容&#xff0c;未经允许不得转载。

程序员!别逼自己买课了,每天花10分钟做这件事,写代码能力暴增......

作为一个教Python10年&#xff0c;带了5万名学生入职一线互联网公司的老师&#xff0c;经常遇到一些学员和我抱怨&#xff1a;看了很多教程&#xff0c;遇到问题不知道怎么寻找解决方案...课上听老师讲案例一听就会&#xff0c;可是一去做相关的练习题就傻了&#xff0c;无从下…

SpringCloud 基于OAth2.0 搭建认证授权中心_02

文章目录一、数据库部分1. 创建数据库2. 初始化数据脚本二、搭建maven父工程认证授权模块2.1. 创建一个maven项目2.2. 引入依赖三、搭建认证授权模块3.1. 创建一个子maven项目3.2. 引入依赖3.3. 增加application.yaml3.4. 增加数据库实体3.5. 增加接口3.6. 增加用户读取实现类3…

Knative Service 是如何指定端口和协议的

如果使用 Knative Serving 部署一个 Nginx 你可能会发现服务起来了&#xff0c;但是无法访问到 Nginx 中的服务。当然这不是 Nginx 的问题&#xff0c;这是因为 Knative 对 Container 的端口有要求。默认 Nginx 的服务端口是 80 &#xff0c;而 Knative Serving queue 8012 默认…

那天我去逛街,发现连大编程语言都摆起地摊了……

作者 | 轩辕之风来源 | 编程技术宇宙&#xff08;ID&#xff1a;xuanyuancoding&#xff09;困难年年有&#xff0c;今年特别多。公司要做一个新的网站&#xff0c;可预算有限&#xff0c;听说为了生计&#xff0c;各大编程语言们都摆起了地摊儿&#xff0c;我决定去瞧瞧&#…