kendama_catch_check — DRIVE kendama op

• Data kinds: table → table

• Call: import fullseye as fs; fs.ledger.kendama_catch_check(kp: 'dict', p_ball, v_ball, cup_center, cup_axis=(0.0, 0.0, 1.0), v_cup=(0.0, 0.0, 0.0), v_rel_max: 'float' = 1.0, window: 'float' = None) -> 'dict' (to call the implementation directly, import kendama; kendama.kendama_catch_check(kp: 'dict', p_ball, v_ball, cup_center, cup_axis=(0.0, 0.0, 1.0), v_cup=(0.0, 0.0, 0.0), v_rel_max: 'float' = 1.0, window: 'float' = None) -> 'dict'; from the registry, opsdrive.get("kendama_catch_check"))

Usage

Geometric test of whether the ball (radius r_b) rests on a cup (rim radius r_c < r_b, rim center cup_center, axis cup_axis, velocity v_cup).

The centre of a ball resting on the rim is h_c = √(r_b² − r_c²) above the rim plane; the static stability condition is lateral offset ≤ r_c. ballistics.cup_catch_check (which assumes cup > ball) is called with an effective cup (radius r_c + r_b, centre raised by h_c along the axis) → lateral offset ≤ r_c, height above the rim plane h_c ≤ h ≤ h_c + 1.5 r_b, speed relative to the cup ≤ v_rel_max. In addition, a ball rising from below (axial component of the relative velocity > 0) is not caught (a cup can only catch from above; this is needed because, with the simplification pivot = cup centre, a rising ball passes through the cup's position). Passing window narrows the height window to "height of first contact with the rim" + window or less (landing test: kendama_simulate uses kp["catch_window"]). A ball with lateral offset δ touches the rim at √(r_b² − (r_c − δ)²) (h_c at δ = 0) —— an off-centre ball touches one side of the rim first and rolls into the cup (treated as caught if lateral offset ≤ r_c). The rim radius is kp["cup_radius"] (the catching cup, or the big cup if absent). Return value {"caught", "lateral", "height" (縁の面から), "speed" (相対), "descending"}.

Empty input (kp is 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)

• gallery_drive_kendama_racket — py -3.11 examples/gallery_drive_kendama_racket.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.