kendama op• Data kinds: table → table
• Call: import fullseye as fs; fs.ledger.kendama_simulate(kp: 'dict', handle, *, p0, v0, t_end: 'float', dt: 'float' = 0.001, perceive=None, catch_plan=None, g: 'float' = None, v_max: 'float' = 2.0, a_max: 'float' = 20.0, v_rel_max: 'float' = 1.0, plan_from: 'float' = 0.0, stop_on_miss: 'bool' = True, contact=None, contact_tol: 'float' = 0.0005) -> 'dict' (implementation को सीधे call करना हो तो import kendama; kendama.kendama_simulate(kp: 'dict', handle, *, p0, v0, t_end: 'float', dt: 'float' = 0.001, perceive=None, catch_plan=None, g: 'float' = None, v_max: 'float' = 2.0, a_max: 'float' = 20.0, v_rel_max: 'float' = 1.0, plan_from: 'float' = 0.0, stop_on_miss: 'bool' = True, contact=None, contact_tol: 'float' = 0.0005) -> 'dict', registry से लेना हो तो opsdrive.get("kendama_simulate"))
kendama का 2-phase simulation: डोरी तनी रहने तक गेंद pivot (cross-piece का डोरी वाला छेद = हाथ + kp["tie_offset"]) से बँधी रहती है (projection method, ballistics.tether_simulate जैसा: स्थिर pivot और vacuum में वही trajectory, डोरी की लंबाई = kp["pendulum_length"]); ढीली होने पर free fall (gravity + drag, kp["bp"]; rho = 0 पर vacuum)। हर step में kendama_catch_check (बड़ा cup = हाथ + kp["cup_offset"], axis kp["cup_axis"]) से catch तय करता है, और पकड़ने पर समाप्त होता है।
handle = हाथ (सरादो का केंद्र) का (3,) स्थिर बिंदु या t → (3,) का फलन (खुले-लूप में ऊपर झुलाना)। catch_plan हो तो धागा ढीला होने के बाद (और t ≥ plan_from: ऊपर झुलाना पूरा होने तक खुला लूप प्राथमिक) हर step में perceive से अनुभूत (p̂, v̂) को catch_plan(t, p̂, v̂, cup_state) → {"target": 大皿の縁の中心の目標 (3,), …} को दिया जाता है, और हाथ को गति ≤ v_max, त्वरण ≤ a_max वाले bang-bang से "लक्ष्य − cup_offset" तक ले जाया जाता है (हाथ चलने पर धुरी भी चलती है, इसलिए गेंद गिरकर |p − धुरी| = L होने पर धागा फिर तन जाता है)।
अनुभूति perceive:
• None → वास्तविक मान (p, v)।
• perceive(t, p, v) → (p̂, v̂) (जैसे noisy_perceiver) केवल उन step में बुलाया जाता है जिनमें योजना सक्रिय है।
• observe_all = True गुण वाली अनुभूति (kendamaworld.camera_perceiver) हर step perceive(t, p, v, scene) के रूप में बुलाई जाती है (scene = {"t", "hand", "tie", "cup", "cup_axis", "taut"} = हाथ के स्वबोध से ज्ञात मात्राएँ + दुनिया रेंडर करने के लिए taut (गेंद की मुद्रा की रेंडरिंग परिपाटी: तना रहने पर धागा-छेद गाँठ की ओर, ढीला होने पर अंतिम मुद्रा)। p भी केवल दुनिया रेंडर करने के लिए दिया जाता है)। वापसी None हो तो योजना वैसी ही रहती है (अंतिम लक्ष्य की ओर ले जाना जारी, लक्ष्य न हो तो हाथ रुकता है)।
गेंद को केवल गुरुत्व (+ कर्षण, जब rho > 0) और धागे का तनाव (≥ 0 का एकपक्षीय बंधन) चलाते हैं। केन गेंद को नहीं धकेलता: contact(hand, p) → 隙間 [m] (जैसे kendamaworld.kendama_clearance) देने पर, पकड़ से पहले जिस step में अंतराल < −contact_tol हो जाए वहाँ "hit_ken" के रूप में समाप्त होता है (गेंद ने केन की नोक, कप के किनारे या सरादो को छुआ = विफलता)। पकड़ का निर्णय kp["catch_window"] (वह ऊँचाई जिस पर गेंद किनारे को छूती है) से होता है।
समाप्ति end_reason: "caught" (पकड़ी गई), "hit_ken" (केंडामा को छुआ), "missed" (ढीला होने के बाद नीचे गिरते हुए बड़े कप के तल से 2 r_b या अधिक नीचे आ गई; stop_on_miss=False हो तो नहीं रुकता: snap के गेट के लिए), "timeout" (t_end)। वापसी मान {"t", "p", "v", "hand", "anchor" (= 支点 = 糸穴), "cup", "cup_v", "taut", "tension", "energy", "snap_times", "snap_loss", "slack_t", "caught", "catch_t", "end_reason", "lateral", "plan_log", "n_estimates", "stage", "min_gap"} (arrays समाप्ति वाले step तक। stage = प्रत्येक step का नियंत्रण-चरण ("lift" ऊपर झुलाना / "wait" ढीला पर योजना से पहले / योजना का "stage" (hold / carry / absorb) या "plan")। slack_t = धागा तनने के बाद पहली बार ढीला होने का समय, शुरू से ढीला हो तो 0.0, कभी ढीला न हो तो None। energy = ½mv² + mgz। n_estimates = योजना को दी गई अनुभूतियों की संख्या)। प्रारंभिक अवस्था |p₀ − धुरी(0)| > L, t_end < 0, dt ≤ 0, सीमा ≤ 0 पर ValueError।
खाली इनपुट (kp एक खाली dict) पर ValueError उठता है।
• 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 में दिए गए हैं।
• poc_kendama — py -3.11 examples/poc_kendama.py
table को input के रूप में लेते हैं)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
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.