OpenRAVE Documentation

testphysics Module

Shows how to enable physics.

../../_images/testphysics.jpg

Running the Example:

openrave.py --example testphysics

Description

When simulations are turned on, an internal timer starts and the SimulationStep functions of all classes are called. Note that simulations extend beyond physics. That’s why there’s the distinction between simulation and physics and both are set separately. To start the internal simulation with a timestep of 0.001 seconds do

env = Environment()
env.StartSimulation(timestep=0.001)

To stop it do

env.StopSimulation()

In a plugin, every state is accessible directly through memory. In scripting (Octave/Matlab), there’s a thread safe loop that serializes information to the socket. KinBody/Robot information can be accessed from any thread as long as EvironmentBase::LockPhysics is called. In a SimulationStep call, this is not necessary as OpenRAVE locks physics before calling it.

To set the physics engine to ODE, use

env.SetPhysicsEngine(env.CreatePhysicsEngine('ode'))

octave:

orEnvSetOptions(‘physics ODE’);

To set gravity:

env.GetPhysicsEngine().SetGravity([0,0,-9.81])

Make sure that whatever object you don’t want moving (like floors) are declared static. Setting Properites through XML Files

It is possible to create and setup a physics engine in the <environment> tag in the XML file description. The ode physics engine uses a custom XML reader to define a special odeproperties tag that can be used to specify friction, gravity, etc. For example:

<environment>
  <!-- ... other definitions ... -->
  <physicsengine type="ode">
    <odeproperties>
      <friction>0.5</friction>
      <gravity>0 0 -9.8</gravity>
      <selfcollision>1</selfcollision>
    </odeproperties>
  </physicsengine>
</environment>

Take a look at the share/openrave/data/testphysics.env.xml for a working example.

Command-line

Usage: openrave.py [options]

test physics

Options:
  -h, --help            show this help message and exit
  --scene=SCENE         Scene file to load (default=data/hanoi.env.xml)
  --timestep=TIMESTEP   The physics simulation time step size  (default=0.001)

  OpenRAVE Environment Options:
    --loadplugin=_LOADPLUGINS
                        List all plugins and the interfaces they provide.
    --collision=_COLLISION
                        Default collision checker to use
    --physics=_PHYSICS  physics engine to use (default=none)
    --viewer=_VIEWER    viewer to use (default=qtcoin)
    --server=_SERVER    server to use (default=None).
    --serverport=_SERVERPORT
                        port to load server on (default=4765).
    --module=_MODULES   module to load, can specify multiple modules. Two
                        arguments are required: "name" "args".
    -l _LEVEL, --level=_LEVEL, --log_level=_LEVEL
                        Debug level, one of
                        (fatal,error,warn,info,debug,verbose,verifyplans)
    --testmode          if set, will run the program in a finite amount of
                        time and spend computation time validating results.
                        Used for testing

Main Python Code

def main(env,options):
    "Main example code."
    env.Load(options.scene)
    if options._physics is None:
        # no physics engine set, so set one
        physics = RaveCreatePhysicsEngine(env,'ode')
        env.SetPhysicsEngine(physics)
    with env:
        env.GetPhysicsEngine().SetGravity([0,0,-1])
        env.StopSimulation()
        env.StartSimulation(timestep=options.timestep)
        starttime = time.time()
    while True:
        bodynames = ['data/lego2.kinbody.xml', 'data/lego4.kinbody.xml', 'data/mug1.kinbody.xml']
        numbodies = 0
        if numbodies < 40:
            with env:
                body = env.ReadKinBodyXMLFile(bodynames[random.randint(len(bodynames))])
                body.SetName('body%d'%numbodies)
                numbodies += 1
                env.Add(body,True)
                T = eye(4)
                T[0:3,3] = array((-0.5,-0.5,2))+0.4*random.rand(3)
                body.SetTransform(T)
                        
        time.sleep(0.4)
        simtime = env.GetSimulationTime()*1e-6
        realtime = time.time()-starttime
        print 'sim time: %fs, real time: %fs, diff = %fs'%(simtime,realtime,simtime-realtime)

Class Definitions

openravepy.examples.testphysics.main(env, options)[source]

Main example code.

openravepy.examples.testphysics.run(*args, **kwargs)[source]

Command-line execution of the example.

Parameters:args – arguments for script to parse, if not specified will use sys.argv

Questions/Feedback

Having problems with OpenRAVE?