{
  "what": "Three-armed Tender docking carousel. Meshes are in each part's own frame; assemble them by this table.",
  "axes": "Blender metres here are (bx, by, bz); Unreal = (bx, -by, bz) * 100 cm. Root frame = ArmsRoot of UCarrierCarouselComponent (hub axis, carrier z 0).",
  "from_unreal_blockout": {
    "cradle_radius_m": 6.0,
    "stowed_z_m": -1.0,
    "board_z_m": -6.3,
    "ceiling_z_m": 1.2,
    "arm_yaw_deg_unreal": "90 + AngleDeg + 120 * Arm (ArmYawDeg)"
  },
  "boom_aim": {
    "note": "each boom is turned 0.8594 deg from its nominal yaw so its tip is over the hatch collar centre (Tender x +0.09), not the Tender origin",
    "unreal_yaw_deg": [
      89.1406,
      209.1406,
      329.1406
    ],
    "tip_radius_cm": 600.067
  },
  "parts": [
    {
      "mesh": "SM_DockArm_Mount",
      "parent": "carrier (does not turn)",
      "location_cm": [
        0,
        0,
        0
      ],
      "moves": "never"
    },
    {
      "mesh": "SM_DockArm_Turret",
      "parent": "ArmsRoot",
      "location_cm": [
        0,
        0,
        0
      ],
      "moves": "yaw = hub AngleDeg (the three booms are part of this mesh)"
    },
    {
      "mesh": "SM_DockArm_UpperLink",
      "count": 3,
      "parent": "Turret, in the boom frame (yaw from boom_aim)",
      "location_cm": [
        600.067,
        0,
        94.0
      ],
      "moves": "Unreal pitch = +phi"
    },
    {
      "mesh": "SM_DockArm_LowerLink",
      "count": 3,
      "parent": "UpperLink",
      "location_cm": [
        -300.0,
        0,
        0
      ],
      "moves": "Unreal pitch = -2 * phi"
    },
    {
      "mesh": "SM_DockArm_Head",
      "count": 3,
      "parent": "LowerLink",
      "location_cm": [
        300.0,
        0,
        0
      ],
      "moves": "Unreal pitch = +phi (stays level)"
    },
    {
      "mesh": "SM_DockArm_Claw",
      "count": 12,
      "parent": "Head",
      "moves": "Unreal pitch = +open * 25 deg",
      "instances": [
        {
          "location_cm": [
            46.315,
            -46.315,
            -43.0
          ],
          "unreal_yaw_deg": -45.0
        },
        {
          "location_cm": [
            -46.316,
            -46.315,
            -43.0
          ],
          "unreal_yaw_deg": -135.0
        },
        {
          "location_cm": [
            -46.316,
            46.315,
            -43.0
          ],
          "unreal_yaw_deg": -225.0
        },
        {
          "location_cm": [
            46.315,
            46.316,
            -43.0
          ],
          "unreal_yaw_deg": -315.0
        }
      ]
    }
  ],
  "hoist": {
    "phi": "asin((StowedZ - TenderOriginZ) / 6.0), radians; 0 at STOWED, 62.047 deg at BOARD",
    "link_length_cm": 300.0,
    "wrist_axis_above_tender_origin_cm": 194.0
  },
  "tender_origin_in_head_frame_cm": [
    -0.135,
    8.999,
    -194.0
  ],
  "tender_yaw_relative_to_head_deg_unreal": -89.1406
}