[ODE] About angular damping

Jacob Ole Juul Kolding dacobi at gmail.com
Mon Apr 23 18:43:22 MST 2007


I've changed to global torque, but I'm confused about the time step, should
I divide with the time step if I only run dWorldStep once per frame?

On 4/14/07, Jon Watte (ODE) <hplus-ode at mindcontrol.org> wrote:
>
> What is chronos() ?
>
> You should divide by the time step size. For example, if you pass 0.01
> to dWorldStep() each time, that's what you should divide by to stop in
> one step.
>
> However, your problem is that you're using relative torque. The body
> velocity is in global coordinates, so you should add global torque.
>
> Cheers,
>
>                         / h+
>
>
> Jacob Ole Juul Kolding wrote:
> >
> >
> > On 4/13/07, *Jon Watte (ODE)* <hplus-ode at mindcontrol.org
> > <mailto:hplus-ode at mindcontrol.org>> wrote:
> >
> >     In the analytic case, yes; you get the angular velocity, multiply by
> the
> >     mass, and divide by the time step, negate it, and that's your
> necessary
> >     torque.
> >
> >
> > Ok, I have the following code:
> >
> >     if(fAngularDamp > 0){
> >
> >         if(!theEngine->chronos()){ // milisecs since last frame
> >             return;
> >         }
> >
> >         const dReal *curAVel = dBodyGetAngularVel(odeBody);
> >         dVector3 dCurAVel;
> >
> >         dCurAVel[0] = curAVel[0] * odeMassf;
> >         dCurAVel[1] = curAVel[1] * odeMassf;
> >         dCurAVel[2] = curAVel[2] * odeMassf;
> >
> >         dCurAVel[0] = dCurAVel[0] / (theEngine->chronos() / 1000);
> >         dCurAVel[1] = dCurAVel[1] / (theEngine->chronos() / 1000);
> >         dCurAVel[2] = dCurAVel[2] / (theEngine->chronos() / 1000);
> >
> >         if((dCurAVel[0] != 0) || (dCurAVel[1] != 0) || (dCurAVel[2] !=
> 0))
> >         dBodyAddRelTorque(odeBody, -dCurAVel[0] * fAngularDamp,
> > -dCurAVel[1] * fAngularDamp, -dCurAVel[2] * fAngularDamp);
> >     }
> >
> > The problem is that whenever fAngularDamp is above Zero, All rotation
> > stops permanently and my shell is full of this:
> >
> > ODE Message 2: vector has zero size in dNormalize4() File odemath.cpp
> > Line 129
> >
> > ODE Message 2: vector has zero size in dNormalize4() File odemath.cpp
> > Line 129
> >
> > ODE Message 2: vector has zero size in dNormalize4() File odemath.cpp
> > Line 129
> >
> > What am I doing wrong?
> >
> >     In the integrator case, there is always some behavior of the
> integrator
> >     that may get in the way, but I haven't analyzed the ODE integrator
> >     enough to correct for that -- I do what's outlined above, and it
> works
> >     pretty well as-is.
> >
> >     Cheers,
> >
> >               / h+
> >
> >
> >     Jacob Ole Juul Kolding wrote:
> >      > Hello List
> >      >
> >      > I'm reading about resistance and angular damping in the FAQ but
> it
> >      > didn't answer my question.
> >      > I'm looking for at formula to determine the exact amount of
> torque
> >      > required to put a rotating body to rest.
> >      > The body in question having no contacts/joints attached nor being
> >      > affected by gravity.
> >      > Can this be computed from the angular velocity and mass of the
> body?
> >      >
> >      > Any help appreciated!
> >      >
> >      > /Jacob Kolding
> >      >
> >
> ------------------------------------------------------------------------
> >
> >      >
> >      > _______________________________________________
> >      > ODE mailing list
> >      > ODE at ode.org <mailto:ODE at ode.org>
> >      > http://mooshika.org/mailman/listinfo/ode
> >     <http://mooshika.org/mailman/listinfo/ode>
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://ode.org/pipermail/ode/attachments/20070424/3d264f93/attachment.htm


More information about the ODE mailing list