[ODE] body auto disable
gl
gl at ntlworld.com
Fri Jan 3 03:00:50 2003
Actually, having just played with CFM I realise that good values completely
depend on how someone is setting up their sim, so getting a global default
might prove tricky...
--
gl
----- Original Message -----
From: "gl" <gl@ntlworld.com>
To: "Erwin de Vries" <erwin@vo.com>; <ode@q12.org>
Sent: Friday, January 03, 2003 6:17 AM
Subject: Re: [ODE] body auto disable
>
> Ewrin, I've just implemented this (from the outside), and it works well
for
> my current test scene, composed of sphere/box and compound objects
(similar
> to boxstack). Here's the code I use (my units are real-world meters,
> seconds and gravity):
>
> #define MIN_PHYSICS_VELOCITY 0.01 // in meters/s
> #define MIN_PHYSICS_VELOCITY_TIME 1 // in secs
>
> (per world object, 'Dynamics' is a ptr to dBody)
> if(Dynamics->isEnabled())
> {
> vec3 &vel = AbsoluteVelocity().Absolute(); // (ie. fabs(x), fabs(y),
> fabs(z))
> // if the object's velocity has dropped below the threshhold for
> // long enough, auto-disable its dynamics calculations
> if((vel.x > MIN_PHYSICS_VELOCITY) ||
> (vel.y > MIN_PHYSICS_VELOCITY) ||
> (vel.z > MIN_PHYSICS_VELOCITY))
> LowVelocityTime = 0.f; // reset the count
> else{
> LowVelocityTime += time_step;
> if (LowVelocityTime > MIN_PHYSICS_VELOCITY_TIME) {
> Dynamics->disable();
> // note - I initially reset the count here too, but that resulted in
> some objects constantly
> // retriggering each other, even though there was no useful movement
> (eg blocks leaning
> // against one another). Removing it avoided that.
> }
> }
> }
>
> I definitely think this should be in ODE as standard, however I'd
recommend
> a global enable/disable with global parameters, with an optional per-body
> disable.or custom parameters. It should be possible to come up with good
> conservative defaults that work in most/all cases, and just have it
enabled
> by default.
> --
> gl
>
> ----- Original Message -----
> From: "Erwin de Vries" <erwin@vo.com>
> To: <ode@q12.org>
> Sent: Monday, December 23, 2002 11:57 AM
> Subject: [ODE] body auto disable
>
>
> > Hi,
> >
> > I'm thinking about what would be the best way to do this. I was thinking
> > about a solution which basically does the following:
> >
> > - Add a dReal 'DisableTimer' to the dBody struct.
> > - Add a dxBodyFlagAutoDisable which enables or disables this feature per
> > body.
> > - Each step add the steptime to this timer if the velocity is smaller
than
> > V. Else reset it to 0.
> > - If the timer is larger than T disable the body.
> >
> > It could either be implemented that V is a user defined value, but it
> could
> > also be determined from the inertia matrix of the body, which would be a
> > better solution i believe. Large objects get disabled sooner than small
> > objects.
> >
> > T should be user defined i believe. It could default to something like 5
> > time units (seconds).
> >
> > I'd think this would be fairly easy to implement. Any comments?
> >
> > Erwin
> >
> > _______________________________________________
> > ODE mailing list
> > ODE@q12.org
> > http://q12.org/mailman/listinfo/ode
> >
>
> _______________________________________________
> ODE mailing list
> ODE@q12.org
> http://q12.org/mailman/listinfo/ode
>