Skip to main content

SoftContactExploitScenario

Robotics scenarios · Implementation: mlsysim/engine/scenario_definitions/robotics/learning.py.

Construct this scenario with keyword inputs. The fields below show the types and defaults declared by this class.

machine’s arm coasting into site’s latch plate at the fast approach: the peak force a penalty spring that lets the gripper sink penalty_penetration reports, the peak the real plate imposes on a rigid arm, and the arm stiffness at which the series chain reaches the limit. The moving mass is the arm’s effective contact mass without its payload capacity (the gripper holds no object at the door).

Notes

Equation: Impact energy m*v**2/2 becomes spring energy k*x**2/2; series compliance sets the effective k.

Assumptions: Linear undamped springs, empty gripper, and the declared effective contact mass.

Excludes: Damping, controller intervention, nonlinear contact, and any safety certification.

References

Derivation: Conservation of kinetic energy against a linear spring gives F_peak = v*sqrt(m*k). Springs in series add their compliances. The implementation composes mlsysim.physics.robotics.actuation.calc_transient_impact_force with mlsysim.physics.robotics.learning.calc_series_stiffness and calc_complementary_series_stiffness.

Examples

>>> from mlsysim import Scenarios
>>> s = Scenarios.LatchSoftSpringExploit
>>> s.penalty_timescale.to("second").magnitude > 0
True

Attributes

Name Description
break_even_arm_stiffness Arm stiffness in N/m that, in series with the plate, reaches the force-limit stiffness.
break_even_series_stiffness Combined series stiffness in N/m whose impact peak reaches the latch-force limit.
guarded_rigid_peak Impact-force peak in N at the guarded approach speed against the plate.
machine
moving_mass Arm contact mass in kg after subtracting payload capacity for an empty gripper.
penalty_penetration
penalty_stiffness Effective penalty-spring stiffness from stopping the moving mass over the assumed penetration.
penalty_timescale Contact timescale sqrt(m/k) in seconds for the penalty spring.
plate_over_penalty Dimensionless plate-to-penalty stiffness ratio, exposing artificially soft simulated contact.
plate_timescale Contact timescale sqrt(m/k) in seconds for the latch plate.
rigid_over_limit Dimensionless rigid-arm force peak divided by the permitted latch force.
rigid_peak Impact-force peak in N with the latch plate as the only compliance.
simulated_peak Impact-force peak in N predicted by the penetration-derived penalty spring.
site
timescale_ratio Dimensionless penalty-contact duration relative to plate-contact duration.

Methods

Name Description
chain_peak_force Fast-approach peak with the arm in series with the plate.
peak_force Undamped impact-force peak in N at the supplied stiffness and speed; an omitted speed uses the fast approach.

chain_peak_force

engine.scenario_types.SoftContactExploitScenario.chain_peak_force(arm_stiffness)

Fast-approach peak with the arm in series with the plate.

Equation: peak_force(calc_series_stiffness(site.k_latch, arm_stiffness)).

peak_force

engine.scenario_types.SoftContactExploitScenario.peak_force(
    stiffness,
    speed=None,
)

Undamped impact-force peak in N at the supplied stiffness and speed; an omitted speed uses the fast approach.

Equation: Delegates F_peak = speed * sqrt(moving_mass * stiffness) to mlsysim.physics.robotics.actuation.calc_transient_impact_force.

machine

Type: Any.

Declared default: required.

site

Type: Any.

Declared default: required.

penalty_penetration

Type: Quantity.

Declared default: required.

moving_mass

engine.scenario_types.SoftContactExploitScenario.moving_mass

Arm contact mass in kg after subtracting payload capacity for an empty gripper.

Equation: (machine.arm_effective_contact_mass - machine.arm.payload_capacity).to('kg').

penalty_stiffness

engine.scenario_types.SoftContactExploitScenario.penalty_stiffness

Effective penalty-spring stiffness from stopping the moving mass over the assumed penetration.

Equation: calc_penalty_stiffness_from_penetration(moving_mass, site.v_latch_high, penalty_penetration).

simulated_peak

engine.scenario_types.SoftContactExploitScenario.simulated_peak

Impact-force peak in N predicted by the penetration-derived penalty spring.

Equation: peak_force(penalty_stiffness).

rigid_peak

engine.scenario_types.SoftContactExploitScenario.rigid_peak

Impact-force peak in N with the latch plate as the only compliance.

Equation: peak_force(site.k_latch).

guarded_rigid_peak

engine.scenario_types.SoftContactExploitScenario.guarded_rigid_peak

Impact-force peak in N at the guarded approach speed against the plate.

Equation: peak_force(site.k_latch, site.v_latch_approach).

break_even_series_stiffness

engine.scenario_types.SoftContactExploitScenario.break_even_series_stiffness

Combined series stiffness in N/m whose impact peak reaches the latch-force limit.

Equation: calc_impact_stiffness_for_force(site.f_latch_limit, site.v_latch_high, moving_mass).

break_even_arm_stiffness

engine.scenario_types.SoftContactExploitScenario.break_even_arm_stiffness

Arm stiffness in N/m that, in series with the plate, reaches the force-limit stiffness.

Equation: calc_complementary_series_stiffness(break_even_series_stiffness, site.k_latch).

plate_over_penalty

engine.scenario_types.SoftContactExploitScenario.plate_over_penalty

Dimensionless plate-to-penalty stiffness ratio, exposing artificially soft simulated contact.

Equation: (site.k_latch / penalty_stiffness).to('').magnitude.

rigid_over_limit

engine.scenario_types.SoftContactExploitScenario.rigid_over_limit

Dimensionless rigid-arm force peak divided by the permitted latch force.

Equation: (rigid_peak / site.f_latch_limit).to('').magnitude.

penalty_timescale

engine.scenario_types.SoftContactExploitScenario.penalty_timescale

Contact timescale sqrt(m/k) in seconds for the penalty spring.

Equation: calc_contact_timescale(moving_mass, penalty_stiffness).

plate_timescale

engine.scenario_types.SoftContactExploitScenario.plate_timescale

Contact timescale sqrt(m/k) in seconds for the latch plate.

Equation: calc_contact_timescale(moving_mass, site.k_latch).

timescale_ratio

engine.scenario_types.SoftContactExploitScenario.timescale_ratio

Dimensionless penalty-contact duration relative to plate-contact duration.

Equation: (penalty_timescale / plate_timescale).to('').magnitude.

Back to top