catch_plan_ballistic — DRIVE kendama op

• Data kinds: table → any

• Call: 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) (implementation को सीधे call करना हो तो 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), registry से लेना हो तो opsdrive.get("catch_plan_ballistic"))

उपयोग

ढीली गेंद के (p, v) से parabola के closed form द्वारा cup का पहुँचने का बिंदु निकालने वाला plan। return value plan(t, p, v, cup_state) → dict।

पकड़ का निर्णय उस क्षण होता है जब "गेंद कप की खिड़की के ऊपरी सिरे (किनारे का तल + h_c + 1.5 r_b) में सापेक्ष गति ≤ v_rel_max के साथ नीचे की ओर प्रवेश करती है", इसलिए वह तल चुना जाता है जिस पर गेंद खिड़की के ऊपरी सिरे तक गति v_target से पहुँचे: शीर्ष z_a = z + v_z²/(2g) से z_c = z_a − (h_c + 1.5 r_b) − v_target²/(2g)। पहुँचने का समय 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 है, और लक्ष्य xy = (x + v_x τ, y + v_y τ)। यदि कप bang-bang से τ तक नहीं पहुँच सकता (बंद-रूप गति-समय: विराम से 2√(d/a) या d/v + v/a, चल रहा हो तो वर्तमान गति सहित) तो तल को plane_step करके n_planes चरणों तक नीचे खोजा जाता है (जितना नीचे, उतना अधिक समय और उतनी अधिक पहुँच-गति)। किसी भी तल पर समय पर न पहुँचे तो सबसे ऊपरी चरण लौटाया जाता है और feasible=False (सबसे कम पहुँच-गति वाले तल पर दाँव। "सबसे निचले चरण की ओर भागने" पर पहुँचने से ठीक पहले τ → 0 के कारण हमेशा असंभव का निर्णय होता है, कप 20 cm डूब जाता है और गेंद गिर जाती है — मापकर अस्वीकार किया)।

रिटर्न मान {"target" (皿の中心), "t_hit", "z_plane", "v_ball_hit", "speed_hit", "feasible", "travel", "apex"}। clearance=True: जब तक गेंद का निचला सिरा किनारे के तल (+ margin) से ऊपर न निकल जाए, उस समय τ_up तक कप को पार्श्व में नहीं हिलाया जाता (केवल ऊँचाई तल तक) — बड़े कप का किनारा केंडामा का सबसे ऊँचा भाग है, इसलिए गेंद किनारे के तल से ऊपर हो तो xy कहीं भी हो, टकराव नहीं होता। समय पर पहुँचना τ − τ_up से तय होता है, और जिस तल को गेंद किनारे के तल से ऊपर नहीं पार करती वह असंभव है। रिटर्न मान में "landing" (गिरने का बिंदु = अंतिम लक्ष्य) और "wait" (τ_up, 0 = प्रतीक्षा नहीं) जोड़े जाते हैं। सीमाएँ (ईमानदारी से): कप लक्ष्य पर स्थिर होकर प्रतीक्षा करता है (पहुँचते समय सापेक्ष गति = गेंद की गति)। समय पर न पहुँचने वाले तल पर "गेंद के साथ कप नीचे करने" का गति-मिलान कार्यान्वित नहीं है — v_rel_max पर निर्भर है। कर्षण की उपेक्षा की गई है (60 mm गेंद की ≤ 0.5 s उड़ान में कुछ mm, और प्रत्येक step पर योजना दोबारा बनती है इसलिए मिट जाता है)।

खाली इनपुट (kp एक खाली dict) पर ValueError उठता है।

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• gallery_drive_kendama_racket — py -3.11 examples/gallery_drive_kendama_racket.py

वे अगले ops जिनसे type जुड़ता है (any को input के रूप में लेते हैं)

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

इसी 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. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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