puck op• 데이터 종류: image2d × table → any
• 호출: import fullseye as fs; fs.ledger.puck_detect(frame, cam: 'dict', *, mode: 'str' = 'dark', thresh: 'float' = 0.85, radius_tol: 'float' = 0.5, color=None, color_tol: 'float' = 0.25)(구현을 직접 호출하려면 import puck; puck.puck_detect(frame, cam: 'dict', *, mode: 'str' = 'dark', thresh: 'float' = 0.85, radius_tol: 'float' = 0.5, color=None, color_tol: 'float' = 0.25), 원장에서 가져오려면 opsdrive.get("puck_detect"))
balltrack.ball_detect의 facade: 바로 위에서 본 프레임에서 원반을 1개 찾아 호모그래피로 테이블 평면 (x, y) [m]에 옮깁니다.
mode = "dark"(흰 테이블에 어두운 퍽, 합성)/ "color"·"chroma"(색으로, MuJoCo 의 빨간 퍽). thresh 는 테이블의 값(0.92)보다 조금 아래에 둔다: ball_detect 의 가중치는 (thresh − 화소값)이므로, 임계값이 테이블에 가까울수록 가중치 ∝ 피복률이 되어무게중심이 면적 무게중심에 일치한다. 중간의 0.5 에서는 가장자리 화소가 잘려 위상 의존의 치우침이 나온다(실측 2026-10-04, r = 6.3 px:
thresh 0.5 → 최대 0.08 px / 0.7 → 0.03 / 0.85 → 0.005, 잡음 σ 0.01 에서도 0.014). 반지름이 기대값(puck_radius·px_per_m)의 (1 ± radius_tol) 배에서 벗어나는 덩어리는 버린다. 반환값 {"col","row","radius","fill","x","y"} 또는, 찾지 못하면 None(fail-closed). 알 수 없는 mode 는 ValueError.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• poc_air_hockey_intercept — py -3.11 examples/poc_air_hockey_intercept.py
any 를 입력으로 받는 것)course_crank · course_s_curve · course_turnaround · course_slope · course_intersection · course_parallel_parking · course_crossing · course_road
puck)puck_table · puck_wall_bounce · puck_slide_predict · puck_state_at · puck_crossing_point · puck_mirror_path · puck_stop_distance · puck_camera
*Provenance: puck.py — DRIVE 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.