kendama op• 데이터 종류: table → any
• 호출: 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)(구현을 직접 호출하려면 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), 원장에서 가져오려면 opsdrive.get("catch_plan_ballistic"))
느슨해진 공의 (p, v)로부터 포물선의 닫힌 식으로 접시의 도달점을 구하는 계획. 반환값은 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 를 발생시킨다.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• gallery_drive_kendama_racket — py -3.11 examples/gallery_drive_kendama_racket.py
any 를 입력으로 받는 것)course_crank · course_s_curve · course_turnaround · course_slope · course_intersection · course_parallel_parking · course_crossing · course_road
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.