Skip to content
LIBRARY
PlanarMechanics.RelativeVelocity.md

PlanarMechanics.RelativeVelocity

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

Composes RelativePosition (FrameA) + differentiation + TransformRelativeVector to resolve the result in any supported frame. This is a sensor component: it reads kinematic quantities without exerting forces.

This component extends from PartialTwoFrameSensor

Usage

MultibodyComponents.PlanarMechanics.RelativeVelocity()

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_v_x - This connector represents a real signal as an output from a component (RealOutput)

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

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

Variables

NameDescriptionUnits
rpxm
rpym
rpphirad

Behavior

[rpx(t)=relpos.rel_x(t)rpy(t)=relpos.rel_y(t)rpphi(t)=relpos.rel_phi(t)transform.xin(t)=drpx(t)dttransform.yin(t)=drpy(t)dttransform.phiin(t)=drpphi(t)dtrelv_x(t)=transform.xout(t)relv_y(t)=transform.yout(t)relw(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 velocity and angular velocity between the origins of two frame connectors.

Composes RelativePosition (FrameA) + differentiation + TransformRelativeVector
to resolve the result in any supported frame. This is a sensor component: it reads
kinematic quantities without exerting forces.
"""
component RelativeVelocity
  extends PartialTwoFrameSensor
  frame_resolve = Frame2D() if resolve_in_frame == MultibodyComponents.ResolveInFrame.FrameResolve()
  "Relative x velocity"
  rel_v_x = RealOutput() {}
  "Relative y velocity"
  rel_v_y = RealOutput() {}
  "Relative angular velocity"
  rel_w = RealOutput() {}
  rel_pos = RelativePosition(resolve_in_frame = MultibodyComponents.ResolveInFrame.FrameA())
  transform = TransformRelativeVector(frame_in = MultibodyComponents.ResolveInFrame.FrameA(), frame_out = resolve_in_frame)
  structural parameter resolve_in_frame::MultibodyComponents.ResolveInFrame = MultibodyComponents.ResolveInFrame.FrameA()
  variable rpx::Length
  variable rpy::Length
  variable rpphi::Angle
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
  transform.x_in = der(rpx)
  transform.y_in = der(rpy)
  transform.phi_in = der(rpphi)
  rel_v_x = transform.x_out
  rel_v_y = transform.y_out
  rel_w = transform.phi_out
metadata {
  "Dyad": {
    "icons": {"default": "dyad://MultibodyComponents/TwoFrameSensor.svg"},
    "labels": [{"label": "rel vel", "x": 500, "y": 680, "rot": 0}]
  }
}
end
Flattened Source
dyad
"""
Measures relative velocity and angular velocity between the origins of two frame connectors.

Composes RelativePosition (FrameA) + differentiation + TransformRelativeVector
to resolve the result in any supported frame. This is a sensor component: it reads
kinematic quantities without exerting forces.
"""
component RelativeVelocity
  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()
  "Relative x velocity"
  rel_v_x = RealOutput() {}
  "Relative y velocity"
  rel_v_y = RealOutput() {}
  "Relative angular velocity"
  rel_w = RealOutput() {}
  rel_pos = RelativePosition(resolve_in_frame = MultibodyComponents.ResolveInFrame.FrameA())
  transform = TransformRelativeVector(frame_in = MultibodyComponents.ResolveInFrame.FrameA(), frame_out = resolve_in_frame)
  structural parameter resolve_in_frame::MultibodyComponents.ResolveInFrame = MultibodyComponents.ResolveInFrame.FrameA()
  variable rpx::Length
  variable rpy::Length
  variable rpphi::Angle
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
  transform.x_in = der(rpx)
  transform.y_in = der(rpy)
  transform.phi_in = der(rpphi)
  rel_v_x = transform.x_out
  rel_v_y = transform.y_out
  rel_w = transform.phi_out
metadata {
  "Dyad": {
    "icons": {"default": "dyad://MultibodyComponents/TwoFrameSensor.svg"},
    "labels": [{"label": "rel vel", "x": 500, "y": 680, "rot": 0}]
  }
}
end


Test Cases

No test cases defined.