首页 > 解决方案 > 使用 AR 计算设备位置

问题描述

首先,我知道开始 AR 会话时的位置。所以我对我的经纬度很满意;我走了几米,我想要我在 B 点的位置,而不使用 GPS 或其他技术,只使用 ARCore。我试过使用姿势来表示角度和距离,但我有一个很大的错误......

做了20米的路径后,误差相当于5.3815米。我不知道这是正常的还是我的代码中有一些错误。

initialBearingAR = LocationScene.deviceOrientation.azimuth;

所以这是使用传感器计算的方向

double distanceAR = Math.sqrt(Math.pow((camPose1.tx() - camPose2.tx()),2)/ 2.0 +
                     Math.pow((camPose1.ty() - camPose2.ty()),2) / 2.0 +
                     Math.pow((camPose1.tz() - camPose2.tz()),2) / 2.0);

camPose1是A点计算的Pose,camPose2是B点计算的pose。两者都是相机的pose

double[] latLonEnd = travel(latStartAR, lonStartAR, initialBearingAR, distanceAR);

latEndAR = latLonEnd[0];lonEndAR = latLonEnd[1]

出行方式:

 public double[] travel(double qrLat, double qrLon , double initialBearing, double distance) {
        double bR = Math.toRadians(initialBearing);
        distance = distance/1000;
        double lat1R = Math.toRadians(qrLat);
        double lon1R = Math.toRadians(qrLon);
        double dR = distance/6371.01; //Mettere diviso radius earth

        double a = Math.sin(dR) * Math.cos(lat1R);
        double lat2 = Math.asin(Math.sin(lat1R) * Math.cos(dR) + a * Math.cos(bR));
        double lon2 = lon1R
                + Math.atan2(Math.sin(bR) * a, Math.cos(dR) - Math.sin(lat1R) * Math.sin(lat2));
        double[] latlon = new double[2];
        latlon[0] = Math.toDegrees(lat2);
        latlon[1] = Math.toDegrees(lon2);
        return latlon;
    }

还有其他想法吗?

标签: javaandroidandroid-studioaugmented-realityarcore

解决方案


推荐阅读