Steve69 Geschrieben 20. Januar 2020 Melden Share Geschrieben 20. Januar 2020 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Steve69 Geschrieben 21. Januar 2020 Autor Melden Share Geschrieben 21. Januar 2020 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.