balltrack op• 데이터 종류: any → table
• 호출: import fullseye as fs; fs.ledger.spin_from_marker_sequence(dirs, dt: 'float', *, lag: 'int' = 4, max_angle: 'float' = 0.5) -> 'dict'(구현을 직접 호출하려면 import balltrack; balltrack.spin_from_marker_sequence(dirs, dt: 'float', *, lag: 'int' = 4, max_angle: 'float' = 0.5) -> 'dict', 원장에서 가져오려면 opsdrive.get("spin_from_marker_sequence"))
프레임 열의 마커 방향 dirs[k]((M_k, 3)의 단위 벡터, 찾지 못한 프레임은 None)로부터 각속도를 읽습니다(2단).
1 단계: 인접 프레임끼리, 방향이 max_angle [rad] 이내에서 가장 가까운 마커를 짝지어 Kabsch(spin_from_markers), 그 중앙값을 ω₁ 로 한다. 2 단계: lag 프레임 떨어진 쌍을, 앞 프레임을 ω₁ 로 회전시킨 예측에 가장 가까운 마커(max_angle/2 이내)와짝지어 다시 맞춘다 —— 회전각이 lag 배가 되므로 마커 위치 오차가 미치는 비율은 1/lag. ★1 프레임의 회전각은 max_angle 보다 충분히 작을 것(마커 혼동), lag 프레임의 회전은 π 보다 작을 것(Kabsch 는 최단 회전을 반환한다). 반환값 {"omega", "omega_stage1", "n_pairs", "per_pair" (N, 3)}(ω 는 dirs 와 같은 좌표계). 쌍이 하나도 없으면 ω 는 NaN. 마커가 보인 방향의 쌍이 필요하므로, 각 프레임에 2 개 이상의 마커가 필요하다.
빈 입력(dirs 이(가) 0 건)은 ValueError 를 발생시킨다.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• poc_table_tennis_bounce — py -3.11 examples/poc_table_tennis_bounce.py
• poc_table_tennis_spin — py -3.11 examples/poc_table_tennis_spin.py
table 를 입력으로 받는 것)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
balltrack)ball_detect · ball_track · kalman_ca · triangulate_dlt · track_triangulate · bounce_detect · marker_direction · spin_from_markers
*Provenance: balltrack.py — DRIVE 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.