Skip to content
LIBRARY
Planar.md

Planar

Planar joint: motion in a plane plus rotation about the plane normal.

Provides 2 translational DOF (in the plane) and 1 rotational DOF (about n). The plane is defined by its normal n and a direction n_x in the plane. Composed of two Prismatic joints and one Revolute joint.

This component extends from PartialTwoFrames This component extends from Renderable

Usage

MultibodyComponents.Planar(render=true, color=world_default_joint_color(), specular_coefficient=1.5)

Parameters:

NameDescriptionUnitsDefault value
nPlane normal, resolved in frame_a[0, 0, 1]
n_xDirection of x-axis in the plane, resolved in frame_a (must be orthogonal to n)[1, 0, 0]
statePriority3
rendertrue
colorworld_defau...int_color()
specular_coefficient1.5

Connectors

  • frame_a - Frame3D is the fundamental 3D connector used for 6DOF motion. Most components have one or several Frame

connectors that can be connected together (Frame3D)

  • frame_b - Frame3D is the fundamental 3D connector used for 6DOF motion. Most components have one or several Frame

connectors that can be connected together (Frame3D)

Variables

NameDescriptionUnits
s_xTranslation along x-axis in planem
s_yTranslation along y-axis in planem
phiRotation angle around plane normalrad
v_xVelocity along x-axism/s
v_yVelocity along y-axism/s
wAngular velocityrad/s
a_xAcceleration along x-axism/s2
a_yAcceleration along y-axism/s2
wdAngular accelerationrad/s2

Behavior

Source

dyad
"""
Planar joint: motion in a plane plus rotation about the plane normal.

Provides 2 translational DOF (in the plane) and 1 rotational DOF (about `n`).
The plane is defined by its normal `n` and a direction `n_x` in the plane.
Composed of two `Prismatic` joints and one `Revolute` joint.
"""
component Planar
  extends PartialTwoFrames()
  extends Renderable(color = world_default_joint_color())
  prismatic_x = Prismatic(final n = cross(cross(n, n_x), n), render = render)
  prismatic_y = Prismatic(final n = cross(n, n_x), render = render)
  revolute = Revolute(final n = n, rooted = RootedFrame.FrameB(), render = render)
  "Plane normal, resolved in frame_a"
  structural parameter n::Real[3] = [0, 0, 1]
  "Direction of x-axis in the plane, resolved in frame_a (must be orthogonal to n)"
  structural parameter n_x::Real[3] = [1, 0, 0]
  structural parameter statePriority::Integer = 3
  "Translation along x-axis in plane"
  variable s_x::Length(statePriority = statePriority)
  "Translation along y-axis in plane"
  variable s_y::Length(statePriority = statePriority)
  "Rotation angle around plane normal"
  variable phi::Angle(statePriority = statePriority)
  "Velocity along x-axis"
  variable v_x::Velocity(statePriority = statePriority)
  "Velocity along y-axis"
  variable v_y::Velocity(statePriority = statePriority)
  "Angular velocity"
  variable w::AngularVelocity(statePriority = statePriority)
  "Acceleration along x-axis"
  variable a_x::Acceleration
  "Acceleration along y-axis"
  variable a_y::Acceleration
  "Angular acceleration"
  variable wd::AngularAcceleration
relations
  s_x = prismatic_x.s
  s_y = prismatic_y.s
  phi = revolute.phi
  v_x = der(s_x)
  v_y = der(s_y)
  w = der(phi)
  a_x = der(v_x)
  a_y = der(v_y)
  wd = der(w)
  connect(frame_a, prismatic_x.frame_a)
  connect(prismatic_x.frame_b, prismatic_y.frame_a)
  connect(prismatic_y.frame_b, revolute.frame_a)
  connect(revolute.frame_b, frame_b)
metadata {
  "Dyad": {
    "icons": {"default": "dyad://MultibodyComponents/PlanarJoint.svg"},
    "labels": [
      {
        "label": "$(instance)",
        "x": 500,
        "y": 200,
        "rot": 0,
        "attrs": {"font-size": "160"}
      }
    ]
  }
}
end
Flattened Source
dyad
"""
Planar joint: motion in a plane plus rotation about the plane normal.

Provides 2 translational DOF (in the plane) and 1 rotational DOF (about `n`).
The plane is defined by its normal `n` and a direction `n_x` in the plane.
Composed of two `Prismatic` joints and one `Revolute` joint.
"""
component Planar
  frame_a = Frame3D() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": -50, "y1": 450, "x2": 50, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  frame_b = Frame3D() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 950, "y1": 450, "x2": 1050, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  parameter render::Boolean = true
  parameter color::Real[4] = [0.5, 0.5, 0.5, 1.0]
  parameter specular_coefficient::Real = 1.5
  prismatic_x = Prismatic(final n = cross(cross(n, n_x), n), render = render)
  prismatic_y = Prismatic(final n = cross(n, n_x), render = render)
  revolute = Revolute(final n = n, rooted = RootedFrame.FrameB(), render = render)
  "Plane normal, resolved in frame_a"
  structural parameter n::Real[3] = [0, 0, 1]
  "Direction of x-axis in the plane, resolved in frame_a (must be orthogonal to n)"
  structural parameter n_x::Real[3] = [1, 0, 0]
  structural parameter statePriority::Integer = 3
  "Translation along x-axis in plane"
  variable s_x::Length(statePriority = statePriority)
  "Translation along y-axis in plane"
  variable s_y::Length(statePriority = statePriority)
  "Rotation angle around plane normal"
  variable phi::Angle(statePriority = statePriority)
  "Velocity along x-axis"
  variable v_x::Velocity(statePriority = statePriority)
  "Velocity along y-axis"
  variable v_y::Velocity(statePriority = statePriority)
  "Angular velocity"
  variable w::AngularVelocity(statePriority = statePriority)
  "Acceleration along x-axis"
  variable a_x::Acceleration
  "Acceleration along y-axis"
  variable a_y::Acceleration
  "Angular acceleration"
  variable wd::AngularAcceleration
relations
  s_x = prismatic_x.s
  s_y = prismatic_y.s
  phi = revolute.phi
  v_x = der(s_x)
  v_y = der(s_y)
  w = der(phi)
  a_x = der(v_x)
  a_y = der(v_y)
  wd = der(w)
  connect(frame_a, prismatic_x.frame_a)
  connect(prismatic_x.frame_b, prismatic_y.frame_a)
  connect(prismatic_y.frame_b, revolute.frame_a)
  connect(revolute.frame_b, frame_b)
metadata {
  "Dyad": {
    "icons": {"default": "dyad://MultibodyComponents/PlanarJoint.svg"},
    "labels": [
      {
        "label": "$(instance)",
        "x": 500,
        "y": 200,
        "rot": 0,
        "attrs": {"font-size": "160"}
      }
    ]
  }
}
end


Test Cases

No test cases defined.

  • Examples

  • Experiments

  • Analyses