[ODE] Kinematic objects
erincatto at sbcglobal.net
Thu Oct 27 22:22:52 MST 2005
I have implemented kinematic bodies in my engine. The requirement is that
the engine has a notion of the kinematic body's velocity.
For example, say you have a platform that moves from side-to-side. It might
be convenient to make this platform kinematic so it's motion can be
prescribed by an animation. Now put a physical box on top of the platform.
Physical intuition says that friction coupling between the platform and box
should cause the box to move with the platform. However, if the engine has
no concept of the platform's velocity, the box will simply remain in place
until the platform moves out from under the box.
So getting an approximation of a kinematic body's velocity is easy enough. A
finite difference of the position will work reasonably well. But there's a
The difficulty is that the contact constraints and all joints must be
modeled to handle a moving ground point. I found this to be too tedious and
moved to a system that provides a 6dof constraint to move bodies around on a
From: ode-bounces at q12.org [mailto:ode-bounces at q12.org] On Behalf Of J.
Sent: Thursday, October 27, 2005 12:45 PM
Subject: [ODE] Kinematic objects
Has anyone tried implementing something like Novodex's "kinematic"
objects in ODE? A kinematic object is a dynamics body that is controlled by
the host application, rather than the simulation. Each timestep, the app
must call setPosition() on the body to move it around, external forces have
no effect. Internally, Novodex computes a force to move the body to the new
position. Any dynamics objects that are in the path of the object get pushed
out of the way.
I was thinking that I might be able to handle this by putting kinematic
objects in their own ODE world. I use a separate world so I can have zero
gravity for kinematic objects, while regular dynamic objects have a non-zero
gravity. All of the collision shapes would go into one space, but if a body
is flagged kinematic it is treated as static world geometry for the sake of
the collision (I would pass NULL into dJointAttach() instead of the body
Does this sound reasonable? Am I missing anything obvious?
ODE mailing list
ODE at q12.org
More information about the ODE