ARKit增强现实版实景导航开源
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进行设置
将本库添加到你的podfile中:
`pod 'ARCL'`
在终端中,进入你的项目目录,然后执行:
`pod update` `pod install`
- 添加
NSCameraUsageDescription
和NSLocationWhenInUseUsageDescription
到 plist文件中以添加一个简短说明(请参考演示项目)
手工设置
- 将
ARKit+CoreLocation/Source
目录中的所有文件添加到项目中。 - 导入ARKit、SceneKit、CoreLocation和MapKit。
- 添加
NSCameraUsageDescription
和NSLocationWhenInUseUsageDescription
到 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增强现实版实景导航开源相关推荐
- 2023最新自适应导航源码简约导航开源版+UI透明化很好看的
正文: 2023最新自适应导航源码简约导航开源版+UI透明化很好看,有兴趣的自行去安装体验吧,其它的就没什么好介绍的了. 程序: wwxsyw.lanzouu.com/ivqGK0qcc1zc 图片:
- AR增强现实实景导航
前段时间负责手机的相机产品,在做产品规划的时候发现一款很酷的应用:随便走,用户量大概在500万以上吧,其实就是一款AR增强现实实景导航软件,适合路痴步行找到1公里内的目的地,这些目的地对应LBS中的P ...
- mui app webview 沉浸式导航_AR实景导航 轻松找到网约车!高崎机场推出网约车专属上车区等便民举措...
■AR实景导航. 台海网10月28日讯 据厦门晚报报道 拿着手机,跟随AR实景导航就可以直达网约车停放点.今天上午,滴滴与元翔厦门空港在高崎机场联合推出乘客休息室.AR步行导航.网约车专属上车区等举措 ...
- niushop多商户商户端手机uniapp源码v4单商户v4_Saas开源版含uniapp以及niushop社区团购标准版源码开源的区别
推荐指数五颗星:Niushop商城社区团购系统源码支持uniapp源码一键生成小程序,H5,APP 1.niushop多商户V4 包含标准版,企业版,分销版,旗舰版,城市版 其中城市版为全模块版 内含 ...
- 三维重建、视觉定位、传感器位置推算,滴滴 AR 实景导航技术详解
导读:机场.商场.火车站等大型室内场所内GPS信号不稳定.室内面积大.路线复杂.用户判断方向难等问题,给在大型场所内发单的乘客找上车点带来了很大的挑战,用户急需一种操作简单.交互友好的引导功能.本文讲 ...
- 滴滴AR实景导航背后的技术
桔妹导读:机场.商场.火车站等大型室内场所内GPS信号不稳定.室内面积大.路线复杂.用户判断方向难等问题,给在大型场所内发单的乘客找上车点带来了很大的挑战,用户急需一种操作简单.交互友好的引导功能.本 ...
- 联合高德推AR实景导航,OPPO手机的又一差异化策略
8 月 24 日,在OPPO R17/R17 Pro发布会上,OPPO与高德地图宣布达成深度合作,将推出国内首个AR步行导航.OPPO R17 与R15 梦镜版手机用户在 9 月中下旬升级高德地图至v ...
- 高德地图三维实景导航:立体实景指引更清晰,复杂路口不再犹豫
随着我国城市道路的不断建设,当前在北上广深等一些国内大型城市,道路情况越来越复杂,每座城市都遍布着立交桥.多岔路等复杂路况,道路实际上已经从平面转变成为了三维立体结构.但对于已经成为出行刚需的手机地图 ...
- 高德AR实景导航,出差旅行好帮手,轻轻松松找对路
对于经常要出差的朋友而言,出差在外人生地不熟,找路便是常有的事.更何况如今城市建设的快速发展,诸如机场.高铁车站等这种出入口繁多的公共场所,想要快速找到目的地也难逃要花些功夫摸索路线. 想象一下,如果 ...
最新文章
- 介绍java常用的两种注释类型,全网独家首发!
- Semantic UI
- Async await 异步编程说明
- android 实现磨砂效果_Android 5.0 下毛玻璃(磨砂)效果如何实现?
- 文件上传获取file的全路径名_Java中的File类与I/O流
- css flexbox模型_Flexbox和CSS Grid之间的主要区别
- VS中展开和折叠代码,还有其他快捷操作
- 最全干货回顾,一文看尽亚马逊 re:Invent 2020全貌
- static_cast与dynamic_cast类型转换
- C++11新特性之std::function<>
- 25. object类中的一些方法分析
- 小学听力测试英语软件,你知道有哪些软件适合给小学生练习在线英语听力吗?...
- 使用lighttpd搭建轻量级web服务器详解
- 泛微OA-测试机更改sysadmin密码为1
- RPG Maker MV 图块冲突解决、素材管理
- 写一篇讲解优芽动画知识的教案
- 连接问题:ORA-3136:inbound connection timed out
- [VCS]后仿真中的几个基本概念
- C Runtime Library 与 STL
- 无线局域网CSMA/CA协议
热门文章
- 体育用品公司Fanatics执行主席与Mike Novogratz等三人联合成立数字收藏品公司CandyDigital
- 初识Matlab2012a的神经网络工具箱(1)
- 苹果笔记本自适应显示屏键盘专利曝光:OLED 技术,单个按键可重新配置
- SAP里面的销售税是如何确定的
- 亚马逊S3云存储协议
- (已解决) 境内 Ubuntu16.04 下安装 ROS kinetic 时 rosdep update 超时报错: The handshake operation timed out
- 怎么搭建自己邮箱服务器,详细教程
- 宏的使用总结和高级应用
- 接入Apple 登录(AuthenticationServices) 后端处理Java版
- 要闻君说:难道金山云与京东云真的要合并了吗?中国联通获准发行不超过500亿元公司债券,都用于5G 商用?用AI技术精准来找室友?...