Verwenden Sie Artikulationskörper, um auf einfache Weise Prototypen für Industriedesigns mit realistischer Bewegung und realistischem Verhalten zu erstellen

In Unity 2020.1, jetzt in der Beta-Version, werden wir eine neue Physikkomponente haben: ArticulationBody. Artikulationen machen es einfacher als je zuvor, Roboterarme und kinematische Ketten mit realistischer Physik und Bewegung zu simulieren. Zusammen mit anderen Verbesserungen von PhysX 4.1 ist Unity leistungsfähiger denn je für die Simulation industrieller Anwendungen.
Mit Unity 2019.3 haben wir unsere Physikbibliothek von PhysX 3.4 auf PhysX 4.0 aktualisiert. Jetzt bringt die Beta von Unity 2020.1 den Benutzern mit einem Upgrade auf PhysX 4.1 einen Schritt weiter. Während frühere Builds dieser Bibliothek bei einer Vielzahl von Spieltypen eine hervorragende Leistung lieferten, war die Modellierung der Realität für Nicht-Gaming-Anwendungen schwieriger. Die Modellierung kinematischer Ketten, wie man sie bei Stoffpuppen, Roboterarmen oder Mechanismen mit mehreren gleichzeitigen Scharnieren sieht, würde zu ruckelnden und unrealistischen Bewegungen führen. Diese Verbindungen würden nicht nur merkwürdig aussehen, sie könnten auch nicht zur Simulation eines realen Geräts verwendet werden, was die Bemühungen zur Modellierung oder Prototypisierung industrieller Designs behindern würde.
Einer der Hauptgründe für diese Mängel in der Praxis war die Auswahl der Gelenkkomponenten, die starre Körper miteinander verbanden. Diese Gelenke, gekoppelt mit einem Physiksolver, der mehr auf Spielleistung als auf Wiedergabetreue optimiert war, führten zu einer Kinematik, die sich nicht realistisch simulieren ließ.
Erfahren Sie hier mehr über die allgemeinen Verbesserungen durch PhysX 4.1.
Bestimmte Anwendungen erfordern die Einschränkung der Bewegung einiger starrer Körper relativ zueinander. Um dies zu veranschaulichen, stellen Sie sich vor, Sie würden die Skelettknochen einer Stoffpuppe oder eines Roboterarms mit mehreren Gelenken miteinander verbinden oder eine Tür an ihrem Scharnier drehen. Dies wurde traditionell durch Gelenkkomponenten wie FixedJoint oder ConfigurableJoint ermöglicht, die zwei Rigidbody-Objekte miteinander verbinden.
Im Hintergrund wird jedes Gelenk in einige einfache Beschränkungen zerlegt, beispielsweise eine lineare Beschränkung, um die Körper in einem bestimmten Abstand zu halten, oder eine Winkelbeschränkung, um die Körper in einer bestimmten Weise um eine bestimmte Achse herum auszurichten. Dieselben Einschränkungen werden verwendet, um zu verhindern, dass sich die Körper überlappen, indem der gleiche Abstand zueinander beibehalten wird. Alle kombinierten Einschränkungen werden in einen iterativen Löser eingespeist, der darauf abzielt, zu einem Satz von Impulsen zu konvergieren, der auf jedes der verbundenen Objektpaare im Weltraum angewendet wird und diese so positioniert, dass sie, wenn möglich, alle Einschränkungen erfüllen.
Das erste Problem ist die schiere Anzahl widersprüchlicher Faktoren, die für den Löser Konvergenzprobleme verursachen können. Die Anzahl der Iterationen, die relativen Massen verbundener Körper und die Gesamtkomplexität der Einschränkungen in einer Szene können ein unlösbares Szenario schaffen. In solchen Fällen wird die Teillösung verwendet, sodass bestimmte Einschränkungen nicht erfüllt werden.
Das zweite Problem besteht darin, dass die Stärke des angewandten Impulses vom Gelenkfehler abhängt – einem Wert, der zeigt, wie stark eine Einschränkung zu einem bestimmten Zeitpunkt verletzt wird. Aufgrund dieses Fehlerkompensationsverhaltens wird es immer zumindest einen gewissen Federeffekt geben, genau so, als ob die Körper durch eine Reihe gedämpfter Federn verbunden wären, insbesondere wenn Gelenke aneinandergereiht sind.
Unsere Lösung für das oben genannte Kinematikproblem ist das neue Konzept der Artikulation: eine Reihe von Körpern, die in einem logischen Baum organisiert sind, wobei eine Eltern-Kind-Beziehung die Idee einer gegenseitig eingeschränkten Bewegung zum Ausdruck bringt. Es gibt immer einen einzelnen Stammkörper und es dürfen keine Schleifen auftreten. Wir verwenden die Transformationshierarchie von Unity, um Artikulationen auszudrücken.
Jetzt können Benutzer ganz einfach einen vorhandenen Roboter wie den Universal Robots UR3e unten modellieren und eine Aufgabe simulieren, die genauer widerspiegelt, wie diese Bewegung in der realen Welt aussehen würde. Auf diese Weise können Robotiker einen bestimmten Bewegungsablauf visualisieren, neuen Code testen oder sogar neue Designs in einer synthetischen Umgebung validieren.
Artikulationen helfen Robotikern und anderen industriellen Entwicklern in zweierlei Hinsicht: Sie bewegen sich auf eine Art und Weise, die ihren realen Gegenstücken ähnlicher ist, und sie können schneller konstruiert werden als das alte RigidBody+Joint, was Entwicklungszeit spart.
Wir gehen davon aus, dass einer der Hauptanwendungsfälle für Artikulationen im Bereich der Robotik liegen wird. Roboterarme verfügen häufig über sechs oder mehr in Reihe geschaltete Gelenke. Das bedeutet, dass kleine Fehler in der jeweiligen Gelenkstellung potenziell große Auswirkungen auf die Stellung des Endeffektors haben können. Fehler werden entlang der kinematischen Kette weitergegeben, was zu unrealistischen Bewegungen und einer vom Ziel abweichenden Position des Endeffektors führt.
Mithilfe der Simulation können Robotiker ihre Entwicklungszeit verkürzen, indem sie viele Bereitstellungsszenarien und Komponententests virtuell modellieren und diese dann im großen Maßstab ausführen, anstatt zu versuchen, dieselben Testreihen in Echtzeit auf einem echten Roboter auszuführen. Wir hoffen, dass die ArticulationBody-Komponente sowie die Verbesserungen an PhysX Robotikern helfen können, Unity für ihre Simulationsbemühungen zu verwenden.
Die Anzahl der Freiheitsgrade in einer bestimmten Eltern-Kind-Beziehung hängt vom tatsächlich verwendeten Gelenktyp ab. Derzeit unterstützen wir:
- Festgelegt: hat null Freiheitsgrade und wird verwendet, um die Körper relativ zueinander zu fixieren.
- Prismatisch: hat einen Freiheitsgrad, d. h. einen linearen Versatz entlang einer bestimmten Achse relativ zum übergeordneten Element.
- Revolute: hat einen Freiheitsgrad, ein Rotationsanalogon des Prismatic
- Sphärisch: hat bis zu drei Freiheitsgrade und ist ein Kugelgelenk, das nur relative Drehungen, aber keine lineare Bewegung zulässt
Um den Realismus dieser Verbindungen noch weiter zu erhöhen, wird ein neuer Solver verwendet, der auf dem Featherstone-Algorithmus basiert. Mit dieser Technik werden die Auswirkungen von Kräften berechnet, die auf eine Struktur aus Gelenken, Verbindungen und Festkörpern unter Verwendung reduzierter Koordinaten ausgeübt werden. Dabei handelt es sich um einen Raum, in dem jeder Körper relativ zu seinem übergeordneten Körper so viele Koordinaten hat, wie Freiheitsgrade vorhanden sind. Bisher haben wir uns auf Maximalkoordinaten verlassen, die für allgemeine Anwendungsfälle leistungsfähiger waren, zur Erzielung dieser Leistung jedoch Abstriche bei Genauigkeit und Präzision machten.
Vorwärtsdynamik und Artikulationen in einem reduzierten Koordinatenraum tragen dazu bei, die hohen Anforderungen an Präzision und Genauigkeit zu erfüllen, die Roboterarme benötigen. Zusammen mit anderen Verbesserungen von PhysX 4.1 wie dem TGS-Solver ermöglichen Artikulationen erstmals zuverlässige Roboterarmsimulationen in Unity . Die Modellierung eines Roboters mit dem iterativen Gelenklöser erforderte präzise Abstimmungen und Abkürzungen, die jedoch immer noch nicht die Bewegung eines echten Roboters widerspiegelten.
Wir verwenden den Vorwärtsdynamikalgorithmus, um Artikulationen im reduzierten Koordinatenraum zu simulieren (das ist ein Raum, in dem jeder Körper relativ zu seinem übergeordneten Körper so viele Koordinaten hat, wie Freiheitsgrade vorhanden sind). Es skaliert linear mit der Gesamtzahl der Freiheitsgrade in einer Artikulation und kann schneller sein als die Verwendung des herkömmlichen iterativen Lösers, der stattdessen mit der Anzahl der Einschränkungen skaliert, während es ein genaueres Ergebnis berechnet.
Um Artikulationen in Unity zu unterstützen, haben wir eine neue Komponente hinzugefügt: den ArticulationBody. In Analogie zur normalen Physik ist ArticulationBody wie Rigidbody und ConfigurableJoint in einer Komponente. Bei einer Artikulation sind alle Körper außer dem Stammkörper durch ein Gelenk mit ihrem übergeordneten Körper verbunden. Aus diesem Grund wurden sie nicht in einzelne Komponenten aufgeteilt.

Die Form der Körper wird mithilfe der regulären Collider-Komponente beschrieben, genau wie bei Rigidbodies.
Sobald die Körper in einer Artikulation erstellt sind, können sie nicht mehr mithilfe der Transform-Komponente bewegt werden, da dies die durch die reduzierten Raumkoordinaten gesetzten Grenzen überschreiten kann. Die einzige Ausnahme ist der Stammkörper, der mit der Funktion ArticulationBody.TeleportRoot verschoben werden kann. ArticulationBody reagiert standardmäßig nicht auf die Änderungen in der Transform-Komponente.
Allerdings gibt es mehrere Möglichkeiten, mit einer Artikulation zu interagieren. Erstens können auf jeden Körper in einer Artikulation Kräfte und Drehmomente ausgeübt werden. Zweitens verfügt jedes Gelenk pro Freiheitsgrad über einen Linearantrieb, der durch die Festlegung linearer und winkliger Ziele gesteuert werden kann. Schließlich ist es möglich, die Posen von Körpern im reduzierten Koordinatenraum direkt zu verändern.
Ein besonderer Vorteil von Artikulationen besteht darin, dass die Qualität der Simulation nicht direkt vom Massenverhältnis der verbundenen Körper abhängt. Bei starren Körpern und festen Verbindungen begann die Simulation bei Massenverhältnissen über 10:1 zwischen verbundenen Körpern unrealistisch zu erscheinen. Im folgenden Beispiel sehen Sie jedoch, dass ein Dimensionsraster von Artikulationskörpern, die mit festen Gelenken verbunden sind, immer noch präzise simuliert werden kann, selbst wenn die roten Kugeln 1000-mal schwerer sind als die schwarzen.
Mithilfe der Simulation können Robotiker ihre Entwicklungszeit verkürzen, indem sie viele Bereitstellungsszenarien und Komponententests virtuell modellieren und diese dann im großen Maßstab ausführen, anstatt zu versuchen, dieselben Testreihen in Echtzeit auf einem echten Roboter auszuführen. Wir hoffen, dass die ArticulationBody-Komponente sowie die Verbesserungen an PhysX Robotikern helfen können, Unity für ihre Simulationsbemühungen zu verwenden.
Um zu sehen, wie ein seriell verbundener Roboterarm mit Gelenkverbindungen konstruiert werden kann, schauen Sie sich unser Robotik-Demoprojekt an.
Laden Sie Unity 2020.1 (jetzt in der Betaversion) herunter, um sich im Umgang mit ArticulationBody zu versuchen.
