kendama op• 資料種類:table → table
• 呼叫: 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'(要直接呼叫實作,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';從台帳取用則 opsdrive.get("kendama_simulate"))
劍玉的 2 階段模擬:繩張緊時,球繫在支點(皿胴的穿繩孔 = 手端 + kp["tie_offset"])上(投影法,與 ballistics.tether_simulate 相同:支點固定、真空時軌跡相同,繩長 = kp["pendulum_length"]);鬆弛後自由落體(重力 + 阻力,kp["bp"];rho = 0 為真空)。每個 step 用 kendama_catch_check(大皿 = 手端 + kp["cup_offset"],軸 kp["cup_axis"])判定接球,接住即結束。
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 等)後,在接球之前間隙 < −contact_tol 的 step 以 "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"}(陣列到結束的 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。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• 演算法的正典(作者、年份)與用途見上面的族使用指南。
• poc_kendama — py -3.11 examples/poc_kendama.py
table 作為輸入)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 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.