Controllers#
Controllers map an action tensor to simulator commands for a robot.
You pick controller keys (strings) for the arm and the gripper:
Flat API:
arm_control="<key>"andgripper_control="<key>"Component API: pass
ControllerOptions(name="<key>", config={...})
Quickstart#
import dexsuite as ds
env = ds.make(
"lift",
manipulator="franka",
gripper="robotiq",
arm_control="osc_pose",
gripper_control="joint_position",
)
Normalization (normalized)#
Most controllers support a normalized flag.
If
normalized=True(default), actions are expected in[-1, 1]and are mapped into physical units using the controller config (for examplelin_scaleorv_max).If
normalized=False, actions are interpreted directly in physical units (for example meters/radians, rad/s, or N*m depending on the controller).clipcontrols whether inputs are clamped to the allowed range.
Default Controller Config#
Defaults live in dexsuite/config/env_configs/controllers.yaml. DexSuite
loads these when you construct RobotOptions (and when you use the flat API).
Controller Reference#
Key |
Action dim |
What it commands |
Config keys |
|---|---|---|---|
|
|
Joint position targets. Normalized maps |
|
|
|
Joint velocity targets. Normalized uses |
|
|
|
Joint torque/force commands. Normalized uses |
|
|
|
End-effector delta pose (XYZ + RPY) solved by IK each step. |
|
|
|
End-effector pose offset from a captured origin pose (XYZ + RPY). |
|
|
|
End-effector pose offset from origin (XYZ + delta quaternion, wxyz). |
|
|
|
Absolute end-effector target pose (XYZ + RPY) solved by IK each step. |
|
Notes#
Joint controllers (
joint_*) havedofactions, wheredofis the number of controlled joints for that arm/gripper.osc_pose_absandosc_pose_abs_quatcapture an origin pose on first use. If you want a fresh origin, recreate the env (or add a helper to recapture).