# System identification defaults. # Override via CLI: python scripts/sysid.py optimize --max-generations 50 # # These are NOT Hydra config groups — the sysid scripts use argparse. # This file serves as documentation and can be loaded by custom wrappers. capture: port: /dev/cu.usbserial-0001 baud: 115200 duration: 20.0 # seconds amplitude: 150 # max PWM magnitude — must match firmware MAX_MOTOR_SPEED hold_min_ms: 50 # PRBS min hold time hold_max_ms: 300 # PRBS max hold time dt: 0.02 # sample period (50 Hz) optimize: sigma0: 0.3 # CMA-ES initial step size (in [0,1] normalised space) population_size: 50 # candidates per generation max_generations: 1000 # total generations (~4000 evaluations) sim_dt: 0.002 # MuJoCo physics timestep substeps: 10 # physics substeps per control step (ctrl_dt = 0.02s) pos_weight: 1.0 # MSE weight for angle errors vel_weight: 0.1 # MSE weight for velocity errors window_duration: 0.5 # multiple-shooting window length (s); 0 = open-loop seed: 42 # Tunable hardware-realism params (added to ROTARY_CARTPOLE_PARAMS): # ctrl_limit — effective motor range → exported as ctrl_range in robot.yaml # motor_deadzone — L298N minimum |action| for torque → exported as deadzone in robot.yaml # Firmware sends raw (unfiltered) sensor data; EMA filtering is # handled on the Python side (env transforms) and is NOT part of # the sysid parameter search.