{
  "_description": "Tunables for motion/* modules. Loaded via core.config_loader.load('motion').",

  "arm_controller": {
    "_comment": "motion/arm_controller.py — enable_arm_sdk_index + replay_hz come from core.g1_hardware",
    "ramp_in_steps": 60,
    "ramp_out_steps": 180,
    "settle_hold_sec": 0.5,
    "watchdog_timeout_sec": 0.25,
    "watchdog_disable_after_sec": 1.0,
    "arm_indices_start": 15,
    "arm_indices_stop": 29,
    "jsonl_id_start": 100
  },

  "macro_player": {
    "_comment": "motion/macro_player.py — JSONL playback",
    "ramp_in_steps": 60,
    "ramp_out_steps": 60,
    "watchdog_disable_after_sec": 1.0
  },

  "macro_recorder": {
    "_comment": "motion/macro_recorder.py — record arm trajectories",
    "sample_rate_hz": 60.0,
    "smoothing_window": 5
  },

  "teaching": {
    "_comment": "motion/teaching.py — teach-by-demo",
    "safe_hold_sec": 3.0,
    "waist_kp": 60.0,
    "waist_kd": 4.0,
    "hold_arm_kp": 60.0,
    "hold_arm_kd": 4.0,
    "teach_arm_kp": 0.0,
    "teach_arm_kd": 2.0
  },

  "sanad_arm_controller": {
    "_comment": "motion/sanad_arm_controller.py — g1_num_motor + enable_arm_sdk_index + replay_hz come from core.g1_hardware",
    "action_cooldown_sec": 1.0,
    "stability_threshold": 0.06,
    "gains": {
      "kp_high": 300.0,
      "kd_high": 3.0,
      "kp_low": 80.0,
      "kd_low": 3.0,
      "kp_wrist": 40.0,
      "kd_wrist": 1.5
    },
    "weak_motors": [4, 10, 15, 16, 17, 18, 22, 23, 24, 25],
    "wrist_motors": [19, 20, 21, 26, 27, 28],
    "data_subdir": "DataG1"
  }
}
