braidpath op• 数据种类:any → table
• 调用: import fullseye as fs; fs.ledger.braid_from_trajectories(trajectories, obstacles=None, angle=0.1, jitter='auto')(要直接调用实现,import braidpath; braidpath.braid_from_trajectories(trajectories, obstacles=None, angle=0.1, jitter='auto');从台账取用则 opsdrive.get("braid_from_trajectories"))
• GPU:无(仅 CPU 参考实现)
由平面轨迹组(以及静止障碍物的点)构造辫字(交叉符号的序列)。
假设每个步长内为直线运动,在投影轴 x' = x cos θ + y sin θ 上求相邻两股交换顺序的时刻(以闭式求出;相对运动也是直线,零点至多 1 个),并按时间顺序写成字母。左边的股从下方(y' 较小的一侧) 穿过到右边则为 +i(逆时针半扭转),从上方穿过则为 −i。
★投影的三重点:在网格的对称运动中(例如 2 台夹着障碍物点作点对称运动等),3 股保持在一条直线上一起旋转, 在任何角度下 3 个交叉都同时发生。jitter="auto" 仅在这种情况下为每股加上一个固定的小偏移(最小距离 × JITTER_FRACTION,方向取黄金角)并重新计算。偏移远小于最小距离,因此辫不变(由门检验确认)。
trajectories : numpy 的 (K, T, 2) = [x, y],或 list 形式的网格路径(各台的 (row, col) 序列)/ 规划器的 dict(paths)。
obstacles : (M, 2) 的点,可选。每个孔用 1 个点代表(取孔内的任何点,类都不变)。
angle : 投影轴的角度 [rad]。类的判定(homotopy_class_compare)与角度无关,但字本身会变。
jitter : "auto" 或偏移的大小(0 = 不偏移,上限为最小距离的 1 %)。
dict: word(int 的一维数组)、n_strands、n_agents、start_order / end_order(按位置顺序的股编号)、times(各字母的时刻,以步长为单位)、angle、jitter(使用的偏移)、clearance(股之间的最小距离)。
ValueError:两股到达同一点(碰撞没有辫)、jitter=0 时出现三重点(TriplePointError)、形状不对、NaN。
• 示例数据目录(下载 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_reduce · braid_artin_images · dynnikov_coordinates · dynnikov_act · braid_equivalent · homotopy_class_compare · pairwise_winding · homotopy_shortest_paths
*Provenance: braidpath.py — DRIVE 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.