pegsym op• Data kinds: scalar × scalar × scalar → table
• Call: 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' (implementation को सीधे call करना हो तो 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', registry से लेना हो तो opsdrive.get("rotation_window"))
rotation window जिसमें peg छेद में (chamfer हो तो उसके मुँह में) प्रवेश करता है। नियमित n-gon का closed form (व्युत्पन्न): केंद्र मिलाने पर vertex face normal से π/n ∓ φ की दिशा में होते हैं, और सबसे बाहर निकले vertex की normal दिशा में लंबाई a cos(π/n − |φ|) अगर A + δ (+ W) से अधिक न हो तो peg प्रवेश करता है: φ = π/n − arccos(x), x = (A + δ + W) cos(π/n)/A (x ≥ 1 हो तो window पूरी half period π/n भर देती है)। arccos में 1 के पास rounding floor होता है, इसलिए इसे atan2(√(1 − x²), x) के रूप में लिखा जाता है। peg_vertices और hole_vertices देने पर linear program (polygon_fit_check, translation भी मुक्त) पर bisection से धनात्मक और ऋणात्मक दिशा की window भी मापी जाती है (2nd (स्वतंत्र) implementation; keyed shape के लिए केवल यही)। phi_fit (मुँह नहीं, सबसे संकरा भाग), phi_cap (chamfer का मुँह), period = 2π/n, M = ⌈period/(2 phi_cap)⌉ और lp (plus/minus: vertex देने पर, मुँह में प्रवेश वाली window के दोनों छोर = 0 को समाहित करने वाला connected अंतराल; scan half period को 360 step में बाँटता है, छोर bisection से) लौटाता है।
mu देने पर घर्षण से रुकने की सीमा भी लौटाई जाती है (व्युत्पन्न, 45° चैम्फ़र): मुख पर टिके शीर्ष (सतह के अभिलंब से β = π/n − φ की दिशा में) को चैम्फ़र पर नीचे फिसलने के लिए पेग को घूमना होगा (सम n में आमने-सामने के शीर्षों के पार्श्व बल एक-दूसरे को रद्द करते हैं, इसलिए स्थानांतरण नहीं होता)। अक्ष के चारों ओर स्प्रिंग कमज़ोर हो तो संपर्क बलों का अक्ष के चारों ओर आघूर्ण 0 पर संतुलित होता है: सीमा वहाँ है जहाँ चैम्फ़र अभिलंब का स्पर्शरेखीय घटक sin β/√2 और फिसलन-दिशा (सतह पर नीचे + घूर्णन) का विरोध करने वाला घर्षण μ/√(1 + sin²β) बराबर हों; घूमना तब होता है जब s√(1 + s²) > √2 μ (s = sin β), अर्थात s² > (√(1 + 8μ²) − 1)/2 हो। phi_friction = π/n − β*, phi_eff = max(phi_fit, min(phi_cap, phi_friction)) (चैम्फ़र पर निर्भर हुए बिना प्रवेश करने वाला भाग घर्षण पर निर्भर नहीं)। षट्भुज (शीर्ष सतह के अभिलंब के निकट) में घर्षण से खिड़की संकरी होती है, त्रिभुज और चतुर्भुज ज्यामिति से तय होते हैं —— MuJoCo प्रोटोटाइप में पुष्टि की गई (PoC का --full)। Raises ValueError: n < 1, apothem ≤ 0, clearance < 0, chamfer < 0, mu < 0, केवल एक ओर का शीर्ष दिया गया।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• poc_peg_symmetry_search — py -3.11 examples/poc_peg_symmetry_search.py
table को input के रूप में लेते हैं)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
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. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.