Skip to content

Model, state and control inputs

The Newton arrays the solver’s documentation names, with the sentence that names them.

InputHow Steel uses it
Contacts.rigid_contact_match_generation

History carries across one collision pass into the same Contacts buffer when that pass matched against the solved contact set (rigid_contact_match_generation); a different buffer, skipped passes, or a pass after the pipeline wrote another buffer start cold.

Contacts.rigid_contact_match_index

Start each step from the previous step's contact impulses, matched by contact identity through rigid_contact_match_index, so the CollisionPipeline must be created with contact matching enabled.

Contacts.rigid_contact_stiffness

Experimental: solve contacts that carry a positive rigid_contact_stiffness [N/m] with an implicit unilateral spring-damper law instead of the rigid normal law.

Control.joint_f

A closure has no joint coordinate, so the limits, drive gains, damping, armature, velocity limit and joint_f of a loop-closing REVOLUTE joint's DOF are ignored.

Model.joint_X_c

The closure rows read joint_enabled, joint_X_p / joint_X_c and, for a REVOLUTE closure, joint_axis every step, so a closure is released, engaged, re-anchored or re-aimed by editing those arrays in place, also from a kernel between CUDA graph replays.

Model.joint_X_p

The closure rows read joint_enabled, joint_X_p / joint_X_c and, for a REVOLUTE closure, joint_axis every step, so a closure is released, engaged, re-anchored or re-aimed by editing those arrays in place, also from a kernel between CUDA graph replays.

Model.joint_armature

joint_armature and joint_damping are applied.

Model.joint_axis

The closure rows read joint_enabled, joint_X_p / joint_X_c and, for a REVOLUTE closure, joint_axis every step, so a closure is released, engaged, re-anchored or re-aimed by editing those arrays in place, also from a kernel between CUDA graph replays.

Model.joint_damping

joint_armature and joint_damping are applied.

Model.joint_effort_limit

By default (drive_mode="augmented") they are integrated implicitly by folding dt * kd + dt^2 * ke into the mass matrix; only the explicit drive force is clamped to joint_effort_limit, and the implicit stiffness and damping response is unbounded, so under a large external load the drive reaction can exceed the limit.

Model.joint_enabled

The closure rows read joint_enabled, joint_X_p / joint_X_c and, for a REVOLUTE closure, joint_axis every step, so a closure is released, engaged, re-anchored or re-aimed by editing those arrays in place, also from a kernel between CUDA graph replays.

Model.joint_friction

Experimental dry joint friction: with enable_joint_friction=True, joint_friction of PRISMATIC, REVOLUTE, BALL and D6 DOFs bounds one row per DOF.

Model.joint_limit_lower

Joint limits: with enable_joint_limits=True, every finite joint_limit_lower / joint_limit_upper of a PRISMATIC, REVOLUTE or D6 DOF is a unilateral row.

Model.joint_limit_upper

Joint limits: with enable_joint_limits=True, every finite joint_limit_lower / joint_limit_upper of a PRISMATIC, REVOLUTE or D6 DOF is a unilateral row.

Model.joint_rest_q

Passive joint springs: joint_stiffness and joint_rest_q on PRISMATIC, REVOLUTE and D6 DOFs, applied explicitly as stiffness * (rest_q - q) like SolverFeatherstone, independently of drives and joint limits.

Model.joint_stiffness

Passive joint springs: joint_stiffness and joint_rest_q on PRISMATIC, REVOLUTE and D6 DOFs, applied explicitly as stiffness * (rest_q - q) like SolverFeatherstone, independently of drives and joint limits.

Model.joint_target_kd

Joint drives: joint_target_ke and joint_target_kd on PRISMATIC, REVOLUTE and D6 DOFs.

Model.joint_target_ke

Joint drives: joint_target_ke and joint_target_kd on PRISMATIC, REVOLUTE and D6 DOFs.

Model.joint_velocity_limit

Joint velocity limits (joint_velocity_limit) are enforced as rows when enable_joint_velocity_limits is set.

Model.shape_material_mu

Non-negative factor applied to every shape's friction coefficient (shape_material_mu) in the solver's copy of the materials, refreshed at construction and by notify_model_changed with SHAPE_PROPERTIES.

Model.shape_material_mu_rolling

Experimental rolling coefficient [m] for every free-body contact, replacing the shapes' steel:condim gate and shape_material_mu_rolling for that coefficient only;

Model.shape_material_mu_torsional

Experimental torsional coefficient [m] for every free-body contact, replacing the shapes' steel:condim gate and shape_material_mu_torsional for that coefficient only;

ModelBuilder.ShapeConfig.gap

gap decides which contacts the pipeline reports (also to sensors and other solvers); this gate only decides which of them this solver solves.

ModelBuilder.ShapeConfig.restitution

Restitution follows the shapes' restitution.

State.body_f

…solved motion: inverse dynamics with the post-solve joint accelerations (taken from the velocities the dynamics start from, after any velocity-limit prescaling), less gravity, body_f, and the solved impulses divided by dt of the subtree's contact normal, friction and spin rows and its loop-closure…

State.joint_q

Like SolverFeatherstone, the solver uses joint_q and joint_qd as its state and does not simulate bodies that are not connected through joints.

State.joint_qd

Like SolverFeatherstone, the solver uses joint_q and joint_qd as its state and does not simulate bodies that are not connected through joints.