Jump to content
Unity Insider Forum

HTC Vive Tracker zur Positionskorrektur verwenden


Steve69

Recommended Posts

Hallo Leute,

da ich leider noch blutiger Anfänger im Scripting von Unity bin, hoffe ihr könnte mir bei meinem Problem weiterhelfen.

Irgendwie denke ich vermutlich zu viel um die Ecke und komme deswegen nicht weiter. Hab mal versucht das verständlich zu beschreiben. Ist etwas viel geworden. Hoffe es liest auch jemand :-)

Also folgendes Problem:

Ich habe zwei Perception Neuron Systeme von NoItom (also ein Sensoren basiertes Mocap-System), mit denen ich gerne Tanzfiguren animieren möchte.

Das Problem ist, dass die Sensoren keine absolute Positionen ermitteln, sondern nur aufgrund Winkeländerungen und Beschleunigungen, die Positionen berechnen.

Das System arbeitet eigentlich gar nicht schlecht. Da jedoch bei einem Tanzpaar zwei Personen miteinander interagieren sollen, sind mir aktuell die Abstände für eine Nacharbeitung zu groß.
Die aufgezeichneten Figuren driften auseinander.

Aus diesem Grunde bin ich auf die Idee gekommen je einen HTC Vive Tracker als Positionierungshilfe zu verwenden.

Habe deswegen auf den Sensor der Hüfte (Hip) den Tracker befestigt. Bin also ein paar cm (ca. 2-3) vom eigentlichen Sensor entfernt.

Die Software Axis Neuron bietet u.a. auch ein Unity-Projekt an, mit dessen Hilfe ich die Hip-Position überschreiben und somit die Position korrigieren kann.
In Unity habe ich nun zwei Figuren. Die Figur1 gibt die Übertragung der Werte aus Axis Neuron wieder. Figur2 die korrigierte Position.

Wenn ich nun meine Figur in Axis Neuron auf einen Nullpunkt setze und dann in Unity dies auch durchführe (Figur1 und Figur2 sind dann deckungsgleich), dann kann ich im ersten Schritt den Offset von "Nullpunkt" des Hip-Sensors zur Trackerposition festhalten.

Wenn ich nun diesen Abstand jedes Mal von der aktuellen Trackerposition abziehe, dann erhalte ich ja die korrigierte Position der eigentlichen Hip-Position und kann somit die Position korrigieren.

Das klappt auch, soweit keine Rotationen ins Spiel kommen

Und genau da brauche ich eure Hilfe. Irgendwie blicke ich das jetzt nicht.

Eigentlich war meine Idee jetzt folgendermaßen.

1. ich habe die Position des Trackers (Punkt T) --> absolute Position im Raum
2. der Tracker befindet sich ca. 2 cm vom physikalischen Hip-Sensor (H') entfernt
3. die "virtuelle" Hip-Position (H), die von Axis Neuron an Unity weitergereicht wird und die ich gerne überschreiben möchte

Die "virtuelle" Hip-Position wird anfangs wie oben erwähnt auf einen Nullpunkt gesetzt.
Dann drücke ich eine Taste. Die dahinterstehende Aktion, ermittelt den Abstand zwischen H und T und dann setze ich die Figur1 und die Figur2 deckungsgleich.

Bewege ich mich nun vorwärts, rückwärts oder seitlich, ohne eine Drehung durchzuführen, dann sieht das für mich gut aus.

Drehe ich mich nun auf der Stelle z.B. um 90 Grad, dann bewegt sich meine Figur2 um paar cm seitlich (also ca. 2cm) und auch um ca. 2cm nach vorne.

So jetzt müsste ich ja die Rotation mit berücksichtigen.

Wie gehe ich da jetzt genau vor? Kann hier jemand helfen?

Bin selbst der Meinung, dass ich ja eigentlich die Rotation um den Punkt H' berechnen müsste (also Rotation des Trackers  *  2cm Abstand (also Abstand H' zu T)) und dann den Abstand H' zu H von der "rotierten" Trackerposition abziehen müßte, damit ich dann wieder auf H komme.

Bin ich da falsch, oder befinde ich mich noch auf dem richtigen Weg?

Muss ich noch was anderes berücksichtigen?

Gibt es evtl. einen einfacheren Weg eine Rotation zu berücksichtigen?

Wie würdet ihr dass denn machen?
 

Wäre für jede Idee dankbar.
Da ich aber noch Anfänger bin und nicht alle Begrifflichkeiten so kenne, wären paar Beispielschnipsel für mein Verständnis sehr hilfreich.

Hoffe ich habe das als Laie einigermaßen verständlich rübergebracht.

Im Voraus besten Dank

Stephan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

da noch keiner geantwortet hat und ich jetzt irgendwie noch eine andere Idee hatte, wollte ich die auch noch zum Besten geben.

Wäre es nicht besser, ich würde ein Dummy-Objekt z.B. eine Sphere generieren und den Tracker als untergeordnetes Objekt anhängen?

Müßte dadurch eine Rotation nicht ganz autom. berücksichtigt werden ?

Werde das mal die Tage probieren. Müßte dann nur noch eine geeignete Methode finden, dem Dummy-Objekt die richtige Größe (Radius) zuzuorden.

Meine die 2cm Abstand vom Tracker zum Sensor dürfte nicht die richtige Wahl sein. Ich müßte m.E. eher den Abstand vom angebrachten Tracker (hinten am Kreuz) zu meiner Drehachse (also Mitte meines Beckens) irgendwie ermitteln. Dies dann auf das Dummy-Objekt übertragen.

Gibt es eigentlich eine Möglichkeit eine Art Kalibrierung für meine Zwecke durchzuführen?
Dacht an folgendes: Ich drehe mich im Kreis und der Tracker liefert ständig entsprechend Positions- und Rotationswerte. Nach ein oder zwei Umdrehungen sollte eine geeignete Berechnung, den Mittelpunkt liefern. Stelle mir als Laie das ziemlich schwer vor, dies zu ermöglichen. Kann mich ja selbst auch nicht richtig im Kreis drehen. Da werde ich ja sicherlich rumeiern 🙂

Hoffe ihr könnt mir da, wie gesagt den ein oder anderen Tipp geben. Vielleicht kennt ja auch schon jemand so ne Art Kalibrierung. Evtl. als Asset!

Im Voraus besten Dank

Stephan

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...