胆结石治疗

注册

 

发新话题 回复该主题

大神揭秘苹果ARKit凭什么碾压对手雷 [复制链接]

1#
哪里白癜风医院好 https://jbk.39.net/yiyuanfengcai/yyjs_bjzkbdfyy/

本文由MattMiesnieks发表于SuperVenturesBlog,雷锋网得知MattMiesnieks目前为投资公司SuperVenture合伙人,曾任职于三星、Dekko、Layar等公司。

通过这篇文章,我们能了解到:

ARKit的基本技术原理:视觉惯性测量(VIO)系统、平面检测

ARKit的两大神秘之处:单目摄像机3D成像、计量尺度获取

ARKit、Tango、Hololens技术对比

开发人员如何使用ARKit

雷锋网将全文整理如下。

今年,苹果公司在WWDC大会上发布的ARKit在整个AR生态中引起巨大轰动。开发者发现,这是他们第一次能将一款强大的ARSDK广泛使用于自己的应用,不再需要什么标记点、初始化、深度摄像头,甚至是专门的创作工具。毫不意外,ARKit让开发者们集体开启各种ARdemo秀。

但是,很多开发者不清楚ARKit如何工作,也不了解为什么ARKit比于其他SDK更好。从底层技术看ARKit,可以帮助大家了解当前版本ARKit能做什么,了解ARKit需要改进的地方以及为什么需要改进,并且还可以帮助我们预测未来何时,Android系统及头戴式显示器(VR或AR)可以支持ARKit类似的功能。

目前为止,我在AR领域工作9年了,过去曾研发出与ARKit相似的技术,但当时并没有合适的硬件可支持这个技术。作为内部人士,我了解这些系统是如何构建的,以及为什么构建成现在的样子。

这篇博文试图向那些非技术人群解释一些专业的技术问题,并不是面向计算机视觉工程师。文中,我用简单的话来解释ARKit,但不一定%符合科学的解释,不过我希望至少可以帮助人们加深对于ARKit的理解。

ARKit基于什么样的技术?

技术上,ARKit配备视觉惯性测量(VIO)系统,带有简单的2D平面检测。具体来说,VIO系统会实时追踪你在空间中的位置,也就是6自由度(DoF)动作,比如说,屏幕每帧画面刷新之间,你的动作会被重新计算,画面的刷新率为每秒30fps或以上,而且这些计算会同时进行两次。

第一次是,通过将现实世界中的点与摄像头传感器每帧画面像素点相匹配,你的动作会被视觉系统追踪,进行一次计算。第二次是你的动作被惯性系统追踪,主要通过加速度计和陀螺仪两个惯性测量单元(IMU)实现。

然后,卡尔曼滤波器(KalmanFilter)将VIO系统和惯性系统的输出进行整合,从而预测出你的最佳“真实”位置(称为GroundTruth),并且由ARKitSDK发布你的最新定位。就像汽车的里程表显示车辆的驾驶距离一样,VIO系统记录iPhone手机在6DoF空间中经过的距离。6DoF表示沿着xyz三个方向的平动,加上绕三个轴的俯仰、偏转及滚动。

VIO系统最大的优势就是,即使用户动作加速的情况下,IMU依旧可以每秒读数0次。IMU每次读数之间,航位推算法被用来计算设备的运动。这时,航位推算法更像是一种猜测,就像是,我让你往前买一步,然后猜猜这个步子有多大,你便会用航位推算法来预测步子的距离。(后面我将详细介绍这种预测是如何实现高度准确性的。)惯性系统产生的误差会随时间累积,所以,IMU每帧画面所间隔的时间越长或者惯性系统使用时间越长,而且还没有VIO系统配合的时候,动作的追踪也将越来越偏离实际的动作情况。

视觉/光学测量以相机画面帧速率进行,通常为30fps,并且基于每帧场景变化的距离。光学系统通常会随着距离的增加,而不断积累误差,时间也会一定程度上影响光学系统的准确性。所以你行动的距离越远,时间越久,误差越大。好消息是,一个追踪系统的优势可以抵消另一个系统的劣势。

视觉和惯性跟踪系统是完全不同的测量系统,没有相互依赖关系。这意味着相机可能被遮盖,或者可能看到的是几乎没有光学特征的场景,例如一面白墙,而惯性系统这时可以“加载”几帧画面。相对地,设备处于静止的状态下,视觉系统提供的动作追踪信息比惯性系统更加稳定。卡尔曼滤波器不断选择最佳动作信息,追踪效果也就更加稳定。

VIO系统已经出现很多年了,在行业中的认可度很高,并且市场上不少设备也配备了VIO系统。所以苹果ARKit使用VIO系统并不意味着创新。那么到底是什么技术让ARKit变得如此强大呢?

ARKit的第二个关键点是配备简单的平面检测。这个技术十分必要,你需要地面作为参照物来表示位置信息,否则物体会漂浮在空中。任何3个点可以定义一个平面,根据光学系统检测到的特征点(demos中看到的点),通过算法将特征点平均化,便得到了参照平面。

如果光学系统选取的特征点足够多的话,你便能预测到真实的平面。这些特征点通常被称为“点云”,所有的特征点形成稀疏的点云,用于光学跟踪。稀疏点云仅仅需要少量的存储内存、短暂地使用CPU。在惯性系统的支持下,光学系统即使检测少量的特征点,也可以正常工作。点云和密集点云是不同的,密集点云看起来更加接近真实感(目前有人正在研究的使用密集点云进行跟踪,这更复杂)。

ARKit的两大“神秘之处”

有人会把ARKit称为SLAM,或者使用术语SLAM来指位置跟踪。在此澄清一下,SLAM是一个相当广泛的术语,就像“多媒体”这个术语一样。“追踪”本身就是一个通用的术语,使用“测距”更具体,但在AR领域,使用“追踪”来表达即可。有很多方法可以实现SLAM,追踪踪只是SLAM系统的一个组成部分。我认为ARKit是一个轻型或简单的SLAM系统。Tango或Hololens的SLAM系统除了距离测量外,还有其他很多其他特征。

ARKit存在两大“神秘之处”:一是,如何通过单目镜头获得3D效果;二是,如何获得计量尺度(像那个卷尺测量demo一样)。答案在于“非常好地”移除IMU产生的误差,即让航位推算法实现高精度地预测。当实现这点后,便会发生以下的效果:

为获得3D效果,需要从不同角度获得2个场景视图,进而通过立体计算得到你所在的空间位置。这就是双眼如何看到3D图像,以及为什么一些跟踪器要要依靠立体摄像机。如果有两台摄像机,可以容易计算摄像机之间的距离,同时捕获帧画面。ARKit为什么仅仅使用了一个摄像头便获得了3D效果呢?是因为一个摄像头可以捕获一帧画面,而后摄像头移动捕获第二帧画面。

使用IMU航位推算法计算,便可计算出两帧画面之间的移动距离,然后正常计算出立体画面。实际上,你可能捕捉更多的帧画面进行计算,从而获得更高的精确度。如果IMU足够准确,两帧画面间产生的“移动”可以仅仅通过手握拳后手臂微小肌肉群的运动来检测,这看起来像魔术一样神奇。

系统需要依赖于IMU航位推算法来获得计量尺度。通过IMU给出的加速度和时间测量值,可以计算出速率并获得IMU每帧画面之间的距离。数学运算并不难,困难的是消除IMU误差,以获得近似完美的加速度测量值。一个微小的错误,在画面每秒刷新0次的情况下,持续几秒钟后可能会导致30%甚至更大的计量尺度误差。令人惊讶的是,苹果ARKit已经把误差下降到10%以下。

Tango、HoloLens、Vuforia等SDK怎么样?

Tango只是一个品牌名,而不是真正的产品。Tango包括硬件参考设计(RGB,鱼眼镜头,深度相机和CPU/GPU规格),还参与VIO(运动跟踪),稀疏映射(区域学习)和密集3D重建(深度感知)等软件。

HoloLens具有完全相同的软件栈,另外包括一些ASIC(微软称之为全息处理单元)优化CPU/GPU卸载处理并减小电耗。

Vuforia与ARKit几乎是一样的,只是Vuforia的硬件是独立的。

上述SDK均使用相同的VIO系统,而且,Tango和ARKit使用的均为FlyBy最初发布的代码库!HoloLens和Tango都不使用深度相机进行追踪,那么到底是什么技术设备让ARKit大放异彩呢?

答案是ARKit并不比HoloLens好,我甚至认为HoloLens的跟踪系统是市场上最好的,但HoLolens的硬件普及并不广。微软可能会在Windows系统的智能手机中安装HoloLens跟踪系统,但我相信出于商业原因,微软不会这样做:

因为这样可能会增加生产和时间成本,为一款销量或许很少的手机校准传感器。而且,微软版本的ARKit也可能无法说服开发者放弃使用iOS或Android系统。

12个月前,Google本就可以轻松交付能够在Android系统上运行的Tango手机,但Google没有这样做。如果Google早早将Tango发货,那么ARKit的问世也只是紧跟趋势,而非重大突破。

我认为,Google公司不想为每家OEM都进行特定的传感器校准过程,而且每家OEM厂商生产的Tango版本都不一样,Google也不想在一些较大的OEM厂商(三星、华为等)中选择。所以,Google为OEM厂商提供了硬件的参考设计,OEM厂商可以自行选择“使用,或者不使用”。(当然,事情并非这么简单,这是OEM厂商反馈给我的关键点。)

随着Android智能手机硬件商品化,相机和传感器堆栈是Android手机最后实现差异化的地方,所以OEM厂商无法满足Google的要求。Google认为,深度相机是手机的一部分,但是深度相机增加了手机成本,这也是OEM厂商拒绝Google的另一个原因!

自从ARKit发布以来,市场已经发生了变化。OEM厂商要么寻找Tango的替代系统,要么接受Google的硬件参考设计,然后实现平台控制。这也是有意思的变化。

总的来说,ARKit更好的原因在于:

苹果公司可以负担得起将VIO算法紧密耦合到传感器上,并花费很多时间来校准VIO系统,以减少计算空间位置时产生的误差。

值得注意的是,大型OEM厂商有一些替代方案。可以选择其他的追踪方案,像ORBSlam、OpenCV等,但几乎都是光学追踪器,都配有单个RGB、立体声、深度相机,有些使用稀疏点云,有些使用密集点云。有许多创业公司正在研发追踪系统,研究增强像素也是一个很好的方向,但任何VIO系统最终的竞争都会集中到硬件模型和校准上。

开发人员如何使用ARKit

你或许已经有一个可以支持ARKit的手机了。首先,要了解使用ARKit开发内容,与以往开发一款手机APP有巨大的差异:一个是你不用控制场景,一个是你要控制每帧像素。

然后,想想Tango或HoloLens,看看当你的内容与无法控制的场景中的3D模型交互时,会发生什么。

这其中的学习难度较大,比从网络到移动或从移动到VR更有难度。你需要彻底重新思考应用程序的如何运行以及用户体验(UX)的意义是什么。我现在看到很多ARKit的demo,四年前看到它们是基于Vuforia创建,再往前四年就是Layar(年荷兰公司SPRXmobile推出的全球第一款AR手机浏览器)。这几年来,我看到了几乎所有类型的ARAPPs的例子,我很乐意为大家提供支持和反馈。

我常常鼓励开发人员勇于构建新奇的APP。一些蠢蠢的APP一上线便大获成功,但通过AR硬件开发让用户是满意的案例也十分具有挑战。

能构建良好追踪系统的人并不多

直观地说,目前只有少数人能构建好的追踪系统。那些具备交叉学科背景的工程师们才能研发出的融入单目VIO最好的系统,用于手机追踪的解决方案。

在二十世纪中期,VIO系统最初由波士顿军事/工业供应商Intersense使用。LeonidNaimark是该技术的创始人之一,年时加入我创建的Dekko公司并担任首席科学家。由于传感器限制,Dekko证实了VIO无法在IPad2上运行,Leonid重回军工行业,但Dekko公司的CTOPierreGeorgel如今已成为GoogleDaydream团队的高级工程师。

我在SuperVentures的合作伙伴OriInbar创立了Ogmento。Ogmento公司后改名为FlyBy,FlyBy团队成功地构建了基于iOS的VIO系统,还增加了鱼眼相机。该代码库已经授权给Google,成为Tango的VIO系统。苹果公司收购FlyBy之后,FlyBy的VIO系统代码库成为ARKitVIO的核心。

FlyBy公司的CTOChrisBroaddus继续为Daqri公司研究追踪系统,现在他已经加入硅谷的神秘无人车初创公司Zoox。年,第一个移动SLAM系统由GeorgKlein在OxfordActiveComputinglab(PTAM)开发,GeorgKlein和DavidNister一同为HoloLens建立VIO系统,David离开后还为特斯拉创建了自动驾驶系统。

Georg带的博士生GerhardReitmayr主导了Vuforia的VIO系统的研发。此前担任Vuforia公司副总裁的EitanPilipski,现在是Snap公司的AR软件工程师。

牛津大学、剑桥大学和伦敦帝国学院研发团队的核心成员研发了Kinect追踪系统,现在也成为Oculus和MagicLeap追踪系统开发的负责人。

有趣的是,我无法说清,当前致力于AR追踪系统研发的初创公司,到底是由哪个学科的人才主导。因为,这些创始人不管是机器人背景,或是其他计算机视觉背景,已经不足以支撑在一个更大领域范围应用的追踪系统的研发。

后面,我会谈谈当代科学家们正在开展的工作。

归根到底是统计学问题

AR系统没有“可行”或者“不可行”一说。大部分情况下,AR系统可以很好的完成工作。AR系统力求变得“更好”,也是推动统计学发展的事情。

故而,不要完全相信ARAPP的演示,特别是发布于YouTube上,显示出惊人的效果的ARAPP。在精心安排的环境中所表现的效果与现实生活中普通用户所能获得的效果之间,往往存在很大差距。但是智能手机或VR应用的演示通常并不存在这种问题。所以,观众常常被愚弄。

这是一个具体的技术示例,为什么统计数据最终可以确定系统的运行情况。

在上面的图像中,有一个网格,表示相机中的数字图像传感器。每个格子都是一个像素点。为了稳定追踪,在假设设备完全静止的情况下,每个像素应该在现实世界中的有一个相匹配的对应点。然而,右侧图像显示光子不是那么的听话,各种光子会随意落到任何地方,每个像素点是光子的总数。场景中的光线变化(太阳光穿透云层,荧光灯闪烁等)也会改变传感器中的光子组成,现在传感器要对应现实世界的不同像素点。那么,这样的情况下视觉追踪系统就认为用户移动了!

所以,各种ARKitdemo中光点闪烁时,系统必须确定哪些点是“可靠”的。系统对这些点进行三角测量来计算用户的空间位置,求平均数后得到对实际位置的最佳估计数。因此,为确保错误的统计完全被移除,便需要研发更精确的系统。这就需要相机硬件堆栈(多个镜片和涂层、快门和图像传感器等)、IMU硬件和软件算法之间的严密集成和校准。

硬件与软件的集成

其实开发VIO系统并不难,而且VIO系统的算法已经公开了,还有不少的应用案例。但是,很难把VIO系统良好地运作起来。我指的是,惯性和光学系统完全融合创建立体地图,在低精确度时确定度量标度。

例如,在我创办的Dekko时,应用的案例中要求用户开始按照具体的要求移动,然后手机前后移动约30秒才能使惯性和光学系统融合创建立体地图。建立一个优良的惯性追踪系统需要经验丰富的工程师。然而,全球只有约20名工程师具备必须的技能和经验,而且这20名工程师中大多数从事巡航导弹追踪系统,或者火星漫游者导航系统等。

即使你可以聘请到其中一位工程师,为了最大限度地减少误差,仍然需要硬件和软件的紧密结合。这意味着可以通过软件准确建模IMU,详细了解整个摄像头以及每个组件的详细规格,更重要的是IMU和摄像头都需要非常精确地同步。

系统需要准确知道IMU读取的数据哪个对应开始画面,哪个对应结束画面。这对于两个系统的关联至关重要,这一点最近才得以实现,因为硬件OEM厂商认为没有必要投资于此方面。这就是Dekko公司花费了很长时间,才把基于iPad2系统的硬软件融合的原因。第一个Tango手机是第一台实现精准时间同步的设备,并且是第一款具备良好追踪系统的消费级手机。

目前,追踪系统采用的来自Qual

分享 转发
TOP
发新话题 回复该主题