homotopy_class_compare — DRIVE 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.