Dynamic Control

This extension provides a set of utilities to control physics objects. It provides opaque handles for different physics objects that remain valid between PhysX scene resets, which occur whenever play or stop is pressed.

Physics Control From Python

See the API Documentation for complete usage information.

The following scripts assume that the stage contains a Franka robot at /Franka created via the Create->Isaac->Robots->From Library->Franka

Simulation must be started for any of the below snippets to work. Press the Play button to start simulation from the ui.

Alternatively you can do it from python

1
2
import omni
omni.timeline.get_timeline_interface().play()

One frame of simulation must occur before the Dynamic Control API will work correctly

Introspection

1
2
3
4
5
6
7
from omni.isaac.dynamic_control import _dynamic_control
dc = _dynamic_control.acquire_dynamic_control_interface()

# Check to see what type of object the target prim is
obj_type = dc.peek_object_type("/Franka")
# This print statement should print ObjectType.OBJECT_ARTICULATION
print(obj_type)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from omni.isaac.dynamic_control import _dynamic_control
dc = _dynamic_control.acquire_dynamic_control_interface()

# Get a handle to the Franka articulation
# This handle will automatically update if simulation is stopped and restarted
art = dc.get_articulation("/Franka")

# Get information about the structure of the articulation
num_joints = dc.get_articulation_joint_count(art)
num_dofs = dc.get_articulation_dof_count(art)
num_bodies = dc.get_articulation_body_count(art)

# Get a specific degree of freedom on an articulation
dof_ptr = dc.find_articulation_dof(art, "panda_joint2")

Read Joint State

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Print the state of each degree of freedom in the articulation
art = dc.get_articulation("/Franka")
dof_states = dc.get_articulation_dof_states(art, _dynamic_control.STATE_ALL)
print(dof_states)

# Get state for a specific degree of freedom
dof_ptr = dc.find_articulation_dof(art, "panda_joint2")
dof_state = dc.get_dof_state(dof_ptr)
# print position for the degree of freedom
print(dof_state.pos)

Set Joint State

1
2
3
4
dof_ptr = dc.find_articulation_dof(art, "panda_joint2")
# This should be called each frame of simulation if state on the articulation is being changed.
dc.wake_up_articulation(art)
dc.set_dof_position_target(dof_ptr, -1.5)

Interactive Samples

The samples below use the python api from above to control and view data about a robot.

Get Robot Information

This sample loads a Franka robot and enables simulation. Various information for the robot articulation degrees of freedom is retrieved and shown on screen.

../_images/isaac_dynamic_control_read_articulations.png

Control Robot Joints

This sample loads a Franka robot and moves each joint through its maximum range of motion one joint at a time.

../_images/isaac_dynamic_control_joint_control.gif