ARCore:是什么、功能与增强现实技术

作者: IT Sectr 发布日期: 2026-03-25 阅读时间: 8 分钟

ARCore平台是Google为Android提供的增强现实解决方案,利用智能手机的摄像头和惯性传感器跟踪空间位置。根据Google AR Developers, 2025,该平台支持Motion Tracking、Environmental Understanding和Light Estimation——在真实环境中放置虚拟对象的三种基础技术。跨平台架构允许开发者使用统一的代码库为Android、iOS、Unity和Unreal Engine创建AR应用程序。

要点

  • ARCore——Google为Android提供的增强现实平台,于2018年推出。
  • Motion Tracking——基于IMU和图像分析的设备运动跟踪技术。
  • Environmental Understanding——识别平面、边界和表面起伏。
  • Cloud Anchors——通过云端在多个设备之间同步AR对象的机制。
  • ARCore SDK可用于Android(Kotlin/Java)、iOS、Unity和Unreal Engine。

什么是ARCore?

ARCore是Google的增强现实平台,于2018年作为Project Tango的继任者推出,采用更轻量、更易用的形式。与需要专门深度传感器的Tango不同,ARCore在标准Android智能手机上运行,仅使用摄像头和惯性传感器(IMU)。

ARCore使用三项关键技术:Motion Tracking用于跟踪设备位置,Environmental Understanding用于检测水平和垂直平面,Light Estimation用于将虚拟对象的照明调整为真实环境。这三项技术使得在任何表面上都能放置看起来自然的AR对象。

根据Google I/O 2024,ARCore支持超过10亿台Android设备,包括Samsung、Xiaomi、Huawei、OnePlus、Google Pixel等智能手机。该平台与Google Play Services for AR集成,允许通过Google Play Store独立于Android版本更新ARCore。

ARCore的演进

在六个版本中,ARCore经历了显著演进:ARCore 1.0——基本跟踪和平面识别;ARCore 1.2——垂直平面和Augmented Images;ARCore 1.7——多用户会话的Cloud Anchors;ARCore 1.10——用于跟踪面部表情的Augmented Faces。

ARCore 1.20+包括Scene Semantic Understanding——通过设备上的TensorFlow Lite ML模型识别对象类别(地板、天花板、墙壁、家具、植物、门)。Street View Geometry API允许使用Google Street View深度地图进行户外AR导航。

kotlin
// 初始化ARCore会话
val session = Session(context)
val config = Config(session)
config.lightEstimationMode =
    Config.LightEstimationMode.ENVIRONMENTAL_HDR
config.planeFindingMode =
    Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL
session.configure(config)

// 处理帧
val frame = session.update()
val pointCloud = frame.acquirePointCloud()
val planes = session.getAllTrackables(
    Plane::class.java
)

ARCore的工作原理

ARCore采用混合方法:IMU(惯性测量单元)以高频率(高达1000 Hz)预测设备位置,视觉里程计以30–60 Hz的频率基于摄像头特征点分析纠正误差。这种方法在静止条件下提供约1–2厘米的跟踪精度。

Environmental Understanding过程分三个阶段:首先ARCore在摄像头图像中找到特征点(feature points),然后识别位于同一平面上的点簇并将其近似为多边形。平面识别后,ARCore创建Plane类型的Trackable对象,随着新帧的到来而更新。

根据Google的资料,ARCore可在距离摄像头1米的范围内识别10x10厘米的平面。对于中等大小的房间(20平方米),完整扫描平面大约需要2–4秒。使用支持ToF传感器的Depth API时,识别精度提高40%。

Depth API和Scene Mesh

Depth API——基于摄像头图像的立体分析构建场景深度图的ARCore技术。在具有ToF(Time-of-Flight)传感器的设备上,深度图可立即获得,精度高达2厘米。在没有深度传感器的设备上,Depth API使用机器学习从单个帧估算深度,精度约为10厘米。

Scene Mesh——ARCore实时构建的环境三维网格。该网格用于碰撞物理、虚拟对象遮挡和阴影投射。Scene Mesh在具有OpenGL ES 3.1和Depth API支持的设备上可用,每帧包含多达50万个多边形。

kotlin
// 获取深度图
val depthImage = frame.acquireDepthImage16Bits()

// 在识别平面上放置对象
val hitResult = frame.hitTest(x, y)
    .firstOrNull { it.trackable is Plane }

hitResult?.let { result ->
    val anchor = session.createAnchor(
        result.hitPose
    )
    val model = ModelRenderable.builder()
        .setSourceId(R.raw.my_model)
        .build()
        .exceptionally { null }

    AnchorNode(anchor).apply {
        this.renderable = model.get()
    }
}

ARCore与ARKit对比

虽然ARCore和ARKit解决相同的任务——位置跟踪、平面识别和光照估计——但它们的方法和生态系统有所不同。ARCore优先考虑跨平台和兼容性,而ARKit则利用与Apple硬件的深度集成。

主要区别:ARCore通过ARCore SDK在Android和iOS上运行,ARKit仅在iOS上运行。ARCore使用Cloud Anchors通过Firebase进行同步,ARKit使用ARWorldMap进行设备间直接交换。带Depth API的ARCore支持ToF传感器,带LiDAR的ARKit支持精度高达3厘米的激光扫描。

根据Google 2024年对比测试,在具有陀螺仪和ToF传感器的设备上,ARCore的跟踪精度与带LiDAR的iPhone上的ARKit相当——2米距离内误差不超过2厘米。在没有ToF的设备上,ARCore在初始化速度上落后于ARKit:3秒对0.5秒。

ARCore和ARKit之间的选择取决于目标受众:如果应用仅面向iOS——ARKit提供更好的性能和专属LiDAR功能。如果需要支持两个平台——ARCore with ARCore iOS SDK允许使用统一的代码库,平台差异最小,尽管会丢失每个平台的部分硬件能力。

特性ARCoreARKit
平台Android + iOS + Unity/Unreal仅iOS
深度传感器ToF(可选)LiDAR(Pro型号)
同步Cloud Anchors(Firebase)ARWorldMap(Multipeer)
面部跟踪Augmented FacesFace Tracking(TrueDepth)
VIO精度1–3厘米0.5–1厘米

将ARCore集成到应用程序

ARCore集成始于在build.gradle中添加依赖Google Play Services for AR:com.google.ar:core。应用程序应通过ArCoreApk.checkAvailability()检查设备上ARCore的可用性——如果ARCore未安装,建议用户从Google Play Store安装。

基本ARCore项目包括:创建Session和Config,配置SurfaceView以显示摄像头,通过session.resume()启动会话,通过session.update()处理帧。3D对象的渲染使用Sceneform SDK(基于Filament的Google库)或Unity/Unreal处理复杂场景。

Google推荐Kotlin应用使用Sceneform——它提供现成的组件:ModelRenderable用于加载3D模型(OBJ、glTF、FBX),ViewRenderable用于将Android视图嵌入AR场景,MotionEvent用于处理触摸。Sceneform自动管理AR会话的生命周期和资源释放。

处理跟踪故障

在光线不足、表面单一或设备快速移动时,ARCore可能会丢失跟踪。跟踪状态通过frame.getTrackingState()获取——值为TRACKING、PAUSED和STOPPED。转换为PAUSED时,建议暂停渲染并向用户显示建议:“请更慢地移动设备”或“请转到光线更好的地方”。

为在故障后自动恢复,ARCore支持基于保存的特征点地图的重定位(relocalization)。开发者可以通过session.serialize()保存地图,通过session.deserialize()恢复——这对于用户返回相同物理空间的长期AR体验非常有用。地图恢复需要1–2秒,前提是环境没有显著变化。

kotlin
class ARCoreActivity : AppCompatActivity() {

    private lateinit var session: Session

    override fun onResume() {
        super.onResume()
        when (ArCoreApk.getInstance()
            .checkAvailability(this)
        ) {
            ArCoreApk.Availability.SUPPORTED_INSTALLED -> {
                session = Session(this)
                session.resume()
            }
            else -> {
                showInstallPrompt()
            }
        }
    }
}

常见问题

哪些设备支持ARCore?

ARCore在超过10亿台Android设备上受支持,包括Google Pixel 2+、Samsung Galaxy S7+、Xiaomi Mi 8+、Huawei P20+、OnePlus 6+、Sony Xperia XZ2+等。认证设备的完整列表发布在developers.google.com/ar/devices上。

ARCore工作需要互联网吗?

ARCore的基本功能——Motion Tracking和Environmental Understanding——不需要互联网。Cloud Anchors和带云链接的Augmented Images需要连接。Depth API和Scene Mesh完全在设备上运行,无需网络连接。

能否在没有Sceneform的情况下创建AR应用?

是的,ARCore可以直接与OpenGL ES 3.1、Unity或Unreal Engine一起使用。Sceneform是Kotlin简单项目的推荐选择,但不是必需的。对于具有逼真物理效果的复杂3D场景,最好使用支持ARCore SDK的游戏引擎。

ARCore在室内和室外如何工作?

ARCore针对光线充足的室内空间进行了优化(100–500勒克斯)。在室外强光下,由于摄像头过曝,跟踪精度可能降低。对于室外工作,Google建议使用Street View Geometry API,该API为城市位置提供深度地图。

ARCore与Scene Viewer有何不同?

Scene Viewer是一个现成的Google UI组件,用于通过WebXR在AR中查看3D模型而无需编写代码。ARCore是一个完整的SDK,用于创建自定义AR体验,可程序化控制会话、跟踪和渲染的所有方面。

总结

  • ARCore——Google的跨平台AR平台,可在Android和iOS上运行。
  • Motion Tracking使用IMU和视觉里程计的混合实现精确定位。
  • Cloud Anchors通过Firebase同步提供多用户AR会话。
  • Depth API构建场景深度图——通过编程或ToF传感器。
  • Sceneform——在Kotlin中以最少代码创建AR应用的推荐SDK。
  • 兼容性——超过10亿台具有ARCore认证的Android设备。
  • 选择ARCore和ARKit取决于目标平台和精度要求。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读