Projekt Tango onPoseAvailable () und getPoseAtTime () Diskrepanzen

8

Ich sehe erhebliche Diskrepanzen zwischen den Posen vom onPoseAvailable() Callback und Tango.getPoseAtTime() . Ich habe ein Testprogramm geschrieben, in dem ich in onPoseAvailable() die gelieferte Pose protokollierte und getPoseAtTime() verwendete, um die Pose unter Verwendung des Zeitstempels von 2 Callbacks früher anzufordern. KEY_BOOLEAN_SMOOTH_POSE ist konfiguriert false . Hier ist der Code, der das tut (die timestamps_ -Membervariable ist ein LinkedList<Double> ):

%Vor%

Hier ist ein Auszug aus einem tatsächlichen Protokoll (Ich habe die protokollierten Aufrufe zur besseren Übersicht entschachtelt):

%Vor%

Sehen Sie sich den letzten getPoseAtTime() -Eintrag mit dem Zeitstempel 2733.062994 an. Beachten Sie, dass seine Positionswerte nicht mit der Pose von onPoseAvailable mit dem identischen Zeitstempel übereinstimmen. Etwas stimmt hier nicht.

Ich dachte, dass ein Spline-Fit der Pose nicht unbedingt die Kontrollpunkte passieren müsste, aber ich denke nicht, dass das eine akzeptable Erklärung ist. Vor allem macht es wenig Sinn, eine API zu haben, die unterschiedliche Werte für die gleiche Messung liefert. Aber zusätzlich unterstützen die tatsächlichen Zahlen diese Vermutung nicht.

Sehen Sie sich den getPoseAtTime() Y-Wert an, 0.460060. Dies liegt außerhalb des Y-Bereichs aller onPoseAvailable() Y-Werte, sowohl vor als auch nach (über das gesamte Protokoll hinweg, tatsächlich). Kein sinnvolles Interpolationsmodell kann diesen Wert erzeugen.

Ich denke, die Frage ist, was hier vor sich geht? Die Posen sind inkonsistent, so dass mindestens einer falsch ist (wenn nicht beide). Meine Vermutung wäre, dass die onPoseAvailable() eher korrekt ist.

Hier ist ein Diagramm der Y-Position gegen die Zeit der beiden Pose-Methoden (Nash-Release) mit dem stationären Tablet in seinem Dock:

Die blaue Linie ist der onPoseAvailable() Callback und die rote Linie ist der getPoseAtTime() polling. Diese Ergebnisse sind irgendwie seltsam. Wenn die Posen überhaupt anders aussehen, würde ich erwarten, dass der abgefragte Wert glatter wäre, da er gefiltert werden könnte, indem Beiträge von Samples vor und nach der Pollzeit verwendet würden, während der Callback-Wert entweder ungefiltert oder nur unter Verwendung von vorher gefiltert würde Proben. Aber das ist nicht das, was wir sehen - der abgefragte Wert erscheint viel lauter.

Hier ist eine ähnliche Grafik, die ich aufgenommen habe, während ich das Tablet auf und ab bewegte. Der abgefragte Wert hat immer noch mehr hohe Frequenzen und die beiden Signale folgen nicht besonders genau.

    
rhashimoto 09.05.2015, 19:36
quelle

1 Antwort

4

Danke rhashimoto, dass du das herausgebracht hast!

BEARBEITEN

Ich muss meinen vorherigen Beitrag bearbeiten. Ich behauptete, dass ich eine größere Drift während der Verwendung von GetPoseAtTime anstelle der Pose des OnPoseAvailable Callbacks hatte.

Es ist nur umgekehrt. Ich bekomme viel bessere Ergebnisse mit GetPoseAtTime.

Ich machte einen Scan, indem ich 360 ° auf meinem Stuhl drehte. Ich begann und blieb an meinem Schreibtisch stehen, wie Sie auf dem Bild sehen können.

Start und Ende des Scan-Zyklus (klicken Sie für eine höhere Auflösung)

Die obigen Punktwolken verwenden GetPoseAtTime, und die darunter liegenden Punktwolken werden von der OnPoseAvailable-Rückruffunktion bereitgestellt. Beide wurden gleichzeitig gefangen genommen. Die Drift mit GetPoseAtTime ist marginal, aber mit OnPoseAvailable Callback wirklich sehr groß.

Was ich bis jetzt herausgefunden habe, ist, dass GetPoseAtTime ein Pose-Diagramm verwendet und die Posen korrigiert, wenn ein Loop-Close erkannt wird. siehe diesen Artikel . Ich habe getestet, ob die Ergebnisse besser werden, ob ich sofort mit einer verfügbaren Punktwolke auf die Pose zugreife oder erst am Ende, wenn ich alle Punktwolken zusammenfasse.

Und tatsächlich ist das Ergebnis viel besser. Meine bisherige Erfahrung ist:

OnPoseAvaile-Rückruf & lt; GetPoseAtTime sofort mit einer verfügbaren Punktwolke & lt; GetPoseAtTime am Ende des Scanvorgangs

    
bashbug 02.12.2015 17:15
quelle

Tags und Links