[ODE] ODE uses forces that are twice as large as specified. Bug?
Matthias Baas
baas at ira.uka.de
Wed Jan 12 11:55:30 MST 2005
Hi,
it seems there's a bug in ODE that makes position updates behave as if
every force was twice as large as it actually was.
Here is a simple example that shows my problem (it's written in Python,
but it should be straightforward to translate it to C):
###############################################################
import ode
# Create a world object
world = ode.World()
world.setGravity( (0,0,-1) )
# Create a body inside the world
body = ode.Body(world)
M = ode.Mass()
M.setSphere(1000.0, 0.1)
M.mass = 1.0
body.setMass(M)
body.setPosition( (0,0,0) )
# Do one simulation step
dt = 1.0/25.0
print "dt:",dt
world.step(dt)
# Print the current position and velocity of the body
print "pos = (%f, %f, %f)"%body.getPosition()
print "vel = (%f, %f, %f)"%body.getLinearVel()
###############################################################
It's simply a body of mass 1.0 that's initially located at the origin.
The gravity is set to g=(0,0,-1) and one simulation step is done with a
time step of 1/25 = 0.04. After that the position and linear velocity of
the body are printed.
The result after running the script is this:
dt: 0.04
pos = (0.000000, 0.000000, -0.001600)
vel = (0.000000, 0.000000, -0.040000)
The velocity is v=g*dt which is -0.04 for the z component, so that's
correct. But the position should be p=0.5*g*dt^2 which should yield a z
component of -0.0008 but the z component in the ODE simulation is twice
as large. So it's as if the position was updated with a gravity of -2
instead of -1 and the position is inconsistent with the velocity.
So what's the mistake here? Is it me or is it really a bug in ODE?
- Matthias -
More information about the ODE
mailing list