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:
ControllerBaseJoint-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()andoutput(). All field names on those structs are fixed — seeInputsandOutputsfor the typed schema. Fields for disabled features (e.g.gravity_forcewhenuse_gravity_compensation=False) are allocated asNoneand 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 orNoneto read frominputs.stiffnesseach 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 asdefault_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:
objectInput struct returned by
input().All four kinematic fields are always allocated. Optional fields are
Nonewhen 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.
Noneunlessuse_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).Nonewhen gains are baked at construction.
- gravity_force: wp.array[wp.float32] | None#
Gravity generalized forces [N or N·m], flat sim-level array.
Noneunlessuse_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.
Noneunlesshas_qdd_feedforward=True.
- class Outputs#
Bases:
objectOutput 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)#
- is_graphable()#
- step(*, inputs, outputs, dt)#
Compute one impedance-control step and write joint torques.