{
  "schema_version": 1,
  "meta": {
    "name": "free_humanoid_submersible",
    "version": "0.1.0",
    "units_length": "Metre",
    "author": "Free Humanoid Submersible Contributors",
    "description": "Free Humanoid Submersible — fourth morphology in the OpenIE humanoid family alongside the bipedal Free Humanoid Platform (humanoid_bipedal), the wheeled Free Humanoid Wheeled (humanoid_wheeled), and the centaur Free Humanoid Centaur (humanoid_quadruped). Targeted at the shoal dock-A subsurface service mission and the underwater bimanual-manipulation deployment band (rake-array clearing, intake-screen brushing, bilge / outflow inspection, hull-mating-fixture maintenance). 8-thruster vectored thruster pod replacing the bipedal legs / wheeled base / centaur quadruped base; bipedal upper body inherited verbatim with submerged-rated wrist seals. ~80 kg in air, ~+2 kg negatively buoyant in fresh water, 2 kWh subsea Li-ion battery, 50 m design depth (Phase 2 target), 6061-T6 aluminum + Delrin-endcap pressure hull with double-O-ring seals. Thruster layout: 4 horizontal vectored at +/-45 deg + 4 vertical, ROV-class (canonical Bluefin / REMUS / SAAB Sabertooth pattern); 6-thruster Aquanaut layout is the leaner alternative held as a future descriptor variant. Comms: JANUS / STANAG 4748 acoustic (lingua franca per shoal ARCHITECTURE) + tethered Ethernet for dock-coupled high-bandwidth ops. Sensing: depth (subsea pressure transducer), DVL (Doppler velocity log), USBL (acoustic positioning), multibeam imaging sonar, downward camera array, IMU; bipedal head stereo camera retained with re-derived submerged rating. Safety supervisor: bipedal-sibling MathGround Simplex pattern plus submersible-specific invariants (depth limit, hull-flood detection, thruster-saturation, thrust-allocation feasibility, surface-emergency-ascent). Mission integration with shoal dock-A subsurface (the centaur services dock-A surface; this morphology services dock-A subsurface). Phase 1 (v0.1.0) descriptor: pressure hull, thruster, depth/IMU/leak sensors all vendor-pinned to Blue Robotics commercial-off-the-shelf SKUs; DVL pinned to Cerulean DVL-75. Total mass and inertia are still iterated in Phase 2 against fabrication; Phase 1 numbers are derived from BR data sheets + Bluefin 1.5 kWh battery datasheet + reasonable structural estimates. Compiles to MuJoCo MJCF + Genesis fluid sim via the OpenLoco descriptor compiler.",
    "generator": "free-humanoid-submersible-scaffold",
    "morphology_class": "humanoid_submersible",
    "morphology_family": "humanoid_submersible",
    "alias": "submersible",
    "inherits_upper_body_from": "free-humanoid-platform",
    "operating_medium": "submerged_water",
    "phase": "Phase 1 — descriptor with vendor-pinned components and BOM-grade actuator/sensor specs (2026-05-07). Phase 2 work: pressure-hull fabrication + thruster-pod prototype + dry-side bench test. Phase 3: pool trial. Phase 4: open-water shoal dock-A subsurface trial.",
    "corpus_anchors": [
      "genesis-embodied-ai-simulator",
      "honda-e0",
      "shadow-dexterous-hand",
      "pisa-iit-softhand",
      "dlr-hand-ii",
      "mit-cheetah-2",
      "mjbots-moteus",
      "mini-cheetah",
      "sherman-simplex-architecture",
      "control-barrier-functions",
      "iso-10218-collaborative-robots",
      "alvin-hov-1964",
      "jason-rov-1989",
      "nereus-hrov-2008",
      "bluefin-21-auv",
      "kongsberg-remus-100-auv",
      "slocum-glider-auv",
      "seaglider-auv-2001",
      "aquanaut-houston-2017",
      "oceanone-stanford-2016",
      "ocean-onek-stanford-2022",
      "stonefish-sim-2018",
      "unetstack-subnero-2014",
      "janus-stanag-4748-2017",
      "triton-xlx-rov",
      "oceaneering-magnum-rov",
      "saab-seaeye-falcon-rov"
    ],
    "corpus_anchors_recommended_future_additions": [
      "blue-robotics-corp-2014",
      "cerulean-sonar-corp",
      "general-dynamics-mission-systems-bluefin-bps"
    ],
    "siblings": {
      "bipedal_morphology": "../../free-humanoid-platform/descriptor/free-humanoid.udd.json",
      "wheeled_morphology": "../../free-humanoid-wheeled/descriptor/free-humanoid-wheeled.udd.json",
      "centaur_morphology": "../../free-humanoid-centaur/descriptor/free-humanoid-centaur.udd.json",
      "deployment_partner": "../../clean_fish/ARCHITECTURE.md"
    }
  },
  "robot": {
    "links": [
      { "name": "pressure_hull", "mass_kg": 12.500, "inertia": [3.0e-1, 7.0e-1, 3.0e-1, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_pressure_hull_v0" }, "_metadata": { "comment": "Phase 1 spec: Blue Robotics 6\" aluminum watertight enclosure series, 12\" length tube + 2 acrylic flat endcaps with double O-ring radial seals. 950 m depth-rated stock; 50 m operating design uses Phase 1 stock at ~5% of rated depth (high safety margin). Houses subsea Li-ion battery, Jetson Orin Nano compute, Moteus n1 actuator drivers, JANUS+USBL comms electronics, IMU, leak sensor. 8 penetrators (4 thruster pairs + 1 DVL + 1 USBL + 1 depth + 1 tether) on aft endcap. Stock penetrators are 1.5x design-depth rated. The dry compartment is the single point of failure on hull seal — leak sensor triggers immediate emergency-ascent (mode 'surfacing'). Corpus citation: alvin-hov-1964, jason-rov-1989, bluefin-21-auv. Vendor: Blue Robotics (recommended-future-corpus-additions: blue-robotics-corp-2014). Mass = 12.5 kg dry incl. internal components (battery 4 kg + compute+drivers 2 kg + structure 6.5 kg)." } },
      { "name": "thruster_pod_frame", "mass_kg": 4.000, "inertia": [6.0e-2, 1.2e-1, 6.0e-2, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_thruster_frame_v0" }, "_metadata": { "comment": "External space-frame mounting the 8 thrusters and the ballast-trim assembly to the pressure hull. Aluminum tube + 3D-printed nylon clamps. Hydrodynamically streamlined for forward transit." } },
      { "name": "ballast_tank", "mass_kg": 1.500, "inertia": [2.0e-3, 2.0e-3, 2.0e-3, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_ballast_v0" }, "_metadata": { "comment": "Variable-buoyancy ballast trim, ~1.5 L water displacement at centerline. Fixed-trim plates at v0.2 (architectural call held: active syringe-pump variant deferred to v0.3+). Trim is set above water for a given deployment site density." } },
      { "name": "comms_module", "mass_kg": 1.200, "inertia": [1.0e-3, 1.0e-3, 1.0e-3, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_comms_v0" }, "_metadata": { "comment": "External pressure-balanced housing for the JANUS acoustic transducer and the USBL transducer. Penetrators to inside-hull comms electronics. Corpus citation: janus-stanag-4748 (recommended-future), unetstack-subnero (recommended-future)." } },

      { "name": "thruster_horizontal_FL", "mass_kg": 0.345, "inertia": [3.0e-4, 5.0e-4, 5.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_thruster_t200_v0" }, "_metadata": { "comment": "Front-left horizontal thruster, vectored at +45 deg in plan view. Blue Robotics T200 R3 (BR-T200-R3-RP), submersible 950 m depth-rated brushless DC thruster. 5.1 kgf (50 N) max forward at 16V, 4.1 kgf (40 N) max reverse, 350 W peak. Operating range 6-20 V; nominal 14.8 V (4S Li-ion). Mass 0.345 kg per unit. ESC: Blue Robotics Basic ESC R3 inside the dry hull. Wired to a Moteus-class CAN-FD bus or to a discrete PWM ESC bank. Corpus citation: bluefin-21-auv, kongsberg-remus-100-auv, oceanone-stanford-2016 for the 8-thruster ROV-class layout pattern." } },
      { "name": "thruster_horizontal_FR", "mass_kg": 0.345, "inertia": [3.0e-4, 5.0e-4, 5.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_thruster_t200_v0" } },
      { "name": "thruster_horizontal_RL", "mass_kg": 0.345, "inertia": [3.0e-4, 5.0e-4, 5.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_thruster_t200_v0" } },
      { "name": "thruster_horizontal_RR", "mass_kg": 0.345, "inertia": [3.0e-4, 5.0e-4, 5.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_thruster_t200_v0" } },
      { "name": "thruster_vertical_FL", "mass_kg": 0.345, "inertia": [3.0e-4, 5.0e-4, 5.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_thruster_t200_v0" }, "_metadata": { "comment": "Forward-left vertical thruster, axis vertical. Heave/roll/pitch authority." } },
      { "name": "thruster_vertical_FR", "mass_kg": 0.345, "inertia": [3.0e-4, 5.0e-4, 5.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_thruster_t200_v0" } },
      { "name": "thruster_vertical_RL", "mass_kg": 0.345, "inertia": [3.0e-4, 5.0e-4, 5.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_thruster_t200_v0" } },
      { "name": "thruster_vertical_RR", "mass_kg": 0.345, "inertia": [3.0e-4, 5.0e-4, 5.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_thruster_t200_v0" } },

      { "name": "pelvis", "mass_kg": 8.000, "inertia": [8.0e-2, 6.0e-2, 4.0e-2, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_pelvis_v0" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "torso", "mass_kg": 14.000, "inertia": [2.5e-1, 2.0e-1, 1.0e-1, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_torso_v0" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "head",  "mass_kg": 4.000, "inertia": [2.0e-2, 2.0e-2, 1.5e-2, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_submersible_head_v0" }, "_metadata": { "inherited_from": "free-humanoid-platform", "comment": "Submerged-rated stereo + downward camera array. No 16-channel rotating lidar (lidar is ineffective underwater; replaced by multibeam imaging sonar mounted on pressure hull, not on head)." } },
      { "name": "neck_yaw_link",   "mass_kg": 0.30, "inertia": [4.0e-4, 4.0e-4, 4.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_neck_yaw_v0" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },

      { "name": "L_clavicle",  "mass_kg": 0.50, "inertia": [4.0e-4, 4.0e-4, 4.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_clavicle_v0" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_shoulder_pitch_housing", "mass_kg": 0.80, "inertia": [8.0e-4, 8.0e-4, 6.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_harmonic_drive__ratio-100__motor-bldc-100w" }, "_metadata": { "inherited_from": "free-humanoid-platform", "comment": "Submerged-rated wrist seals downstream; this housing is inside the dry-side of the upper-body envelope until the wrist." } },
      { "name": "L_shoulder_roll_housing",  "mass_kg": 0.80, "inertia": [8.0e-4, 8.0e-4, 6.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_harmonic_drive__ratio-100__motor-bldc-100w" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_upper_arm",  "mass_kg": 1.50, "inertia": [3.0e-3, 3.0e-3, 1.0e-3, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_brackets_arm_segment__length-300" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_elbow_housing",   "mass_kg": 0.60, "inertia": [6.0e-4, 6.0e-4, 4.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_harmonic_drive__ratio-100__motor-bldc-100w" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_forearm",    "mass_kg": 1.20, "inertia": [2.5e-3, 2.5e-3, 8.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_brackets_arm_segment__length-260" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_wrist_pitch_link", "mass_kg": 0.20, "inertia": [1.5e-4, 1.5e-4, 1.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_tendon_block__channels-3" }, "_metadata": { "inherited_from": "free-humanoid-platform", "comment": "Tendon-channel pass-through carries submerged-rated cable jacket and hydrolytically-stable cable material from this point distal." } },
      { "name": "L_wrist_roll_link",  "mass_kg": 0.20, "inertia": [1.5e-4, 1.5e-4, 1.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_tendon_block__channels-3" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_hand", "mass_kg": 0.45, "inertia": [3.0e-4, 3.0e-4, 2.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_hand_underactuated_submerged_v0" }, "_metadata": { "inherited_from": "free-humanoid-platform", "comment": "Submerged-rated underactuated hand. Tendon-channel jackets and synergy-spool housing are sealed against ingress; mechanical synergy DoF is unchanged." } },

      { "name": "R_clavicle",  "mass_kg": 0.50, "inertia": [4.0e-4, 4.0e-4, 4.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_clavicle_v0" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_shoulder_pitch_housing", "mass_kg": 0.80, "inertia": [8.0e-4, 8.0e-4, 6.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_harmonic_drive__ratio-100__motor-bldc-100w" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_shoulder_roll_housing",  "mass_kg": 0.80, "inertia": [8.0e-4, 8.0e-4, 6.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_harmonic_drive__ratio-100__motor-bldc-100w" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_upper_arm",  "mass_kg": 1.50, "inertia": [3.0e-3, 3.0e-3, 1.0e-3, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_brackets_arm_segment__length-300" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_elbow_housing",   "mass_kg": 0.60, "inertia": [6.0e-4, 6.0e-4, 4.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_harmonic_drive__ratio-100__motor-bldc-100w" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_forearm",    "mass_kg": 1.20, "inertia": [2.5e-3, 2.5e-3, 8.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_brackets_arm_segment__length-260" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_wrist_pitch_link", "mass_kg": 0.20, "inertia": [1.5e-4, 1.5e-4, 1.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_tendon_block__channels-3" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_wrist_roll_link",  "mass_kg": 0.20, "inertia": [1.5e-4, 1.5e-4, 1.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "catalog_joints_tendon_block__channels-3" }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_hand", "mass_kg": 0.45, "inertia": [3.0e-4, 3.0e-4, 2.0e-4, 0, 0, 0], "geometry_ref": { "type": "mesh_hash", "hash": "free_humanoid_hand_underactuated_submerged_v0" }, "_metadata": { "inherited_from": "free-humanoid-platform" } }
    ],
    "joints": [
      { "name": "POD_frame_to_hull", "joint_type": "fixed", "parent_link": "pressure_hull", "child_link": "thruster_pod_frame", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "_metadata": { "comment": "Thruster pod space-frame is rigidly mounted to the pressure hull." } },
      { "name": "BALLAST_to_pod", "joint_type": "fixed", "parent_link": "thruster_pod_frame", "child_link": "ballast_tank", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, -0.05], "origin_rpy": [0, 0, 0] },
      { "name": "COMMS_to_hull", "joint_type": "fixed", "parent_link": "pressure_hull", "child_link": "comms_module", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, 0.20], "origin_rpy": [0, 0, 0] },

      { "name": "T_HFL_fixed", "joint_type": "fixed", "parent_link": "thruster_pod_frame", "child_link": "thruster_horizontal_FL", "axis": [0, 0, 1], "origin_xyz": [ 0.30,  0.20, 0.00], "origin_rpy": [0, 0,  0.7854], "_metadata": { "comment": "Front-left horizontal vectored at +45 deg yaw. Thrust axis is +X in the link's local frame; rpy rotates the link to align thrust at +45 deg in the pod frame." } },
      { "name": "T_HFR_fixed", "joint_type": "fixed", "parent_link": "thruster_pod_frame", "child_link": "thruster_horizontal_FR", "axis": [0, 0, 1], "origin_xyz": [ 0.30, -0.20, 0.00], "origin_rpy": [0, 0, -0.7854] },
      { "name": "T_HRL_fixed", "joint_type": "fixed", "parent_link": "thruster_pod_frame", "child_link": "thruster_horizontal_RL", "axis": [0, 0, 1], "origin_xyz": [-0.30,  0.20, 0.00], "origin_rpy": [0, 0,  2.3562] },
      { "name": "T_HRR_fixed", "joint_type": "fixed", "parent_link": "thruster_pod_frame", "child_link": "thruster_horizontal_RR", "axis": [0, 0, 1], "origin_xyz": [-0.30, -0.20, 0.00], "origin_rpy": [0, 0, -2.3562] },

      { "name": "T_VFL_fixed", "joint_type": "fixed", "parent_link": "thruster_pod_frame", "child_link": "thruster_vertical_FL", "axis": [0, 0, 1], "origin_xyz": [ 0.20,  0.18, 0.00], "origin_rpy": [0, 1.5708, 0], "_metadata": { "comment": "Forward-left vertical thruster. Thrust axis is +X in the link's local frame; rpy rotates to align thrust along world +Z (heave up positive)." } },
      { "name": "T_VFR_fixed", "joint_type": "fixed", "parent_link": "thruster_pod_frame", "child_link": "thruster_vertical_FR", "axis": [0, 0, 1], "origin_xyz": [ 0.20, -0.18, 0.00], "origin_rpy": [0, 1.5708, 0] },
      { "name": "T_VRL_fixed", "joint_type": "fixed", "parent_link": "thruster_pod_frame", "child_link": "thruster_vertical_RL", "axis": [0, 0, 1], "origin_xyz": [-0.20,  0.18, 0.00], "origin_rpy": [0, 1.5708, 0] },
      { "name": "T_VRR_fixed", "joint_type": "fixed", "parent_link": "thruster_pod_frame", "child_link": "thruster_vertical_RR", "axis": [0, 0, 1], "origin_xyz": [-0.20, -0.18, 0.00], "origin_rpy": [0, 1.5708, 0] },

      { "name": "HULL_to_pelvis", "joint_type": "fixed", "parent_link": "pressure_hull", "child_link": "pelvis", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, 0.30], "origin_rpy": [0, 0, 0], "_metadata": { "comment": "Upper-body pelvis mounts to the top of the pressure hull at fixed origin. Replaces the bipedal sibling's free-floating pelvis root, the wheeled sibling's TOWER_lift prismatic, and the centaur's CHASSIS_to_pelvis fixed joint. The submersible's free-DoF root is the pressure hull itself, which floats in the simulator's water domain." } },

      { "name": "WAIST_yaw", "joint_type": "revolute", "parent_link": "pelvis", "child_link": "torso", "axis": [0, 0, 1], "origin_xyz": [0.0, 0.0, 0.18], "origin_rpy": [0, 0, 0], "limits": { "lower": -1.5, "upper": 1.5, "effort_max": 80.0, "velocity_max": 4.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },

      { "name": "NECK_yaw",   "joint_type": "revolute", "parent_link": "torso", "child_link": "neck_yaw_link", "axis": [0, 0, 1], "origin_xyz": [0.0, 0.0, 0.42], "origin_rpy": [0, 0, 0], "limits": { "lower": -1.4, "upper": 1.4, "effort_max": 8.0, "velocity_max": 6.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "NECK_pitch", "joint_type": "revolute", "parent_link": "neck_yaw_link", "child_link": "head", "axis": [0, 1, 0], "origin_xyz": [0.0, 0.0, 0.06], "origin_rpy": [0, 0, 0], "limits": { "lower": -0.7, "upper": 0.7, "effort_max": 8.0, "velocity_max": 6.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },

      { "name": "L_CLAVICLE_fixed", "joint_type": "fixed", "parent_link": "torso", "child_link": "L_clavicle", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.16, 0.36], "origin_rpy": [0, 0, 0], "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_SHOULDER_pitch", "joint_type": "revolute", "parent_link": "L_clavicle", "child_link": "L_shoulder_pitch_housing", "axis": [0, 1, 0], "origin_xyz": [0.00, 0.04, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -3.14, "upper": 3.14, "effort_max": 60.0, "velocity_max": 6.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_SHOULDER_roll",  "joint_type": "revolute", "parent_link": "L_shoulder_pitch_housing", "child_link": "L_shoulder_roll_housing", "axis": [1, 0, 0], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -0.4, "upper": 3.0, "effort_max": 60.0, "velocity_max": 6.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_SHOULDER_yaw",   "joint_type": "revolute", "parent_link": "L_shoulder_roll_housing", "child_link": "L_upper_arm", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -2.5, "upper": 2.5, "effort_max": 40.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_ELBOW_pitch",    "joint_type": "revolute", "parent_link": "L_upper_arm", "child_link": "L_elbow_housing", "axis": [0, 1, 0], "origin_xyz": [0.00, 0.00, -0.30], "origin_rpy": [0, 0, 0], "limits": { "lower": -2.5, "upper": 0.0, "effort_max": 40.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_ELBOW_to_forearm", "joint_type": "fixed", "parent_link": "L_elbow_housing", "child_link": "L_forearm", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_WRIST_yaw",   "joint_type": "revolute", "parent_link": "L_forearm", "child_link": "L_wrist_pitch_link", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, -0.26], "origin_rpy": [0, 0, 0], "limits": { "lower": -2.5, "upper": 2.5, "effort_max": 8.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_WRIST_pitch", "joint_type": "revolute", "parent_link": "L_wrist_pitch_link", "child_link": "L_wrist_roll_link", "axis": [0, 1, 0], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -1.0, "upper": 1.0, "effort_max": 8.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_WRIST_roll",  "joint_type": "revolute", "parent_link": "L_wrist_roll_link", "child_link": "L_hand", "axis": [1, 0, 0], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -1.6, "upper": 1.6, "effort_max": 6.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },

      { "name": "R_CLAVICLE_fixed", "joint_type": "fixed", "parent_link": "torso", "child_link": "R_clavicle", "axis": [0, 0, 1], "origin_xyz": [0.00, -0.16, 0.36], "origin_rpy": [0, 0, 0], "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_SHOULDER_pitch", "joint_type": "revolute", "parent_link": "R_clavicle", "child_link": "R_shoulder_pitch_housing", "axis": [0, 1, 0], "origin_xyz": [0.00, -0.04, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -3.14, "upper": 3.14, "effort_max": 60.0, "velocity_max": 6.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_SHOULDER_roll",  "joint_type": "revolute", "parent_link": "R_shoulder_pitch_housing", "child_link": "R_shoulder_roll_housing", "axis": [1, 0, 0], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -3.0, "upper": 0.4, "effort_max": 60.0, "velocity_max": 6.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_SHOULDER_yaw",   "joint_type": "revolute", "parent_link": "R_shoulder_roll_housing", "child_link": "R_upper_arm", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -2.5, "upper": 2.5, "effort_max": 40.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_ELBOW_pitch",    "joint_type": "revolute", "parent_link": "R_upper_arm", "child_link": "R_elbow_housing", "axis": [0, 1, 0], "origin_xyz": [0.00, 0.00, -0.30], "origin_rpy": [0, 0, 0], "limits": { "lower": -2.5, "upper": 0.0, "effort_max": 40.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_ELBOW_to_forearm", "joint_type": "fixed", "parent_link": "R_elbow_housing", "child_link": "R_forearm", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_WRIST_yaw",   "joint_type": "revolute", "parent_link": "R_forearm", "child_link": "R_wrist_pitch_link", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, -0.26], "origin_rpy": [0, 0, 0], "limits": { "lower": -2.5, "upper": 2.5, "effort_max": 8.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_WRIST_pitch", "joint_type": "revolute", "parent_link": "R_wrist_pitch_link", "child_link": "R_wrist_roll_link", "axis": [0, 1, 0], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -1.0, "upper": 1.0, "effort_max": 8.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_WRIST_roll",  "joint_type": "revolute", "parent_link": "R_wrist_roll_link", "child_link": "R_hand", "axis": [1, 0, 0], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": -1.6, "upper": 1.6, "effort_max": 6.0, "velocity_max": 8.0 }, "_metadata": { "inherited_from": "free-humanoid-platform" } },

      { "name": "L_HAND_synergy", "joint_type": "revolute", "parent_link": "L_hand", "child_link": "L_hand", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": 0.0, "upper": 1.0, "effort_max": 6.0, "velocity_max": 52.0 }, "_metadata": { "synergy_dof": true, "spool_radius_m": 0.008, "inherited_from": "free-humanoid-platform" } },
      { "name": "R_HAND_synergy", "joint_type": "revolute", "parent_link": "R_hand", "child_link": "R_hand", "axis": [0, 0, 1], "origin_xyz": [0.00, 0.00, 0.00], "origin_rpy": [0, 0, 0], "limits": { "lower": 0.0, "upper": 1.0, "effort_max": 6.0, "velocity_max": 52.0 }, "_metadata": { "synergy_dof": true, "spool_radius_m": 0.008, "inherited_from": "free-humanoid-platform" } }
    ],
    "actuator_slots": [
      { "name": "T_HFL", "joint": "T_HFL_fixed", "tier": 2, "type": "thruster_continuous_rotation", "peak_thrust_n": 50.0, "continuous_thrust_n": 25.0, "max_velocity_rad_s": 320.0, "corpus_citation": "bluefin-21-auv", "_metadata": { "part_number": "BR-T200-R3-RP", "controller_part_number": "Blue Robotics Basic ESC R3 (BR-BESC30-R3)", "vendor": "Blue Robotics", "comment": "Front-left horizontal vectored thruster. Thrust force + reaction torque on the platform body are the controlled outputs in the simulator; modeled as a continuous-rotation propeller actuator with a quadratic thrust-vs-rpm map (per BR T200 datasheet). Corpus citation: bluefin-21-auv, kongsberg-remus-100-auv, triton-xlx-rov, oceanone-stanford-2016 for the 8-thruster ROV-class layout pattern." } },
      { "name": "T_HFR", "joint": "T_HFR_fixed", "tier": 2, "type": "thruster_continuous_rotation", "peak_thrust_n": 50.0, "continuous_thrust_n": 25.0, "max_velocity_rad_s": 320.0, "corpus_citation": "bluefin-21-auv" },
      { "name": "T_HRL", "joint": "T_HRL_fixed", "tier": 2, "type": "thruster_continuous_rotation", "peak_thrust_n": 50.0, "continuous_thrust_n": 25.0, "max_velocity_rad_s": 320.0, "corpus_citation": "bluefin-21-auv" },
      { "name": "T_HRR", "joint": "T_HRR_fixed", "tier": 2, "type": "thruster_continuous_rotation", "peak_thrust_n": 50.0, "continuous_thrust_n": 25.0, "max_velocity_rad_s": 320.0, "corpus_citation": "bluefin-21-auv" },
      { "name": "T_VFL", "joint": "T_VFL_fixed", "tier": 2, "type": "thruster_continuous_rotation", "peak_thrust_n": 50.0, "continuous_thrust_n": 25.0, "max_velocity_rad_s": 320.0, "corpus_citation": "bluefin-21-auv" },
      { "name": "T_VFR", "joint": "T_VFR_fixed", "tier": 2, "type": "thruster_continuous_rotation", "peak_thrust_n": 50.0, "continuous_thrust_n": 25.0, "max_velocity_rad_s": 320.0, "corpus_citation": "bluefin-21-auv" },
      { "name": "T_VRL", "joint": "T_VRL_fixed", "tier": 2, "type": "thruster_continuous_rotation", "peak_thrust_n": 50.0, "continuous_thrust_n": 25.0, "max_velocity_rad_s": 320.0, "corpus_citation": "bluefin-21-auv" },
      { "name": "T_VRR", "joint": "T_VRR_fixed", "tier": 2, "type": "thruster_continuous_rotation", "peak_thrust_n": 50.0, "continuous_thrust_n": 25.0, "max_velocity_rad_s": 320.0, "corpus_citation": "bluefin-21-auv" },

      { "name": "WAIST_yaw",        "joint": "WAIST_yaw",        "tier": 2, "type": "qdd",            "corpus_citation": "mini-cheetah", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "NECK_yaw",         "joint": "NECK_yaw",         "tier": 1, "type": "qdd",            "corpus_citation": "mini-cheetah", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "NECK_pitch",       "joint": "NECK_pitch",       "tier": 1, "type": "qdd",            "corpus_citation": "mini-cheetah", "_metadata": { "inherited_from": "free-humanoid-platform" } },

      { "name": "L_SHOULDER_pitch", "joint": "L_SHOULDER_pitch", "tier": 2, "type": "harmonic_drive", "corpus_citation": "honda-e0", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_SHOULDER_roll",  "joint": "L_SHOULDER_roll",  "tier": 2, "type": "harmonic_drive", "corpus_citation": "honda-e0", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_SHOULDER_yaw",   "joint": "L_SHOULDER_yaw",   "tier": 2, "type": "harmonic_drive", "corpus_citation": "honda-e0", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_ELBOW_pitch",    "joint": "L_ELBOW_pitch",    "tier": 2, "type": "harmonic_drive", "corpus_citation": "honda-e0", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_WRIST_yaw",      "joint": "L_WRIST_yaw",      "tier": 1, "type": "tendon",         "corpus_citation": "shadow-dexterous-hand", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_WRIST_pitch",    "joint": "L_WRIST_pitch",    "tier": 1, "type": "tendon",         "corpus_citation": "shadow-dexterous-hand", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "L_WRIST_roll",     "joint": "L_WRIST_roll",     "tier": 1, "type": "tendon",         "corpus_citation": "shadow-dexterous-hand", "_metadata": { "inherited_from": "free-humanoid-platform" } },

      { "name": "R_SHOULDER_pitch", "joint": "R_SHOULDER_pitch", "tier": 2, "type": "harmonic_drive", "corpus_citation": "honda-e0", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_SHOULDER_roll",  "joint": "R_SHOULDER_roll",  "tier": 2, "type": "harmonic_drive", "corpus_citation": "honda-e0", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_SHOULDER_yaw",   "joint": "R_SHOULDER_yaw",   "tier": 2, "type": "harmonic_drive", "corpus_citation": "honda-e0", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_ELBOW_pitch",    "joint": "R_ELBOW_pitch",    "tier": 2, "type": "harmonic_drive", "corpus_citation": "honda-e0", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_WRIST_yaw",      "joint": "R_WRIST_yaw",      "tier": 1, "type": "tendon",         "corpus_citation": "shadow-dexterous-hand", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_WRIST_pitch",    "joint": "R_WRIST_pitch",    "tier": 1, "type": "tendon",         "corpus_citation": "shadow-dexterous-hand", "_metadata": { "inherited_from": "free-humanoid-platform" } },
      { "name": "R_WRIST_roll",     "joint": "R_WRIST_roll",     "tier": 1, "type": "tendon",         "corpus_citation": "shadow-dexterous-hand", "_metadata": { "inherited_from": "free-humanoid-platform" } },

      { "name": "L_HAND_synergy",   "joint": "L_HAND_synergy",   "tier": 2, "type": "tendon",         "reducer_ratio": 14.0, "peak_torque_nm": 6.25, "continuous_torque_nm": 0.82, "max_velocity_rad_s": 52.4, "corpus_citation": "pisa-iit-softhand", "_metadata": { "inherited_from": "free-humanoid-platform", "comment": "Submerged-rated cable jacket and hydrolytically-stable cable material; mechanical synergy DoF unchanged." } },
      { "name": "R_HAND_synergy",   "joint": "R_HAND_synergy",   "tier": 2, "type": "tendon",         "reducer_ratio": 14.0, "peak_torque_nm": 6.25, "continuous_torque_nm": 0.82, "max_velocity_rad_s": 52.4, "corpus_citation": "pisa-iit-softhand", "_metadata": { "inherited_from": "free-humanoid-platform" } }
    ],
    "sensors": [
      { "name": "depth_sensor", "type": "subsea_pressure_transducer", "frame": "pressure_hull", "rate_hz": 50, "_metadata": { "part_number": "BR-BAR100", "vendor": "Blue Robotics", "depth_rating_m": 1000, "resolution_mm": 7, "comment": "Blue Robotics Bar100 pressure/depth sensor. 1000 m depth-rated; 7 mm resolution. I2C interface, mounted internally to a hull penetrator on the front endcap. Corpus citation: bluefin-21-auv, kongsberg-remus-100-auv." } },
      { "name": "dvl",          "type": "doppler_velocity_log", "frame": "thruster_pod_frame", "rate_hz": 5,  "_metadata": { "part_number": "DVL-75", "vendor": "Cerulean Sonar", "depth_rating_m": 300, "max_altitude_m": 75, "comment": "Cerulean Sonar DVL-75: low-cost academic-grade 4-beam Doppler velocity log with integrated IMU. ~75 m max altitude on hard bottom (varies with substrate). Provides body-frame velocity for station-keeping MPC. Corpus citation: bluefin-21-auv, kongsberg-remus-100-auv. Vendor: Cerulean Sonar (recommended-future-corpus-additions)." } },
      { "name": "usbl",         "type": "ultra_short_baseline_acoustic", "frame": "comms_module", "rate_hz": 1,  "_metadata": { "comment": "Acoustic positioning via surface buoy or dock-A's surface buoy. Corpus citation: jason-rov-1989, robin-hov (recommended-future)." } },
      { "name": "imaging_sonar","type": "multibeam_imaging_sonar", "frame": "pressure_hull", "rate_hz": 10, "_metadata": { "comment": "Forward-looking imaging sonar for obstacle avoidance and dock approach in turbid water. Replaces the centaur sibling's 16-channel rotating lidar (lidar is ineffective underwater)." } },
      { "name": "head_stereo",  "type": "stereo_camera",           "frame": "head",       "rate_hz": 30, "_metadata": { "inherited_from": "free-humanoid-platform", "comment": "Submerged-rated housing; otherwise inherited verbatim." } },
      { "name": "downward_camera_array", "type": "camera_array",   "frame": "thruster_pod_frame", "rate_hz": 30, "_metadata": { "comment": "Downward-looking camera array for benthic-substrate visual servoing during dock approach." } },
      { "name": "body_imu",     "type": "imu_9dof",                "frame": "pressure_hull", "rate_hz": 200, "_metadata": { "comment": "Body-frame IMU; pitch/roll/yaw rates and absolute attitude in water." } },
      { "name": "leak_sensor",  "type": "conductivity_leak_detector", "frame": "pressure_hull", "rate_hz": 10, "_metadata": { "comment": "Inside-hull conductivity-based leak sensor. Triggers the supervisor's hull-flood-detection invariant (immediate emergency-ascent)." } }
    ],
    "modes": [
      {
        "name": "safe_pose_passive_descent",
        "_metadata": { "comment": "Default fail-safe state. All thrusters off; the platform is negatively buoyant and descends in a controlled-by-drag manner to bottom-contact. Safety supervisor's hull-flood-detection invariant uses this state. Corpus citation: jason-rov-1989, robin-hov (recommended-future) for the negatively-buoyant fail-safe pattern." },
        "actuator_roles": {
          "T_HFL": "off", "T_HFR": "off", "T_HRL": "off", "T_HRR": "off",
          "T_VFL": "off", "T_VFR": "off", "T_VRL": "off", "T_VRR": "off",
          "WAIST_yaw": "hold", "NECK_yaw": "hold", "NECK_pitch": "hold",
          "L_SHOULDER_pitch": "hold", "L_SHOULDER_roll": "hold", "L_SHOULDER_yaw": "hold", "L_ELBOW_pitch": "hold",
          "L_WRIST_yaw": "hold", "L_WRIST_pitch": "hold", "L_WRIST_roll": "hold",
          "R_SHOULDER_pitch": "hold", "R_SHOULDER_roll": "hold", "R_SHOULDER_yaw": "hold", "R_ELBOW_pitch": "hold",
          "R_WRIST_yaw": "hold", "R_WRIST_pitch": "hold", "R_WRIST_roll": "hold"
        }
      },
      {
        "name": "station_keeping_hover",
        "_metadata": { "comment": "Active 6-DoF station-keeping. Thrust-allocation MPC at ~50 Hz on the safety-validated controller domain; per-thruster ESC PID at ~500 Hz. DVL provides body-frame velocity feedback; USBL provides acoustic position fix; depth sensor provides depth feedback. Corpus citation: bluefin-21-rov, remus-class-auv, saab-sabertooth (recommended-future), oceanone-stanford-2016 (recommended-future)." },
        "actuator_roles": {
          "T_HFL": "thrust", "T_HFR": "thrust", "T_HRL": "thrust", "T_HRR": "thrust",
          "T_VFL": "thrust", "T_VFR": "thrust", "T_VRL": "thrust", "T_VRR": "thrust",
          "WAIST_yaw": "impedance", "NECK_yaw": "impedance", "NECK_pitch": "impedance",
          "L_SHOULDER_pitch": "hold", "L_SHOULDER_roll": "hold", "L_SHOULDER_yaw": "hold", "L_ELBOW_pitch": "hold",
          "L_WRIST_yaw": "hold", "L_WRIST_pitch": "hold", "L_WRIST_roll": "hold",
          "R_SHOULDER_pitch": "hold", "R_SHOULDER_roll": "hold", "R_SHOULDER_yaw": "hold", "R_ELBOW_pitch": "hold",
          "R_WRIST_yaw": "hold", "R_WRIST_pitch": "hold", "R_WRIST_roll": "hold"
        }
      },
      {
        "name": "transit_thrust_forward",
        "_metadata": { "comment": "Forward transit at peak thrust. Horizontal thrusters drive surge; vertical thrusters maintain depth. Used for site-to-site travel within a single dock-A deployment. Linear vel <= 1.5 m/s in calm water." },
        "actuator_roles": {
          "T_HFL": "thrust", "T_HFR": "thrust", "T_HRL": "thrust", "T_HRR": "thrust",
          "T_VFL": "thrust", "T_VFR": "thrust", "T_VRL": "thrust", "T_VRR": "thrust",
          "WAIST_yaw": "hold", "NECK_yaw": "hold", "NECK_pitch": "hold",
          "L_SHOULDER_pitch": "hold", "L_SHOULDER_roll": "hold", "L_SHOULDER_yaw": "hold", "L_ELBOW_pitch": "hold",
          "L_WRIST_yaw": "hold", "L_WRIST_pitch": "hold", "L_WRIST_roll": "hold",
          "R_SHOULDER_pitch": "hold", "R_SHOULDER_roll": "hold", "R_SHOULDER_yaw": "hold", "R_ELBOW_pitch": "hold",
          "R_WRIST_yaw": "hold", "R_WRIST_pitch": "hold", "R_WRIST_roll": "hold"
        }
      },
      {
        "name": "manipulation_static_hover",
        "_metadata": { "comment": "Active station-keeping while the upper body manipulates. Thrust-allocation MPC compensates for the reaction forces from arm motion (the platform pushes water as it moves an arm). Whole-body MPC integrates upper-body motion with thrust allocation. Corpus citation: oceanone-stanford-2016 (recommended-future) for the bimanual humanoid-AUV manipulation pattern. shoal integration: clean_fish ARCHITECTURE 3.2 dock-A subsurface." },
        "actuator_roles": {
          "T_HFL": "thrust", "T_HFR": "thrust", "T_HRL": "thrust", "T_HRR": "thrust",
          "T_VFL": "thrust", "T_VFR": "thrust", "T_VRL": "thrust", "T_VRR": "thrust",
          "WAIST_yaw": "impedance", "NECK_yaw": "impedance", "NECK_pitch": "impedance",
          "L_SHOULDER_pitch": "impedance", "L_SHOULDER_roll": "impedance", "L_SHOULDER_yaw": "impedance", "L_ELBOW_pitch": "impedance",
          "L_WRIST_yaw": "impedance", "L_WRIST_pitch": "impedance", "L_WRIST_roll": "impedance",
          "R_SHOULDER_pitch": "impedance", "R_SHOULDER_roll": "impedance", "R_SHOULDER_yaw": "impedance", "R_ELBOW_pitch": "impedance",
          "R_WRIST_yaw": "impedance", "R_WRIST_pitch": "impedance", "R_WRIST_roll": "impedance"
        }
      },
      {
        "name": "surfacing",
        "_metadata": { "comment": "Emergency or routine ascent. Vertical thrusters at peak ascent thrust; horizontal thrusters maintain heading only. Used as the supervisor's response to any unrecoverable invariant violation. Corpus citation: jason-rov-1989, robin-hov (recommended-future)." },
        "actuator_roles": {
          "T_HFL": "thrust", "T_HFR": "thrust", "T_HRL": "thrust", "T_HRR": "thrust",
          "T_VFL": "thrust", "T_VFR": "thrust", "T_VRL": "thrust", "T_VRR": "thrust",
          "WAIST_yaw": "hold", "NECK_yaw": "hold", "NECK_pitch": "hold",
          "L_SHOULDER_pitch": "hold", "L_SHOULDER_roll": "hold", "L_SHOULDER_yaw": "hold", "L_ELBOW_pitch": "hold",
          "L_WRIST_yaw": "hold", "L_WRIST_pitch": "hold", "L_WRIST_roll": "hold",
          "R_SHOULDER_pitch": "hold", "R_SHOULDER_roll": "hold", "R_SHOULDER_yaw": "hold", "R_ELBOW_pitch": "hold",
          "R_WRIST_yaw": "hold", "R_WRIST_pitch": "hold", "R_WRIST_roll": "hold"
        }
      }
    ]
  }
}
