[ODE] Slider Patch [Fwd: RE: weird slider behaviour (solved)]
Jaroslav Sinecky
jsinecky at tiscali.cz
Tue Nov 29 03:28:58 MST 2005
I put this patch in SF patch manager. See here:
http://sourceforge.net/tracker/index.php?func=detail&aid=1336079&group_id=24
884&atid=382801
Jaroslav
> -----Original Message-----
> From: ode-bounces at q12.org [mailto:ode-bounces at q12.org]On Behalf
> Of Georg Martius
> Sent: Tuesday, November 29, 2005 10:35 AM
> To: ode at q12.org
> Subject: [ODE] Slider Patch [Fwd: RE: weird slider behaviour (solved)]
>
>
> Hello,
>
> as there is a patch collection process ongoing, I would like to remind
> to the following patch. I didn't find it in on the bugtracker, but I
> might have overlooked something.
> For some reason the forwarded email and some other emails of this thread
> are not in the mail archives!
>
> Cheers,
> Georg
>
> -------- Original Message --------
> Subject: RE: [ODE] weird slider behaviour (solved)
> Date: Wed, 14 Sep 2005 10:48:04 +0200
> From: Jaroslav Sinecky <jsinecky at tiscali.cz>
> To: Georg Martius <mai99dgf at studserv.uni-leipzig.de>, <ode at q12.org>
>
> Hi Georg,
> really your test case is very clear, I looked again at the code
> and I think
> I got it. There is a simple typo in the sliderGetInfo2 function
> which causes
> the rotational part of last two lines of Jacobian for first body not to be
> filled!!
> By (not so extraordinary) coincidence in your case this error was exactly
> compensated by putting factor 0.25 instead of 0.5 for decoupling torque.
>
> With this typo corrected your test case works fine now, also with
> dJointAddSliderForce. I also tried to shift the ball along Y axis in
> opposite directions, so that decoupling torque has more effect (if both
> balls lies on X axis, this torque is zero apart of slider disalignment).
> I also remembered of one of my old case where I tried to use
> sliders and it
> didn't work (I was blaming whatever but the slider), I tried it now and it
> works well.
>
> I send modified Georg's patch (against cvs head 1.58). I think the
> adjustment in dJointAddSliderForce is a good idea, but the docs
> should also
> be changed a bit because now it says "This function is just a wrapper for
> dBodyAddForce()."
>
> Cheers!
> Jaroslav
>
>
>
> > -----Original Message-----
> > From: ode-bounces at q12.org [mailto:ode-bounces at q12.org]On Behalf
> > Of Georg Martius
> > Sent: Tuesday, September 13, 2005 9:56 PM
> > To: ode at q12.org
> > Subject: Re: [ODE] weird slider behaviour (solved)
> >
> >
> > Am Dienstag, 13. September 2005 17:46 schrieb Jaroslav Sinecky:
> > > Did this really solve your problem?
> > Yes, it did.
> >
> > > Strange that noone had the same problem
> > > with sliders before (though not impossible).
> > Might be possible because it just occurs if the system rotating.
> >
> > > I had a look at your patch and original code and dont really
> > see why there
> > > should be factor of 0.25. I don't have it very clear how exactly the
> > > jointInfo2 is used during simulation, so just with intuition ...
> > >
> > > if the slider limot force f is applied to each body in
> > direction of slider
> > > axis and at cog of each body, the resulting torque is f*d (d =
> > distance of
> > > bodies cogs perpendicular to the axis). So the correction
> > torque should be
> > > 0.5*f*d for each body.
> > Well I don't know how jointInfo2 really works. And I would have
> > thought 0.5 is
> > the right factor as well. Anyway if you try the code I attached
> > you will see
> > what happens.
> > With the original ode you will find the system to accelerate, but
> > it should
> > stay at the same speed.
> > If you uncomment the line with addSliderForce you see that the
> > system slows
> > down.
> >
> > Thanks for you comment.
> >
> > Georg
> > >
> > > Someone other had a look or tried this patch?
> > >
> > > Jaroslav
> > >
> > > > -----Original Message-----
> > > > From: ode-bounces at q12.org [mailto:ode-bounces at q12.org]On Behalf
> > > > Of Georg Martius
> > > > Sent: Sunday, September 11, 2005 9:07 PM
> > > > To: ode at q12.org
> > > > Subject: Re: [ODE] weird slider behaviour (solved)
> > > >
> > > >
> > > > Hallo again,
> > > >
> > > > since I got no answer to my question I took a look into the ode
> > > > souce code and
> > > > found the problem :-)
> > > >
> > > > The thing is that for slider joints there is a "Linear
> > Torque Decoupling
> > > > vector (a torque)" for the case that the slider axis and the
> > > > positions of the
> > > > bodies do not match exacly. AFAIK this can happen in two
> > cases. 1. if the
> > > > slider axis is not set properly at start or 2. if the
> slider rotates.
> > > >
> > > > Well there was just a wrong factor used, so that the double
> > > > correction was
> > > > applied. Additionally I added the same threatment fo
> > > > dJointAddSliderForce.
> > > > Now the angular momentum is conserved for the rotating
> > > > system with sliders.
> > > >
> > > > Please find the patch attached. It would be very nice if someone
> > > > who is really
> > > > into the stuff could comment on this and maybe include it
> into the CVS
> > > > version.
> > > >
> > > > Cheers,
> > > > Georg
> > > >
> > > > Am Montag, 29. August 2005 22:06 schrieb Georg Martius:
> > > > > Hello,
> > > > >
> > > > > I experience a weird behaviour with slider joints. I have two
> > > >
> > > > objects which
> > > >
> > > > > are connected with a slider joint. If I give the system an
> > > >
> > > > initial torque
> > > >
> > > > > it will accelerate until it breaks. I also played a bit
> with bounce,
> > > > > cfm and erm of the joint but without success.
> > > > >
> > > > > Any help would be appreciated.
> > > > >
> > > > > Cheers,
> > > > > Georg
> > > > >
> > > > > compiled with
> > > > >
> > > > > > gcc -Wall sliderrotation.c -o slidertest -lode -ldrawstuff
> > > >
> > > > -lGL -lGLU
> > > >
> > > > > <sliderrotation.c>
> > > > > #include <ode/ode.h>
> > > > > #include <ode/common.h>
> > > > > #include <drawstuff/drawstuff.h>
> > > > >
> > > > > dWorldID world;
> > > > > dSpaceID space;
> > > > > dBodyID body1;
> > > > > dBodyID body2;
> > > > >
> > > > > void start(){
> > > > > dMass mass1,mass2;
> > > > > body1 = dBodyCreate ( world );
> > > > > dBodySetPosition ( body1 , 0, 0, 2 );
> > > > > dMassSetSphereTotal ( &mass1 , 1 , 1 );
> > > > > dBodySetMass ( body1 , &mass1 );
> > > > > body2 = dBodyCreate ( world );
> > > > > dBodySetPosition ( body2 , 2, 0, 2 );
> > > > > dMassSetSphereTotal ( &mass2 , 1 , 1 );
> > > > > dBodySetMass ( body2 , &mass2 );
> > > > >
> > > > > dJointID slider = dJointCreateSlider ( world , 0 );
> > > > > dJointAttach ( slider , body1 , body2 );
> > > > > dJointSetSliderAxis ( slider, 1, 0, 0 );
> > > > > dJointSetSliderParam ( slider, dParamLoStop, -0.1 );
> > > > > dJointSetSliderParam ( slider, dParamHiStop, 0.1 );
> > > > >
> > > > > dBodyAddTorque(body1,0,0,100);
> > > > > dBodyAddTorque(body2,0,0,100);
> > > > > }
> > > > >
> > > > > void simLoop(int pause){
> > > > > int i;
> > > > > for(i=0; i < 10; i++){
> > > > > dWorldStep ( world , 0.01 );
> > > > > }
> > > > > dsSetColor ( 1, 0, 0 );
> > > > > dsDrawSphereD ( dBodyGetPosition (body1) , dBodyGetRotation
> > > >
> > > > (body1) ,1 );
> > > >
> > > > > dsSetColor ( 0, 1, 0 );
> > > > > dsDrawSphereD ( dBodyGetPosition (body2) , dBodyGetRotation
> > > >
> > > > (body2) ,1 );
> > > >
> > > > > }
> > > > >
> > > > > int main(int argc, char** argv){
> > > > >
> > > > > dsFunctions fn;
> > > > > fn.version = DS_VERSION;
> > > > > fn.start = &start;
> > > > > fn.step = &simLoop;
> > > > > fn.command = 0;
> > > > > fn.stop = 0;
> > > > > fn.path_to_textures = "../textures";
> > > > >
> > > > > world = dWorldCreate ();
> > > > > space = dHashSpaceCreate (0);
> > > > > dWorldSetGravity ( world , 0 , 0 , 0 );
> > > > > dWorldSetERP ( world , 1 );
> > > > >
> > > > > dsSimulationLoop ( argc , argv , 640 , 480 , &fn );
> > > > >
> > > > > return 0;
> > > > > }
> > > > > </sliderrotation.c>
> > > >
> > > > --
> > > > ---- Georg Martius, Tel: (+49 34297) 89434 ----
> > > > ------- http://www.flexman.homeip.net ---------
> >
> > --
> > ---- Georg Martius, Tel: (+49 34297) 89434 ----
> > ------- http://www.flexman.homeip.net ---------
> >
>
>
More information about the ODE
mailing list