ball op• Datenarten: signal × points × table → table
• Aufruf: 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' (die Implementierung direkt: import ballistics; ballistics.fit_spin(t, p, bp: 'dict', *, omega0=None, omega_max: 'float' = 1000.0, iters: 'int' = 20, dt: 'float' = 0.001) -> 'dict'; aus dem Register: opsdrive.get("fit_spin"))
Liest den Spin aus der Krümmung der Flugbahn: passt die Bewegungsgleichungen mit Luftwiderstand + Magnus an eine Trajektorie (t_i, p_i) (ein Intervall ohne Abpraller) mit den 9 Parametern (p₀, v₀, ω) per Gauss–Newton an (die aerodynamischen Beiwerte sind die Werte aus bp = als bekannt angenommen).
Die Magnuskraft ist ω × v, daher erzeugt die zu v parallele Komponente von ω keine Kraft und ist aus der Flugbahn nicht bestimmbar (Rotation um die Flugrichtung = Teil des Seitenspins). Da sich die Richtung von v im Flug ändert, ist sie nicht völlig unbestimmt, aber nur schwach bestimmt. Im Rückgabewert ist omega_perp = die zur Anfangsgeschwindigkeit senkrechte Komponente (der lesbare Teil), cond = Konditionszahl der Jacobi-Matrix, omega_axial_sensitivity = rms-Änderung [m] der Flugbahn, wenn die parallele Komponente um 1 rad/s verschoben wird (je kleiner, desto weniger lesbar). Rückgabewert {"p0", "v0", "omega", "omega_perp", "rms", "cond", "omega_axial_sensitivity", "iters", "t0"}. Mit der wahren Flugbahn wird ω auf 1e-3 rad/s zurückgewonnen (Gate). Es ist eine unabhängige zweite Messmethode neben der aus dem Muster gemessenen Winkelgeschwindigkeit (balltrack.spin_from_markers).
omega_max [rad/s] = Obergrenze des Drehbetrags (nach jedem Schritt auf diese Kugel projiziert). ★Das Spin-Verhältnis-Modell C_L = 1/(2 + 1/S) sättigt bei großer Rotation bei 0,5, sodass eine Anpassung, die zu wenig Kraft sieht, |ω| beliebig groß machen kann (der Betrag ist nicht bestimmt). Bei kurzer, rauschdominierter Flugbahn lief es auf 1e5 rad/s davon (2026-09-30). Standard 1000 rad/s ≈ 160 Umdrehungen/s (oberhalb der Grenze für einen harten Schlag). Ist at_bound im Rückgabewert True, klebt es an der Grenze = der Betrag konnte nicht gelesen werden.
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_table_tennis_spin — py -3.11 examples/poc_table_tennis_spin.py
table als Eingabe)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 Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.