# No. 270 (Brown 1868): "Anti-friction bearing for a pulley."
#
# Model (cm, gravity on, the axle level): the pulley (rim radius 9, bore radius 5.03) is the one driven joint, 20 turns a minute. It has no bearing of its own: it hangs
# by its own weight on six rollers (radius 1.5) that lie round a fixed axle (radius 2), and it is free to shift on two light slides, so its weight goes to the axle
# only through the rollers' contacts. The rollers' pins ride in radial slots of a cage that turns free on the axle and only keeps them apart. Rolling, the rollers
# carry the cage round at B/(2(A+r)) = 0.7186 of the pulley and turn on their pins at B/(2r) - that = 0.9581. Generator: opencode-runs/batch12/gen270.py.
number: 270
slug: anti-friction-pulley-bearing
name: Anti-friction roller bearing for a pulley
brown: "Anti-friction bearing for a pulley."
units: cm
sim:
  timestep: 0.0002
  integrator: implicitfast
  iterations: 100
  solver: CG
  multiccd: true
  duration_s: 7
  floor: false
bodies:
  - id: shift_x
    shape: part
    pos: [0, 0, 0]
    mass: 0.05
    color: "#8f8a80"
    pieces:
      - {kind: rod, from: [0, 1.6, 0], to: [0, 1.7, 0], radius: 0.1, collide: 0}
  - id: shift_z
    shape: part
    pos: [0, 0, 0]
    mount: shift_x
    mass: 0.05
    color: "#8f8a80"
    pieces:
      - {kind: rod, from: [0, 1.6, 0], to: [0, 1.7, 0], radius: 0.1, collide: 0}
  - id: pulley
    shape: part
    pos: [0, 0, 0]
    mount: shift_z
    density: 7800
    friction: 0.6
    color: "#d9c9a3"
    pieces:
      - {kind: poly, points: [[5.03, 0.0], [6.23, 0.0], [6.2063, 0.543], [5.0109, 0.4384]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[5.0109, 0.4384], [6.2063, 0.543], [6.1354, 1.0818], [4.9536, 0.8735]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.9536, 0.8735], [6.1354, 1.0818], [6.0177, 1.6124], [4.8586, 1.3019]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.8586, 1.3019], [6.0177, 1.6124], [5.8543, 2.1308], [4.7267, 1.7204]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.7267, 1.7204], [5.8543, 2.1308], [5.6463, 2.6329], [4.5587, 2.1258]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.5587, 2.1258], [5.6463, 2.6329], [5.3953, 3.115], [4.3561, 2.515]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.3561, 2.515], [5.3953, 3.115], [5.1033, 3.5734], [4.1203, 2.8851]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.1203, 2.8851], [5.1033, 3.5734], [4.7725, 4.0046], [3.8532, 3.2332]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[3.8532, 3.2332], [4.7725, 4.0046], [4.4053, 4.4053], [3.5567, 3.5567]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[3.5567, 3.5567], [4.4053, 4.4053], [4.0046, 4.7725], [3.2332, 3.8532]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[3.2332, 3.8532], [4.0046, 4.7725], [3.5734, 5.1033], [2.8851, 4.1203]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[2.8851, 4.1203], [3.5734, 5.1033], [3.115, 5.3953], [2.515, 4.3561]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[2.515, 4.3561], [3.115, 5.3953], [2.6329, 5.6463], [2.1258, 4.5587]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[2.1258, 4.5587], [2.6329, 5.6463], [2.1308, 5.8543], [1.7204, 4.7267]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[1.7204, 4.7267], [2.1308, 5.8543], [1.6124, 6.0177], [1.3019, 4.8586]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[1.3019, 4.8586], [1.6124, 6.0177], [1.0818, 6.1354], [0.8735, 4.9536]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[0.8735, 4.9536], [1.0818, 6.1354], [0.543, 6.2063], [0.4384, 5.0109]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[0.4384, 5.0109], [0.543, 6.2063], [0.0, 6.23], [0.0, 5.03]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[0.0, 5.03], [0.0, 6.23], [-0.543, 6.2063], [-0.4384, 5.0109]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-0.4384, 5.0109], [-0.543, 6.2063], [-1.0818, 6.1354], [-0.8735, 4.9536]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-0.8735, 4.9536], [-1.0818, 6.1354], [-1.6124, 6.0177], [-1.3019, 4.8586]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-1.3019, 4.8586], [-1.6124, 6.0177], [-2.1308, 5.8543], [-1.7204, 4.7267]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-1.7204, 4.7267], [-2.1308, 5.8543], [-2.6329, 5.6463], [-2.1258, 4.5587]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-2.1258, 4.5587], [-2.6329, 5.6463], [-3.115, 5.3953], [-2.515, 4.3561]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-2.515, 4.3561], [-3.115, 5.3953], [-3.5734, 5.1033], [-2.8851, 4.1203]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-2.8851, 4.1203], [-3.5734, 5.1033], [-4.0046, 4.7725], [-3.2332, 3.8532]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-3.2332, 3.8532], [-4.0046, 4.7725], [-4.4053, 4.4053], [-3.5567, 3.5567]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-3.5567, 3.5567], [-4.4053, 4.4053], [-4.7725, 4.0046], [-3.8532, 3.2332]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-3.8532, 3.2332], [-4.7725, 4.0046], [-5.1033, 3.5734], [-4.1203, 2.8851]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.1203, 2.8851], [-5.1033, 3.5734], [-5.3953, 3.115], [-4.3561, 2.515]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.3561, 2.515], [-5.3953, 3.115], [-5.6463, 2.6329], [-4.5587, 2.1258]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.5587, 2.1258], [-5.6463, 2.6329], [-5.8543, 2.1308], [-4.7267, 1.7204]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.7267, 1.7204], [-5.8543, 2.1308], [-6.0177, 1.6124], [-4.8586, 1.3019]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.8586, 1.3019], [-6.0177, 1.6124], [-6.1354, 1.0818], [-4.9536, 0.8735]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.9536, 0.8735], [-6.1354, 1.0818], [-6.2063, 0.543], [-5.0109, 0.4384]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-5.0109, 0.4384], [-6.2063, 0.543], [-6.23, 0.0], [-5.03, 0.0]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-5.03, 0.0], [-6.23, 0.0], [-6.2063, -0.543], [-5.0109, -0.4384]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-5.0109, -0.4384], [-6.2063, -0.543], [-6.1354, -1.0818], [-4.9536, -0.8735]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.9536, -0.8735], [-6.1354, -1.0818], [-6.0177, -1.6124], [-4.8586, -1.3019]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.8586, -1.3019], [-6.0177, -1.6124], [-5.8543, -2.1308], [-4.7267, -1.7204]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.7267, -1.7204], [-5.8543, -2.1308], [-5.6463, -2.6329], [-4.5587, -2.1258]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.5587, -2.1258], [-5.6463, -2.6329], [-5.3953, -3.115], [-4.3561, -2.515]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.3561, -2.515], [-5.3953, -3.115], [-5.1033, -3.5734], [-4.1203, -2.8851]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-4.1203, -2.8851], [-5.1033, -3.5734], [-4.7725, -4.0046], [-3.8532, -3.2332]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-3.8532, -3.2332], [-4.7725, -4.0046], [-4.4053, -4.4053], [-3.5567, -3.5567]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-3.5567, -3.5567], [-4.4053, -4.4053], [-4.0046, -4.7725], [-3.2332, -3.8532]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-3.2332, -3.8532], [-4.0046, -4.7725], [-3.5734, -5.1033], [-2.8851, -4.1203]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-2.8851, -4.1203], [-3.5734, -5.1033], [-3.115, -5.3953], [-2.515, -4.3561]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-2.515, -4.3561], [-3.115, -5.3953], [-2.6329, -5.6463], [-2.1258, -4.5587]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-2.1258, -4.5587], [-2.6329, -5.6463], [-2.1308, -5.8543], [-1.7204, -4.7267]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-1.7204, -4.7267], [-2.1308, -5.8543], [-1.6124, -6.0177], [-1.3019, -4.8586]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-1.3019, -4.8586], [-1.6124, -6.0177], [-1.0818, -6.1354], [-0.8735, -4.9536]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-0.8735, -4.9536], [-1.0818, -6.1354], [-0.543, -6.2063], [-0.4384, -5.0109]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-0.4384, -5.0109], [-0.543, -6.2063], [-0.0, -6.23], [-0.0, -5.03]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[-0.0, -5.03], [-0.0, -6.23], [0.543, -6.2063], [0.4384, -5.0109]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[0.4384, -5.0109], [0.543, -6.2063], [1.0818, -6.1354], [0.8735, -4.9536]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[0.8735, -4.9536], [1.0818, -6.1354], [1.6124, -6.0177], [1.3019, -4.8586]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[1.3019, -4.8586], [1.6124, -6.0177], [2.1308, -5.8543], [1.7204, -4.7267]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[1.7204, -4.7267], [2.1308, -5.8543], [2.6329, -5.6463], [2.1258, -4.5587]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[2.1258, -4.5587], [2.6329, -5.6463], [3.115, -5.3953], [2.515, -4.3561]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[2.515, -4.3561], [3.115, -5.3953], [3.5734, -5.1033], [2.8851, -4.1203]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[2.8851, -4.1203], [3.5734, -5.1033], [4.0046, -4.7725], [3.2332, -3.8532]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[3.2332, -3.8532], [4.0046, -4.7725], [4.4053, -4.4053], [3.5567, -3.5567]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[3.5567, -3.5567], [4.4053, -4.4053], [4.7725, -4.0046], [3.8532, -3.2332]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[3.8532, -3.2332], [4.7725, -4.0046], [5.1033, -3.5734], [4.1203, -2.8851]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.1203, -2.8851], [5.1033, -3.5734], [5.3953, -3.115], [4.3561, -2.515]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.3561, -2.515], [5.3953, -3.115], [5.6463, -2.6329], [4.5587, -2.1258]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.5587, -2.1258], [5.6463, -2.6329], [5.8543, -2.1308], [4.7267, -1.7204]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.7267, -1.7204], [5.8543, -2.1308], [6.0177, -1.6124], [4.8586, -1.3019]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.8586, -1.3019], [6.0177, -1.6124], [6.1354, -1.0818], [4.9536, -0.8735]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[4.9536, -0.8735], [6.1354, -1.0818], [6.2063, -0.543], [5.0109, -0.4384]], y: [-1.0, 1.0], collide: 1}
      - {kind: poly, points: [[5.0109, -0.4384], [6.2063, -0.543], [6.23, -0.0], [5.03, -0.0]], y: [-1.0, 1.0], collide: 1}
      - {kind: disc, center: [0, 0], radius: 9.0, inner: 6.23, y: [-0.6, 0.6], collide: 0}   # the web and the groove's floor
      - {kind: disc, center: [0, 0], radius: 9.8, inner: 8.5, y: [-1.0, -0.6], collide: 0}   # the groove's flanges
      - {kind: disc, center: [0, 0], radius: 9.8, inner: 8.5, y: [0.6, 1.0], collide: 0}
      - {kind: poly, points: [[-0.3, 6.43], [0.3, 6.43], [0.3, 8.3], [-0.3, 8.3]], y: [-0.7, -0.6], collide: 0, color: "#8f8a80"}   # a mark on its face
  - id: cage
    shape: part
    pos: [0, 0, 0]
    density: 2700
    color: "#b8ad97"
    pieces:
      - {kind: disc, center: [0, 0], radius: 4.4, inner: 2.1, y: [1.25, 1.55], collide: 0}   # the cage's plate, behind the rollers
  - id: slot1
    shape: part
    pos: [0.0, 0, 3.5]
    mount: cage
    mass: 0.01
    color: "#8f8a80"
    pieces:
      - {kind: rod, from: [0.0, -1.05, 3.5], to: [0.0, 1.2, 3.5], radius: 0.4, collide: 0}   # the roller's pin, free in a radial slot of the cage
  - id: roller1
    shape: part
    pos: [0.0, 0, 3.5]
    mount: slot1
    density: 7800
    friction: 0.6
    color: "#e6dcc6"
    pieces:
      - {kind: disc, center: [0.0, 3.5], radius: 1.5, y: [-0.9, 0.9], collide: 2}   # roller 1
      - {kind: poly, points: [[-0.1, 4.05], [0.1, 4.05], [0.1, 4.85], [-0.1, 4.85]], y: [-0.95, -0.9], collide: 0, color: "#6f675a"}   # a mark on its face
  - id: slot2
    shape: part
    pos: [-3.0311, 0, 1.75]
    mount: cage
    mass: 0.01
    color: "#8f8a80"
    pieces:
      - {kind: rod, from: [-3.0311, -1.05, 1.75], to: [-3.0311, 1.2, 1.75], radius: 0.4, collide: 0}   # the roller's pin, free in a radial slot of the cage
  - id: roller2
    shape: part
    pos: [-3.0311, 0, 1.75]
    mount: slot2
    density: 7800
    friction: 0.6
    color: "#e6dcc6"
    pieces:
      - {kind: disc, center: [-3.0311, 1.75], radius: 1.5, y: [-0.9, 0.9], collide: 2}   # roller 2
      - {kind: poly, points: [[-3.1311, 2.3], [-2.9311, 2.3], [-2.9311, 3.1], [-3.1311, 3.1]], y: [-0.95, -0.9], collide: 0, color: "#6f675a"}   # a mark on its face
  - id: slot3
    shape: part
    pos: [-3.0311, 0, -1.75]
    mount: cage
    mass: 0.01
    color: "#8f8a80"
    pieces:
      - {kind: rod, from: [-3.0311, -1.05, -1.75], to: [-3.0311, 1.2, -1.75], radius: 0.4, collide: 0}   # the roller's pin, free in a radial slot of the cage
  - id: roller3
    shape: part
    pos: [-3.0311, 0, -1.75]
    mount: slot3
    density: 7800
    friction: 0.6
    color: "#e6dcc6"
    pieces:
      - {kind: disc, center: [-3.0311, -1.75], radius: 1.5, y: [-0.9, 0.9], collide: 2}   # roller 3
      - {kind: poly, points: [[-3.1311, -1.2], [-2.9311, -1.2], [-2.9311, -0.4], [-3.1311, -0.4]], y: [-0.95, -0.9], collide: 0, color: "#6f675a"}   # a mark on its face
  - id: slot4
    shape: part
    pos: [-0.0, 0, -3.5]
    mount: cage
    mass: 0.01
    color: "#8f8a80"
    pieces:
      - {kind: rod, from: [-0.0, -1.05, -3.5], to: [-0.0, 1.2, -3.5], radius: 0.4, collide: 0}   # the roller's pin, free in a radial slot of the cage
  - id: roller4
    shape: part
    pos: [-0.0, 0, -3.5]
    mount: slot4
    density: 7800
    friction: 0.6
    color: "#e6dcc6"
    pieces:
      - {kind: disc, center: [-0.0, -3.5], radius: 1.5, y: [-0.9, 0.9], collide: 2}   # roller 4
      - {kind: poly, points: [[-0.1, -2.95], [0.1, -2.95], [0.1, -2.15], [-0.1, -2.15]], y: [-0.95, -0.9], collide: 0, color: "#6f675a"}   # a mark on its face
  - id: slot5
    shape: part
    pos: [3.0311, 0, -1.75]
    mount: cage
    mass: 0.01
    color: "#8f8a80"
    pieces:
      - {kind: rod, from: [3.0311, -1.05, -1.75], to: [3.0311, 1.2, -1.75], radius: 0.4, collide: 0}   # the roller's pin, free in a radial slot of the cage
  - id: roller5
    shape: part
    pos: [3.0311, 0, -1.75]
    mount: slot5
    density: 7800
    friction: 0.6
    color: "#e6dcc6"
    pieces:
      - {kind: disc, center: [3.0311, -1.75], radius: 1.5, y: [-0.9, 0.9], collide: 2}   # roller 5
      - {kind: poly, points: [[2.9311, -1.2], [3.1311, -1.2], [3.1311, -0.4], [2.9311, -0.4]], y: [-0.95, -0.9], collide: 0, color: "#6f675a"}   # a mark on its face
  - id: slot6
    shape: part
    pos: [3.0311, 0, 1.75]
    mount: cage
    mass: 0.01
    color: "#8f8a80"
    pieces:
      - {kind: rod, from: [3.0311, -1.05, 1.75], to: [3.0311, 1.2, 1.75], radius: 0.4, collide: 0}   # the roller's pin, free in a radial slot of the cage
  - id: roller6
    shape: part
    pos: [3.0311, 0, 1.75]
    mount: slot6
    density: 7800
    friction: 0.6
    color: "#e6dcc6"
    pieces:
      - {kind: disc, center: [3.0311, 1.75], radius: 1.5, y: [-0.9, 0.9], collide: 2}   # roller 6
      - {kind: poly, points: [[2.9311, 2.3], [3.1311, 2.3], [3.1311, 3.1], [2.9311, 3.1]], y: [-0.95, -0.9], collide: 0, color: "#6f675a"}   # a mark on its face
  - id: frame
    shape: part
    pos: [0, 0, 0]
    fixed: true
    color: "#cfc6b4"
    friction: 0.6
    pieces:
      - {kind: disc, center: [0, 0], radius: 2.0, y: [-1.2, 1.2], collide: 1, color: "#8f8a80"}   # the fixed axle
      - {kind: rod, from: [0, 1.2, 0], to: [0, 3.2, 0], radius: 2.0, collide: 0, color: "#8f8a80"}
      - {kind: poly, points: [[-1.6, -13], [1.6, -13], [1.6, 0], [-1.6, 0]], y: [3.2, 4.2], collide: 0}   # the axle's standard
      - {kind: poly, points: [[-8, -14], [8, -14], [8, -13], [-8, -13]], y: [-3, 5], collide: 0, color: "#b9b09c"}   # the base
joints:
  - {id: j_x, type: slide, body: shift_x, axis: [1, 0, 0], range: [-0.3, 0.3], damping: 2}   # the pulley free to shift: it has no bearing but the rollers
  - {id: j_z, type: slide, body: shift_z, axis: [0, 0, 1], range: [-0.3, 0.3], damping: 2}
  - {id: j_p, type: hinge, body: pulley, axis: [0, 1, 0], damping: 0.01}   # the one driven joint
  - {id: j_c, type: hinge, body: cage, axis: [0, 1, 0], damping: 0.0001}   # the cage, free on the axle
  - {id: j_s1, type: slide, body: slot1, axis: [0.0, 0, 1.0], range: [-0.3, 0.3], damping: 0.05}   # roller 1's pin in its slot; + : outward
  - {id: j_r1, type: hinge, body: roller1, axis: [0, 1, 0], damping: 1e-05}   # roller 1 on its pin
  - {id: j_s2, type: slide, body: slot2, axis: [-0.866, 0, 0.5], range: [-0.3, 0.3], damping: 0.05}   # roller 2's pin in its slot; + : outward
  - {id: j_r2, type: hinge, body: roller2, axis: [0, 1, 0], damping: 1e-05}   # roller 2 on its pin
  - {id: j_s3, type: slide, body: slot3, axis: [-0.866, 0, -0.5], range: [-0.3, 0.3], damping: 0.05}   # roller 3's pin in its slot; + : outward
  - {id: j_r3, type: hinge, body: roller3, axis: [0, 1, 0], damping: 1e-05}   # roller 3 on its pin
  - {id: j_s4, type: slide, body: slot4, axis: [-0.0, 0, -1.0], range: [-0.3, 0.3], damping: 0.05}   # roller 4's pin in its slot; + : outward
  - {id: j_r4, type: hinge, body: roller4, axis: [0, 1, 0], damping: 1e-05}   # roller 4 on its pin
  - {id: j_s5, type: slide, body: slot5, axis: [0.866, 0, -0.5], range: [-0.3, 0.3], damping: 0.05}   # roller 5's pin in its slot; + : outward
  - {id: j_r5, type: hinge, body: roller5, axis: [0, 1, 0], damping: 1e-05}   # roller 5 on its pin
  - {id: j_s6, type: slide, body: slot6, axis: [0.866, 0, 0.5], range: [-0.3, 0.3], damping: 0.05}   # roller 6's pin in its slot; + : outward
  - {id: j_r6, type: hinge, body: roller6, axis: [0, 1, 0], damping: 1e-05}   # roller 6 on its pin
contact: {solref: [0.002, 1], solimp: [0.95, 0.99, 0.0005], margin: 0}
driver: {joint: j_p, kind: velocity, rpm: 20, kv: 20.0, max_torque: 20.0}
checks:
  - {type: ratio, out: j_c, in: j_p, expect: 0.7186, tol: 0.0216, settle_s: 1.0, window_s: 5.5}   # the cage goes round at B/(2(A+r))
  - {type: ratio, out: j_r1, in: j_p, expect: 0.9581, tol: 0.0479, settle_s: 1.0, window_s: 5.5}   # a roller on its pin, rolling between axle and bore
  - {type: ratio, out: j_r4, in: j_p, expect: 0.9581, tol: 0.0479, settle_s: 1.0, window_s: 5.5}   # the roller opposite
camera: {target: [0, 0, -7.0], position: [0.0, -82.0, 4.0], fov: 34.0}
display:
  output: j_c
  labels: {j_p: "The pulley (driver)", j_c: "The rollers' cage", j_r1: "A roller"}
  proof: {label: "Anti-friction bearing", sub: "the pulley rides on rollers round a fixed axle"}

