rally_simulate — DRIVE racket op

• Datenarten: table × table × table → table

• Aufruf: import fullseye as fs; fs.ledger.rally_simulate(bp: 'dict', rp: 'dict', tp: 'dict', *, perceive=None, strategies=None, retries: 'int' = 6, x_racket: 'float' = 1.55, hit_height=(0.05, 0.45), T_flight: 'float' = 0.42, target_x: 'float' = 0.75, max_hits: 'int' = 60, dt: 'float' = 0.0002, fps: 'float' = 100.0, seed: 'int' = 0, y_jitter: 'float' = 0.25, plan_spin: 'bool' = True, table_ip=None, replan_every: 'int' = 5) -> 'dict' (die Implementierung direkt: import racket; racket.rally_simulate(bp: 'dict', rp: 'dict', tp: 'dict', *, perceive=None, strategies=None, retries: 'int' = 6, x_racket: 'float' = 1.55, hit_height=(0.05, 0.45), T_flight: 'float' = 0.42, target_x: 'float' = 0.75, max_hits: 'int' = 60, dt: 'float' = 0.0002, fps: 'float' = 100.0, seed: 'int' = 0, y_jitter: 'float' = 0.25, plan_spin: 'bool' = True, table_ip=None, replan_every: 'int' = 5) -> 'dict'; aus dem Register: opsdrive.get("rally_simulate"))

Verwendung

2 Schläger (bei x = −x_r und +x_r, Blätter zum Gegner gerichtet) spielen gegeneinander.

In jedem Frame (1/fps) liefert die Wahrnehmung des Empfängers perceive(t, p, v, ω) den Ballzustand; daraus sagen Bewegungsgleichungen + Tischabprall Auftreffpunkt und -zeit auf der eigenen Ebene x = ±x_r voraus, und der Schläger wird bewegt (begrenzt). Erreicht der Ball die Ebene, wird mit einer Geschwindigkeit geschlagen, die in T_flight bei (∓target_x, y*) auf der gegnerischen Seite landet (y* zufällig; mit plan_spin wird der Spin nach dem Schlag beim Zielen berücksichtigt). strategies = (Strategie von Seite 0, Strategie von Seite 1) (None = strategy_feeder für beide). Bei retries > 0 wird vor dem Schlag mit shot_is_legal vorausgeschaut, und ein Ziel, das verfehlen würde, wird zurückgespult und mit einem anderen Ziel (Strategie neu gezogen) wiederholt. Rückgabe {"hits", "end_reason", "shots": [...], "t", "p" (N,3), "racket_pos" (N,2,3), "hit_times", "rewinds"}.

Leere Eingabe (bp ist ein leeres dict) löst ValueError aus.

Referenzen (Beispieldaten, Literatur)

• 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.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• poc_ball_bounce — py -3.11 examples/poc_ball_bounce.py

• poc_table_tennis_rally_loop — py -3.11 examples/poc_table_tennis_rally_loop.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

Gleiche Kategorie (racket)

racket_params · racket_impact · racket_hit_check · aim_velocity · racket_plan · racket_move · strategy_attacker · strategy_feeder


*Provenance: racket.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.