Ways to drive the Custom Robot Joints

I am a beginner to Isaac Sim, and I am trying to control my custom robot’s joints in Isaac Sim.
I noticed that there are two ways to do it:

  1. Using the UsdPhysics.
    For instance:

left_wheel_drive = UsdPhysics.DriveAPI.Get(stage.GetPrimAtPath(“/carter/chassis_link/left_wheel”), “angular”)
left_wheel_drive.GetTargetVelocityAttr().Set(150)

  1. Using Dynamic Control.
    For instance:

articulation = dc.get_articulation(“/carter”)
dc.wake_up_articulation(articulation)
dof_ptr = dc.find_articulation_dof(articulation, “left_wheel”)
dc.set_dof_velocity_target(dof_ptr, 2.0)

May I know the differences between these two methods (advantages or disadvantages)?
And, which one is more appropriate to deploy (for a custom robot)?

Thank you.

Hi @berternats

The following is an attempt to provide, to the best of my knowledge (and subjectivity), some information to your questions.

USD Dynamic Control Isaac Sim Core
Omniverse applications availability all only Isaac Sim only Isaac Sim
API interface low level medium level high level
Main target stage and prims (USD schemas) articulations and rigid bodies creating and manipulating objects, robots (articulations), tasks, and environments, among others. It also provides a set of simulations-related tools and utilities
Documentation coverage medium-high low medium
API programming language C/C++, Python C/C++ (not accessible), Python Python

If asked which is the most appropriate for deploying robotics applications, I would say Isaac Sim Core

For example, OmniIsaacGymEnvs, Isaac Orbit, and most of the standalone examples and extension examples in Isaac Sim rely on or use Isaac Sim Core :)

Wow, thank you so much! The answer is so perfect!

But, does the Isaac Sim Core provides APIs that can control a specific joint as USD and dynamic control do?

Because to my understanding, only USD and Dynamic control can to that.

Thank you.

Hi @berternats

There is a class for controlling specific joints: ArticulationSubset:

A utility class for viewing a subset of the joints in a robot Articulation object.

This class can be helpful in two ways:

  1. The order of joints returned by a robot Articulation may not match the order of joints expected by a function.
  2. A function may only care about a subset of the joint states that are returned by a robot Articulation.

Also, you can control specific joints by defining the joint_indices parameter in many Articulation methods and in the ArticulationAction class

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.