{
 "asset": "door robot arm (models/door-robot-arm), standalone: not in the ship (the user: 'this will be standalone project dont add on the ship yet')",
 "units": "metres in Blender, Z up; FBX in centimetres; Unreal = (x, -y, z) * 100 of the Blender data (forward -Y, up Z, data turned -90 deg about Z; import with Convert Scene + Force Front X Axis)",
 "arm_frame_A": "upright arm frame at rest: origin turntable face centre, +X forward (toward the tool), +Y the arm's left, +Z up (away from the carriage). In the ship the arm hangs: ArmRoot = carriage underside centre rotated 180 deg about world X (A's +Z = world -Z, A's +Y = world -y).",
 "roots": {
  "AFT": {
   "object": "DoorArm_AFT_<A|B>",
   "location_m": [
    0.0,
    -5.795,
    -4.182
   ],
   "rotation_deg": [
    180.0,
    0.0,
    0.0
   ],
   "location_ue_cm": [
    0.0,
    579.5,
    -418.2
   ],
   "note": "the arm hangs: its frame A turned 180 deg about x under the rail"
  },
  "FORE": {
   "object": "DoorArm_FORE_<A|B>",
   "location_m": [
    0.0,
    -5.795,
    -4.182
   ],
   "rotation_deg": [
    180.0,
    0.0,
    0.0
   ],
   "location_ue_cm": [
    0.0,
    579.5,
    -418.2
   ],
   "note": "the arm hangs: its frame A turned 180 deg about x under the rail"
  }
 },
 "bones": [
  {
   "link": "carriage",
   "bone": "carriage",
   "parent": "root",
   "version": "both",
   "pivot_A_m": [
    0.0,
    0.0,
    0.0
   ],
   "static_mesh": "SM_DoorArm_Carriage",
   "channel": "location.x = c (ship x of the turntable centre)"
  },
  {
   "link": "carriage pinion",
   "bone": "carriage_pinion",
   "parent": "carriage",
   "version": "both",
   "pivot_A_m": [
    0.0,
    0.0,
    -0.1
   ],
   "static_mesh": "SM_DoorArm_CarriagePinion",
   "channel": "rotation_euler.y = (c - c_closed) / 0.040"
  },
  {
   "link": "turret",
   "bone": "turret",
   "parent": "carriage",
   "version": "both",
   "pivot_A_m": [
    0.0,
    0.0,
    0.0
   ],
   "static_mesh": "SM_DoorArm_Turret",
   "channel": "rotation_euler.z = q1"
  },
  {
   "link": "lower arm",
   "bone": "lower_arm",
   "parent": "turret",
   "version": "both",
   "pivot_A_m": [
    -0.341,
    0.0,
    0.517
   ],
   "static_mesh": "SM_DoorArm_LowerArm",
   "channel": "rotation_euler.y = -q2"
  },
  {
   "link": "J3 cylinder",
   "bone": "j3_cylinder",
   "parent": "lower_arm",
   "version": "both",
   "pivot_A_m": [
    -0.8646,
    0.0,
    0.847
   ],
   "static_mesh": "SM_DoorArm_J3Cylinder",
   "channel": "rotation_euler.y = -cyl"
  },
  {
   "link": "J3 piston",
   "bone": "j3_piston",
   "parent": "j3_cylinder",
   "version": "both",
   "pivot_A_m": [
    -1.6764,
    0.0,
    1.4564
   ],
   "static_mesh": "SM_DoorArm_J3Piston",
   "channel": "location.x/z = rest + u * (L - L0) along the rod"
  },
  {
   "link": "upper arm",
   "bone": "upper_arm",
   "parent": "lower_arm",
   "version": "both",
   "pivot_A_m": [
    -1.21,
    0.0,
    1.826
   ],
   "static_mesh": "SM_DoorArm_UpperArm",
   "channel": "rotation_euler.y = -q3"
  },
  {
   "link": "forearm",
   "bone": "forearm",
   "parent": "upper_arm",
   "version": "both",
   "pivot_A_m": [
    -0.077,
    0.0,
    2.0614
   ],
   "static_mesh": "SM_DoorArm_Forearm",
   "channel": "rotation_euler.x = q4"
  },
  {
   "link": "wrist head",
   "bone": "wrist_head",
   "parent": "forearm",
   "version": "both",
   "pivot_A_m": [
    0.957,
    0.0,
    2.0614
   ],
   "static_mesh": "SM_DoorArm_WristHead",
   "channel": "rotation_euler.y = q5"
  },
  {
   "link": "flange",
   "bone": "flange",
   "parent": "wrist_head",
   "version": "both",
   "pivot_A_m": [
    0.957,
    0.0,
    2.0614
   ],
   "static_mesh": "SM_DoorArm_Flange",
   "channel": "rotation_euler.x = q6"
  },
  {
   "link": "tool A hub",
   "bone": "tool_a_hub",
   "parent": "flange",
   "version": "A",
   "pivot_A_m": [
    0.957,
    0.0,
    2.0614
   ],
   "static_mesh": "SM_DoorArm_ToolAHub",
   "channel": "fixed to its parent (fingers: grip)"
  },
  {
   "link": "tool B",
   "bone": "tool_b",
   "parent": "flange",
   "version": "B",
   "pivot_A_m": [
    0.957,
    0.0,
    2.0614
   ],
   "static_mesh": "SM_DoorArm_ToolB",
   "channel": "fixed to its parent (fingers: grip)"
  },
  {
   "link": "finger top proximal",
   "bone": "finger_top_proximal",
   "parent": "tool_a_hub",
   "version": "A",
   "pivot_A_m": [
    1.1924,
    0.0,
    2.2352
   ],
   "static_mesh": "SM_DoorArm_FingerTopProximal",
   "channel": "fixed to its parent (fingers: grip)"
  },
  {
   "link": "finger top distal",
   "bone": "finger_top_distal",
   "parent": "finger_top_proximal",
   "version": "A",
   "pivot_A_m": [
    1.3563,
    0.0,
    2.3106
   ],
   "static_mesh": "SM_DoorArm_FingerTopDistal",
   "channel": "fixed to its parent (fingers: grip)"
  },
  {
   "link": "finger left proximal",
   "bone": "finger_left_proximal",
   "parent": "tool_a_hub",
   "version": "A",
   "pivot_A_m": [
    1.1924,
    0.1738,
    2.0614
   ],
   "static_mesh": "SM_DoorArm_FingerLeftProximal",
   "channel": "fixed to its parent (fingers: grip)"
  },
  {
   "link": "finger left distal",
   "bone": "finger_left_distal",
   "parent": "finger_left_proximal",
   "version": "A",
   "pivot_A_m": [
    1.3563,
    0.2492,
    2.0614
   ],
   "static_mesh": "SM_DoorArm_FingerLeftDistal",
   "channel": "fixed to its parent (fingers: grip)"
  },
  {
   "link": "finger bottom proximal",
   "bone": "finger_bottom_proximal",
   "parent": "tool_a_hub",
   "version": "A",
   "pivot_A_m": [
    1.1924,
    -0.0,
    1.8876
   ],
   "static_mesh": "SM_DoorArm_FingerBottomProximal",
   "channel": "fixed to its parent (fingers: grip)"
  },
  {
   "link": "finger bottom distal",
   "bone": "finger_bottom_distal",
   "parent": "finger_bottom_proximal",
   "version": "A",
   "pivot_A_m": [
    1.3563,
    -0.0,
    1.8122
   ],
   "static_mesh": "SM_DoorArm_FingerBottomDistal",
   "channel": "fixed to its parent (fingers: grip)"
  },
  {
   "link": "finger right proximal",
   "bone": "finger_right_proximal",
   "parent": "tool_a_hub",
   "version": "A",
   "pivot_A_m": [
    1.1924,
    -0.1738,
    2.0614
   ],
   "static_mesh": "SM_DoorArm_FingerRightProximal",
   "channel": "fixed to its parent (fingers: grip)"
  },
  {
   "link": "finger right distal",
   "bone": "finger_right_distal",
   "parent": "finger_right_proximal",
   "version": "A",
   "pivot_A_m": [
    1.3563,
    -0.2492,
    2.0614
   ],
   "static_mesh": "SM_DoorArm_FingerRightDistal",
   "channel": "fixed to its parent (fingers: grip)"
  }
 ],
 "joints": {
  "J1": {
   "axis": "+Z",
   "origin_A_m": [
    0,
    0,
    0
   ],
   "limits_deg": [
    -170,
    170
   ],
   "used_deg": {
    "AFT_A": [
     32.73,
     82.36
    ],
    "FORE_A": [
     97.64,
     147.27
    ],
    "AFT_B": [
     41.54,
     84.45
    ],
    "FORE_B": [
     95.55,
     138.46
    ]
   }
  },
  "J2": {
   "axis": "-Y",
   "origin_A_m": [
    -0.341,
    0.0,
    0.517
   ],
   "limits_deg": [
    -95,
    45
   ],
   "used_deg": {
    "AFT_A": [
     -52.92,
     9.77
    ],
    "FORE_A": [
     -52.92,
     9.77
    ],
    "AFT_B": [
     -60.37,
     -3.44
    ],
    "FORE_B": [
     -60.37,
     -3.44
    ]
   }
  },
  "J3": {
   "axis": "-Y",
   "origin_A_m": [
    -1.21,
    0.0,
    1.826
   ],
   "limits_deg": [
    -40,
    55
   ],
   "used_deg": {
    "AFT_A": [
     -24.39,
     29.11
    ],
    "FORE_A": [
     -24.39,
     29.11
    ],
    "AFT_B": [
     -13.56,
     42.2
    ],
    "FORE_B": [
     -13.56,
     42.2
    ]
   }
  },
  "J4": {
   "axis": "+X",
   "origin_A_m": [
    -0.077,
    0.0,
    2.0614
   ],
   "limits_deg": [
    -170,
    170
   ],
   "used_deg": {
    "AFT_A": [
     -52.54,
     -10.83
    ],
    "FORE_A": [
     10.83,
     52.54
    ],
    "AFT_B": [
     -47.91,
     -7.55
    ],
    "FORE_B": [
     7.55,
     47.91
    ]
   }
  },
  "J5": {
   "axis": "+Y",
   "origin_A_m": [
    0.957,
    0.0,
    2.0614
   ],
   "limits_deg": [
    -120,
    120
   ],
   "used_deg": {
    "AFT_A": [
     -74.4,
     -39.98
    ],
    "FORE_A": [
     -74.4,
     -39.98
    ],
    "AFT_B": [
     -66.44,
     -42.01
    ],
    "FORE_B": [
     -66.44,
     -42.01
    ]
   }
  },
  "J6": {
   "axis": "+X",
   "origin_A_m": [
    0.957,
    0.0,
    2.0614
   ],
   "limits_deg": [
    -170,
    170
   ],
   "used_deg": {
    "AFT_A": [
     11.54,
     52.32
    ],
    "FORE_A": [
     -52.32,
     -11.54
    ],
    "AFT_B": [
     7.95,
     49.08
    ],
    "FORE_B": [
     -49.08,
     -7.95
    ]
   }
  }
 },
 "carriage": {
  "travel_x_m": {
   "AFT": [
    -8.1158,
    -3.0143
   ],
   "FORE": [
    9.1143,
    14.2158
   ]
  },
  "schedule": "c = A + B * door_x",
  "A_B": {
   "AFT": [
    -3.198458,
    0.830925
   ],
   "FORE": [
    4.229813,
    0.830925
   ]
  },
  "rail_y_m": [
   -6.0238,
   -5.5662
  ],
  "rail_z_m": [
   -4.01,
   -3.6745
  ],
  "pinion_pitch_radius_m": 0.04
 },
 "doors": {
  "AFT": {
   "object": "Moonpool_Door_Aft",
   "closed_location_m": [
    0.2216,
    -6.1,
    -7.503
   ],
   "attach_local_m": [
    -2.1,
    -2.21778,
    1.717895
   ],
   "face_normal_local": [
    0.0,
    0.908853784,
    0.417114852
   ],
   "tool_axes_world": {
    "x_t": [
     0.0,
     -0.908853784,
     -0.417114852
    ],
    "y_t": [
     -1.0,
     -0.0,
     0.0
    ],
    "z_t": [
     -0.0,
     0.417114852,
     -0.908853784
    ]
   },
   "wrist_centre_off_face_m": {
    "A": 0.63,
    "B": 0.326
   },
   "frames": {
    "closed": 1,
    "retracted_inboard": 12,
    "open": 48,
    "close_starts": 72,
    "retracted_again": 108,
    "closed_again": 120,
    "fps": 30
   }
  },
  "FORE": {
   "object": "Moonpool_Door_Fore",
   "closed_location_m": [
    5.8784,
    -6.1,
    -7.503
   ],
   "attach_local_m": [
    2.1,
    -2.21778,
    1.717895
   ],
   "face_normal_local": [
    0.0,
    0.908853784,
    0.417114852
   ],
   "tool_axes_world": {
    "x_t": [
     0.0,
     -0.908853784,
     -0.417114852
    ],
    "y_t": [
     -1.0,
     -0.0,
     0.0
    ],
    "z_t": [
     -0.0,
     0.417114852,
     -0.908853784
    ]
   },
   "wrist_centre_off_face_m": {
    "A": 0.63,
    "B": 0.326
   },
   "frames": {
    "closed": 1,
    "retracted_inboard": 12,
    "open": 48,
    "close_starts": 72,
    "retracted_again": 108,
    "closed_again": 120,
    "fps": 30
   }
  }
 },
 "ik_closed_form": {
  "note": "DESIGN.md section 5; the rig's drivers and build/dra_ik.py compute it",
  "L2": 1.5712,
  "L3": 2.1797,
  "beta_rad": 0.108205,
  "phi_l0_rad": 2.156857,
  "j2_r": 0.341,
  "j2_h": 0.517,
  "rod": {
   "trunnion_rest_A": [
    -0.8646,
    0.0,
    0.847
   ],
   "knob_rest_A": [
    -1.6764,
    0.0,
    1.4564
   ],
   "trunnion_in_lower": [
    -0.5236,
    0.0,
    0.33
   ],
   "knob_in_upper": [
    -0.4664,
    0.0,
    -0.3696
   ],
   "length_rest": 1.0151,
   "type": "double-acting hydraulic cylinder on a middle trunnion (the knee pin); barrel 0.30 m behind and 0.50 m ahead of the trunnion (gland 0.46..0.50); rod 0.80 m from its eye to the piston; gland collar at the barrel's front"
  }
 },
 "version_switch": {
  "control": "DoorArm | CONTROLS",
  "property": "version",
  "values": {
   "0": "A gripper (grab limbs)",
   "1": "B plate (red sketch)"
  },
  "grip": "CONTROLS['grip'] 0 open .. 1 closed on the knob (default 1)",
  "hides": "hide_viewport and hide_render of every object of the other version (arms, curves, fixtures); collections 'DoorArm | version A' / 'DoorArm | version B'",
  "unreal": "two skeletal meshes on one skeleton layout: SK_DoorRobotArm_A / _B; show one"
 },
 "fbx": [
  "SM_DoorRobotArm_Links.fbx",
  "SM_DoorArm_RailKit_AFT.fbx",
  "SM_DoorArm_FixtureA_AFT.fbx",
  "SM_DoorArm_FixtureB_AFT.fbx",
  "SM_DoorArm_RailKit_FORE.fbx",
  "SM_DoorArm_FixtureA_FORE.fbx",
  "SM_DoorArm_FixtureB_FORE.fbx",
  "SK_DoorRobotArm_A.fbx",
  "SK_DoorRobotArm_A_LOD1.fbx",
  "SK_DoorRobotArm_A_LOD2.fbx",
  "A_DoorRobotArm_A_AFT_OpenClose.fbx",
  "A_DoorRobotArm_A_FORE_OpenClose.fbx",
  "SK_DoorRobotArm_B.fbx",
  "SK_DoorRobotArm_B_LOD1.fbx",
  "SK_DoorRobotArm_B_LOD2.fbx",
  "A_DoorRobotArm_B_AFT_OpenClose.fbx",
  "A_DoorRobotArm_B_FORE_OpenClose.fbx",
  "SK_DoorArm_Chain_AFT.fbx",
  "A_DoorArm_Chain_AFT_OpenClose.fbx",
  "SK_DoorArm_Chain_FORE.fbx",
  "A_DoorArm_Chain_FORE_OpenClose.fbx"
 ],
 "lods_tris": {
  "A": {
   "LOD0": 191771,
   "LOD1": 96802,
   "LOD2": 39788
  },
  "B": {
   "LOD0": 166343,
   "LOD1": 84088,
   "LOD2": 34714
  }
 },
 "materials": [
  {
   "material": "M_DoorArm_PaintWhite",
   "kind": "painted",
   "tint": [
    0.62,
    0.62,
    0.605
   ],
   "shade": [
    0.86,
    1.04
   ],
   "rough": [
    0.46,
    0.64
   ],
   "coat": 0.1,
   "relief": 0.55,
   "wear": 0.24,
   "wear_col": [
    0.36,
    0.36,
    0.37
   ],
   "grime": 0.32,
   "dust": 0.06,
   "peel": 0.22,
   "peel_scale": 140.0,
   "peel_dist": 0.0011,
   "grain": 0.1,
   "label": "satin white powder coat"
  },
  {
   "material": "M_DoorArm_Orange",
   "kind": "painted",
   "tint": [
    0.7,
    0.15,
    0.018
   ],
   "shade": [
    0.88,
    1.05
   ],
   "rough": [
    0.45,
    0.6
   ],
   "coat": 0.1,
   "relief": 0.4,
   "wear": 0.2,
   "grime": 0.25,
   "dust": 0.03,
   "peel": 0.04,
   "grain": 0.05,
   "label": "safety orange"
  },
  {
   "material": "M_DoorArm_Gunmetal",
   "kind": "painted",
   "tint": [
    0.075,
    0.078,
    0.085
   ],
   "shade": [
    0.78,
    1.25
   ],
   "rough": [
    0.32,
    0.52
   ],
   "coat": 0.08,
   "relief": 0.5,
   "wear": 0.3,
   "wear_col": [
    0.52,
    0.52,
    0.54
   ],
   "grime": 0.25,
   "dust": 0.06,
   "peel": 0.0,
   "metallic": 0.75,
   "tile": 0.7,
   "label": "dark gunmetal"
  },
  {
   "material": "M_DoorArm_BlackMetal",
   "kind": "painted",
   "tint": [
    0.028,
    0.029,
    0.032
   ],
   "shade": [
    0.76,
    1.32
   ],
   "rough": [
    0.4,
    0.62
   ],
   "coat": 0.06,
   "relief": 0.55,
   "wear": 0.4,
   "wear_col": [
    0.42,
    0.42,
    0.44
   ],
   "grime": 0.2,
   "dust": 0.06,
   "peel": 0.0,
   "metallic": 0.55,
   "tile": 0.7,
   "label": "black metal (the carriage's stacked plates)"
  },
  {
   "material": "M_DoorArm_Steel",
   "kind": "steel"
  },
  {
   "material": "M_DoorArm_Rubber",
   "kind": "rubber"
  },
  {
   "material": "M_DoorArm_Glass",
   "kind": "glass"
  },
  {
   "material": "M_DoorArm_Lamp",
   "kind": "lamp"
  }
 ]
}