number: 357
slug: gyroscope-governor
name: The gyroscope governor
brown: "What is called the gyroscope governor, for steam engines, etc., patented by Alban Anderson in 1858. A is a heavy wheel, the axle, B, B1, of which is made in two pieces connected together by a universal joint. The wheel, A, is on one piece, B, and a pinion, I, on the other piece, B1. The piece, B, is connected at its middle by a hinge joint with the revolving frame, H, so that variations in the inclination of the wheel, A, will cause the outer end of the piece, B, to rise and fall. The frame, H, is driven by bevel gearing from the engine, and by that means the pinion, I, is carried round the stationary toothed circle, G, and the wheel, A, is thus made to receive a rapid rotary motion on its axis. When the frame, H, and wheel, A, are in motion, the tendency of the wheel, A, is to assume a vertical position, but this tendency is opposed by a spring, L. The greater the velocity of the governor, the stronger is the tendency above mentioned, and the more it overcomes the force of the spring, and vice versa. The piece, B, is connected with the valve-rod by rods, C, D, and the spring, L, is connected with the said rod by levers, N, and rod, P."
units: cm
sim:
  timestep: 0.0001
  integrator: implicit
  iterations: 60
  solver: PGS
  multiccd: false
  duration_s: 8
  floor: false
bodies:
  # the revolving frame H: its upright shaft and the arm with the bearings of B1 and of B's hinge
  - id: frame_h
    shape: part
    pos: [0, 0, 0]
    density: 7800
    color: "#b8ad97"
    pieces:
      - {kind: rod, from: [0, 0, -14], to: [0, 0, -1.0], radius: 0.8}
      - {kind: rod, from: [0, 0, -2.4], to: [11.0, 0, -2.4], radius: 0.4}
      - {kind: rod, from: [4.0, 0, -2.4], to: [4.0, 0, -0.5], radius: 0.35}
      - {kind: rod, from: [9.6, -1.3, -2.4], to: [9.6, 1.3, -2.4], radius: 0.35}
      - {kind: rod, from: [9.6, 1.3, -2.4], to: [9.6, 1.3, 0], radius: 0.3}
      - {kind: rod, from: [9.6, -1.3, -2.4], to: [9.6, -1.3, 0], radius: 0.3}
      - {kind: rod, from: [9.6, 1.3, 0], to: [11.0, 1.3, 0], radius: 0.3}
      - {kind: rod, from: [9.6, -1.3, 0], to: [11.0, -1.3, 0], radius: 0.3}
  # B1: the inner piece of the axle, with the pinion I
  - id: axle_b1
    shape: part
    pos: [6.0, 0, 0]
    mount: frame_h
    density: 7800
    color: "#8f8a80"
    pieces:
      - {kind: rod, from: [3.6, 0, 0], to: [10.4, 0, 0], radius: 0.3}
      - {kind: disc, center: [0, 0], radius: 0.5, y: [-0.1, 0.1], color: "#8f8a80"}
      - {kind: rod, from: [5.1, -1.6, 0], to: [5.1, 1.6, 0], radius: 0.2}
      - {kind: rod, from: [6.9, -1.6, 0], to: [6.9, 1.6, 0], radius: 0.2}
      - {kind: rod, from: [5.2, -0.574, 1.3858], to: [6.8, -0.574, 1.3858], radius: 0.22, capsule: true, collide: 2, color: "#6f6a60"}
      - {kind: rod, from: [5.2, -1.3858, 0.574], to: [6.8, -1.3858, 0.574], radius: 0.22, capsule: true, collide: 2, color: "#6f6a60"}
      - {kind: rod, from: [5.2, -1.3858, -0.574], to: [6.8, -1.3858, -0.574], radius: 0.22, capsule: true, collide: 2, color: "#6f6a60"}
      - {kind: rod, from: [5.2, -0.574, -1.3858], to: [6.8, -0.574, -1.3858], radius: 0.22, capsule: true, collide: 2, color: "#6f6a60"}
      - {kind: rod, from: [5.2, 0.574, -1.3858], to: [6.8, 0.574, -1.3858], radius: 0.22, capsule: true, collide: 2, color: "#6f6a60"}
      - {kind: rod, from: [5.2, 1.3858, -0.574], to: [6.8, 1.3858, -0.574], radius: 0.22, capsule: true, collide: 2, color: "#6f6a60"}
      - {kind: rod, from: [5.2, 1.3858, 0.574], to: [6.8, 1.3858, 0.574], radius: 0.22, capsule: true, collide: 2, color: "#6f6a60"}
      - {kind: rod, from: [5.2, 0.574, 1.3858], to: [6.8, 0.574, 1.3858], radius: 0.22, capsule: true, collide: 2, color: "#6f6a60"}
  # the cross of the universal joint, on B1
  - id: cross
    shape: part
    pos: [11.0, 0, 0]
    mount: axle_b1
    density: 7800
    color: "#6f6a60"
    pieces:
      - {kind: rod, from: [11.0, -0.9, 0], to: [11.0, 0.9, 0], radius: 0.2}
      - {kind: rod, from: [11.0, 0, -0.9], to: [11.0, 0, 0.9], radius: 0.2}
  # B: the outer piece of the axle, hinged to H at the joint's centre
  - id: axle_b
    shape: part
    pos: [11.0, 0, 0]
    mount: frame_h
    density: 7800
    color: "#a89a7e"
    pieces:
      - {kind: rod, from: [11.8, -0.8, 0], to: [11.8, 0.8, 0], radius: 0.3}
      - {kind: rod, from: [11.8, -0.8, 0], to: [11.8, -0.8, 0.0], radius: 0.3}
      - {kind: rod, from: [12.0, 0, -0.7], to: [20.0, 0, -0.7], radius: 0.22}
      - {kind: rod, from: [20.0, 0, -0.7], to: [20.0, 0, 0.3], radius: 0.22}
      - {kind: rod, from: [20.0, 0, 0], to: [22.0, 0, 0], radius: 0.3}
  # the wheel A on its hub, turning in B
  - id: wheel_a
    shape: part
    pos: [11.0, 0, 0]
    mount: axle_b
    density: 7800
    color: "#d8c9a3"
    pieces:
      - {kind: disc, center: [0, 0], radius: 0.6, y: [-0.1, 0.1]}
      - {kind: rod, from: [11.4, 0, 0], to: [19.8, 0, 0], radius: 0.3, color: "#8f8a80"}
      - {kind: rod, from: [11.4, 0, -1.0], to: [11.4, 0, 1.0], radius: 0.2, color: "#6f6a60"}
      - {kind: rod, from: [14.5, 0, 0], to: [17.5, 0, 0], radius: 7.0}
      - {kind: rod, from: [14.45, 1.1053, 0.4673], to: [14.45, 5.9869, 2.5312], radius: 0.25, color: "#5a4a36"}
      - {kind: rod, from: [14.45, -0.9573, 0.7235], to: [14.45, -5.1855, 3.9192], radius: 0.25, color: "#5a4a36"}
      - {kind: rod, from: [14.45, -0.1479, -1.1908], to: [14.45, -0.8013, -6.4504], radius: 0.25, color: "#5a4a36"}
  # the stationary toothed circle G: studs hanging from a ring above the pinion
  - id: circle_g
    shape: part
    pos: [0, 0, 3]
    fixed: true
    color: "#8f8a80"
    friction: 0.1
    pieces:
      - {kind: rod, from: [6.0, 0.0, 1.05], to: [6.0, 0.0, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [5.8847, 1.1705, 1.05], to: [5.8847, 1.1705, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [5.5433, 2.2961, 1.05], to: [5.5433, 2.2961, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [4.9888, 3.3334, 1.05], to: [4.9888, 3.3334, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [4.2426, 4.2426, 1.05], to: [4.2426, 4.2426, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [3.3334, 4.9888, 1.05], to: [3.3334, 4.9888, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [2.2961, 5.5433, 1.05], to: [2.2961, 5.5433, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [1.1705, 5.8847, 1.05], to: [1.1705, 5.8847, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [0.0, 6.0, 1.05], to: [0.0, 6.0, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-1.1705, 5.8847, 1.05], to: [-1.1705, 5.8847, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-2.2961, 5.5433, 1.05], to: [-2.2961, 5.5433, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-3.3334, 4.9888, 1.05], to: [-3.3334, 4.9888, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-4.2426, 4.2426, 1.05], to: [-4.2426, 4.2426, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-4.9888, 3.3334, 1.05], to: [-4.9888, 3.3334, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-5.5433, 2.2961, 1.05], to: [-5.5433, 2.2961, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-5.8847, 1.1705, 1.05], to: [-5.8847, 1.1705, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-6.0, 0.0, 1.05], to: [-6.0, 0.0, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-5.8847, -1.1705, 1.05], to: [-5.8847, -1.1705, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-5.5433, -2.2961, 1.05], to: [-5.5433, -2.2961, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-4.9888, -3.3334, 1.05], to: [-4.9888, -3.3334, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-4.2426, -4.2426, 1.05], to: [-4.2426, -4.2426, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-3.3334, -4.9888, 1.05], to: [-3.3334, -4.9888, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-2.2961, -5.5433, 1.05], to: [-2.2961, -5.5433, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-1.1705, -5.8847, 1.05], to: [-1.1705, -5.8847, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [-0.0, -6.0, 1.05], to: [-0.0, -6.0, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [1.1705, -5.8847, 1.05], to: [1.1705, -5.8847, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [2.2961, -5.5433, 1.05], to: [2.2961, -5.5433, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [3.3334, -4.9888, 1.05], to: [3.3334, -4.9888, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [4.2426, -4.2426, 1.05], to: [4.2426, -4.2426, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [4.9888, -3.3334, 1.05], to: [4.9888, -3.3334, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [5.5433, -2.2961, 1.05], to: [5.5433, -2.2961, 3.0], radius: 0.25, capsule: true, collide: 1}
      - {kind: rod, from: [5.8847, -1.1705, 1.05], to: [5.8847, -1.1705, 3.0], radius: 0.25, capsule: true, collide: 1}
  - id: stand
    shape: frame
    color: "#8f8a80"
    rods:
      - {from: [6.3, 0.0, 3.3], to: [6.2461, 0.8223, 3.3], radius: 0.5}
      - {from: [6.2461, 0.8223, 3.3], to: [6.0853, 1.6306, 3.3], radius: 0.5}
      - {from: [6.0853, 1.6306, 3.3], to: [5.8204, 2.4109, 3.3], radius: 0.5}
      - {from: [5.8204, 2.4109, 3.3], to: [5.456, 3.15, 3.3], radius: 0.5}
      - {from: [5.456, 3.15, 3.3], to: [4.9981, 3.8352, 3.3], radius: 0.5}
      - {from: [4.9981, 3.8352, 3.3], to: [4.4548, 4.4548, 3.3], radius: 0.5}
      - {from: [4.4548, 4.4548, 3.3], to: [3.8352, 4.9981, 3.3], radius: 0.5}
      - {from: [3.8352, 4.9981, 3.3], to: [3.15, 5.456, 3.3], radius: 0.5}
      - {from: [3.15, 5.456, 3.3], to: [2.4109, 5.8204, 3.3], radius: 0.5}
      - {from: [2.4109, 5.8204, 3.3], to: [1.6306, 6.0853, 3.3], radius: 0.5}
      - {from: [1.6306, 6.0853, 3.3], to: [0.8223, 6.2461, 3.3], radius: 0.5}
      - {from: [0.8223, 6.2461, 3.3], to: [0.0, 6.3, 3.3], radius: 0.5}
      - {from: [0.0, 6.3, 3.3], to: [-0.8223, 6.2461, 3.3], radius: 0.5}
      - {from: [-0.8223, 6.2461, 3.3], to: [-1.6306, 6.0853, 3.3], radius: 0.5}
      - {from: [-1.6306, 6.0853, 3.3], to: [-2.4109, 5.8204, 3.3], radius: 0.5}
      - {from: [-2.4109, 5.8204, 3.3], to: [-3.15, 5.456, 3.3], radius: 0.5}
      - {from: [-3.15, 5.456, 3.3], to: [-3.8352, 4.9981, 3.3], radius: 0.5}
      - {from: [-3.8352, 4.9981, 3.3], to: [-4.4548, 4.4548, 3.3], radius: 0.5}
      - {from: [-4.4548, 4.4548, 3.3], to: [-4.9981, 3.8352, 3.3], radius: 0.5}
      - {from: [-4.9981, 3.8352, 3.3], to: [-5.456, 3.15, 3.3], radius: 0.5}
      - {from: [-5.456, 3.15, 3.3], to: [-5.8204, 2.4109, 3.3], radius: 0.5}
      - {from: [-5.8204, 2.4109, 3.3], to: [-6.0853, 1.6306, 3.3], radius: 0.5}
      - {from: [-6.0853, 1.6306, 3.3], to: [-6.2461, 0.8223, 3.3], radius: 0.5}
      - {from: [-6.2461, 0.8223, 3.3], to: [-6.3, 0.0, 3.3], radius: 0.5}
      - {from: [-6.3, 0.0, 3.3], to: [-6.2461, -0.8223, 3.3], radius: 0.5}
      - {from: [-6.2461, -0.8223, 3.3], to: [-6.0853, -1.6306, 3.3], radius: 0.5}
      - {from: [-6.0853, -1.6306, 3.3], to: [-5.8204, -2.4109, 3.3], radius: 0.5}
      - {from: [-5.8204, -2.4109, 3.3], to: [-5.456, -3.15, 3.3], radius: 0.5}
      - {from: [-5.456, -3.15, 3.3], to: [-4.9981, -3.8352, 3.3], radius: 0.5}
      - {from: [-4.9981, -3.8352, 3.3], to: [-4.4548, -4.4548, 3.3], radius: 0.5}
      - {from: [-4.4548, -4.4548, 3.3], to: [-3.8352, -4.9981, 3.3], radius: 0.5}
      - {from: [-3.8352, -4.9981, 3.3], to: [-3.15, -5.456, 3.3], radius: 0.5}
      - {from: [-3.15, -5.456, 3.3], to: [-2.4109, -5.8204, 3.3], radius: 0.5}
      - {from: [-2.4109, -5.8204, 3.3], to: [-1.6306, -6.0853, 3.3], radius: 0.5}
      - {from: [-1.6306, -6.0853, 3.3], to: [-0.8223, -6.2461, 3.3], radius: 0.5}
      - {from: [-0.8223, -6.2461, 3.3], to: [-0.0, -6.3, 3.3], radius: 0.5}
      - {from: [-0.0, -6.3, 3.3], to: [0.8223, -6.2461, 3.3], radius: 0.5}
      - {from: [0.8223, -6.2461, 3.3], to: [1.6306, -6.0853, 3.3], radius: 0.5}
      - {from: [1.6306, -6.0853, 3.3], to: [2.4109, -5.8204, 3.3], radius: 0.5}
      - {from: [2.4109, -5.8204, 3.3], to: [3.15, -5.456, 3.3], radius: 0.5}
      - {from: [3.15, -5.456, 3.3], to: [3.8352, -4.9981, 3.3], radius: 0.5}
      - {from: [3.8352, -4.9981, 3.3], to: [4.4548, -4.4548, 3.3], radius: 0.5}
      - {from: [4.4548, -4.4548, 3.3], to: [4.9981, -3.8352, 3.3], radius: 0.5}
      - {from: [4.9981, -3.8352, 3.3], to: [5.456, -3.15, 3.3], radius: 0.5}
      - {from: [5.456, -3.15, 3.3], to: [5.8204, -2.4109, 3.3], radius: 0.5}
      - {from: [5.8204, -2.4109, 3.3], to: [6.0853, -1.6306, 3.3], radius: 0.5}
      - {from: [6.0853, -1.6306, 3.3], to: [6.2461, -0.8223, 3.3], radius: 0.5}
      - {from: [6.2461, -0.8223, 3.3], to: [6.3, -0.0, 3.3], radius: 0.5}
      - {from: [6.3, 0, 3.3], to: [6.3, 0, 12], radius: 0.5}
      - {from: [-6.3, 0, 3.3], to: [-6.3, 0, 12], radius: 0.5}
      - {from: [-6.3, 0, 12], to: [6.3, 0, 12], radius: 0.5}
      - {from: [0, 0, -16], to: [0, 0, -14.2], radius: 1.2}
      - {from: [-10, 0, -16.5], to: [10, 0, -16.5], radius: 0.8}
joints:
  - {id: j_h, type: hinge, body: frame_h, axis: [0, 0, 1], damping: 0.01}   # positive: against the clock from above
  - {id: j_b1, type: hinge, body: axle_b1, axis: [1, 0, 0]}
  - {id: j_x, type: hinge, body: cross, axis: [0, 1, 0]}
  - {id: j_b, type: hinge, body: axle_b, axis: [0, -1, 0], stiffness: 5.0, springref: 0.0, damping: 0.4, range: [-0.02, 0.6]}   # positive: B's outer end up
  - {id: j_a, type: hinge, body: wheel_a, axis: [1, 0, 0]}
pins:
  - {id: u_top, a: cross, b: wheel_a, at: [11.0, 0, 0.8]}
  - {id: u_bot, a: cross, b: wheel_a, at: [11.0, 0, -0.8]}
contact: {solref: [0.002, 1.0], solimp: [0.95, 0.99, 0.0005], margin: 0}
driver: {joint: j_h, kind: velocity, rpm: 90.0, kv: 20, max_torque: 60}
checks:
  - {type: ratio, out: j_a, in: j_h, expect: 4.0, tol: 0.08, settle_s: 1.0, window_s: 6.5}
  - {type: position, joint: j_b, min: 0.1, max: 0.2, settle_s: 3.0, window_s: 4.8}
  - {type: penetration, max: 0.0005, settle_s: 0.5}
camera: {target: [0, 0, -10.5], position: [0, -100, -7.5], fov: 30}
display:
  output: j_b
  labels: {j_h: "Frame H (from the engine)", j_a: "Wheel A", j_b: "Axle B (outer end up)"}

