Skip to main content

GravityBiasedJointStopScenario

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

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

One loaded arm joint at joint_speed braking with machine’s peak torque while gravity holds bias_fraction of that peak along (descending) or against (ascending) the motion.

Braking deceleration is net torque over inertia; the joint stops in w^2 / (2 alpha) and the tool at lever travels that angle times the lever. The kinetic barrier h = theta - w^2 / (2 alpha_net) (descending) bounds the next torque by tau <= -tau_bias + I alpha_net (gamma h / w - 1); its negative is the braking torque the barrier demands at a tool clearance. With site, the protective separation distance prices a person at the site’s approach speed over the site’s pre-brake delay plus the descending joint stop, the tool’s reaction travel, and the tool’s stop.

Notes

Equation: tool_stop_descending is the worked quantity; each property below states its equation and units.

Assumptions: Single-joint inertia, lever arm, gravity bias, and available braking torque stay constant.

Excludes: Multibody dynamics, torque slew, brake onset variation, and safety certification.

References

Derivation: The equations below follow the stated counts, geometric relations, or accounting definitions; scenario inputs are supplied assumptions or observations, not fitted predictions.

Examples

Execute the registered worked inputs; this is a modeled calculation.

>>> from mlsysim import Scenarios
>>> case = Scenarios.LoadedArmJointGravityStop
>>> value = case.tool_stop_descending
>>> print(f"{value:.3f~P}")
79.448 mm

Attributes

Name Description
alpha_ascending Ascending constant angular deceleration in inverse seconds squared.
alpha_descending Descending constant angular deceleration in inverse seconds squared.
alpha_free Unbiased constant angular deceleration in inverse seconds squared.
barrier_clearances
barrier_demands Required braking torques in N m for every listed clearance.
barrier_gain
bias Constant gravitational bias torque in N m, specified fraction of peak torque.
bias_fraction
inertia
joint_speed
lever
machine
overrun Extra descending stop travel in mm compared with the unbiased stop.
separation_person Human approach travel in mm during reaction and descending joint stopping.
separation_person_share Dimensionless human-travel share of the separation total.
separation_reaction Tool reaction travel in mm before braking begins.
separation_total Total human, reaction, and stopping travel in mm before additional margins.
site
stop_time_descending Descending joint stopping duration in ms.
tcp_speed Tool tangential speed in m/s at the specified lever arm.
tool_stop_ascending Tool stopping arc length in mm when gravity assists braking.
tool_stop_descending Tool stopping arc length in mm when gravity opposes braking.
tool_stop_free Tool stopping arc length in mm without gravity bias.
torque_ascending Net ascending braking torque in N m after adding gravity assistance.
torque_descending Net descending braking torque in N m after subtracting gravity bias.
torque_limit Configured joint peak torque in N m.

Methods

Name Description
barrier_margin Kinetic barrier margin in radians at the supplied tool clearance.
barrier_torque_demand Required braking torque in N m from the stated kinetic-barrier inequality.
stop_angle Joint stopping angle in radians at supplied positive angular deceleration.
tool_stop Tool stopping arc length in mm at supplied angular deceleration.

barrier_margin

engine.scenario_types.GravityBiasedJointStopScenario.barrier_margin(clearance)

Kinetic barrier margin in radians at the supplied tool clearance.

Kinetic barrier h = theta - w^2 / (2 alpha_net) at a tool clearance (radians).

Equation: return (clearance / self.lever).to(’’).magnitude - self.stop_angle(self.alpha_descending)

barrier_torque_demand

engine.scenario_types.GravityBiasedJointStopScenario.barrier_torque_demand(
    clearance,
)

Required braking torque in N m from the stated kinetic-barrier inequality.

Braking torque the barrier demands at a tool clearance (the bound’s negative).

Equation: h = self.barrier_margin(clearance) bound = (-self.bias + self.inertia * self.alpha_descending * (self.barrier_gain * h / self.joint_speed - 1)).to(‘N*m’) return (-bound).to(‘N*m’)

stop_angle

engine.scenario_types.GravityBiasedJointStopScenario.stop_angle(alpha)

Joint stopping angle in radians at supplied positive angular deceleration.

Joint stop angle in radians at deceleration alpha.

Equation: return (self.joint_speed ** 2 / (2 * alpha)).to(’’).magnitude

tool_stop

engine.scenario_types.GravityBiasedJointStopScenario.tool_stop(alpha)

Tool stopping arc length in mm at supplied angular deceleration.

Equation: return (self.lever * self.stop_angle(alpha)).to(‘mm’)

machine

Type: Any.

Declared default: required.

inertia

Type: Quantity.

Declared default: required.

lever

Type: Quantity.

Declared default: required.

joint_speed

Type: Quantity.

Declared default: required.

bias_fraction

Type: float.

Declared default: required.

barrier_gain

Type: Optional[Quantity].

Declared default: None.

barrier_clearances

Type: List[Quantity].

Declared default: [].

site

Type: Optional[Any].

Declared default: None.

torque_limit

engine.scenario_types.GravityBiasedJointStopScenario.torque_limit

Configured joint peak torque in N m.

Equation: return self.machine.arm.max_torque.to(‘N*m’)

bias

engine.scenario_types.GravityBiasedJointStopScenario.bias

Constant gravitational bias torque in N m, specified fraction of peak torque.

Equation: return (self.torque_limit * self.bias_fraction).to(‘N*m’)

torque_descending

engine.scenario_types.GravityBiasedJointStopScenario.torque_descending

Net descending braking torque in N m after subtracting gravity bias.

Torque left for braking when gravity acts along the motion.

Equation: return (self.torque_limit - self.bias).to(‘N*m’)

torque_ascending

engine.scenario_types.GravityBiasedJointStopScenario.torque_ascending

Net ascending braking torque in N m after adding gravity assistance.

Torque available for braking when gravity helps.

Equation: return (self.torque_limit + self.bias).to(‘N*m’)

alpha_free

engine.scenario_types.GravityBiasedJointStopScenario.alpha_free

Unbiased constant angular deceleration in inverse seconds squared.

Equation: return self._alpha(self.torque_limit)

alpha_descending

engine.scenario_types.GravityBiasedJointStopScenario.alpha_descending

Descending constant angular deceleration in inverse seconds squared.

Equation: return self._alpha(self.torque_descending)

alpha_ascending

engine.scenario_types.GravityBiasedJointStopScenario.alpha_ascending

Ascending constant angular deceleration in inverse seconds squared.

Equation: return self._alpha(self.torque_ascending)

tool_stop_free

engine.scenario_types.GravityBiasedJointStopScenario.tool_stop_free

Tool stopping arc length in mm without gravity bias.

Equation: return self.tool_stop(self.alpha_free)

tool_stop_descending

engine.scenario_types.GravityBiasedJointStopScenario.tool_stop_descending

Tool stopping arc length in mm when gravity opposes braking.

Equation: return self.tool_stop(self.alpha_descending)

tool_stop_ascending

engine.scenario_types.GravityBiasedJointStopScenario.tool_stop_ascending

Tool stopping arc length in mm when gravity assists braking.

Equation: return self.tool_stop(self.alpha_ascending)

overrun

engine.scenario_types.GravityBiasedJointStopScenario.overrun

Extra descending stop travel in mm compared with the unbiased stop.

Tool travel the descending stop adds over the unbiased one.

Equation: return (self.tool_stop_descending - self.tool_stop_free).to(‘mm’)

stop_time_descending

engine.scenario_types.GravityBiasedJointStopScenario.stop_time_descending

Descending joint stopping duration in ms.

Equation: return (self.joint_speed / self.alpha_descending).to(‘ms’)

tcp_speed

engine.scenario_types.GravityBiasedJointStopScenario.tcp_speed

Tool tangential speed in m/s at the specified lever arm.

Equation: return (self.lever * self.joint_speed).to(‘m/s’)

barrier_demands

engine.scenario_types.GravityBiasedJointStopScenario.barrier_demands

Required braking torques in N m for every listed clearance.

Equation: return [self.barrier_torque_demand(c) for c in self.barrier_clearances]

separation_person

engine.scenario_types.GravityBiasedJointStopScenario.separation_person

Human approach travel in mm during reaction and descending joint stopping.

Person’s travel over the reaction (pre-brake delay) and the descending joint stop.

Equation: return (self.site.v_human_approach * (self.site.tau_delay + self.stop_time_descending)).to(‘mm’)

separation_reaction

engine.scenario_types.GravityBiasedJointStopScenario.separation_reaction

Tool reaction travel in mm before braking begins.

Tool travel during the reaction time.

Equation: return (self.tcp_speed * self.site.tau_delay).to(‘mm’)

separation_total

engine.scenario_types.GravityBiasedJointStopScenario.separation_total

Total human, reaction, and stopping travel in mm before additional margins.

Protective separation before intrusion and position margins.

Equation: return (self.separation_person + self.separation_reaction + self.tool_stop_descending).to(‘mm’)

separation_person_share

engine.scenario_types.GravityBiasedJointStopScenario.separation_person_share

Dimensionless human-travel share of the separation total.

Equation: return (self.separation_person / self.separation_total).to(’’).magnitude

Back to top