catch_plan_ballistic — DRIVE kendama op

• Datenarten: table → any

• Aufruf: import fullseye as fs; fs.ledger.catch_plan_ballistic(kp: 'dict', *, v_max: 'float' = 2.0, a_max: 'float' = 20.0, g: 'float' = None, v_target: 'float' = 0.5, v_rel_max: 'float' = 1.0, n_planes: 'int' = 12, plane_step: 'float' = 0.02, clearance: 'bool' = False, margin: 'float' = 0.002) (die Implementierung direkt: import kendama; kendama.catch_plan_ballistic(kp: 'dict', *, v_max: 'float' = 2.0, a_max: 'float' = 20.0, g: 'float' = None, v_target: 'float' = 0.5, v_rel_max: 'float' = 1.0, n_planes: 'int' = 12, plane_step: 'float' = 0.02, clearance: 'bool' = False, margin: 'float' = 0.002); aus dem Register: opsdrive.get("catch_plan_ballistic"))

Verwendung

Plan, der aus (p, v) der erschlafften Kugel mit der geschlossenen Form der Parabel den Zielpunkt der Schale bestimmt. Rückgabewert plan(t, p, v, cup_state) → dict.

Da das Fangen in dem Moment entschieden wird, in dem "die Kugel mit relativer Geschwindigkeit ≤ v_rel_max abwärts in die Oberkante des Tellerfensters (Randebene + h_c + 1.5 r_b) eintritt", wird die Ebene gewählt, in der die Kugel die Oberkante des Fensters mit der Geschwindigkeit v_target erreicht: vom Scheitel z_a = z + v_z²/(2g) aus z_c = z_a − (h_c + 1.5 r_b) − v_target²/(2g). Die Ankunftszeit ist die spätere Wurzel (Abstieg) von z + v_z τ − ½ g τ² = z_c + h_c + 1.5 r_b: τ = (v_z + √(v_z² − 2g(z_c + h_c + 1.5 r_b − z)))/g, Ziel-xy = (x + v_x τ, y + v_y τ). Erreicht der Teller per bang-bang das Ziel nicht bis τ (geschlossene Bewegungszeit: aus dem Stillstand 2√(d/a) oder d/v + v/a, in Bewegung einschließlich der aktuellen Geschwindigkeit), wird die Ebene in Schritten von plane_step bis zu n_planes Stufen abgesenkt (je tiefer, desto mehr Zeit, aber auch desto höher die Ankunftsgeschwindigkeit). Ist keine Ebene rechtzeitig erreichbar, wird die oberste Stufe zurückgegeben mit feasible=False (Wette auf die Ebene mit minimaler Ankunftsgeschwindigkeit. "Auf die unterste Stufe ausweichen" führt unmittelbar vor der Ankunft mit τ → 0 stets zum Urteil "nicht machbar", der Teller sinkt 20 cm und lässt fallen — gemessen und verworfen).

Rückgabe {"target" (皿の中心), "t_hit", "z_plane", "v_ball_hit", "speed_hit", "feasible", "travel", "apex"}. clearance=True: Bis zum Zeitpunkt τ_up, zu dem die Unterkante der Kugel über die Randebene (+ margin) steigt, wird der Teller nicht seitlich bewegt (nur in der Höhe zur Ebene) — der Rand des großen Tellers ist der höchste Punkt des Kendama, daher kollidiert die Kugel bei beliebigem xy nicht, solange sie über der Randebene ist. Ob es rechtzeitig ist, wird mit τ − τ_up beurteilt; Ebenen, bei denen die Kugel die Randebene nicht überschreitet, sind nicht machbar. Der Rückgabe werden "landing" (Landepunkt = endgültiges Ziel) und "wait" (τ_up, 0 = kein Warten) hinzugefügt. Einschränkungen (ehrlich): Der Teller wartet ruhend am Ziel (relative Geschwindigkeit bei Ankunft = Geschwindigkeit der Kugel). Ein Geschwindigkeitsabgleich, bei dem "der Teller passend zur Kugel abgesenkt wird", ist für nicht rechtzeitig erreichbare Ebenen nicht implementiert — es wird auf v_rel_max vertraut. Luftwiderstand wird ignoriert (beim Flug einer 60-mm-Kugel von ≤ 0.5 s einige mm; verschwindet, da in jedem step neu geplant wird).

Leere Eingabe (kp ist ein leeres dict) löst ValueError aus.

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• gallery_drive_kendama_racket — py -3.11 examples/gallery_drive_kendama_racket.py

Typkompatible Folge-Operatoren (nehmen any als Eingabe)

course_crank · course_s_curve · course_turnaround · course_slope · course_intersection · course_parallel_parking · course_crossing · course_road

Gleiche Kategorie (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. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

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