ARCore平台是Google为Android提供的增强现实解决方案,利用智能手机的摄像头和惯性传感器跟踪空间位置。根据Google AR Developers, 2025,该平台支持Motion Tracking、Environmental Understanding和Light Estimation——在真实环境中放置虚拟对象的三种基础技术。跨平台架构允许开发者使用统一的代码库为Android、iOS、Unity和Unreal Engine创建AR应用程序。
要点
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 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导航。
// 初始化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采用混合方法: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——基于摄像头图像的立体分析构建场景深度图的ARCore技术。在具有ToF(Time-of-Flight)传感器的设备上,深度图可立即获得,精度高达2厘米。在没有深度传感器的设备上,Depth API使用机器学习从单个帧估算深度,精度约为10厘米。
Scene Mesh——ARCore实时构建的环境三维网格。该网格用于碰撞物理、虚拟对象遮挡和阴影投射。Scene Mesh在具有OpenGL ES 3.1和Depth API支持的设备上可用,每帧包含多达50万个多边形。
// 获取深度图
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则利用与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允许使用统一的代码库,平台差异最小,尽管会丢失每个平台的部分硬件能力。
| 特性 | ARCore | ARKit |
|---|---|---|
| 平台 | Android + iOS + Unity/Unreal | 仅iOS |
| 深度传感器 | ToF(可选) | LiDAR(Pro型号) |
| 同步 | Cloud Anchors(Firebase) | ARWorldMap(Multipeer) |
| 面部跟踪 | Augmented Faces | Face Tracking(TrueDepth) |
| VIO精度 | 1–3厘米 | 0.5–1厘米 |
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秒,前提是环境没有显著变化。
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在超过10亿台Android设备上受支持,包括Google Pixel 2+、Samsung Galaxy S7+、Xiaomi Mi 8+、Huawei P20+、OnePlus 6+、Sony Xperia XZ2+等。认证设备的完整列表发布在developers.google.com/ar/devices上。
ARCore的基本功能——Motion Tracking和Environmental Understanding——不需要互联网。Cloud Anchors和带云链接的Augmented Images需要连接。Depth API和Scene Mesh完全在设备上运行,无需网络连接。
是的,ARCore可以直接与OpenGL ES 3.1、Unity或Unreal Engine一起使用。Sceneform是Kotlin简单项目的推荐选择,但不是必需的。对于具有逼真物理效果的复杂3D场景,最好使用支持ARCore SDK的游戏引擎。
ARCore针对光线充足的室内空间进行了优化(100–500勒克斯)。在室外强光下,由于摄像头过曝,跟踪精度可能降低。对于室外工作,Google建议使用Street View Geometry API,该API为城市位置提供深度地图。
Scene Viewer是一个现成的Google UI组件,用于通过WebXR在AR中查看3D模型而无需编写代码。ARCore是一个完整的SDK,用于创建自定义AR体验,可程序化控制会话、跟踪和渲染的所有方面。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。