number: 362
slug: oblique-groove-traverse
name: Alternating traverse by a pin in an oblique groove
brown: "Alternating traverse of upper shaft and its drum, produced by pin on the end of the shaft working in oblique groove in the lower cylinder."
units: cm
sim: {timestep: 0.0002, integrator: implicitfast, iterations: 100, solver: PGS, multiccd: false, duration_s: 8, floor: false}
bodies:
  # the lower cylinder, with the two ridges that make the oblique groove
  - id: cylinder
    shape: part
    pos: [0, 0, 0]
    density: 2000
    friction: 0.1
    color: "#d9cfb6"
    pieces:
      - {kind: disc, center: [0, 0], radius: 5.0, inner: 0.6, y: [-6.0, 6.0], collide: 0}
      - {kind: rod, from: [0, -12.0, 0], to: [0, 12.0, 0], radius: 0.6, collide: 0, color: "#8f8a80"}
      - {kind: disc, center: [0, 0], radius: 4.0, inner: 0.6, y: [-11.0, -9.6], collide: 0, color: "#9c958a"}
      - {kind: rod, from: [5.3, 0.75, 0.0], to: [5.2798, 1.0115, 0.4619], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.2798, 1.0115, 0.4619], to: [5.2195, 1.2709, 0.9203], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.2195, 1.2709, 0.9203], to: [5.1194, 1.5265, 1.3717], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.1194, 1.5265, 1.3717], to: [4.9804, 1.7761, 1.8127], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.9804, 1.7761, 1.8127], to: [4.8034, 2.0179, 2.2399], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.8034, 2.0179, 2.2399], to: [4.5899, 2.25, 2.65], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.5899, 2.25, 2.65], to: [4.3415, 2.4707, 3.04], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.3415, 2.4707, 3.04], to: [4.06, 2.6784, 3.4068], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.06, 2.6784, 3.4068], to: [3.7477, 2.8713, 3.7477], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.7477, 2.8713, 3.7477], to: [3.4068, 3.0481, 4.06], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.4068, 3.0481, 4.06], to: [3.04, 3.2075, 4.3415], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.04, 3.2075, 4.3415], to: [2.65, 3.3481, 4.5899], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [2.65, 3.3481, 4.5899], to: [2.2399, 3.4689, 4.8034], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [2.2399, 3.4689, 4.8034], to: [1.8127, 3.5691, 4.9804], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [1.8127, 3.5691, 4.9804], to: [1.3717, 3.6478, 5.1194], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [1.3717, 3.6478, 5.1194], to: [0.9203, 3.7044, 5.2195], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.9203, 3.7044, 5.2195], to: [0.4619, 3.7386, 5.2798], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.4619, 3.7386, 5.2798], to: [0.0, 3.75, 5.3], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.0, 3.75, 5.3], to: [-0.4619, 3.7386, 5.2798], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.4619, 3.7386, 5.2798], to: [-0.9203, 3.7044, 5.2195], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.9203, 3.7044, 5.2195], to: [-1.3717, 3.6478, 5.1194], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-1.3717, 3.6478, 5.1194], to: [-1.8127, 3.5691, 4.9804], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-1.8127, 3.5691, 4.9804], to: [-2.2399, 3.4689, 4.8034], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-2.2399, 3.4689, 4.8034], to: [-2.65, 3.3481, 4.5899], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-2.65, 3.3481, 4.5899], to: [-3.04, 3.2075, 4.3415], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.04, 3.2075, 4.3415], to: [-3.4068, 3.0481, 4.06], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.4068, 3.0481, 4.06], to: [-3.7477, 2.8713, 3.7477], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.7477, 2.8713, 3.7477], to: [-4.06, 2.6784, 3.4068], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.06, 2.6784, 3.4068], to: [-4.3415, 2.4707, 3.04], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.3415, 2.4707, 3.04], to: [-4.5899, 2.25, 2.65], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.5899, 2.25, 2.65], to: [-4.8034, 2.0179, 2.2399], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.8034, 2.0179, 2.2399], to: [-4.9804, 1.7761, 1.8127], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.9804, 1.7761, 1.8127], to: [-5.1194, 1.5265, 1.3717], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.1194, 1.5265, 1.3717], to: [-5.2195, 1.2709, 0.9203], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.2195, 1.2709, 0.9203], to: [-5.2798, 1.0115, 0.4619], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.2798, 1.0115, 0.4619], to: [-5.3, 0.75, 0.0], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.3, 0.75, 0.0], to: [-5.2798, 0.4885, -0.4619], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.2798, 0.4885, -0.4619], to: [-5.2195, 0.2291, -0.9203], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.2195, 0.2291, -0.9203], to: [-5.1194, -0.0265, -1.3717], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.1194, -0.0265, -1.3717], to: [-4.9804, -0.2761, -1.8127], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.9804, -0.2761, -1.8127], to: [-4.8034, -0.5179, -2.2399], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.8034, -0.5179, -2.2399], to: [-4.5899, -0.75, -2.65], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.5899, -0.75, -2.65], to: [-4.3415, -0.9707, -3.04], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.3415, -0.9707, -3.04], to: [-4.06, -1.1784, -3.4068], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.06, -1.1784, -3.4068], to: [-3.7477, -1.3713, -3.7477], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.7477, -1.3713, -3.7477], to: [-3.4068, -1.5481, -4.06], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.4068, -1.5481, -4.06], to: [-3.04, -1.7075, -4.3415], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.04, -1.7075, -4.3415], to: [-2.65, -1.8481, -4.5899], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-2.65, -1.8481, -4.5899], to: [-2.2399, -1.9689, -4.8034], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-2.2399, -1.9689, -4.8034], to: [-1.8127, -2.0691, -4.9804], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-1.8127, -2.0691, -4.9804], to: [-1.3717, -2.1478, -5.1194], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-1.3717, -2.1478, -5.1194], to: [-0.9203, -2.2044, -5.2195], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.9203, -2.2044, -5.2195], to: [-0.4619, -2.2386, -5.2798], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.4619, -2.2386, -5.2798], to: [-0.0, -2.25, -5.3], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.0, -2.25, -5.3], to: [0.4619, -2.2386, -5.2798], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.4619, -2.2386, -5.2798], to: [0.9203, -2.2044, -5.2195], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.9203, -2.2044, -5.2195], to: [1.3717, -2.1478, -5.1194], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [1.3717, -2.1478, -5.1194], to: [1.8127, -2.0691, -4.9804], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [1.8127, -2.0691, -4.9804], to: [2.2399, -1.9689, -4.8034], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [2.2399, -1.9689, -4.8034], to: [2.65, -1.8481, -4.5899], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [2.65, -1.8481, -4.5899], to: [3.04, -1.7075, -4.3415], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.04, -1.7075, -4.3415], to: [3.4068, -1.5481, -4.06], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.4068, -1.5481, -4.06], to: [3.7477, -1.3713, -3.7477], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.7477, -1.3713, -3.7477], to: [4.06, -1.1784, -3.4068], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.06, -1.1784, -3.4068], to: [4.3415, -0.9707, -3.04], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.3415, -0.9707, -3.04], to: [4.5899, -0.75, -2.65], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.5899, -0.75, -2.65], to: [4.8034, -0.5179, -2.2399], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.8034, -0.5179, -2.2399], to: [4.9804, -0.2761, -1.8127], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.9804, -0.2761, -1.8127], to: [5.1194, -0.0265, -1.3717], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.1194, -0.0265, -1.3717], to: [5.2195, 0.2291, -0.9203], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.2195, 0.2291, -0.9203], to: [5.2798, 0.4885, -0.4619], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.2798, 0.4885, -0.4619], to: [5.3, 0.75, -0.0], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.3, -0.75, 0.0], to: [5.2798, -0.4885, 0.4619], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.2798, -0.4885, 0.4619], to: [5.2195, -0.2291, 0.9203], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.2195, -0.2291, 0.9203], to: [5.1194, 0.0265, 1.3717], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.1194, 0.0265, 1.3717], to: [4.9804, 0.2761, 1.8127], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.9804, 0.2761, 1.8127], to: [4.8034, 0.5179, 2.2399], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.8034, 0.5179, 2.2399], to: [4.5899, 0.75, 2.65], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.5899, 0.75, 2.65], to: [4.3415, 0.9707, 3.04], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.3415, 0.9707, 3.04], to: [4.06, 1.1784, 3.4068], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.06, 1.1784, 3.4068], to: [3.7477, 1.3713, 3.7477], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.7477, 1.3713, 3.7477], to: [3.4068, 1.5481, 4.06], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.4068, 1.5481, 4.06], to: [3.04, 1.7075, 4.3415], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.04, 1.7075, 4.3415], to: [2.65, 1.8481, 4.5899], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [2.65, 1.8481, 4.5899], to: [2.2399, 1.9689, 4.8034], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [2.2399, 1.9689, 4.8034], to: [1.8127, 2.0691, 4.9804], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [1.8127, 2.0691, 4.9804], to: [1.3717, 2.1478, 5.1194], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [1.3717, 2.1478, 5.1194], to: [0.9203, 2.2044, 5.2195], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.9203, 2.2044, 5.2195], to: [0.4619, 2.2386, 5.2798], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.4619, 2.2386, 5.2798], to: [0.0, 2.25, 5.3], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.0, 2.25, 5.3], to: [-0.4619, 2.2386, 5.2798], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.4619, 2.2386, 5.2798], to: [-0.9203, 2.2044, 5.2195], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.9203, 2.2044, 5.2195], to: [-1.3717, 2.1478, 5.1194], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-1.3717, 2.1478, 5.1194], to: [-1.8127, 2.0691, 4.9804], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-1.8127, 2.0691, 4.9804], to: [-2.2399, 1.9689, 4.8034], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-2.2399, 1.9689, 4.8034], to: [-2.65, 1.8481, 4.5899], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-2.65, 1.8481, 4.5899], to: [-3.04, 1.7075, 4.3415], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.04, 1.7075, 4.3415], to: [-3.4068, 1.5481, 4.06], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.4068, 1.5481, 4.06], to: [-3.7477, 1.3713, 3.7477], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.7477, 1.3713, 3.7477], to: [-4.06, 1.1784, 3.4068], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.06, 1.1784, 3.4068], to: [-4.3415, 0.9707, 3.04], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.3415, 0.9707, 3.04], to: [-4.5899, 0.75, 2.65], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.5899, 0.75, 2.65], to: [-4.8034, 0.5179, 2.2399], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.8034, 0.5179, 2.2399], to: [-4.9804, 0.2761, 1.8127], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.9804, 0.2761, 1.8127], to: [-5.1194, 0.0265, 1.3717], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.1194, 0.0265, 1.3717], to: [-5.2195, -0.2291, 0.9203], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.2195, -0.2291, 0.9203], to: [-5.2798, -0.4885, 0.4619], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.2798, -0.4885, 0.4619], to: [-5.3, -0.75, 0.0], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.3, -0.75, 0.0], to: [-5.2798, -1.0115, -0.4619], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.2798, -1.0115, -0.4619], to: [-5.2195, -1.2709, -0.9203], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.2195, -1.2709, -0.9203], to: [-5.1194, -1.5265, -1.3717], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-5.1194, -1.5265, -1.3717], to: [-4.9804, -1.7761, -1.8127], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.9804, -1.7761, -1.8127], to: [-4.8034, -2.0179, -2.2399], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.8034, -2.0179, -2.2399], to: [-4.5899, -2.25, -2.65], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.5899, -2.25, -2.65], to: [-4.3415, -2.4707, -3.04], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.3415, -2.4707, -3.04], to: [-4.06, -2.6784, -3.4068], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-4.06, -2.6784, -3.4068], to: [-3.7477, -2.8713, -3.7477], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.7477, -2.8713, -3.7477], to: [-3.4068, -3.0481, -4.06], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.4068, -3.0481, -4.06], to: [-3.04, -3.2075, -4.3415], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-3.04, -3.2075, -4.3415], to: [-2.65, -3.3481, -4.5899], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-2.65, -3.3481, -4.5899], to: [-2.2399, -3.4689, -4.8034], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-2.2399, -3.4689, -4.8034], to: [-1.8127, -3.5691, -4.9804], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-1.8127, -3.5691, -4.9804], to: [-1.3717, -3.6478, -5.1194], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-1.3717, -3.6478, -5.1194], to: [-0.9203, -3.7044, -5.2195], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.9203, -3.7044, -5.2195], to: [-0.4619, -3.7386, -5.2798], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.4619, -3.7386, -5.2798], to: [-0.0, -3.75, -5.3], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [-0.0, -3.75, -5.3], to: [0.4619, -3.7386, -5.2798], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.4619, -3.7386, -5.2798], to: [0.9203, -3.7044, -5.2195], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [0.9203, -3.7044, -5.2195], to: [1.3717, -3.6478, -5.1194], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [1.3717, -3.6478, -5.1194], to: [1.8127, -3.5691, -4.9804], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [1.8127, -3.5691, -4.9804], to: [2.2399, -3.4689, -4.8034], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [2.2399, -3.4689, -4.8034], to: [2.65, -3.3481, -4.5899], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [2.65, -3.3481, -4.5899], to: [3.04, -3.2075, -4.3415], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.04, -3.2075, -4.3415], to: [3.4068, -3.0481, -4.06], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.4068, -3.0481, -4.06], to: [3.7477, -2.8713, -3.7477], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [3.7477, -2.8713, -3.7477], to: [4.06, -2.6784, -3.4068], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.06, -2.6784, -3.4068], to: [4.3415, -2.4707, -3.04], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.3415, -2.4707, -3.04], to: [4.5899, -2.25, -2.65], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.5899, -2.25, -2.65], to: [4.8034, -2.0179, -2.2399], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.8034, -2.0179, -2.2399], to: [4.9804, -1.7761, -1.8127], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [4.9804, -1.7761, -1.8127], to: [5.1194, -1.5265, -1.3717], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.1194, -1.5265, -1.3717], to: [5.2195, -1.2709, -0.9203], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.2195, -1.2709, -0.9203], to: [5.2798, -1.0115, -0.4619], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
      - {kind: rod, from: [5.2798, -1.0115, -0.4619], to: [5.3, -0.75, -0.0], radius: 0.3, capsule: true, collide: 1, color: "#9a8f78"}
  # the upper shaft and its drum, sliding to and fro in its bearings; the pin hangs from an arm on its end
  - id: upper
    shape: part
    pos: [0, 3.0, 9.0]
    density: 2000
    friction: 0.1
    color: "#c9b48a"
    pieces:
      - {kind: rod, from: [0, -11.0, 9.0], to: [0, 17.0, 9.0], radius: 0.5, collide: 0, color: "#8f8a80"}
      - {kind: disc, center: [0, 9.0], radius: 2.5, inner: 0.5, y: [-6.0, 2.0], collide: 0}
      - {kind: rod, from: [0, 3.0, 9.0], to: [0, 3.0, 5.25], radius: 0.3, capsule: true, collide: 2, color: "#6f6a60"}
      - {kind: disc, center: [0, 9.0], radius: 0.9, y: [2.6, 3.4], collide: 0, color: "#8f8a80"}
  - id: frame
    shape: part
    pos: [0, 0, 0]
    fixed: true
    color: "#cfc6b4"
    pieces:
      - {kind: poly, points: [[-1.5, -8], [1.5, -8], [1.0, 10.0], [-1.0, 10.0]], y: [-9.0, -8.0]}
      - {kind: poly, points: [[-1.5, -8], [1.5, -8], [1.0, 10.0], [-1.0, 10.0]], y: [8.0, 9.0]}
      - {kind: disc, center: [0, 0], radius: 1.3, y: [-9.2, -7.8]}
      - {kind: disc, center: [0, 0], radius: 1.3, y: [7.8, 9.2]}
      - {kind: disc, center: [0, 9.0], radius: 1.1, inner: 0.5, y: [-9.2, -7.8]}
      - {kind: disc, center: [0, 9.0], radius: 1.1, inner: 0.5, y: [7.8, 9.2]}
      - {kind: poly, points: [[-5, -9], [5, -9], [5, -8], [-5, -8]], y: [-13.0, 13.0], color: "#b9b09c"}
joints:
  - {id: j_c, type: hinge, body: cylinder, axis: [0, 1, 0], damping: 0.001}   # the one driven joint
  - {id: j_u, type: slide, body: upper, axis: [0, 1, 0], damping: 0.5, range: [-7.0, 1]}   # + : towards the back
contact: {solref: [0.002, 1], solimp: [0.95, 0.99, 0.0005], margin: 0}
driver: {joint: j_c, kind: velocity, rpm: 30, kv: 5, max_torque: 10}
checks:
  - {type: position, joint: j_u, min: -6.3, max: 0.3, settle_s: 0.0, window_s: 8}
  - {type: ratio_range, out: j_u, in: j_c, min: -0.035, max: 0.035, min_swing: 0.045, settle_s: 0.5, window_s: 7.3, slices: 48}
  - {type: penetration, max: 0.001, settle_s: 0.5}
camera: {target: [0, 0, -6.5], position: [72, -50, 38], fov: 30}
display:
  output: j_u
  labels: {j_c: "Lower cylinder (driver)", j_u: "Upper shaft and drum"}

