Skip to content
LIBRARY
PlanarMechanics.AbsoluteAcceleration.md

PlanarMechanics.AbsoluteAcceleration

Measures absolute acceleration and angular acceleration of the origin of a frame connector.

Composes BasicAbsolutePosition (world) + double differentiation + TransformAbsoluteVector. Uses intermediate velocity variables to avoid nested der(der(...)). This is a sensor component: it reads kinematic quantities without exerting forces.

Usage

MultibodyComponents.PlanarMechanics.AbsoluteAcceleration()

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_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)

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

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

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

Variables

NameDescriptionUnits
pxm
pym
pphirad
vxm/s
vym/s
vphirad/s

Behavior

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

Source

dyad
"""
Measures absolute acceleration and angular acceleration of the origin of a frame connector.

Composes BasicAbsolutePosition (world) + double differentiation + TransformAbsoluteVector.
Uses intermediate velocity variables to avoid nested `der(der(...))`. This is a sensor
component: it reads kinematic quantities without exerting forces.
"""
component AbsoluteAcceleration
  frame_a = Frame2D() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": -100, "y1": 450, "x2": 0, "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": []
    }
  }
  "x acceleration"
  a_x = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 150, "x2": 1060, "y2": 250, "rot": 0}
      },
      "tags": []
    }
  }
  "y acceleration"
  a_y = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 450, "x2": 1060, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "angular acceleration"
  alpha = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 750, "x2": 1060, "y2": 850, "rot": 0}
      },
      "tags": []
    }
  }
  pos = BasicAbsolutePosition(resolve_in_frame = MultibodyComponents.ResolveInFrame.World())
  transform = TransformAbsoluteVector(frame_in = MultibodyComponents.ResolveInFrame.World(), frame_out = resolve_in_frame) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 630, "x2": 550, "y2": 730, "rot": 0}
      },
      "tags": []
    }
  }
  structural parameter resolve_in_frame::MultibodyComponents.ResolveInFrame = MultibodyComponents.ResolveInFrame.FrameA()
  variable px::Length
  variable py::Length
  variable pphi::Angle
  variable vx::Velocity
  variable vy::Velocity
  variable vphi::AngularVelocity
relations
  connect(frame_a, pos.frame_a)
  connect(frame_a, transform.frame_a)
  if resolve_in_frame == MultibodyComponents.ResolveInFrame.FrameResolve()
    connect(frame_resolve, transform.frame_resolve)
  end
  px = pos.x
  py = pos.y
  pphi = pos.phi
  vx = der(px)
  vy = der(py)
  vphi = der(pphi)
  transform.x_in = der(vx)
  transform.y_in = der(vy)
  transform.phi_in = der(vphi)
  a_x = transform.x_out
  a_y = transform.y_out
  alpha = transform.phi_out
metadata {
  "Dyad": {"icons": {"default": "dyad://MultibodyComponents/AbsoluteAcceleration.svg"}}
}
end
Flattened Source
dyad
"""
Measures absolute acceleration and angular acceleration of the origin of a frame connector.

Composes BasicAbsolutePosition (world) + double differentiation + TransformAbsoluteVector.
Uses intermediate velocity variables to avoid nested `der(der(...))`. This is a sensor
component: it reads kinematic quantities without exerting forces.
"""
component AbsoluteAcceleration
  frame_a = Frame2D() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": -100, "y1": 450, "x2": 0, "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": []
    }
  }
  "x acceleration"
  a_x = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 150, "x2": 1060, "y2": 250, "rot": 0}
      },
      "tags": []
    }
  }
  "y acceleration"
  a_y = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 450, "x2": 1060, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "angular acceleration"
  alpha = RealOutput() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 750, "x2": 1060, "y2": 850, "rot": 0}
      },
      "tags": []
    }
  }
  pos = BasicAbsolutePosition(resolve_in_frame = MultibodyComponents.ResolveInFrame.World())
  transform = TransformAbsoluteVector(frame_in = MultibodyComponents.ResolveInFrame.World(), frame_out = resolve_in_frame) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 630, "x2": 550, "y2": 730, "rot": 0}
      },
      "tags": []
    }
  }
  structural parameter resolve_in_frame::MultibodyComponents.ResolveInFrame = MultibodyComponents.ResolveInFrame.FrameA()
  variable px::Length
  variable py::Length
  variable pphi::Angle
  variable vx::Velocity
  variable vy::Velocity
  variable vphi::AngularVelocity
relations
  connect(frame_a, pos.frame_a)
  connect(frame_a, transform.frame_a)
  if resolve_in_frame == MultibodyComponents.ResolveInFrame.FrameResolve()
    connect(frame_resolve, transform.frame_resolve)
  end
  px = pos.x
  py = pos.y
  pphi = pos.phi
  vx = der(px)
  vy = der(py)
  vphi = der(pphi)
  transform.x_in = der(vx)
  transform.y_in = der(vy)
  transform.phi_in = der(vphi)
  a_x = transform.x_out
  a_y = transform.y_out
  alpha = transform.phi_out
metadata {
  "Dyad": {"icons": {"default": "dyad://MultibodyComponents/AbsoluteAcceleration.svg"}}
}
end


Test Cases

No test cases defined.