Я пытаюсь измерить высоту HitPose в ARcore
и обнаружил, что функция getDistance
иногда возвращает то, что кажется неправильным значением для плоскостей. Любые мысли о том, почему это или как узнать, как getDistance
вычисляет его значение?
Я использую функцию handleTap в HelloArActivity.java
(https://github.com/google-ar/arcore-android-sdk), чтобы продемонстрировать это ,
Я добавил следующую функцию, чтобы вывести результаты попадания теста на попадание и вызвать его в handleTap. Пример вывода показывает, что расстояние время от времени далеко, но при этом вычисляется расстояние, но функция примера calcillDoToPlane показывает правильное расстояние. Пример выходных данных соответствует коду
private String DumpHitList(List<HitResult> hitResultList, Frame frame){
String str = new String();
double angle[] = getAngleofthedevice();
int index = 0;
str = ".......Hit list size:"+hitResultList.size()+"..";
for (HitResult hit : hitResultList){
Trackable trackable = hit.getTrackable();
// stuff to dump
str += "\n[hit"+index++ +":";
if (trackable instanceof Plane){
str += "PLANE," + ((Plane) trackable).getType().toString()
+",inPolyGon:"+((Plane) trackable).isPoseInPolygon(hit.getHitPose())
+",normdist:" + PlaneRenderer.calculateDistanceToPlane(hit.getHitPose(), frame.getCamera().getPose())
;
}
else if (trackable instanceof Point) {
str += "POINT," +((Point) trackable).getOrientationMode()
+",adjDist:"+ hit.getDistance()
* (float)( Math.cos(Math.toRadians(angle[1])) * Math.cos(Math.toRadians(angle[2])))
;
}
else{
str+= "OTHER TRACKABLE TYPE";
}
str += " trackDist:" + hit.getDistance() + " state:" + hit.getTrackable().getTrackingState();
//str += ",hitXYZ:" + hit.getHitPose().tx() +","+hit.getHitPose().ty() +","+hit.getHitPose().tz()
str += "\nhitPose:" + hit.getHitPose().toString();
str += ",\ncamPose:" + frame.getCamera().getPose().toString()
+"]\n ";
}
str +="........";
return str;
}
Пример выходных данных (обратите внимание, что «trackdist» находится далеко от нормального расстояния).
2020-01-27 14:43:16.285 23970-24023/? D/Ahab: in create colored anchor plane:HORIZONTAL_UPWARD_FACING hit dist:0.13333696, anchorDist: 0.23327702, hitlist size:1.......Hit list size:1..
[hit0:PLANE,HORIZONTAL_UPWARD_FACING,inPolyGon:true,normdist:0.23327702 trackDist:0.13333696 state:TRACKING
hitPose:t:[x:0.167, y:-0.783, z:-0.821], q:[x:0.00, y:-0.59, z:-0.00, w:0.81],
camPose:t:[x:0.161, y:-0.549, z:-0.819], q:[x:0.43, y:0.56, z:0.56, w:-0.44]]
........
2020-01-27 14:43:21.326 23970-24023/? D/Ahab: in create colored anchor pt:ESTIMATED_SURFACE_NORMAL hit dist:0.2452918, anchorDist: 0.24518394, hitlist size:2.......Hit list size:2..
[hit0:POINT,ESTIMATED_SURFACE_NORMAL,adjDist:0.24518394 trackDist:0.2452918 state:TRACKING
hitPose:t:[x:-0.091, y:-0.792, z:-0.789], q:[x:0.00, y:0.62, z:0.01, w:0.78],
camPose:t:[x:-0.095, y:-0.547, z:-0.789], q:[x:0.53, y:0.46, z:0.46, w:-0.54]]
[hit1:PLANE,HORIZONTAL_UPWARD_FACING,inPolyGon:true,normdist:0.2366659 trackDist:0.13668406 state:TRACKING
hitPose:t:[x:-0.091, y:-0.783, z:-0.789], q:[x:0.00, y:-0.64, z:-0.00, w:0.77],
camPose:t:[x:-0.095, y:-0.547, z:-0.789], q:[x:0.53, y:0.46, z:0.46, w:-0.54]]
=====more sample output notice in one dump, "trackdist" is accurate but next dump, it is wrong.
2020-01-27 14:43:16.285 23970-24023/? D/Ahab: in create colored anchor plane:HORIZONTAL_UPWARD_FACING hit dist:0.13333696, anchorDist: 0.23327702, hitlist size:1.......Hit list size:1..
[hit0:PLANE,HORIZONTAL_UPWARD_FACING,inPolyGon:true,normdist:0.23327702 trackDist:0.13333696 state:TRACKING
hitPose:t:[x:0.167, y:-0.783, z:-0.821], q:[x:0.00, y:-0.59, z:-0.00, w:0.81],
camPose:t:[x:0.161, y:-0.549, z:-0.819], q:[x:0.43, y:0.56, z:0.56, w:-0.44]]
........
2020-01-27 14:43:21.326 23970-24023/? D/Ahab: in create colored anchor pt:ESTIMATED_SURFACE_NORMAL hit dist:0.2452918, anchorDist: 0.24518394, hitlist size:2.......Hit list size:2..
[hit0:POINT,ESTIMATED_SURFACE_NORMAL,adjDist:0.24518394 trackDist:0.2452918 state:TRACKING
hitPose:t:[x:-0.091, y:-0.792, z:-0.789], q:[x:0.00, y:0.62, z:0.01, w:0.78],
camPose:t:[x:-0.095, y:-0.547, z:-0.789], q:[x:0.53, y:0.46, z:0.46, w:-0.54]]
[hit1:PLANE,HORIZONTAL_UPWARD_FACING,inPolyGon:true,normdist:0.2366659 trackDist:0.13668406 state:TRACKING
hitPose:t:[x:-0.091, y:-0.783, z:-0.789], q:[x:0.00, y:-0.64, z:-0.00, w:0.77],
camPose:t:[x:-0.095, y:-0.547, z:-0.789], q:[x:0.53, y:0.46, z:0.46, w:-0.54]]