braidpath op• 資料種類:any × any → table
• 呼叫: import fullseye as fs; fs.ledger.homotopy_class_compare(traj_a, traj_b, obstacles=None, angle=0.1, jitter='auto', tol=1e-09)(要直接呼叫實作,import braidpath; braidpath.homotopy_class_compare(traj_a, traj_b, obstacles=None, angle=0.1, jitter='auto', tol=1e-09);從台帳取用則 opsdrive.get("homotopy_class_compare"))
• GPU:無(僅 CPU 參考實作)
起點與終點相同的兩個路徑族(多代理人的規劃)是否屬於同一同倫類。
能在不碰撞(代理人之間、與障礙物點都不重疊)且固定起點與終點的情況下連續變形 ⇔ 辮相等。
辮由 braid_from_trajectories 取得,比較用 Dynnikov 座標。與投影角度無關(門中掃描多個角度)。
Returns: dict same、word_a / word_b、key_a / key_b、quotient(a b⁻¹ 約化後的字 —— 為空則同類, 不為空則是表示「繞法有何不同」的字)、endpoint_error(起點、終點的最大偏差)、tol_limit(tol 的上限)。起點與終點須在 tol(預設 ENDPOINT_TOL = 1e-9,座標單位,各座標之差的最大值)以內一致。tol 是不改變答案、只做通過 / 拒絕的門,已附理由登記在「無效的旋鈕」台帳中。在 tol 以內偏離的 B 的端點,會在 B 的前後加上沿直線移到 A 的端點的區段後再比較(word_b 是對齊後規劃的字)。tol 的上限是 tol_limit = d / (2√2)(d = A 的起點與終點配置中各股之間的最小距離,含障礙物點):
每個代理人在各座標上只移動 tol 以內 = 距離 √2·tol 以內,因此兩個代理人間距離的變化小於 2√2·tol, 對齊區段不會碰撞。而且距 A 的端點各座標 tol 以內的配置的集合是凸的且不含碰撞,所以無論怎樣對齊, 類都相同 —— 答案既不依賴投影角度也不依賴 tol。超過上限的 tol 可能把端點不同的規劃稱為同類,因此拒絕。若各規劃器的端點因捨入而不同,請在上限以內放寬 tol,或在比較前將端點對齊(類是固定端點的變形的類,端點不同的兩個規劃無法比較)。
Raises: ValueError(代理人數不同、起點或終點相距超過 tol、tol 為負、非有限或不小於 tol_limit、投影上起點或終點的順序不一致、碰撞)。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• 演算法的正典(作者、年份)與用途見上面的族使用指南。
• poc_braid_homotopy_classes — py -3.11 examples/poc_braid_homotopy_classes.py
table 作為輸入)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
braidpath)braid_from_trajectories · braid_reduce · braid_artin_images · dynnikov_coordinates · dynnikov_act · braid_equivalent · pairwise_winding · homotopy_shortest_paths
*Provenance: braidpath.py — DRIVE 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.