kendama op• 資料種類:table → table
• 呼叫: import fullseye as fs; fs.ledger.kendama_combo_simulate(kp: 'dict', sequence=('ozara', 'chuzara'), *, n_catch: 'int' = 10, hand0=(0.0, 0.0, 1.0), hand_v0=(0.0, 0.0, 0.0), z_home: 'float' = None, apex_above_cup: 'float' = 0.2, k_match: 'float' = 0.8, v_max: 'float' = 2.5, a_max: 'float' = 20.0, a_toss: 'float' = 20.0, omega_max: 'float' = 30.0, rot_clear: 'float' = 0.15, v_rel_max: 'float' = 1.0, dt: 'float' = 0.001, perceive=None, contact=None, contact_tol: 'float' = 0.0005, controller: 'str' = 'pos_vel', t_max: 'float' = None, g: 'float' = None) -> 'dict'(要直接呼叫實作,import kendama; kendama.kendama_combo_simulate(kp: 'dict', sequence=('ozara', 'chuzara'), *, n_catch: 'int' = 10, hand0=(0.0, 0.0, 1.0), hand_v0=(0.0, 0.0, 0.0), z_home: 'float' = None, apex_above_cup: 'float' = 0.2, k_match: 'float' = 0.8, v_max: 'float' = 2.5, a_max: 'float' = 20.0, a_toss: 'float' = 20.0, omega_max: 'float' = 30.0, rot_clear: 'float' = 0.15, v_rel_max: 'float' = 1.0, dt: 'float' = 0.001, perceive=None, contact=None, contact_tol: 'float' = 0.0005, controller: 'str' = 'pos_vel', t_max: 'float' = None, g: 'float' = None) -> 'dict';從台帳取用則 opsdrive.get("kendama_combo_simulate"))
連續技:從球停在 sequence[0] 皿上的狀態開始,重複「放出 → 在飛行中換持 → 把下一個皿移到落點正下方,匹配速度接住」n_catch 次或直到首次失敗(moshikame = ("ozara", "chuzara"),3 皿 = ("ozara", "kozara", "chuzara"))。手端 hand0 = 皿胴中心(換持只用手腕改變朝向,不重新握持:假定)。第一個皿用 kendama_simulate 的上擺接住,並以 hand0 / hand_v0 傳入該手端的位置與速度。
階段(每次): absorb(在上限內止住接球的皿: 玉與皿一起)→ toss(以 a_toss 向上加速皿,速度達到 v_toss 後以 a_max(> g)止住: 在開始止住的那一步,皿的支持力變負,玉離開。離開瞬間玉的速度 = 皿的速度 → 頂點 = 離開高度 + v²/2g)→ flight(從感知到的拋物線求出著地時刻 τ 與著地點,以 _move_pos_vel 把手部運到「位置 = 著地點正下方(高度 z_home)、速度 = k_match × 玉的著地速度」。換握在玉離開皿胴中心 rot_clear(0.15 m: 從皿胴中心到中皿邊緣 0.12 m + 玉的半徑)以上之後才開始(依感知; 若未離開就到了仍來得及著地的最後時刻,則在那時開始 = 3 皿的大皿 → 小皿 180° 有時屬於這種情況),以角速度上限 omega_max 的三角形角速度轉到下一個姿勢。轉完之前不接)→ 接住後回到 absorb。
物理: 玉在皿上時與皿一起運動(在皿的支持力 ∝ (a_皿 + g ẑ)·軸 ≥ 0 期間。變負則離開),飛行期間只受重力(+ 阻力)與線的張力(單側約束,與 kendama_simulate 相同的投影法)。劍不推玉(contact(hand, p, R) → 隙間 低於 −contact_tol 則為 "hit_ken": kendamaworld.kendama_clearance 的 R_ken)。接球判定為 kendama_catch_check(著地窗口 kp["catch_window"],相對速度 ≤ v_rel_max: 假定 1 m/s)。進入窗口但過快則為 "too_fast"。接住瞬間把玉放到搭在邊緣上的位置, 速度設為皿的速度(非彈性、不彈跳: 假定。重新放置的距離 ≤ 窗口的 3 mm)。
釋放高度(閉式): 以下一次著地時玉中心所在高度 z_r 上方 apex_above_cup 處為頂點。從目前玉的高度 z₀ 以 a_toss 加速時, 離開高度為 z₀ + v²/(2 a_toss),因此 v_toss² = 2g (z_r + A − z₀) / (1 + g / a_toss)(不計阻力)。controller="position": 飛行期間以舊有的 _move_bounded(只以位置為目標停止)運送手部的對照。感知 perceive: None = 真值。若為 kendamaworld.camera_perceiver(flight_from="cup"),則每 step 呼叫 perceive(t, p, v, scene)(scene = 由手部本體感覺可知的量 + 用於繪製的姿勢 R_ken),接收 (p̂, v̂) 或 None。接住可由手的感覺得知(假定: 觸覺),若有 perceive.reset() 則在接住的那一步呼叫(丟棄上一次飛行的拋物線)。
假定(無公開值): 手腕角速度 ≤ 30 rad/s、手部速度 ≤ 2.5 m/s、加速度 ≤ 20 m/s²、k_match = 0.8(人「用膝蓋配合速度」的程度)。回傳值 {"count" (最初の失敗までに受けた回数), "catches" [{"t", "trick", "rel_speed", "lateral", "apex", "z_catch" (受けた瞬間の玉の中心の高さ), "z_release", "v_release", "apex_closed", "rose_then_fell", "energy_drift"}], "end_reason" ("done" | "too_fast" | "hit_ken" | "missed" | "timeout"), "t", "p", "v", "hand", "hand_v", "hand_a", "R", "on_cup", "taut", "stage", "min_gap", "grade" (もしかめの級相当), "max_omega"}。
空輸入(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.