catch_success_rate — DRIVE kendama op

• Data kinds: table → table

• Call: import fullseye as fs; fs.ledger.catch_success_rate(kp: 'dict', *, n: 'int' = 20, seed: 'int' = 0, noise_pos: 'float' = 0.0, noise_vel: 'float' = 0.0, jitter_pos: 'float' = 0.01, jitter_vel: 'float' = 0.05, lift: 'float' = None, T_lift: 'float' = 0.15, kind: 'str' = 'bang', t_end: 'float' = 1.5, dt: 'float' = 0.001, v_max: 'float' = 2.0, a_max: 'float' = 20.0, v_rel_max: 'float' = 1.0, v_target: 'float' = 0.5, origin=(0.0, 0.0, 0.0), perceiver_factory=None, dodge=(0.0, -0.1, 0.0), clearance: 'bool' = True, keep_runs: 'bool' = False, planner: 'str' = 'staged', contact=None, absorb: 'bool' = True) -> 'dict' (to call the implementation directly, import kendama; kendama.catch_success_rate(kp: 'dict', *, n: 'int' = 20, seed: 'int' = 0, noise_pos: 'float' = 0.0, noise_vel: 'float' = 0.0, jitter_pos: 'float' = 0.01, jitter_vel: 'float' = 0.05, lift: 'float' = None, T_lift: 'float' = 0.15, kind: 'str' = 'bang', t_end: 'float' = 1.5, dt: 'float' = 0.001, v_max: 'float' = 2.0, a_max: 'float' = 20.0, v_rel_max: 'float' = 1.0, v_target: 'float' = 0.5, origin=(0.0, 0.0, 0.0), perceiver_factory=None, dodge=(0.0, -0.1, 0.0), clearance: 'bool' = True, keep_runs: 'bool' = False, planner: 'str' = 'staged', contact=None, absorb: 'bool' = True) -> 'dict'; from the registry, opsdrive.get("catch_success_rate"))

Usage

Success rate on the big cup: scatters the initial state n times (the ball hangs L below the pivot (the string hole of the cross-piece), with Gaussian perturbations σ = jitter_pos sideways and σ = jitter_vel on the velocity (tangential component)), swings up with swing_up_plan (hand starting point origin), and carries the cup with catch_plan_ballistic.

Planning: planner="staged" (default, catch_plan_staged: hold → carry → absorb; absorb=False does not lower on landing) or "plane" (catch_plan_ballistic, with clearance). lift default None = swing_up_lift (per trick, the apex is h_c + 0.9 r_b above the cup). If contact(hand, p) → 隙間 is passed, trials that touch the kendama fail with "hit_ken".

Perception: the default is noisy_perceiver (noise_pos [m], noise_vel [m/s]; 0 means ground truth). If perceiver_factory(i) → perceive is passed it is used (a new perception per trial i: a closed loop that predicts from images only with kendamaworld.camera_perceiver). The jitter of the initial state is determined by seed regardless of perception (with the same seed, ground-truth and image trials are paired). Return value {"rate", "n", "caught_list", "mean_lateral", "catch_times", "end_reasons", "laterals", "starts"} (mean_lateral = mean lateral offset at catch over caught trials, nan if none. starts = (p0, v0) of each trial). dodge / clearance go to swing_up_plan / catch_plan_ballistic (default = move the hand 10 cm toward the string-hole side (−y), and bring the cup back after the ball rises above the big cup's rim:

a stance in which the ball does not pass through the kendama. Without dodging (0, 0, 0) / False, the ball passed through the cup body in all 20 trials —— measured and rejected. Dodging to +y puts the ken in front of the ball as seen from camera 2, hiding the ball, and the lateral error of the image prediction rose from 0.14 → 2.8 mm). keep_runs=True keeps each trial's kendama_simulate return value and perception in "runs" / "perceivers". n ≤ 0 raises ValueError.

Empty input (kp as an empty dict) raises ValueError.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_kendama — py -3.11 examples/poc_kendama.py

Ops the type connects to (they accept table as input)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

Same category (kendama)

kendama_params · elliptic_k_agm · pendulum_period_exact · pendulum_launch_speed · pendulum_rod_simulate · tether_tension_fixed · tether_slack_angle · swing_up_plan


*Provenance: kendama.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.