|
Kranarm / Steifes Gelenk
#383629
09/22/11 20:27
09/22/11 20:27
|
Joined: Jul 2001
Posts: 6,904
HeelX
OP
Senior Expert
|
OP
Senior Expert
Joined: Jul 2001
Posts: 6,904
|
Hallo, ich arbeite an einer Vehikelsimulation. Es geht hierbei um einen Kramarm, der auf einem Fahrzeug montiert ist. Auf der Plattform, auf der Kran montiert ist, ist eine vertikale Basis montiert, die sich um die Z-Achse um 360° drehen kann. An dieser Basis ist ein erstes Kranarm-Element verbaut, dass nur um dessen relative Y-Achse gedreht werden kann in einem Winkel von etwa -22.5° ... +80°. Ich hab die Basis mit dem Fahrzeug mit einem hinge, und den Arm mit der Basis mit einem Hinge gekoppelt. Ich möchte gerne, dass ich auf Tastendruck jeweils eine Kraft ausübe, um die Basis zu drehen oder den Kram hoch oder runter zu bewegen - natürlich samt Kollision mit dem Fahrzeug und anderen Physikentities. Wenn ich keine Kraft ausübe, sollen beide entities "festgehalten" werden, die Basis darf sich nicht durch das Gewicht der angekoppelten Sachen weiterdrehen. Der Arm darf sich nicht durch sein eigenes und auch nicht durch ein fremdes Gewichte, herunterneigen. Ohne den Arm hat das ganz gut geklappt, einfach die Damping-Werte der Basis auf 100, 100 zu stellen. Mit Armelement geht das nicht, das Gewicht lässt die Basis drehen, auch je nachdem wie das Fahrzeug steht (z.B. am Hang). Ich hatte die Idee, die hinge parameter ganz klein zu wählen, also sowas wie -5°, 5° und dann, wenn man Kraft ausüben will, die zu lösen (also auf -360°,360° und -22.5°,45° zu stellen), den Benutzer machen lassen, und sobald die Taste gelöst wird, die Grenzen erneut zu setzen, allerdings verschoben um das offset, was mir pXcon_getposition gibt - also wenn man um ~+10° = +0.175 rad verschoben hat, dann wäre das Gelenk der Basis dann auf 0.088 rad, 0.262 rad eingeschränkt (das kann ich allerdings nicht ausprobieren, weil es damit Probleme gibt). Generell wollte ich fragen, ob dieses Vorgehen sinnvoll ist. Und wenn nicht, was Sie empfehlen würden. Ich hab den Verdacht, dass ich da besser einen 6D-Joint nehmen sollte. Allerdings kann ich mir die Verwendung aus dem Manual heraus nicht erschließen... ich hab mir auch Mühe gegeben (Anregung: die vorhandenen Joints als 6D-Joint umsetzen und in der Manual abdrucken, das hilft dem Verständniss sehr, würde ich sagen.)
Last edited by HeelX; 09/22/11 20:32.
|
|
|
Re: Kranarm / Steifes Gelenk
[Re: jcl]
#383675
09/23/11 15:50
09/23/11 15:50
|
Joined: Jul 2001
Posts: 6,904
HeelX
OP
Senior Expert
|
OP
Senior Expert
Joined: Jul 2001
Posts: 6,904
|
Eine andere Möglichkeit zum Blockieren wäre, den Kranarm einfach temporär mittels eines unsichtbaren Gelenks mit der Welt zu verbinden. Dann kann sich nichts mehr bewegen Das wird leider nicht möglich sein, da der Benutzer das Fahrzeug weiterhin steuern kann und dann muss der Kran in der aktuellen Pose "mitgefahren" werden. Naja, vielleicht hat ja jemand noch eine Idee, ansonsten warte ich auf die Behebung des Fehlers, den ich ja oben bereits verlinkt habe.
|
|
|
Re: Kranarm / Steifes Gelenk
[Re: jcl]
#384044
09/28/11 16:41
09/28/11 16:41
|
Joined: Jul 2001
Posts: 6,904
HeelX
OP
Senior Expert
|
OP
Senior Expert
Joined: Jul 2001
Posts: 6,904
|
Wenn ich NX_BF_KINEMATIC der Basis zuweise, dann kann ich das Gefährt nicht mehr fahren (die Basis ist an einen Anhänger montiert, der wiederum über einen Hinge an der Zugmaschine festgemacht ist). Dann hab ich geschaut, ob ich - nachdem JCL wohl den bug für die A8.30.3 gefixedt hat - mit pXcon_setparams2 die Limits neu setzen kann. Fehlanzeige: egal was ich mache (relative Winkel, also -5 und +5 oder absolut - aktueller Winkel -5/+5 und nochmal ang() drumherum), es zeigt keinen Effekt. Man könnte zum Blockieren auch das Ende des Kranarms mit dem Kran selbst verbinden. Dann dürfte sich nichts mehr bewegen. Ich weiß nicht ganz wie ich das machen soll, da ich im Moment folgendes Setup habe: Maschine - Anhänger - Basis - Erster Arm Und Folgendes haben will: Maschine - Anhänger - Basis - Erster Arm - Zweiter Arm - Teleskop Arm - Schwungelement - Greiferbasis - Klammer 1 & 2 Wobei ich mit jeder Entity ja den Joint zur vorherigen anspreche. Das Problem ist, das die Kette ja noch weiter geht und ich ab der Basis jedes Gelenk gezielt motorisieren will über die Tastatur. Die Basis drehen, den ersten Kranarm neigen, den zweiten Kranarm neigen, den dritten teleskopisch ausfahren. Daran hängt ein freischwingender Hinge, an dem ein Greifer hängt, dem man drehen soll und daran sind zwei Klammern, die bewegt werden sollen - also alles auf Tastendruck. Das heißt, die beiden Gelenke, die "echt" frei sein sollen sind die zwischen Maschine und Hänger und zwischen Spitze/Teleskoparm und Greifer. Ich weiß auch ehrlich gesagt nicht wie ich dann auf mehrere Constraints zugreife, die zwischen zwei Entities installiert werden, wenn jede der beiden Entities wiederum mit anderen Entities verbunden sind... @JCL: Können Sie vielleicht nochmal gucken, ob Sie auch tatsächlich die neuen Winkellimits setzen? In der Zwischenzeit versuche ich mal kurzfristig via pXent_enable die Entity auszuschalten, und dann neu einzuschalten und das constraint neu aufzubauen, da dann aber die Winkellimits einzustellen.
|
|
|
Re: Kranarm / Steifes Gelenk
[Re: HeelX]
#384048
09/28/11 17:29
09/28/11 17:29
|
Joined: Jul 2001
Posts: 6,904
HeelX
OP
Senior Expert
|
OP
Senior Expert
Joined: Jul 2001
Posts: 6,904
|
Also ich habe mäßigen Erfolg, wenn ich im selben frame das constraint, das ich ansteuern will via pXcon_remove lösche, setparams2 mit -360,360 aufrufe, dann solange die force anwende, während ich die Taste drücke, und wenn ich fertig bin mit Drücken, dann erneut das constraint lösche und ein ganz enges anlege.
Mäßig bedeutet hier, auch wenn ich pXent_setbodyflag(my, NX_BF_FROZEN_ROT, 1); anwende, dass mir die Basis unter dem Gewicht des Arms bei wiederholter Anwendung leicht nach vorne neigt jedes Mal, wenn ich das constraint löse und wieder anlege.
Ein wenig besser ist es, wenn ich pX_enable mit 0 auf dem gesamten Kran ausführe und dann die constraints neu anlege und das eine, was ich ansteuern will, halt öffne und dann später auf dieselbe Weise dann alle wieder anlege - dann neight sich mir die Basis weniger weg.
Viel besser wäre, es wenn setparams2 für hinges zur Laufzeit die Limits neu setzen könnte, irgendwie hab ich das Gefühl, dass das wesentlich sauberer ist wäre als das, was ich mir da jetzt zusammengehackt habe.
Last edited by HeelX; 09/28/11 17:30.
|
|
|
Re: Kranarm / Steifes Gelenk
[Re: HeelX]
#384080
09/28/11 23:11
09/28/11 23:11
|
Joined: May 2002
Posts: 7,441
ventilator
Senior Expert
|
Senior Expert
Joined: May 2002
Posts: 7,441
|
ich hab nicht den kompletten thread gelesen, aber vielleicht hilft dir das weiter: http://en.wikipedia.org/wiki/PID_controllerhat mir immer sehr geholfen bei der arbeit mit physikengines...
|
|
|
|