Skip to content
LIBRARY
PlanarMechanics.RelativeAcceleration.md

PlanarMechanics.RelativeAcceleration

Measures relative acceleration and angular acceleration between the origins of two frame connectors.

Composes RelativePosition (FrameA) + differentiation + TransformRelativeVector + differentiation. Following Modelica convention, the transform is applied between the two differentiations so that rotating-frame effects are handled correctly. This is a sensor component: it reads kinematic quantities without exerting forces.

This component extends from PartialTwoFrameSensor

Usage

MultibodyComponents.PlanarMechanics.RelativeAcceleration()

Parameters:

NameDescriptionUnitsDefault value
resolve_in_frameMultibodyComponents.ResolveInFrame.FrameA()

Connectors

  • frame_a - Coordinate system (2-dim.) fixed to the component with one cut-force and cut-torque.

All variables are resolved in the planar world frame. (Frame2D)

  • frame_b - Coordinate system (2-dim.) fixed to the component with one cut-force and cut-torque.

All variables are resolved in the planar world frame. (Frame2D)

  • frame_resolve - Coordinate system (2-dim.) fixed to the component with one cut-force and cut-torque.

All variables are resolved in the planar world frame. (Frame2D)

  • rel_a_x - This connector represents a real signal as an output from a component (RealOutput)

  • rel_a_y - This connector represents a real signal as an output from a component (RealOutput)

  • rel_alpha - This connector represents a real signal as an output from a component (RealOutput)

Variables

NameDescriptionUnits
rpxm
rpym
rpphirad
vrpxm/s
vrpym/s
vrpphirad/s

Behavior

julia
using MultibodyComponents #hide
using ModelingToolkit #hide
@named sys = MultibodyComponents.PlanarMechanics.RelativeAcceleration() #hide
full_equations(sys) #hide
<< @example-block not executed in draft mode >>

Source

dyad
"""
Measures relative acceleration and angular acceleration between the origins of two
frame connectors.

Composes RelativePosition (FrameA) + differentiation + TransformRelativeVector +
differentiation. Following Modelica convention, the transform is applied between
the two differentiations so that rotating-frame effects are handled correctly.
This is a sensor component: it reads kinematic quantities without exerting forces.
"""
component RelativeAcceleration
  extends PartialTwoFrameSensor
  frame_resolve = Frame2D() if resolve_in_frame == MultibodyComponents.ResolveInFrame.FrameResolve() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": -50, "x2": 550, "y2": 50, "rot": 0}
      },
      "tags": []
    }
  }
  "Relative x acceleration"
  rel_a_x = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 100, "y1": 950, "x2": 200, "y2": 1050, "rot": 90}
      },
      "tags": []
    }
  }
  "Relative y acceleration"
  rel_a_y = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 950, "x2": 550, "y2": 1050, "rot": 90}
      },
      "tags": []
    }
  }
  "Relative angular acceleration"
  rel_alpha = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 800, "y1": 950, "x2": 900, "y2": 1050, "rot": 90}
      },
      "tags": []
    }
  }
  rel_pos = RelativePosition(resolve_in_frame = MultibodyComponents.ResolveInFrame.FrameA())
  transform = TransformRelativeVector(frame_in = MultibodyComponents.ResolveInFrame.FrameA(), frame_out = resolve_in_frame) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 610, "x2": 550, "y2": 710, "rot": 0}
      },
      "tags": []
    }
  }
  structural parameter resolve_in_frame::MultibodyComponents.ResolveInFrame = MultibodyComponents.ResolveInFrame.FrameA()
  variable rpx::Length
  variable rpy::Length
  variable rpphi::Angle
  variable vrpx::Velocity
  variable vrpy::Velocity
  variable vrpphi::AngularVelocity
relations
  connect(frame_a, rel_pos.frame_a)
  connect(frame_b, rel_pos.frame_b)
  connect(frame_a, transform.frame_a)
  connect(frame_b, transform.frame_b)
  if resolve_in_frame == MultibodyComponents.ResolveInFrame.FrameResolve()
    connect(frame_resolve, transform.frame_resolve)
  end
  rpx = rel_pos.rel_x
  rpy = rel_pos.rel_y
  rpphi = rel_pos.rel_phi
  vrpx = der(rpx)
  vrpy = der(rpy)
  vrpphi = der(rpphi)
  transform.x_in = der(vrpx)
  transform.y_in = der(vrpy)
  transform.phi_in = der(vrpphi)
  rel_a_x = transform.x_out
  rel_a_y = transform.y_out
  rel_alpha = transform.phi_out
metadata {
  "Dyad": {
    "icons": {"default": "dyad://MultibodyComponents/TwoFrameSensor.svg"},
    "labels": [{"label": "rel acc", "x": 500, "y": 680, "rot": 0}]
  }
}
end
Flattened Source
dyad
"""
Measures relative acceleration and angular acceleration between the origins of two
frame connectors.

Composes RelativePosition (FrameA) + differentiation + TransformRelativeVector +
differentiation. Following Modelica convention, the transform is applied between
the two differentiations so that rotating-frame effects are handled correctly.
This is a sensor component: it reads kinematic quantities without exerting forces.
"""
component RelativeAcceleration
  frame_a = Frame2D() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 50, "y1": 450, "x2": 150, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  frame_b = Frame2D() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 850, "y1": 450, "x2": 950, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  frame_resolve = Frame2D() if resolve_in_frame == MultibodyComponents.ResolveInFrame.FrameResolve() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": -50, "x2": 550, "y2": 50, "rot": 0}
      },
      "tags": []
    }
  }
  "Relative x acceleration"
  rel_a_x = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 100, "y1": 950, "x2": 200, "y2": 1050, "rot": 90}
      },
      "tags": []
    }
  }
  "Relative y acceleration"
  rel_a_y = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 950, "x2": 550, "y2": 1050, "rot": 90}
      },
      "tags": []
    }
  }
  "Relative angular acceleration"
  rel_alpha = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 800, "y1": 950, "x2": 900, "y2": 1050, "rot": 90}
      },
      "tags": []
    }
  }
  rel_pos = RelativePosition(resolve_in_frame = MultibodyComponents.ResolveInFrame.FrameA())
  transform = TransformRelativeVector(frame_in = MultibodyComponents.ResolveInFrame.FrameA(), frame_out = resolve_in_frame) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 610, "x2": 550, "y2": 710, "rot": 0}
      },
      "tags": []
    }
  }
  structural parameter resolve_in_frame::MultibodyComponents.ResolveInFrame = MultibodyComponents.ResolveInFrame.FrameA()
  variable rpx::Length
  variable rpy::Length
  variable rpphi::Angle
  variable vrpx::Velocity
  variable vrpy::Velocity
  variable vrpphi::AngularVelocity
relations
  connect(frame_a, rel_pos.frame_a)
  connect(frame_b, rel_pos.frame_b)
  connect(frame_a, transform.frame_a)
  connect(frame_b, transform.frame_b)
  if resolve_in_frame == MultibodyComponents.ResolveInFrame.FrameResolve()
    connect(frame_resolve, transform.frame_resolve)
  end
  rpx = rel_pos.rel_x
  rpy = rel_pos.rel_y
  rpphi = rel_pos.rel_phi
  vrpx = der(rpx)
  vrpy = der(rpy)
  vrpphi = der(rpphi)
  transform.x_in = der(vrpx)
  transform.y_in = der(vrpy)
  transform.phi_in = der(vrpphi)
  rel_a_x = transform.x_out
  rel_a_y = transform.y_out
  rel_alpha = transform.phi_out
metadata {
  "Dyad": {
    "icons": {"default": "dyad://MultibodyComponents/TwoFrameSensor.svg"},
    "labels": [{"label": "rel acc", "x": 500, "y": 680, "rot": 0}]
  }
}
end


Test Cases

No test cases defined.