newton.controllers.ControllerJointImpedanceModelFree#

class newton.controllers.ControllerJointImpedanceModelFree(*, robot_count, dofs_per_robot, max_dofs, default_dof_indices, stiffness, damping, use_gravity_compensation=True, use_coriolis_compensation=True, use_inertia_decoupling=True, has_qdd_feedforward=False, joint_q_idx=None, joint_qd_idx=None, joint_q_des_idx=None, joint_qd_des_idx=None, joint_qdd_idx=None, gravity_force_idx=None, coriolis_force_idx=None, joint_f_idx=None, device=None, requires_grad=False)[source]#

Bases: ControllerBase

Joint-space impedance controller with caller-supplied dynamics.

Supports heterogeneous robot fleets — robots in the batch may have different DOF counts. Internal buffers are padded to max_dofs; kernels skip padding slots via a per-robot guard.

Allocate input and output structs via input() and output(). All field names on those structs are fixed — see Inputs and Outputs for the typed schema. Fields for disabled features (e.g. gravity_force when use_gravity_compensation=False) are allocated as None and must not be written.

Parameters:
  • robot_count (int) – Number of parallel robots.

  • dofs_per_robot (wp.array[wp.int32]) – DOF count for each robot, length robot_count.

  • max_dofs (int) – Padded buffer width — must equal int(dofs_per_robot.numpy().max()). Passed explicitly to avoid a device round-trip.

  • default_dof_indices (wp.array[wp.uint32]) – Concatenated per-robot index arrays of length sum(dofs_per_robot) mapping controller DOF slots to positions in the flat simulation arrays (robot 0’s indices first, then robot 1’s, etc.).

  • stiffness (wp.array2d[wp.float32] | None) – Position-error gain Kp [N/m or N·m/rad], shape (robot_count, max_dofs). Pass a baked array or None to read from inputs.stiffness each step.

  • damping (wp.array2d[wp.float32] | None) – Velocity-error gain Kd [N·s/m or N·m·s/rad]. Same format as stiffness.

  • use_gravity_compensation (bool) – Add gravity generalized forces to τ.

  • use_coriolis_compensation (bool) – Add Coriolis generalized forces to τ.

  • use_inertia_decoupling (bool) – Premultiply the PD term by M(q).

  • has_qdd_feedforward (bool) – Accept a desired-acceleration feedforward via inputs.joint_qdd.

  • joint_q_idx (wp.array[wp.uint32] | None) – Optional index override for inputs.joint_q; same length/layout as default_dof_indices.

  • joint_qd_idx (wp.array[wp.uint32] | None) – Optional index override for inputs.joint_qd.

  • joint_q_des_idx (wp.array[wp.uint32] | None) – Optional index override for inputs.joint_q_des.

  • joint_qd_des_idx (wp.array[wp.uint32] | None) – Optional index override for inputs.joint_qd_des.

  • joint_qdd_idx (wp.array[wp.uint32] | None) – Optional index override for inputs.joint_qdd.

  • gravity_force_idx (wp.array[wp.uint32] | None) – Optional index override for inputs.gravity_force.

  • coriolis_force_idx (wp.array[wp.uint32] | None) – Optional index override for inputs.coriolis_force.

  • joint_f_idx (wp.array[wp.uint32] | None) – Optional index override for the torque output.

  • device (Any) – Warp device.

  • requires_grad (bool) – Whether internal buffers need gradient support.

class Inputs#

Bases: object

Input struct returned by input().

All four kinematic fields are always allocated. Optional fields are None when the corresponding feature is disabled at construction.

coriolis_force: wp.array[wp.float32] | None#

Coriolis generalized forces [N or N·m], flat sim-level array. None unless use_coriolis_compensation=True.

damping: wp.array2d[wp.float32] | None#

Velocity-error gain Kd [N·s/m or N·m·s/rad], shape (robot_count, max_dofs). None when gains are baked at construction.

gravity_force: wp.array[wp.float32] | None#

Gravity generalized forces [N or N·m], flat sim-level array. None unless use_gravity_compensation=True.

joint_q: wp.array[wp.float32]#

Current joint positions [m or rad], flat sim-level array.

joint_q_des: wp.array[wp.float32]#

Desired joint positions [m or rad], flat sim-level array.

joint_qd: wp.array[wp.float32]#

Current joint velocities [m/s or rad/s], flat sim-level array.

joint_qd_des: wp.array[wp.float32]#

Desired joint velocities [m/s or rad/s], flat sim-level array.

joint_qdd: wp.array[wp.float32] | None#

Desired acceleration feedforward [m/s² or rad/s²], flat sim-level array. None unless has_qdd_feedforward=True.

mass_matrix: wp.array3d[wp.float32] | None#

Per-robot generalized mass matrices [kg or kg·m²], shape (robot_count, max_dofs, max_dofs). None unless use_inertia_decoupling=True.

stiffness: wp.array2d[wp.float32] | None#

Position-error gain Kp [N/m or N·m/rad], shape (robot_count, max_dofs). None when gains are baked at construction.

class Outputs#

Bases: object

Output struct returned by output().

joint_f: wp.array[wp.float32]#

Joint torque command [N or N·m], flat sim-level array.

__init__(*, robot_count, dofs_per_robot, max_dofs, default_dof_indices, stiffness, damping, use_gravity_compensation=True, use_coriolis_compensation=True, use_inertia_decoupling=True, has_qdd_feedforward=False, joint_q_idx=None, joint_qd_idx=None, joint_q_des_idx=None, joint_qd_des_idx=None, joint_qdd_idx=None, gravity_force_idx=None, coriolis_force_idx=None, joint_f_idx=None, device=None, requires_grad=False)#
input()#

Return a pre-allocated Inputs with zero-initialised arrays.

is_graphable()#
output()#

Return a pre-allocated Outputs with a flat torque array.

step(*, inputs, outputs, dt)#

Compute one impedance-control step and write joint torques.

Parameters:
  • inputs (Inputs) – Populated Inputs struct. Dynamics fields must be filled by the caller before each call.

  • outputs (Outputs) – Outputs struct to write torques into.

  • dt (float | wp.array[wp.float32]) – Unused. Accepted for API compatibility.