ball op• 데이터 종류: signal × points × table → table
• 호출: import fullseye as fs; fs.ledger.fit_spin(t, p, bp: 'dict', *, omega0=None, omega_max: 'float' = 1000.0, iters: 'int' = 20, dt: 'float' = 0.001) -> 'dict'(구현을 직접 호출하려면 import ballistics; ballistics.fit_spin(t, p, bp: 'dict', *, omega0=None, omega_max: 'float' = 1000.0, iters: 'int' = 20, dt: 'float' = 0.001) -> 'dict', 원장에서 가져오려면 opsdrive.get("fit_spin"))
휘는 방식으로부터 회전을 읽습니다: 궤적 (t_i, p_i)(바운드를 포함하지 않는 구간)에 항력 + 마그누스의 운동 방정식을 (p₀, v₀, ω)의 9개 매개변수로 Gauss–Newton으로 피팅합니다(공력 계수는 bp의 값 = 기지로 가정).
마그누스 힘은 ω × v 이므로 ω 의 v 에 평행한 성분은 힘을 만들지 않으며 궤적으로부터 정해지지 않는다(진행 방향을 축으로 한회전 = 옆회전의 일부). 나는 동안 v 의 방향이 바뀌므로 완전히 부정은 아니지만 약하다. 반환값의 omega_perp = 초속도에 수직인 성분(읽을 수 있는 부분), cond = 야코비안의 조건수, omega_axial_sensitivity = 평행 성분을 1 rad/s 움직였을 때 궤적 변화의 rms [m] (작을수록 읽을 수 없음). 반환값 {"p0", "v0", "omega", "omega_perp", "rms", "cond", "omega_axial_sensitivity", "iters", "t0"}. 참값 궤적을 넣으면 1e-3 rad/s 로 돌아온다(게이트). 무늬로 잰 각속도(balltrack.spin_from_markers)와독립된 두 번째 측정 방법이 된다.
omega_max [rad/s] = 회전 크기의 상한(각 스텝 후 이 공으로 사영). ★스핀비 모형 C_L = 1/(2 + 1/S) 는회전이 크면 0.5 에서 포화하므로, 힘이 부족하다고 본 맞춤은 |ω| 를 한없이 크게 할 수 있다(크기가 정해지지 않음). 궤적이 짧고 잡음이 우세하면 1e5 rad/s 로 달아났다(2026-09-30). 기본 1000 rad/s ≈ 160 회전/초(강타의 상한보다 위). 반환값의 at_bound 가 True 이면 상한에 붙었다 = 크기는 읽히지 않았다.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• 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
ball)ball_params · impact_params · flight_vacuum · flight_ode · flight_simulate · flight_state_at · magnus_lift_coefficient · drag_coefficient_sphere
*Provenance: ballistics.py — DRIVE 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.