SensorsTest ​
Test environment for verifying absolute position, speed, and acceleration sensors monitoring a mass driven by a constant force.
This test component simulates a one-dimensional translational mechanical system to validate the behavior of absolute sensors. A mass (body) is subjected to a constant force (force, driven by constant1). One side of the force element is connected to a fixed point (ground), and the other side acts on the mass. The sensors (position_sensor, speed_sensor, acceleration_sensor) are then attached to this mass to measure its absolute position, speed, and acceleration, respectively. The metadata section includes a test case that checks if the sensor outputs match these expected dynamics.
Usage ​
TranslationalComponents.SensorsTest()
Behavior ​
using TranslationalComponents #hide
using ModelingToolkit #hide
@named sys = TranslationalComponents.SensorsTest() #hide
full_equations(sys) #hide<< @example-block not executed in draft mode >>Source ​
"""
Test environment for verifying absolute position, speed, and acceleration sensors monitoring a mass driven by a constant force.
This test component simulates a one-dimensional translational mechanical system to validate the behavior of absolute sensors.
A mass (`body`) is subjected to a constant force (`force`, driven by `constant1`). One side of the force element is connected to
a fixed point (`ground`), and the other side acts on the mass. The sensors (`position_sensor`, `speed_sensor`, `acceleration_sensor`)
are then attached to this mass to measure its absolute position, speed, and acceleration, respectively.
The `metadata` section includes a test case that checks if the sensor outputs match these expected dynamics.
"""
test component SensorsTest
"Represents the translational mass being sensed."
body = Mass(m = 1, L = 0)
"Represents the force applied to the mass."
force = Force()
"Provides a constant signal input (k=1) to the force component."
constant1 = BlockComponents.Constant(k = 1)
"Represents the fixed mechanical ground."
ground = Fixed()
"Sensor to measure the absolute speed of the connected flange."
speed_sensor = SpeedSensor()
"Sensor to measure the absolute position of the connected flange."
position_sensor = PositionSensor()
"Sensor to measure the absolute acceleration of the connected flange."
acceleration_sensor = AccelerationSensor()
relations
connect(constant1.y, force.f)
connect(force.flange_b, body.flange_a)
connect(force.flange_a, ground.flange)
connect(body.flange_b, speed_sensor.flange, position_sensor.flange, acceleration_sensor.flange)
metadata {
"Dyad": {
"icons": {"default": "dyad://TranslationalComponents/Example.svg"},
"tests": {
"case1": {
"stop": 5,
"initial": {"body.s": 0},
"expect": {
"final": {
"body.s": 12.49999999,
"body.v": 4.99999999,
"body.a": 1,
"position_sensor.s": 12.49999999,
"speed_sensor.v": 4.99999999,
"acceleration_sensor.a": 1
}
}
}
}
}
}
endFlattened Source
"""
Test environment for verifying absolute position, speed, and acceleration sensors monitoring a mass driven by a constant force.
This test component simulates a one-dimensional translational mechanical system to validate the behavior of absolute sensors.
A mass (`body`) is subjected to a constant force (`force`, driven by `constant1`). One side of the force element is connected to
a fixed point (`ground`), and the other side acts on the mass. The sensors (`position_sensor`, `speed_sensor`, `acceleration_sensor`)
are then attached to this mass to measure its absolute position, speed, and acceleration, respectively.
The `metadata` section includes a test case that checks if the sensor outputs match these expected dynamics.
"""
test component SensorsTest
"Represents the translational mass being sensed."
body = Mass(m = 1, L = 0)
"Represents the force applied to the mass."
force = Force()
"Provides a constant signal input (k=1) to the force component."
constant1 = BlockComponents.Constant(k = 1)
"Represents the fixed mechanical ground."
ground = Fixed()
"Sensor to measure the absolute speed of the connected flange."
speed_sensor = SpeedSensor()
"Sensor to measure the absolute position of the connected flange."
position_sensor = PositionSensor()
"Sensor to measure the absolute acceleration of the connected flange."
acceleration_sensor = AccelerationSensor()
relations
connect(constant1.y, force.f)
connect(force.flange_b, body.flange_a)
connect(force.flange_a, ground.flange)
connect(body.flange_b, speed_sensor.flange, position_sensor.flange, acceleration_sensor.flange)
metadata {
"Dyad": {
"icons": {"default": "dyad://TranslationalComponents/Example.svg"},
"tests": {
"case1": {
"stop": 5,
"initial": {"body.s": 0},
"expect": {
"final": {
"body.s": 12.49999999,
"body.v": 4.99999999,
"body.a": 1,
"position_sensor.s": 12.49999999,
"speed_sensor.v": 4.99999999,
"acceleration_sensor.a": 1
}
}
}
}
}
}
endTest Cases ​
using TranslationalComponents
using DyadInterface: TransientAnalysis, rebuild_sol
using ModelingToolkit: toggle_namespacing, get_defaults, @named
using CSV, DataFrames, Plots
snapshotsdir = joinpath(dirname(dirname(pathof(TranslationalComponents))), "test", "snapshots")<< @setup-block not executed in draft mode >>Test Case case1 ​
@named model_case1 = SensorsTest()
model_case1 = toggle_namespacing(model_case1, false)
get_defaults(model_case1)[model_case1.body.s] = 0
model_case1 = toggle_namespacing(model_case1, true)
result_case1 = TransientAnalysis(; model = model_case1, alg = "auto", start = 0e+0, stop = 5e+0, abstol=1e-6, reltol=1e-6)
sol_case1 = rebuild_sol(result_case1)<< @setup-block not executed in draft mode >>Related ​
Examples
Experiments
Analyses
Tests