ARKit:使用摄像头和运动数据来绘制用户移动时本地的地图。

CoreLocation:使用WiFi和GPS数据来确定位置,精度比较低。

ARKit + CoreLocation:将高精度的AR与GPS数据相结合。

将这些技术结合起来的潜力是巨大的,在许多不同的领域有着很多的应用。 这个库有两个主要的特点:

  • 允许使用真实世界的坐标将元素放置在AR世界中。
  • 利用最近的位置数据点,并结合有关AR世界运动的知识,极大地提高了定位精度。

位置精度的改进目前还处于实验阶段,但在未来可能是最重要的组成部分。

由于目前还有一些工作尚未完成,并且存在其他方面的原因,因此最好由一个开放的社区来为这个项目服务,而不是通过GitHub Issues的方式。 所以我开放了一个Slack组,任何人都可以加入进来,讨论有关这个库的改进和大家的工作。

加入Slack社区

软硬件要求

ARKit需要iOS 11系统,并支持以下设备:

  • iPhone 6S及以上
  • iPhone SE
  • iPad(2017)
  • iPad Pro的所有型号

iOS 11可以从Apple的开发者网站上下载。

使用方法

这个库包含了ARKit和CoreLocation框架, 同时还包含了一个类似于Demo 1的演示程序。

使用CocoaPods进行设置

  1. 将本库添加到你的podfile中:

    `pod 'ARCL'`
  2. 在终端中,进入你的项目目录,然后执行:

    `pod update`
    `pod install`
  3. 添加 NSCameraUsageDescriptionNSLocationWhenInUseUsageDescription 到 plist文件中以添加一个简短说明(请参考演示项目)

手工设置

  1. ARKit+CoreLocation/Source目录中的所有文件添加到项目中。
  2. 导入ARKit、SceneKit、CoreLocation和MapKit。
  3. 添加 NSCameraUsageDescriptionNSLocationWhenInUseUsageDescription 到 plist文件中以添加一个简短说明(请参考演示项目)

快速入门指南

要在一座建筑物上放置一个标注点,例如伦敦的金丝雀码头,我们要使用包含ARCL的主要类:SceneLocationView

首先,导入ARCL和CoreLocation,然后将SceneLocationView声明为属性:

import ARCL
import CoreLocationclass ViewController: UIViewController {var sceneLocationView = SceneLocationView()
}

当获取到焦点时,调用sceneLocationView.run(),当中断时,调用sceneLocationView.pause(),例如移动到不同的视角或者退出应用程序。

func viewDidLoad() {override func viewDidLoad() super.viewDidLoad()sceneLocationView.run()view.addSubview(sceneLocationView)
}

在调用run()之后,就可以添加坐标了。 ARCL附带一个名为LocationNode的类,它是3D场景中的一个对象,具有真实世界的位置,并且可以在世界范围内显示其他一些属性。 LocationNode是SceneKit的SCNNode的子类,也可以进一步子类化。 对于这个例子,我们将使用一个名为LocationAnnotationNode的子类,我们用它在世界上显示一个总是面向我们的2D图像:

let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
let location = CLLocation(coordinate: coordinate, altitude: 300)
let image = UIImage(named: "pin")!let annotationNode = LocationAnnotationNode(location: location, image: image)

默认情况下,你设置的图像会以给定的尺寸显示出来,例如,如果你提供了一个100x100的图像,则会在屏幕上显示为100x100像素大小。 这意味着远处的注释点与近处的注释点看起来大小是相同的。 如果你希望按距离的远近进行缩放,可以将LocationAnnotationNode的scaleRelativeToDistance设置为true

sceneLocationView.addLocationNodeWithConfirmedLocation(locationNode: annotationNode)

就是这样了。 如果你设置sceneLocationView的帧,则现在应该会看到Canary Wharf上方悬停的标注点了。

附加功能

这个库以及演示程序附带了一些额外的配置功能。这些都在文档里做了详细介绍,一定要去看看。

SceneLocationView是ARSCNView的一个子类。 请注意,虽然这样可以让你完全访问ARSCNView以通过其他方式去使用它,但你不应将委托设置为另一个类。 如果你需要使用委托功能,那么应该将SceneLocationView子类化。

正北校准

有一个我个人无法攻克的难题,目前iPhone正北校准精度最高为15º。这对地图导航来说还好,但是要将东西放在AR世界上时,它就成为了一个问题。

我相信通过使用各种AR技术可以攻克这个问题。

为了改善这个问题,我在库中添加了一些函数,可以用来调整正北方向:

  • sceneLocationView.moveSceneHeadingClockwise
  • sceneLocationView.moveSceneHeadingAntiClockwise
  • sceneLocationView.resetSceneHeading

要使用这些函数,你要将sceneLocationView.useTrueNorth设置为false,然后在开始之前将设备指向北方的大致一个方向,这样它才能更接近正北。将useTrueNorth设置为true(默认),它会根据自己的感觉不断调整正北方。

在演示程序中,有一个名为adjustNorthByTappingSidesOfScreen的属性,它用于访问这些函数,默认是禁用的。一旦启用这个属性,则允许通过点击屏幕的左侧或右侧来调整场景方向。

我的建议是你所处位置的正北方的附近放置一个地标,使用坐标在那个地方放置一个对象,然后使用moveSceneHeading函数来调整场景,直到它们排成一条线。

改进的定位精度

CoreLocation每1-15秒更新一次位置,精度从150米到4米不等。有时候,你会收到更精确的读数,如4米或8米。同时,AR使用运动和相机数据来创建本地世界的地图。

用户可能会收到精度为4米的位置,然后他们向北走10米,并接收到另一个位置,读数精确到65米。 这个精度为65米的读数是CoreLocation可以提供的最好的精度,但是当获取到4米精度的读数时,程序知道用户在AR场景中的位置,以及接着朝北走了10米,我们可以通过转换这个数据来提供一个新的精度为4米的坐标。这样就精确到了大概100米。

问题

我曾经提到,目前这些尚处于实验阶段。当用户经过某个场景的时候,ARKit偶尔会发生错乱,并给出错误地位置数据。 这个问题似乎也影响到了“欧拉角度”或者有关设备的方向信息。所以,在走过一小段距离之后,它可能会认为你目前正向着另外一个方向行走。

虽然苹果今后会改进ARKit,但我认为,为了避免出现这些问题,我们需要自己进行改进,例如识别出何时会出现问题并进行纠正,以及通过将位置数据与我们假定的位置进行比较,以确定是否已经超过了某个值。

定位算法改进

我们需要进一步优化定位算法。

例如,有一种技术是查看最近的位置数据,转换用户行程中的每一个点,然后使用数据点之间的重叠来更精确地确定用户可能的位置。

鸣谢

作者@AndrewProjDent,以及相关社区。

在MIT许可证的条款下开源。

文章原标题《ARKit-CoreLocation》,作者:Andrew Hart,译者:夏天,审校:主题曲。

文章为简译,更为详细的内容,请查看原文

ARKit增强现实版实景导航开源相关推荐

  1. 2023最新自适应导航源码简约导航开源版+UI透明化很好看的

    正文: 2023最新自适应导航源码简约导航开源版+UI透明化很好看,有兴趣的自行去安装体验吧,其它的就没什么好介绍的了. 程序: wwxsyw.lanzouu.com/ivqGK0qcc1zc 图片:

  2. AR增强现实实景导航

    前段时间负责手机的相机产品,在做产品规划的时候发现一款很酷的应用:随便走,用户量大概在500万以上吧,其实就是一款AR增强现实实景导航软件,适合路痴步行找到1公里内的目的地,这些目的地对应LBS中的P ...

  3. mui app webview 沉浸式导航_AR实景导航 轻松找到网约车!高崎机场推出网约车专属上车区等便民举措...

    ■AR实景导航. 台海网10月28日讯 据厦门晚报报道 拿着手机,跟随AR实景导航就可以直达网约车停放点.今天上午,滴滴与元翔厦门空港在高崎机场联合推出乘客休息室.AR步行导航.网约车专属上车区等举措 ...

  4. niushop多商户商户端手机uniapp源码v4单商户v4_Saas开源版含uniapp以及niushop社区团购标准版源码开源的区别

    推荐指数五颗星:Niushop商城社区团购系统源码支持uniapp源码一键生成小程序,H5,APP 1.niushop多商户V4 包含标准版,企业版,分销版,旗舰版,城市版 其中城市版为全模块版 内含 ...

  5. 三维重建、视觉定位、传感器位置推算,滴滴 AR 实景导航技术详解

    导读:机场.商场.火车站等大型室内场所内GPS信号不稳定.室内面积大.路线复杂.用户判断方向难等问题,给在大型场所内发单的乘客找上车点带来了很大的挑战,用户急需一种操作简单.交互友好的引导功能.本文讲 ...

  6. 滴滴AR实景导航背后的技术

    桔妹导读:机场.商场.火车站等大型室内场所内GPS信号不稳定.室内面积大.路线复杂.用户判断方向难等问题,给在大型场所内发单的乘客找上车点带来了很大的挑战,用户急需一种操作简单.交互友好的引导功能.本 ...

  7. 联合高德推AR实景导航,OPPO手机的又一差异化策略

    8 月 24 日,在OPPO R17/R17 Pro发布会上,OPPO与高德地图宣布达成深度合作,将推出国内首个AR步行导航.OPPO R17 与R15 梦镜版手机用户在 9 月中下旬升级高德地图至v ...

  8. 高德地图三维实景导航:立体实景指引更清晰,复杂路口不再犹豫

    随着我国城市道路的不断建设,当前在北上广深等一些国内大型城市,道路情况越来越复杂,每座城市都遍布着立交桥.多岔路等复杂路况,道路实际上已经从平面转变成为了三维立体结构.但对于已经成为出行刚需的手机地图 ...

  9. 高德AR实景导航,出差旅行好帮手,轻轻松松找对路

    对于经常要出差的朋友而言,出差在外人生地不熟,找路便是常有的事.更何况如今城市建设的快速发展,诸如机场.高铁车站等这种出入口繁多的公共场所,想要快速找到目的地也难逃要花些功夫摸索路线. 想象一下,如果 ...

最新文章

  1. 介绍java常用的两种注释类型,全网独家首发!
  2. Semantic UI
  3. Async await 异步编程说明
  4. android 实现磨砂效果_Android 5.0 下毛玻璃(磨砂)效果如何实现?
  5. 文件上传获取file的全路径名_Java中的File类与I/O流
  6. css flexbox模型_Flexbox和CSS Grid之间的主要区别
  7. VS中展开和折叠代码,还有其他快捷操作
  8. 最全干货回顾,一文看尽亚马逊 re:Invent 2020全貌
  9. static_cast与dynamic_cast类型转换
  10. C++11新特性之std::function<>
  11. 25. object类中的一些方法分析
  12. 小学听力测试英语软件,你知道有哪些软件适合给小学生练习在线英语听力吗?...
  13. 使用lighttpd搭建轻量级web服务器详解
  14. 泛微OA-测试机更改sysadmin密码为1
  15. RPG Maker MV 图块冲突解决、素材管理
  16. 写一篇讲解优芽动画知识的教案
  17. 连接问题:ORA-3136:inbound connection timed out
  18. [VCS]后仿真中的几个基本概念
  19. C Runtime Library 与 STL
  20. 无线局域网CSMA/CA协议

热门文章

  1. 体育用品公司Fanatics执行主席与Mike Novogratz等三人联合成立数字收藏品公司CandyDigital
  2. 初识Matlab2012a的神经网络工具箱(1)
  3. 苹果笔记本自适应显示屏键盘专利曝光:OLED 技术,单个按键可重新配置
  4. SAP里面的销售税是如何确定的
  5. 亚马逊S3云存储协议
  6. (已解决) 境内 Ubuntu16.04 下安装 ROS kinetic 时 rosdep update 超时报错: The handshake operation timed out
  7. 怎么搭建自己邮箱服务器,详细教程
  8. 宏的使用总结和高级应用
  9. 接入Apple 登录(AuthenticationServices) 后端处理Java版
  10. 要闻君说:难道金山云与京东云真的要合并了吗?中国联通获准发行不超过500亿元公司债券,都用于5G 商用?用AI技术精准来找室友?...