$(instance)SensorsTest Icon

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

SensorsTest()

Behavior

\[ \begin{equation} \left[ \begin{array}{c} \mathtt{constant1.y}\left( t \right) = \mathtt{force.f}\left( t \right) \\ \mathrm{connect}\left( force_{+}flange_{b}, body_{+}flange_{a} \right) \\ \mathrm{connect}\left( force_{+}flange_{a}, ground_{+}flange \right) \\ \mathrm{connect}\left( body_{+}flange_{b}, speed_{sensor_{+}flange}, position_{sensor_{+}flange}, acceleration_{sensor_{+}flange} \right) \\ \mathtt{body.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{body.L} + \mathtt{body.s}\left( t \right) \\ \mathtt{body.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{body.L} + \mathtt{body.s}\left( t \right) \\ \mathtt{body.v}\left( t \right) = \frac{\mathrm{d} \mathtt{body.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{body.a}\left( t \right) = \frac{\mathrm{d} \mathtt{body.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{body.a}\left( t \right) + \mathtt{body.g} \sin\left( \mathtt{body.theta} \right) \right) \mathtt{body.m} = \mathtt{body.flange\_b.f}\left( t \right) + \mathtt{body.flange\_a.f}\left( t \right) \\ \mathtt{force.flange\_a.f}\left( t \right) = \mathtt{force.f}\left( t \right) \\ \mathtt{force.flange\_b.f}\left( t \right) = - \mathtt{force.f}\left( t \right) \\ \mathtt{constant1.y}\left( t \right) = \mathtt{constant1.k} \\ \mathtt{ground.flange.s}\left( t \right) = \mathtt{ground.s0} \\ 0 = \mathtt{speed\_sensor.flange.f}\left( t \right) \\ \mathtt{speed\_sensor.v}\left( t \right) = \frac{\mathrm{d} \mathtt{speed\_sensor.flange.s}\left( t \right)}{\mathrm{d}t} \\ 0 = \mathtt{position\_sensor.flange.f}\left( t \right) \\ \mathtt{position\_sensor.flange.s}\left( t \right) = \mathtt{position\_sensor.s}\left( t \right) \\ 0 = \mathtt{acceleration\_sensor.flange.f}\left( t \right) \\ \mathtt{acceleration\_sensor.v}\left( t \right) = \frac{\mathrm{d} \mathtt{acceleration\_sensor.flange.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{acceleration\_sensor.a}\left( t \right) = \frac{\mathrm{d} \mathtt{acceleration\_sensor.v}\left( t \right)}{\mathrm{d}t} \\ \end{array} \right] \end{equation} \]

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": {
    "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
          }
        }
      }
    }
  }
}
end
Flattened 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": {
    "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
          }
        }
      }
    }
  }
}
end


Test Cases

Test Case case1