braid_from_trajectories — DRIVE braidpath op

• Data kinds: any → table

• Call: import fullseye as fs; fs.ledger.braid_from_trajectories(trajectories, obstacles=None, angle=0.1, jitter='auto') (implementation को सीधे call करना हो तो import braidpath; braidpath.braid_from_trajectories(trajectories, obstacles=None, angle=0.1, jitter='auto'), registry से लेना हो तो opsdrive.get("braid_from_trajectories"))

• GPU: नहीं (केवल CPU reference implementation)

उपयोग

समतल trajectories (और स्थिर obstacle points) से braid word (crossing signs का क्रम) बनाता है।

हर step के भीतर गति को सीधी रेखा मानकर, projection axis x' = x cos θ + y sin θ पर दो पड़ोसी strands का क्रम जिस समय बदलता है, उसे closed form में निकाला जाता है (relative गति भी सीधी है, इसलिए zero अधिकतम 1), और समय के क्रम में letters बनाए जाते हैं। बायाँ strand नीचे (y' के छोटे वाले तरफ़) से होकर दाईं ओर निकले तो +i (counter-clockwise half-twist), ऊपर से निकले तो −i।

★Projection के triple point: grid की symmetric गतियों में (जैसे 2 agents किसी obstacle point के दोनों ओर point-symmetric चलें), 3 strands एक सीधी रेखा में रहते हुए घूमते हैं, और हर angle पर 3 crossings एक साथ होते हैं। jitter="auto" केवल उसी स्थिति में हर strand में एक छोटा स्थिर offset (minimum distance × JITTER_FRACTION, दिशा golden angle से) जोड़कर फिर से गणना करता है। Offset minimum distance से बहुत छोटा है, इसलिए braid नहीं बदलता (gate से जाँचा गया)।

Parameters

trajectories : numpy का (K, T, 2) = [x, y], या grid paths की list (हर agent का (row, col) क्रम) / planner का dict (paths)।

obstacles : (M, 2) points, वैकल्पिक। हर hole को 1 point से दर्शाया जाता है (hole के अंदर कोई भी point हो, class नहीं बदलती)।

angle : projection axis का angle [rad]। Class का निर्णय (homotopy_class_compare) angle पर निर्भर नहीं, पर word स्वयं बदलता है।

jitter : "auto" या offset का आकार (0 = कोई offset नहीं, ऊपरी सीमा minimum distance का 1 %)।

Returns

dict: word (int का 1-D array), n_strands, n_agents, start_order / end_order (स्थिति के क्रम में strand numbers), times (हर letter का समय, step की इकाई में), angle, jitter (प्रयुक्त offset), clearance (strands के बीच न्यूनतम दूरी)।

Raises

ValueError: दो strands एक ही point पर पहुँचें (collision का कोई braid नहीं), jitter=0 पर triple point (TriplePointError), गलत shape, NaN।

संदर्भ (sample data, साहित्य)

• 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 में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_braid_homotopy_classes — py -3.11 examples/poc_braid_homotopy_classes.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

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

इसी category के (braidpath)

braid_reduce · braid_artin_images · dynnikov_coordinates · dynnikov_act · braid_equivalent · homotopy_class_compare · pairwise_winding · homotopy_shortest_paths


*Provenance: braidpath.py — DRIVE operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.