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:
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)
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:
The order of joints returned by a robot Articulation may not match the order of joints expected by a function.
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
system
Closed
March 21, 2023, 4:47pm
5
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.