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

[rpx(t)=relpos.rel_x(t)rpy(t)=relpos.rel_y(t)rpphi(t)=relpos.rel_phi(t)vrpx(t)=drpx(t)dtvrpy(t)=drpy(t)dtvrpphi(t)=drpphi(t)dttransform.xin(t)=dvrpx(t)dttransform.yin(t)=dvrpy(t)dttransform.phiin(t)=dvrpphi(t)dtrela_x(t)=transform.xout(t)rela_y(t)=transform.yout(t)relalpha(t)=transform.phiout(t)connect(framea,relpos+frame_a)connect(frameb,relpos+frame_b)connect(framea,transform+framea)connect(frameb,transform+frameb)relpos.rel_x(t)=relpos.pos.rel_x(t)relpos.rel_y(t)=relpos.pos.rel_y(t)relpos.rel_phi(t)=relpos.pos.rel_phi(t)connect(framea,pos+framea)connect(frameb,pos+frameb)relpos.pos.frame_a.fx(t)=0relpos.pos.frame_a.fy(t)=0relpos.pos.frame_a.tau(t)=0relpos.pos.frame_b.fx(t)=0relpos.pos.frame_b.fy(t)=0relpos.pos.frame_b.tau(t)=0arrayliteral([3],relpos.pos.rel_x(t),relpos.pos.rel_y(t),relpos.pos.rel_phi(t))=relpos.pos.r(t)relpos.pos.rotation_matrix(t)=arrayliteral([33],cos(relpos.pos.frame_a.phi(t)),sin(relpos.pos.frame_a.phi(t)),0,sin(relpos.pos.frame_a.phi(t)),cos(relpos.pos.frame_a.phi(t)),0,0,0,1)relpos.pos.r(t)=transpose(relpos.pos.rotation_matrix(t))arrayliteral([3],relpos.pos.frame_b.x(t)relpos.pos.frame_a.x(t),relpos.pos.frame_b.y(t)relpos.pos.frame_a.y(t),relpos.pos.frame_a.phi(t)+relpos.pos.frame_b.phi(t))transform.framea.fx(t)=0transform.framea.fy(t)=0transform.framea.tau(t)=0transform.frameb.fx(t)=0transform.frameb.fy(t)=0transform.frameb.tau(t)=0transform.xout(t)=transform.xin(t)transform.yout(t)=transform.yin(t)transform.phiout(t)=transform.phiin(t)]

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.