首页 > 其他分享 >iOS ARKit 三大基础能力

iOS ARKit 三大基础能力

时间:2024-01-16 11:24:57浏览次数:26  
标签:场景 dele 检测 iOS pAnchor ARKit 跟踪 三大

  • ARKit 三大基础能力

      ARKit 整合了 SLAM、计算机视觉、机器学习、传感器融合、表面估计、光学校准、特征匹配、非线性优化等大量低层技术,提供给开发者简洁易用的程序界面。

ARKit 提供的功能总体可以分为3个部分:运动跟踪、场景理解、渲染,

1.运动跟踪

运动跟踪可以实时跟踪用户设备在现实世界中的运动,是 ARKit 的核心功能之一,利用该功能可以实时获取用户设备的姿态信息。在运动跟踪精度与消除设差积累方面,ARKit 控制得非常好,表现在使用层面就是加载的虚拟元素不会出现漂移、抖动、闪烁。ARKi的运动跟踪整合了 VIO 和 IMU,即图像视觉跟踪与运动传感器跟踪,提供 6DOF(Degree Of Freedom,自由度)跟踪能力,不仅能跟踪设备位移,还能跟踪设备旋转。

更重要的是,ARKit运动跟踪没有任何前置要求,不需要对环境的先验知识,也没有额外的传感器要求,仅凭现有的移动设备就能满足 ARKit运动跟踪的所有要求。

2. 场景理解

场景理解建立在运动跟踪、计算机视觉、机器学习等技术之上。场景理解提供了关于设备周边现实五境的属性相关信息,如平面检测功能,提供了在现实环境中物体表面(如地面、桌面等)检测平面的能力,从技术上讲,ARKit 通过检测特征点和平面不断改进它又现实世界环境的理解。ARKit 可以检测看起来位于常见水平或垂直面(例如桌子或墙)上的成簇特征点,并允许将这些表面用作应用程序的工作平面,ARKit也可以确定平面的边界,并将该信息提供给应用,使用此信息可以将虚拟物体放置于平坦的表面上而不超出平面的边界。场景理解是一个渐进的过程,随着设备探索的环境不断拓展而不断加深,并可随着探索的进展不断修正误差。

     ARKit 通过VIO 检测特征点识别平面,因此它无法正确检测像白墙一样没有纹理的平坦表面。当加

入LiDAR传感器后,ARKit 对环境的感知能力得到大幅度提高,不仅可以检测平坦表面,也可以检测非平坦有起伏的表面,由于 LiDAR 的特性,其对弱纹理、光照不敏感,可以构建现实环境的高精度几何网格。

    场景理解还提供了射线检测功能,利用该功能可以与场景中的虚拟对象、检测到的平面、特征点交互,如放置虚拟元素到指定位置、旋转移动虚拟物体等。场景理解还对现实环境中的光照信息进行评估,并利用这些光照估计信息修正场景中的虚拟元素光照。除此之外,场景理解还实现了反射现实物理环境功能以提供更具沉浸性的虚实融合体验。

3. 渲染

      严格意义上讲,ARKit 并不包含渲染功能,AR 的渲染由第三方框架提供。但除提供场景理解能力2外,ARKit 还提供连续的摄像头图像流,这些图像流可以方便地融合任何第三方渲染框架,如 RealityKit、SceneKit、SpriteKit、Metal 或者是自定义的渲染器。 

     运动追踪,场景理解、渲染紧密协作,形成了稳定、健壮、智能的 ARKit,在这三大基础功能之上,ARKit还提供了诸如2D 图像识别跟踪、3D物体识别跟踪、物理仿真等实用功能。

在苹果公司的强力推动下,ARKit 正处于快速发展中,更好的硬件和新算法的加人,提供了更好更快的检测速度(如平面检测、人脸检测、3D物体检测等),更多更强的功能特性(如人形遮挡、人体运动捕提、人量SlendShapes、场最几何等)。ARKit适用的硬件范圈也在拓展,可以预见,ARKit适用的硬件已经拓展到平果公司的新产品MR眼镜产品中,是Vision OS的重要组成部分

  • ARKit 事例-检测平面并添加纹理渲染显示平面
import SwiftUI
import RealityKit
import ARKit
import Combine

struct CheckingsPlaneShowView: View {
    var body: some View {
        return ARViewContainer4().edgesIgnoringSafeArea(.all)
    }
}

struct ARViewContainer4: UIViewRepresentable {
    let arView = ARView(frame: .zero)
    let dele = ARViewDelegate()
    func makeUIView(context: Context) -> ARView {
        
        let config = ARWorldTrackingConfiguration()
        //检测水平平面
        config.planeDetection = .horizontal
        
        arView.session.run(config, options:[ ])
        arView.session.delegate = dele
        createPlane()
        return arView
    }
    func createPlane(){
        let planeAnchor = AnchorEntity(plane:.horizontal)
        do {
            //texture(.load(named: "Surface_DIFFUSE.png")
            dele.planeMaterial.color = try SimpleMaterial.BaseColor(tint:UIColor.yellow.withAlphaComponent(0.9999), texture: MaterialParameters.Texture(TextureResource.load(named: "Surface_DIFFUSE.png")))
            dele.planeEntity  = ModelEntity(mesh:dele.planeMesh,materials:[dele.planeMaterial])
            dele.planeAnchor.addChild(dele.planeEntity!)
            arView.scene.addAnchor(planeAnchor)
        } catch {
            print("找不到文件")
        }
    }
    func updateUIView(_ uiView: ARView, context: Context) {
    }
}



class ARViewDelegate :NSObject, ARSessionDelegate{
    
    var planeMesh = MeshResource.generatePlane(width: 0.15, depth: 0.15)
    var planeMaterial = SimpleMaterial(color:.white,isMetallic: false)
    var planeEntity: ModelEntity?
    var planeAnchor = AnchorEntity()
    

    public func session(_ session: ARSession, didAdd anchors: [ARAnchor]){
       guard let pAnchor = anchors[0] as? ARPlaneAnchor else {
          return
        }
        DispatchQueue.main.async {
            self.planeEntity!.model?.mesh = MeshResource.generatePlane(
                width: pAnchor.planeExtent.width,
                depth: pAnchor.planeExtent.height
        )
            self.planeEntity!.setTransformMatrix(pAnchor.transform, relativeTo: nil)
        }
    }
    public func session(_ session: ARSession, didUpdate anchors: [ARAnchor]){
       guard let pAnchor = anchors[0] as? ARPlaneAnchor else {
          return
        }
        DispatchQueue.main.async {
            self.planeEntity!.model?.mesh = MeshResource.generatePlane(
                width: pAnchor.planeExtent.width,
                depth: pAnchor.planeExtent.height
        )
            self.planeEntity!.setTransformMatrix(pAnchor.transform, relativeTo: nil)
        }
    }
}

 

标签:场景,dele,检测,iOS,pAnchor,ARKit,跟踪,三大
From: https://www.cnblogs.com/duzhaoquan/p/17967245

相关文章

  • iOS ARKit 显示引导示图、添加正方体
    ARKit概述2017年,在WWDC(WorldWideDevelopersConference,苹果全球开发者大会)上,苹果公司了增强现实开发套件ARKit。ARKit一推出即在科技圈引发极大关注,一方面是苹果公司在科技影响力,另一方面更重要的是ARKit在秘动端实现的堪称惊艳的AR效果。ARKit的面世,直接术带到了亿万用......
  • ios如何连接代理?
    1.打开设置,点击无线局限网。2.打开无限局域网开关,连接WIFI,点击已连接WIFI的右侧小图标。3.点击配置代理界面,选择“手动”。4.点开辅助工具,复制局域网的代理地址、端口,填入服务器、端口的输入框中,并打开认证开关。5.填写【用户名、密码】在对应的输入框,点击存储。6.......
  • Vue 3 + TypeScript + Vite + Element-Plus + Router + Axios + Pinia项目搭建(内含完
    Vue3+TypeScript+Vite+Element-Plus+Router+Axios+Pinia项目搭建(内含完整架构)安装Vue3+ts+vitenpminitvite@latest选择y,新建项目名称,选择vue,选择vue-ts下载完成后执行以下命令行cd新建的项目名称npminpmrundev安装Element-Plusnpminstallelement-plus-......
  • 启用DoH(DNS-over HTTPS)在Windows、Android、IOS平台
    做个备忘录,记录下主力设备Win11、安卓、IOS、路由器、浏览器配置DoH(DNS-overHTTPS)的过程Windows11设置-网络和Internet-WLAN-硬件属性-DNS服务器分配Win11原生支持的DoH服务:IPv4Google:8.8.8.8and8.8.4.4Cloudflare:1.1.1.1and1.0.0.1Quad9:9.9.9.9and149.112......
  • Linux三大剑客之sed
    一、简介sed英文全称是streameditor。由贝尔实验室开发,如今主流Unix/Linux操作系统上都集成了这个工具。sed由自由软件基金组织(FSF)开发和维护,并且随着GNU/Linux进行分发,通常它也称作GNUsed。本文将按照GUN官方在线手册的内容对sed进行介绍。二、获取帮助信息[sed@GeekDevOps~]$......
  • 面向对象的三大特性及派生和组合
    面向对象的三大特性面向对象编程有三大特性:封装、继承、多态-->派生和组合【一】封装【1】什么是封装在程序设计中,封装(Encapsulation)是对具体对象的一种抽象封装就是对具体对象的一种抽象简单理解就是将不想让别人看到的东西全部藏起来【2】为什么要封装封装数......
  • 如何屏蔽苹果iOS 17软件自动更新,去除更新通知和标记
    亲爱的小伙伴们大家好!我是咕噜铁蛋!,你是否经常被iOS系统的更新提示所困扰?每次看到那个小红点或者数字提示,心里总是纠结万分。更新吧,怕新系统不如旧系统稳定;不更新吧,那个小红点或数字总是如影随形,让人心烦。今天,我将为你详细解读如何屏蔽iOS17的软件自动更新,让你从此远离更新烦......
  • axios发送get、post请求
    1.环境安装//nodejs环境//npminstallaxios2.axios发送get请求constaxios=require('axios')consturl="xxx.xxx.xxx";constheaders={}axios.get(url,{headers}).then(function(response){console.log(response.data)r......
  • XCODE IOS 静态链接库替换升级
    XCODE 版本15.2. 一个很久需求没更新的IOS应用,近来有新需求要开发。拉下代码运行,出现了个BAD_ACCESS错误。出错的位置位于一个调用的第三方的.a静态库内部。因为调用代码并没有修改,很容易想到可能XCODE相关升级,导致的问题。由于是第三方的一个.a动态库,兼容问题,......
  • 精益生产:三大特征及其在实践中的应用
    在当今全球竞争激烈的市场环境中,企业为了保持竞争优势,必须采用一种高效、低成本、高质量的生产方式。精益生产作为一种先进的生产方式,已经成为众多企业的选择。精益生产的核心在于其三大特征:拉动式生产、消除浪费和自働化。这些特征使得企业能够更好地应对市场变化,提高生产效率和质......