Skip to content
LIBRARY
tests.JointRRRTest.md

tests.JointRRRTest

JointRRR test

Ported from the Multibody.jl test suite (TestRRR). Identical mechanism to the JointUSR test, but the loop is closed with a JointRRR joint assembly. The world, the first revolute side of j1, and a fixed translation share a node; the fixed translation drives a prismatic joint whose frame_b connects to the last revolute side of j1. A body hangs from the middle frame frame_im.

The loop is solved analytically by JointRRR, so the only state is the prismatic coordinate. At t = 1 s the prismatic displacement should be about -2.8 (validated against OpenModelica in Multibody.jl).

Usage

MultibodyComponents.tests.JointRRRTest()

Behavior

Source

dyad
"""
# JointRRR test

Ported from the Multibody.jl test suite (`TestRRR`). Identical mechanism to the
`JointUSR` test, but the loop is closed with a `JointRRR` joint assembly. The
world, the first revolute side of `j1`, and a fixed translation share a node;
the fixed translation drives a prismatic joint whose `frame_b` connects to the
last revolute side of `j1`. A body hangs from the middle frame `frame_im`.

The loop is solved analytically by `JointRRR`, so the only state is the
prismatic coordinate. At t = 1 s the prismatic displacement should be about
-2.8 (validated against OpenModelica in Multibody.jl).
"""
example component JointRRRTest
  world = MultibodyComponents.World() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 120, "x2": 120, "y2": 220, "rot": 0}
      },
      "tags": []
    }
  }
  j1 = MultibodyComponents.JointRRR(positive_branch = true) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 400, "y1": 120, "x2": 500, "y2": 220, "rot": 0}
      },
      "tags": []
    }
  }
  fixed = MultibodyComponents.FixedTranslation(r = [1, 0, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 145, "y1": 226, "x2": 245, "y2": 326, "rot": 0}
      },
      "tags": []
    }
  }
  b1 = MultibodyComponents.Body(m = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 525, "y1": 20, "x2": 625, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
  p1 = MultibodyComponents.Prismatic(n = [1, 0, 0], statePriority = 100, s(initial = 0), v(initial = 0)) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 270, "y1": 226, "x2": 370, "y2": 326, "rot": 0}
      },
      "tags": []
    }
  }
relations
  connect(world.frame_b, j1.frame_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(world.frame_b, fixed.frame_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [], "E": -1}, {"S": -1, "M": [{"x": 135, "y": 276}], "E": 2}],
      "junctions": [{"x": 135, "y": 170}],
      "renderStyle": "standard"
    }
  }
  connect(fixed.frame_b, p1.frame_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(p1.frame_b, j1.frame_b) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 515, "y": 276}, {"x": 515, "y": 170}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(j1.frame_im, b1.frame_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 450, "y": 170}, {"x": 450, "y": 70}], "E": 2}],
      "renderStyle": "standard"
    }
  }
end
Flattened Source
dyad
"""
# JointRRR test

Ported from the Multibody.jl test suite (`TestRRR`). Identical mechanism to the
`JointUSR` test, but the loop is closed with a `JointRRR` joint assembly. The
world, the first revolute side of `j1`, and a fixed translation share a node;
the fixed translation drives a prismatic joint whose `frame_b` connects to the
last revolute side of `j1`. A body hangs from the middle frame `frame_im`.

The loop is solved analytically by `JointRRR`, so the only state is the
prismatic coordinate. At t = 1 s the prismatic displacement should be about
-2.8 (validated against OpenModelica in Multibody.jl).
"""
example component JointRRRTest
  world = MultibodyComponents.World() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 120, "x2": 120, "y2": 220, "rot": 0}
      },
      "tags": []
    }
  }
  j1 = MultibodyComponents.JointRRR(positive_branch = true) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 400, "y1": 120, "x2": 500, "y2": 220, "rot": 0}
      },
      "tags": []
    }
  }
  fixed = MultibodyComponents.FixedTranslation(r = [1, 0, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 145, "y1": 226, "x2": 245, "y2": 326, "rot": 0}
      },
      "tags": []
    }
  }
  b1 = MultibodyComponents.Body(m = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 525, "y1": 20, "x2": 625, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
  p1 = MultibodyComponents.Prismatic(n = [1, 0, 0], statePriority = 100, s(initial = 0), v(initial = 0)) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 270, "y1": 226, "x2": 370, "y2": 326, "rot": 0}
      },
      "tags": []
    }
  }
relations
  connect(world.frame_b, j1.frame_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(world.frame_b, fixed.frame_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [], "E": -1}, {"S": -1, "M": [{"x": 135, "y": 276}], "E": 2}],
      "junctions": [{"x": 135, "y": 170}],
      "renderStyle": "standard"
    }
  }
  connect(fixed.frame_b, p1.frame_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(p1.frame_b, j1.frame_b) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 515, "y": 276}, {"x": 515, "y": 170}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(j1.frame_im, b1.frame_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 450, "y": 170}, {"x": 450, "y": 70}], "E": 2}],
      "renderStyle": "standard"
    }
  }
metadata {}
end


Test Cases

No test cases defined.

  • Examples

  • Experiments

  • Analyses