ARCore 中文文档 下载 App

VPS 全球视觉定位工作原理

VPS 是什么

Visual Positioning System(视觉定位系统,VPS)是 Google 构建的一套全球定位基础设施,Geospatial API 是它在移动端 ARCore 上的接口。

GPS 在室外的精度是 10~50 米——对开车导航够用,但对"让 AR 内容精确贴在某栋建筑的某个窗台"远远不够。VPS 的目标就是用摄像头画面反向确定"这是哪个位置",精度达到亚米级。

VPS 底层:Google 街景 + 3D 点云

街景作为地图基础

Google 从 2007 年开始在全球拍摄街景,目前已经覆盖了超过 100 个国家/地区。拍摄车(以及后来的徒步者)会:

构建全球 3D 点云

所有拍摄的街景照片经过处理后:

  1. 提取特征点(FAST + BRIEF,和 ARCore SLAM 用的是同一套算法)
  2. 跨照片匹配特征点,把不同视角看到的同一个物理点三角化到 3D 空间
  3. 所有照片的特征点合并成一个全球 3D 点云——Trillions(万亿级)个点,覆盖几乎所有街道路面和建筑物立面
  4. 每个点附带:3D 位置、描述子、可信度

深度学习筛选"稳定"特征点

不是所有特征点都值得存入全球点云——人的头发、随风摆动的树叶、临时停的车、临时广告牌这些"不稳定"的特征点对定位没用。Google 用深度学习模型从照片中筛选出那些长期存在、不会大幅变化的特征点(比如窗户、砖墙纹理、路牌、建筑边角),只把这些存入全球点云。

实时定位流程

当用户的手机调用 Geospatial API 时,VPS 的工作流程:

1. 手机发送当前摄像头画面(可能 + GPS 粗定位)给 Google 云端
2. 云端用深度学习从画面中提取特征点(和 ARCore SLAM 一样的算法)
3. GPS 粗定位告诉云端"大概在城市的某个区域"
4. 云端把手机特征点和该区域的全球点云做匹配(Bag of Words + RANSAC 等算法)
5. 匹配成功后,计算机的精确位置和朝向(PnP 算法)
6. 返回精确的经纬度(WGS84)+ 海拔 + 朝向 + 可信度

PnP 求解姿态

匹配出手机画面中的 N 个特征点和全球点云中的对应点后,用 Perspective-n-Point (PnP) 算法求解手机的 6DoF 姿态(3 位置 + 3 朝向)。PnP 是经典的相机姿态估计方法,从至少 4 对 2D-3D 匹配点就能解出。

定位精度与失败原因

典型精度

条件精度
开阔区域、丰富街景覆盖亚米级(< 1 米)
城市街道、两侧有建筑2~5 米
乡村/郊区、街景稀疏5~20 米
GPS 有信号但 VPS 失败降级到 GPS(10~50 米)

VPS 定位失败的常见原因

原因说明解决方案
没有街景数据该区域 Google 没拍过街景只在街景覆盖区域用 Geospatial
视角太偏手机举得太高或太低,画面中没有可识别的建筑/路面引导用户让画面包含更多街景元素
遮挡严重建筑物被施工围挡、大型车辆挡住,特征点被覆盖引导用户走几步找更好的视角
街景过时建筑刚拆了/新建了,但 Google 街景还是旧的VPS 无法感知变化,可能定位错误
动态物体太多画面中全是移动的车辆和行人等一下或换个位置
网络差VPS 需要上传画面到云端匹配提示用户改善网络,或降级到本地 SLAM

如何处理定位失败

val geospatialPose = arSession.session.earthCameraPose

if (geospatialPose.accuracy > 5.0) {
    // 定位精度差(> 5 米),提示用户
    showAccuracyWarning()
} else if (geospatialPose.orientationAccuracy > Math.toRadians(20.0)) {
    // 朝向精度差(> 20 度)
    showOrientationWarning()
}

if (!geospatialPose.isValid) {
    // VPS 定位失败,降级到 GPS 或普通 SLAM
    fallbackToGpsOrSlam()
}

隐私与数据上传

Geospatial API 需要把用户手机的摄像头画面发送到 Google 云端。开发者需要知道:

VPS 与 GPS / SLAM 的配合

Geospatial API 并不是为了取代 GPS 或本地 SLAM——它和它们是互补关系:

定位方式最佳场景精度
GPS室外粗定位10~50 米
VPS室外精定位亚米级 ~ 5 米
SLAM(本地)室内或局部区域厘米级
VPS + SLAM室内外过渡区域自动组合

推荐策略:GPS 给"在哪座城市",VPS 给"在哪栋楼前",SLAM 给"在房间的哪个角"。