0 registered members (),
1,094
guests, and 1
spider. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Kranarm / Steifes Gelenk
[Re: ventilator]
#384133
09/29/11 17:26
09/29/11 17:26
|
Joined: Jul 2001
Posts: 6,904
HeelX
OP
Senior Expert
|
OP
Senior Expert
Joined: Jul 2001
Posts: 6,904
|
@Ventilator: Also du schlägst vor, dass ich messe, bei welchem Grad das Gelenk ist und ich ne Vorgabe hab, wo die ist und dass dann dieses PID-Ding ständig automatisch Force ansetzt, um das Ziel zu erreichen? Sowas hab ich auch schon überlegt, aber das find ich gerade etwas zu kompliziert - aber vielleicht hast du ja ein einfaches Beispiel? Da steckt anscheinend viel Theorie hinter und ich will im Moment einfach nur mein Constraint locken, wenn ich keine Eingabe mache.
Last edited by HeelX; 09/29/11 18:05.
|
|
|
Re: Kranarm / Steifes Gelenk
[Re: HeelX]
#384136
09/29/11 18:10
09/29/11 18:10
|
Joined: May 2002
Posts: 7,441
ventilator
Senior Expert
|
Senior Expert
Joined: May 2002
Posts: 7,441
|
ja, genau! die wikipedia seite mit den formeln ist abschreckend kompliziert. als code ausgedrückt ist ein PID controller viel einfacher (zu verstehen). meine eigenen beispiele finde ich gerade nicht, ich hab aber gegoogelt und diese seite schaut vielversprechend aus (hab sie aber nur schnell überflogen): http://forums.tigsource.com/index.php?topic=10130.0einen proportional controller hat fast jeder der spiele programmiert schon mal verwendet, aber der vorteil von PID controllern ist, dass die oszillation und das overshooting unter kontrolle gehalten werden. es wird sehr genau das ziel angesteuert und die limits oder die sperre kannst du dann selbst kontrollieren.
|
|
|
Re: Kranarm / Steifes Gelenk
[Re: HeelX]
#384139
09/29/11 18:24
09/29/11 18:24
|
Joined: Jul 2001
Posts: 6,904
HeelX
OP
Senior Expert
|
OP
Senior Expert
Joined: Jul 2001
Posts: 6,904
|
Das mit dem runterwippen hab ich erstmal temporär damit gelöst, dass ich die Gravitation ausschalte für base und ersten Kranarm. Ansonsten sieht mein Code für die Basis nun erstmal so aus:
action fwdBase ()
{
static const var angForce = 600;
while (1)
{
// rotate base with A and D
var f = key_a - key_d;
if (f != 0)
{
// open constraint, if closed
if (!isFwdBaseOpen(my))
openFwdBase(my);
// rotate base
var vt = f * angForce * time_step;
pXent_setangvelocity(my, vector(0, 0, vt));
}
else // close constraint, when no force is applied
if (isFwdBaseOpen(my))
closeFwdBase(my);
wait(1);
}
}
void fwdBaseMakeContraint (ENTITY* eBase, var limit)
{
// use cage upward vector is hinge direction
VECTOR vAxis;
vec_set(&vAxis, vector(0,0,-1));
vec_rotate(&vAxis, eBase->parent->pan);
// create stiff hinge constraint for the base
pXcon_add(PH_HINGE, eBase, eBase->parent, 0);
pXcon_setparams1(eBase, eBase->x, &vAxis, NULL);
pXcon_setparams2(eBase, vector(-limit, limit, 100), NULL, NULL);
}
// returns if base constraint is open
BOOL isFwdBaseOpen (ENTITY* base)
{
static VECTOR vCon;
pXcon_getposition(base, &vCon);
BOOL isOpen = false;
if ((vCon.x == -180) && (vCon.y == 180))
isOpen = true;
return(isOpen);
}
// opens base constraint
void openFwdBase (ENTITY* base)
{
pXcon_remove(base);
fwdBaseMakeContraint(base, 180);
}
// closes base constraint
void closeFwdBase (ENTITY* base)
{
pXcon_remove(base);
fwdBaseMakeContraint(base, 5);
}
Ich verwende diesen workaround dann mal weiter, wäre aber schön zu hören, wenn es seitens Ihnen dann noch einen integrierte Lösung gäbe. Melde mich dann hier wieder, wenns Probleme gibt. Insgesamt könnte das ja auch für andere user interessant sein.
|
|
|
Re: Kranarm / Steifes Gelenk
[Re: HeelX]
#465484
04/30/17 12:17
04/30/17 12:17
|
Joined: Dec 2010
Posts: 224 NRW, Germany
NeoJones
Member
|
Member
Joined: Dec 2010
Posts: 224
NRW, Germany
|
Hi, dieser Thread ist ja schon etwas älter, aber vielleicht gibt es ja mittlerweise schon eine bessere Lösung für dieses Problem. Ich habe das gleiche Problem mit einer Gondel. Diese hängt an einem Gondelarm und soll sich um 360 Grad drehen können bei 12 Grad Neigung. Da ich die Neigung benötige, habe ich einen Gondelhalter und 2 Hinge Constraints verwendet (Bild). Wenn ich jedoch für Hinge 1 die Limits setze, versucht es sich auf 12 Grad hinzubiegen und kippt wieder zurück nach unten. Gravitation habe ich auf 0 gesetzt. Ich habe es auch schon mit dem 6dJoint oder dem Wheel Constraint versucht und bekomme es einfach nicht hin, das es steif bleibt. Kann jemand helfen oder hat eine Idee wie man es lösen könnte?
Errors are the engine of progress.
Version: A8 Commercial OS: Win 7 64bit Models: Cinema 4D
|
|
|
|