{
  "parameters": [
    11.816197190452613,
    20.57371985692415,
    24.77533813002786,
    -1.1742272158332396,
    0.20910086852814305,
    12.341103362423812,
    1.082778310318743,
    21.069630838455993,
    2.349847416417362,
    114.46756177417743
  ],
  "branchA": 1,
  "branchE": -1,
  "design": "direct",
  "parameter_names": [
    "a1",
    "b1",
    "c1",
    "kappa",
    "phase_A",
    "a2",
    "phase_B",
    "horn",
    "eta",
    "rod"
  ],
  "units": "length mm; angles radians",
  "provenance": "Fresh joint synthesis for small body. User prioritized transmission >=40 degrees over exact shoulder/fold targets.",
  "method": "Joint constrained synthesis using bounded least squares and SLSQP with explicit small ground, 100/150 mm wing segments, user-proposed motion targets, and minimum 40 degree transmission acceptance. Warm start from staged shoulder/rod fitting; independent physical-envelope validation follows.",
  "input_digest": "3f51973efce48a7d0b344d4b8a4498b29c863830bb1159af56d672cdb10e9d59",
  "inputs": {
    "common": {
      "layout": {
        "inner_length_mm": 110.0,
        "outer_length_mm": 140.0,
        "motor_offset_mm": [
          -30.0,
          -40.0
        ],
        "crank1_phase_deg": 0.0,
        "layer_x_mm": {
          "wing": 0.0,
          "linkage1": 8.0,
          "linkage1_rod": 2.0,
          "linkage2": -12.0,
          "linkage2_rod": -20.0
        },
        "chord_inner_mm": 70.0,
        "chord_outer_mm": 55.0,
        "provenance": "Shared canonical kinematic/panel inputs only. The motor offset fixes the 50 mm reference ground length, not either assembled body width. Actual package pivots are derived from compact_drive.json or direct_drive.json. Panel and motion values are editable engineering assumptions.",
        "membrane_front_x_mm": 5.0,
        "membrane_direction": 1.0,
        "membrane_root_relief_mm": 40.0,
        "membrane_hinge_relief_mm": 14,
        "drive_ratio": 1.0,
        "drive_sign": -1,
        "panel_style": "tapered",
        "panel_pitch_deg": 15.0,
        "inner_panel_root_chord_mm": 32.0,
        "outer_panel_tip_chord_mm": 12.0,
        "outer_panel_sweep_mm": 10.0,
        "membrane_thickness_mm": 0.3
      },
      "targets": {
        "provenance": "Stylized guessed bat-like motion: \u00b125 degree shoulder, 50 degree return fold. Not measured animal data.",
        "samples": [
          [
            0,
            25,
            14
          ],
          [
            0.125,
            17.7,
            3.5
          ],
          [
            0.25,
            0,
            0
          ],
          [
            0.375,
            -17.7,
            3.5
          ],
          [
            0.5,
            -25,
            14
          ],
          [
            0.625,
            -17.7,
            38.5
          ],
          [
            0.75,
            0,
            50
          ],
          [
            0.875,
            17.7,
            38.5
          ],
          [
            1,
            25,
            14
          ]
        ],
        "freudenstein_sample_indices": {
          "linkage1": [
            0,
            2,
            4
          ],
          "linkage2": [
            0,
            4,
            6
          ]
        }
      },
      "requirements": {
        "mu_min_deg": 40.0,
        "downstroke_fold_tol_deg": 20.0,
        "hyperextension_tol_deg": 0.0,
        "shoulder_rms_max_deg": 5.0,
        "upstroke_fold_rms_max_deg": 5.0,
        "screen_samples": 1440,
        "fold_peak_min_deg": 45.0,
        "fold_peak_max_deg": 58.0,
        "core_downstroke_phase_deg": [
          45.0,
          135.0
        ],
        "core_downstroke_fold_max_deg": 5.0
      },
      "solver": {
        "provenance": "Numerical search settings and guessed packaging bounds; not biological data.",
        "parameter_keys": [
          "a1",
          "b1",
          "c1",
          "kappa1",
          "a2",
          "b2",
          "c2",
          "eta",
          "delta"
        ],
        "lower_bounds": [
          8,
          15,
          15,
          -3.141592653589793,
          12.0,
          65,
          18,
          -3.141592653589793,
          -3.141592653589793
        ],
        "upper_bounds": [
          25,
          80,
          60,
          3.141592653589793,
          22,
          135,
          38,
          3.141592653589793,
          3.141592653589793
        ],
        "optimization_samples": 144,
        "max_nfev": 1200,
        "safety_margin_deg": 0.3
      },
      "build": {
        "provenance": "Shared stock/hardware envelope and estimated mass assumptions for the two compact options. Design-specific motor positions, shafts and frames live in each package config.",
        "animation_cycle_seconds": 4.0,
        "motor_count": 1,
        "gear": {
          "module_mm": 1.0,
          "teeth": 50,
          "pressure_angle_deg": 20.0,
          "face_width_mm": 6.0,
          "tooth_thinning_mm": 0.1,
          "hub_radius_mm": 9.0,
          "hub_width_mm": 4.0
        },
        "shaft_diameter_mm": 5.0,
        "bearing": {
          "name": "625-2Z",
          "bore_mm": 5.0,
          "od_mm": 16.0,
          "width_mm": 5.0
        },
        "bearing_fit_diameter_mm": 16.15,
        "link_thickness_mm": 3.0,
        "link_width_mm": 8.0,
        "pivot_hole_mm": 3.2,
        "mass_estimates_g": {
          "inner_wing_with_hub": 28.0,
          "outer_wing_with_hub": 20.0,
          "link_density_g_per_mm3": 0.00127,
          "gear_each": 16.0
        },
        "friction_allowance_Nm": 0.025,
        "torque_service_factor": 3.0,
        "root_hub": {
          "radius_mm": 12.0,
          "x_min_mm": -3.0,
          "x_max_mm": 10.0,
          "bearing_centers_x_mm": [
            0.0,
            6.0
          ]
        },
        "elbow_hub": {
          "radius_mm": 12.0,
          "x_min_mm": -3.0,
          "x_max_mm": 10.0
        },
        "elbow_shaft_x_mm": [
          -14.0,
          10.0
        ],
        "outer_spar_x_mm": -6.0,
        "fastener_head_radius_mm": 3.0,
        "crank_clamp_hubs": {
          "crank1_x_mm": [
            6.5,
            16.5
          ],
          "crank2_x_mm": [
            -15.0,
            -5.0
          ],
          "outer_horn_x_mm": [
            -15.0,
            -4.0
          ],
          "radius_mm": 10.0,
          "crank2_radius_mm": 6.0
        },
        "assumed_mesh_efficiency": 0.95,
        "estimated_steel_E_GPa": 200,
        "estimated_steel_yield_MPa": 150,
        "stress_safety_factor": 3,
        "max_shaft_deflection_mm": 0.25,
        "fastener_head_height_mm": 2.0,
        "fastener_stock": "M3 button head plus thin jam nut/washer, each side <=2 mm beyond the flat part. Verify purchased hardware; use smooth 3 mm bearing surfaces."
      }
    },
    "layout": {
      "name": "Small-body direct six-bar",
      "provenance": "Editable small-body requirements: 28 mm O-S ground, 50 mm shoulder spacing, 34 mm input shaft spacing. Remote actuator in stand; belt drives right O and 34T gears reverse left O. Fits and loads unverified.",
      "shoulder_spacing_mm": 50,
      "left_axial_offset_mm": 0,
      "gear": {
        "module_mm": 1,
        "teeth": 34,
        "pressure_angle_deg": 20,
        "face_width_mm": 3,
        "tooth_thinning_mm": 0.1
      },
      "gear_plane_x_mm": -4,
      "required_clearance_mm": 1,
      "audit_samples": 1440,
      "front_crank_plane_x_mm": -16,
      "front_rod_plane_x_mm": -28.5,
      "rear_crank_plane_x_mm": 16,
      "rear_rod_plane_x_mm": 27,
      "wing_plane_x_mm": 16,
      "motor": {
        "candidate": "Unselected single-output continuous servo or geared motor in pedestal",
        "status": "40 x 20 x 40 mm envelope reserved only; no torque/spline/driver selection verified",
        "front_face_x_mm": 14,
        "body_length_mm": 40,
        "face_mm": 20,
        "front_shaft_mm": 11,
        "rear_shaft_mm": 0,
        "shaft_diameter_mm": 3
      },
      "base_center_mm": [
        15,
        0,
        -156
      ],
      "base_size_mm": [
        100,
        90,
        8
      ],
      "parameter_names": [
        "a1",
        "b1",
        "c1",
        "kappa",
        "phase_A",
        "a2",
        "phase_B",
        "horn",
        "eta",
        "rod"
      ],
      "lower_bounds": [
        8.5,
        10,
        12,
        -3.141592653589793,
        -3.141592653589793,
        8.5,
        -3.141592653589793,
        8.5,
        -3.141592653589793,
        75
      ],
      "upper_bounds": [
        12.4,
        40,
        36,
        3.141592653589793,
        3.141592653589793,
        13.7,
        3.141592653589793,
        36,
        3.141592653589793,
        145
      ],
      "fit_samples": 120,
      "polish_samples": 180,
      "random_starts": 2,
      "random_seed": 122,
      "transmission_fit_deg": 41,
      "transmission_polish_deg": 40.5,
      "minimum_fold_polish_deg": 14,
      "core_fold_polish_max_deg": 42.5,
      "downstroke_fold_polish_max_deg": 50,
      "reference_shoulder_weight": 1,
      "reference_fold_weight": 0.35,
      "synthesis_method": "Joint constrained synthesis using bounded least squares and SLSQP with explicit small ground, 100/150 mm wing segments, user-proposed motion targets, and minimum 40 degree transmission acceptance. Warm start from staged shoulder/rod fitting; independent physical-envelope validation follows.",
      "front_rocker_plane_x_mm": -22,
      "panel_direction": -1,
      "materials": {
        "link_stock": "3 mm plywood; editable trial stock, not strength-qualified",
        "link_density_g_per_mm3": 0.00065,
        "rod_E_GPa_assumed": 2.0,
        "wing_covering": "Light fabric, separate inner/outer pieces; 0.3 mm nominal thickness envelope",
        "wing_mass_assumptions": "Existing 28 g inner / 20 g outer estimates retained until actual wood, fabric and hardware are weighed",
        "gear_stock": "3 mm fine-pitch gear blank with 3 mm metal hub; accuracy/strength unverified. Prefer bought gears if laser-cut wood teeth are poor."
      },
      "body_cover": {
        "enabled": true,
        "plane_x_mm": -38,
        "thickness_mm": 3,
        "provenance": "Chosen compact bat face: 74 x 80 mm. Editable outline included in nominal clearance checks.",
        "quads_yz_mm": [
          [
            [
              -13.875,
              10
            ],
            [
              13.875,
              10
            ],
            [
              26.59375,
              -16
            ],
            [
              -26.59375,
              -16
            ]
          ],
          [
            [
              -26.59375,
              -16
            ],
            [
              26.59375,
              -16
            ],
            [
              37.0,
              -36
            ],
            [
              -37.0,
              -36
            ]
          ],
          [
            [
              -37.0,
              -36
            ],
            [
              37.0,
              -36
            ],
            [
              20.8125,
              -53
            ],
            [
              -20.8125,
              -53
            ]
          ],
          [
            [
              -20.8125,
              -53
            ],
            [
              20.8125,
              -53
            ],
            [
              0.0,
              -58
            ],
            [
              0.0,
              -58
            ]
          ],
          [
            [
              -13.875,
              10
            ],
            [
              -5.78125,
              10
            ],
            [
              -13.875,
              22
            ],
            [
              -13.875,
              22
            ]
          ],
          [
            [
              5.78125,
              10
            ],
            [
              13.875,
              10
            ],
            [
              13.875,
              22
            ],
            [
              13.875,
              22
            ]
          ]
        ],
        "outline_yz_mm": [
          [
            -13.875,
            22
          ],
          [
            -5.78125,
            10
          ],
          [
            5.78125,
            10
          ],
          [
            13.875,
            22
          ],
          [
            13.875,
            10
          ],
          [
            26.59375,
            -16
          ],
          [
            37.0,
            -36
          ],
          [
            20.8125,
            -53
          ],
          [
            0.0,
            -58
          ],
          [
            -20.8125,
            -53
          ],
          [
            -37.0,
            -36
          ],
          [
            -26.59375,
            -16
          ],
          [
            -13.875,
            10
          ]
        ]
      },
      "packaging_findings": {
        "retained": "Short supported input shafts with front/rear crank arms; left rear links staggered 6 mm for clearance. Actuator removed from body; both loops re-synthesized.",
        "servo_status": "Single-output continuous actuator reserved in stand. Standard limited-angle servo cannot run the current full-rotation input."
      },
      "ground_mm": 28,
      "body_requirement": {
        "max_width_mm": 76,
        "max_height_mm": 80,
        "max_depth_mm": 80,
        "wing_length_each_mm": 250,
        "actuator_location": "stationary pedestal, outside the bat body",
        "provenance": "Chosen visual/packaging requirements, not measurements of a bat."
      },
      "left_layer_spread_mm": 6,
      "body_package": "small_plywood_remote_drive",
      "shaft_diameter_mm": 3,
      "belt": {
        "teeth": 20,
        "pitch_mm": 2,
        "width_mm": 6,
        "plane_x_mm": 3,
        "center_distance_mm": 100,
        "pitch_length_mm": 240,
        "status": "Chosen timing-belt geometry; confirm available pulley/hub dimensions and tension adjustment"
      },
      "peak_fold_polish_min_deg": 65,
      "peak_fold_polish_max_deg": 73,
      "wing_lengths_mm": {
        "inner": 100,
        "outer": 150
      },
      "motion_targets": {
        "shoulder_min_deg": -30,
        "shoulder_max_deg": 35,
        "fold_min_deg": 15,
        "fold_max_deg": 70,
        "peak_fold_cycle_fraction": 0.75,
        "provenance": "User-proposed aesthetic targets, not measured biology. Replaces the earlier straight downstroke requirement."
      },
      "motion_acceptance": {
        "minimum_fold_deg": 12,
        "maximum_fold_deg": 75,
        "peak_fold_min_deg": 65,
        "core_downstroke_max_deg": 45,
        "downstroke_max_deg": 52,
        "shoulder_rms_max_deg": 6,
        "fold_upstroke_rms_max_deg": 7,
        "shoulder_max_range_deg": [
          30,
          40
        ],
        "shoulder_min_range_deg": [
          -35,
          -18
        ],
        "provenance": "User prioritizes transmission >=40 degrees and small body over exact proposed angles. Shoulder downstroke may reduce to -18 degrees; actual achieved extrema and target errors are reported."
      },
      "panel_root_relief_mm": 20,
      "panel_hinge_relief_mm": 10,
      "minimum_transmission_deg": 40
    },
    "seed": {
      "parameters": [
        11.816197190452613,
        20.57371985692415,
        24.77533813002786,
        -1.1742272158332396,
        0.20910086852814305,
        12.341103362423812,
        1.082778310318743,
        21.069630838455993,
        2.349847416417362,
        114.46756177417743
      ],
      "branchA": 1,
      "branchE": -1,
      "provenance": "Dense 1440-pose small-body synthesis with >=40 degree transmission priority."
    },
    "reference": {
      "linkage1_crank_a1_mm": 16.412926542268618,
      "linkage1_coupler_b1_mm": 38.64647266329335,
      "linkage1_rocker_c1_mm": 40.39148176719604,
      "linkage1_ground_d1_mm": 50.0,
      "rocker1_offset_kappa1_deg": -79.89630993758892,
      "linkage2_crank_a2_mm": 13.923786596023236,
      "linkage2_coupler_b2_mm": 96.91215274083373,
      "linkage2_rocker_c2_mm": 34.36749985292235,
      "linkage2_ground_d2_mm": 110.0,
      "elbow_offset_eta_deg": -97.2736563066567,
      "drive_phase_delta_deg": 73.83445465614699
    },
    "branches": {
      "linkage1": 1,
      "linkage2": 1
    },
    "algorithm": "284331e90e6518e08b52a7bbcd38e998adf6ac60a990f0edd6f8ea0498fb787e",
    "package_algorithm": "a61528433a23b4bdfb84390b7bdfeb6a0defd3b418078b3842201c90c0eefb80",
    "target_algorithm": "6c057a8ee6f16482fd21a7808a42b8b88fd4a740b13db34abae1ce1bf5fb1bef"
  }
}
