[ODE] About angular damping

Jacob Ole Juul Kolding dacobi at gmail.com
Fri Apr 13 19:34:32 MST 2007


Replying for the archive...

Found the bugs.. This is the working code:

    if(fAngularDamp > 0){

        if(!theEngine->chronos()) //time in milisec
            return;

        const dReal *curAVel = dBodyGetAngularVel(odeBody);
        dVector3 dCurAVel;

        dCurAVel[0] = curAVel[0] * odeMassf * 1000; // odeMassf is in kg
        dCurAVel[1] = curAVel[1] * odeMassf * 1000;
        dCurAVel[2] = curAVel[2] * odeMassf * 1000;

        dCurAVel[0] = dCurAVel[0] / (theEngine->chronos());
        dCurAVel[1] = dCurAVel[1] / (theEngine->chronos());
        dCurAVel[2] = dCurAVel[2] / (theEngine->chronos());

        dBodyAddTorque(odeBody, -dCurAVel[0] * fAngularDamp, -dCurAVel[1] *
fAngularDamp, -dCurAVel[2] * fAngularDamp);

On 4/14/07, Jacob Ole Juul Kolding <dacobi at gmail.com> wrote:
>
>
>
> On 4/13/07, Jon Watte (ODE) <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
> > > http://mooshika.org/mailman/listinfo/ode
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mooshika.org/pipermail/ode/attachments/20070414/2c24243c/attachment.htm


More information about the ODE mailing list