footstep_plan — DRIVE locomotion op

• 数据种类:mask → table

• 调用: import fullseye as fs; fs.ledger.footstep_plan(mask, cell, start, goal_col, step_max, width_min, width_max, deviation_weight: 'float' = 0.1, extent=None) -> 'dict'(要直接调用实现,import locomotion; locomotion.footstep_plan(mask, cell, start, goal_col, step_max, width_min, width_max, deviation_weight: 'float' = 0.1, extent=None) -> 'dict';从台账取用则 opsdrive.get("footstep_plan"))

• GPU:无(仅 CPU 参考实现)

用法

在落脚点掩码上的左右交替脚步序列(精确最短路径)。

> 以下的详细说明为原文 —— 摘要与标题已翻译。

足場の候補の mask と、歩幅・歩隔の制約から、左右交互の着地点の列を出す。

格子の約束は terrain.elevation_map と同じ(行 i = y、列 j = x、セル辺 cell [m])。進行方向は +x(列が増える向き)、左足は y が大きい側(行が大きい)。

• 状態 = (いま立っている足のセル, その足が左か右か, 反対の足がゴールを越えているか)。次の一歩は反対の足を、mask が True のセル c に置く:

歩幅 0 ≤ (x_c − x_stance) ≤ step_max [m]、歩隔

width_min ≤ (y_left − y_right) ≤ width_max [m] (左右が入れ替わる交差を許さない)。

• 一歩の費用 = 1 + deviation_weight·[((x_c − x_s − step_max)/step_max)² + ((w − w_mid)/w_half)²](w_mid・w_half は歩隔の幅の中央と半幅、半幅が 0 のときは 2 項目を 0)。第 1 項 1 が歩数を数え、残りは最大の歩幅・中央の歩隔へ寄せる(平地では規則的に交互に並ぶ)。

• ゴール = 最後の 2 歩(左右 1 歩ずつ)の両方が列 goal_col 以上。

• 解法: 状態の上の Dijkstra(費用は非負)= 厳密な最小費用。小さな格子では総当たりの最小と一致する(tests の門)。

start は ((行, 列) の左足, (行, 列) の右足)。どちらの足から踏み出すかも探索が決める。返り値 {"reached", "steps": [{"side": "L"/"R", "cell": (i, j), "xy"(extent があるとき)}], "cost", "n_steps", "expanded"}。届かないときは reached = False・ steps 空・cost = inf(risk_aware_path と同じ約束)。

★roverslip.risk_aware_path は再利用しなかった: あちらの状態は 1 セル、辺は 8 近傍の(8, H, W) の費用で、左右交互・歩幅の窓・歩隔の窓(反対の足との相対位置)を持てない。空の入力(mask が 0 要素)は ValueError で拒否する。

English: exact Dijkstra over (stance cell, side, other-foot-past-goal) states; a step puts the other foot on a True cell within the step-length window [0, step_max] and the step-width window [width_min, width_max] (left foot on the larger-y side). Unreachable goals return reached = False and cost = inf.

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

• 算法的正典(作者、年份)与用途见上面的族使用指南。

可运行的示例(实际调用该算子并已验证的样例)

• walking_ops_tour — py -3.11 examples/walking_ops_tour.py

类型可衔接的下一个算子(可接受 table 作为输入)

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

同类别(locomotion)

contact_points · com_from_silhouette · support_polygon · com_support_margin · gait_phase · support_line_margin · lipm_capture_point · capture_margin


*Provenance: locomotion.py — DRIVE 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

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