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
TrueAttributes
| 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.