diabolo op• Datenarten: table × matrix × matrix × scalar × table → table
• Aufruf: import fullseye as fs; fs.ledger.diabolo_dynamics_step(state: 'dict', sticks_prev, sticks_now, dt: 'float', params: 'dict', *, plane_rule: 'str' = 'paper', rotation: 'str' = 'paper', flying_rule: 'str' = 'paper') -> 'dict' (die Implementierung direkt: import diabolo; diabolo.diabolo_dynamics_step(state: 'dict', sticks_prev, sticks_now, dt: 'float', params: 'dict', *, plane_rule: 'str' = 'paper', rotation: 'str' = 'paper', flying_rule: 'str' = 'paper') -> 'dict'; aus dem Register: opsdrive.get("diabolo_dynamics_step"))
Führt das analytische Modell des Papers um 1 Schritt weiter (Diabolo = Massenpunkt + Hilfs-Rotationsellipsoid + Schwerkraft).
state = {"x", "v", "omega", "mode"} (mode aus DIABOLO_STATES). Stabpaar = matrix (2, 3). Vorgehen (Text 1–4):
explizites Euler x += v dt, v += g dt → neues Ellipsoid → Zustandsübergang → liegt es auf der Schnur und ist herausgetreten, wird es auf den nächsten Punkt zurückgesetzt und v_pull (nach innen gerichtete Normalkomponente von Verschiebung/dt) auf v_origin + v_edge begrenzt (Gl. 3); nahe der Spannung (Abstand > l − 5 cm) gilt die Ebenenregel (Gl. 4), die nach außen gerichtete Normalgeschwindigkeit wird entfernt (im Text nicht ausdrücklich, an die öffentliche Implementierung angepasst) → Rotation (Gl. 2: ω_t = ω_{t−1} + μ Δ_string, Δ_string = Zuwachs von d_R, μ = μ_acc / μ_dec). Alle Dämpfungskoeffizienten sind 1 (Standard der öffentlichen Implementierung).
Wählbare Formen (zum Vergleich mit der öffentlichen Implementierung): plane_rule = "paper" (Gl. 4: nur die Richtung n_plane = x̂ × (x_L − x_R) bleibt) / "code" (nur die Vorwärts-Rückwärts-Komponente wird entfernt); rotation = "paper" (Gl. 2, schrittweitenunabhängige Teleskopsumme) / "code" (Δω = k (Δd_R/dt − ω r), k = 0.01. Halbiert man die Schrittweite, verdoppelt sich ω); flying_rule = "paper" (Abbildung: s > c_F) / "code" (oberhalb der Ebene durch die Stäbe).
Rückgabe {"x", "v", "omega", "mode", "s", "pulled", "v_pull_raw"}. Raises ValueError: Schreibweise der Optionen, unbekannter mode, dt ≤ 0, fehlende Schlüssel in state, Form des Stabpaares.
• 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_diabolo_model_and_vision — py -3.11 examples/poc_diabolo_model_and_vision.py
table als Eingabe)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
diabolo)diabolo_params · diabolo_spheroid · spheroid_closest · diabolo_simulate · diabolo_state_sequence · diabolo_throw_catch_truth · string_tension_static · string_tension_from_sag
*Provenance: diabolo.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.