rotation_window — DRIVE pegsym op

• Datenarten: scalar × scalar × scalar → table

• Aufruf: import fullseye as fs; fs.ledger.rotation_window(n: 'int', apothem: 'float', clearance: 'float', chamfer: 'float' = 0.0, peg_vertices=None, hole_vertices=None, tol: 'float' = 1e-10, mu: 'float | None' = None) -> 'dict' (die Implementierung direkt: import pegsym; pegsym.rotation_window(n: 'int', apothem: 'float', clearance: 'float', chamfer: 'float' = 0.0, peg_vertices=None, hole_vertices=None, tol: 'float' = 1e-10, mu: 'float | None' = None) -> 'dict'; aus dem Register: opsdrive.get("rotation_window"))

Verwendung

Rotationsfenster, in dem der Stift in die Bohrung (bei Fase in deren Mündung) eintritt. Geschlossene Form für ein regelmäßiges n-Eck (Herleitung): Bei ausgerichteten Mittelpunkten liegen die Vertices in Richtungen π/n ∓ φ von der Flächennormalen, und der Stift tritt ein, wenn die Ausdehnung des am weitesten herausragenden Vertex in Normalenrichtung, a cos(π/n − |φ|), höchstens A + δ (+ W) beträgt: φ = π/n − arccos(x), x = (A + δ + W) cos(π/n)/A (bei x ≥ 1 füllt das Fenster die halbe Periode π/n). Da arccos nahe 1 eine Rundungsuntergrenze hat, wird es als atan2(√(1 − x²), x) geschrieben. Werden peg_vertices und hole_vertices übergeben, werden auch die Fenster in positiver und negativer Richtung per Bisektion über das lineare Programm (polygon_fit_check, Translation ebenfalls frei) gemessen (zweite (unabhängige) Implementierung; für Formen mit Passfeder nur diese). Gibt phi_fit (engste Stelle, nicht die Mündung), phi_cap (Mündung der Fase), period = 2π/n, M = ⌈period/(2 phi_cap)⌉ und lp (plus/minus: bei übergebenen Vertices beide Enden des Fensters, das in die Mündung eintritt = das zusammenhängende Intervall, das 0 enthält; der Scan teilt die halbe Periode in 360 Schritte, die Enden per Bisektion) zurück.

Wird mu übergeben, wird auch die Grenze, an der Reibung es stoppt, zurückgegeben (hergeleitet, 45°-Fase): Damit ein auf der Öffnung aufliegender Eckpunkt (in Richtung β = π/n − φ von der Flächennormalen) die Fase hinabgleitet, muss sich der Stift drehen (bei geradem n heben sich die Querkräfte gegenüberliegender Eckpunkte auf, er verschiebt sich nicht). Ist die Feder um die Achse schwach, steht das Moment der Kontaktkräfte um die Achse bei 0 im Gleichgewicht: Die Grenze liegt dort, wo die Tangentialkomponente der Fasennormalen sin β/√2 gleich der Reibung entgegen der Gleitrichtung (auf der Fläche abwärts + Drehung) μ/√(1 + sin²β) ist; er dreht sich bei s√(1 + s²) > √2 μ (s = sin β), also bei s² > (√(1 + 8μ²) − 1)/2. phi_friction = π/n − β*, phi_eff = max(phi_fit, min(phi_cap, phi_friction)) (der Anteil, der ohne Fase hineingeht, hängt nicht von der Reibung ab). Beim Sechseck (Eckpunkte nahe der Flächennormalen) verengt Reibung das Fenster, Dreieck und Viereck werden durch die Geometrie bestimmt —— in einem MuJoCo-Prototyp bestätigt (--full des PoC). Raises ValueError: n < 1, apothem ≤ 0, clearance < 0, chamfer < 0, mu < 0, nur einer der Eckpunkte übergeben.

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_peg_symmetry_search — py -3.11 examples/poc_peg_symmetry_search.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 (pegsym)

polygon_peg · polygon_offset · polygon_fit_check · polygon_two_point_depth · polygon_coverage_image · plane_topview · polygon_yaw_read · relative_yaw_from_images


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