java - 使用 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;
}
还有其他想法吗?