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회 또는 첫 실패까지 반복합니다(모시카메 = ("ozara", "chuzara"), 3접시 = ("ozara", "kozara", "chuzara")). 손잡이 hand0 = 사라도의 중심(바꿔 쥐기는 손목으로 방향만 바꾸고 다시 쥐지 않음: 가정). 첫 접시는 kendama_simulate의 스윙업으로 받고, 그 손잡이의 위치·속도를 hand0 / hand_v0로 넘깁니다.
단계(매번): absorb(받은 접시를 상한 내에서 멈춘다: 공은 접시와 함께)→ toss(접시를 a_toss 로 위로 가속하고, 속도가 v_toss 에 도달하면 a_max(> g)로 멈춘다: 멈추기 시작한 걸음에서 접시의 항력이 음이 되어 공이 떨어진다. 떨어지는 순간의 공의 속도 = 접시의 속도 → 꼭짓점 = 떨어진 높이 + v²/2g)→ flight(지각한 포물선에서 착지 시각 τ 와 지점을 구하고, 손을 「위치 = 착지점 바로 아래(높이 z_home), 속도 = k_match × 공의 착지 속도」로 _move_pos_vel 로 옮긴다. 바꿔 쥐기는 공이 사라도 중심에서 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 를 발생시킨다.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL 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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.