path op• データ種: image2d × matrix → table
• 呼び出し: import fullseye as fs; fs.ledger.car_hybrid_astar(occupancy, poses, radius=1.0, cell=1.0, step=None, n_theta=72, allow_reverse=True, footprint=None, clearance=0.0, reverse_penalty=0.0, switch_penalty=0.0, steer_penalty=0.0, shot_every=None, max_expansions=200000, return_tree=False) (実装を直接呼ぶなら import carpath; carpath.car_hybrid_astar(occupancy, poses, radius=1.0, cell=1.0, step=None, n_theta=72, allow_reverse=True, footprint=None, clearance=0.0, reverse_penalty=0.0, switch_penalty=0.0, steer_penalty=0.0, shot_every=None, max_expansions=200000, return_tree=False)、台帳から引くなら opsgraph.get("car_hybrid_astar"))
占有格子(> 0.5 = 障害物)の上で車の道を Hybrid A*(Dolgov ら 2010)で探す: {左・直進・右} × {前進・後退} の運動基本形を離散セル (x, y, θ) で枝刈りしながら A* で繋ぎ、障害物を無視した Reeds–Shepp 長(前進のみなら Dubins 長)を許容ヒューリスティックに、節点から目標へ解析的な一撃を試す。車体の矩形 footprint か余白 clearance、後退・切替・舵の罰則。姿勢列・長さ・費用・下界(RS 長)・区間・展開数を返す。障害物の無い格子では費用 = RS 長。到達不能は ValueError。
> 以下の詳細説明は原文のままです —— 要約と見出しは訳出済み。
`occupancy is a 2-D grid (> 0.5 = obstacle); cell (row, col)` covers metres
`x in [col*cell, (col+1)*cell), y in [row*cell, (row+1)*cell). poses` is
`[[x, y, theta], [x', y', theta']]` (start, goal) in metres/radians. The car has minimum turning
radius `radius; footprint=(length, width, rear_offset)` is a rectangle in rear-axle coordinates
(`None = point car with clearance` metres kept from obstacles). Motion primitives are
{left, straight, right} × {forward, reverse if `allow_reverse} arcs of step` metres (default
`1.01·sqrt(2)·cell`, so each primitive leaves its cell); states are pruned per discrete cell
`(col, row, theta bin of 2π/n_theta). Cost = path length + reverse_penalty`·(reversed length)
+ `switch_penalty per gear change + steer_penalty` per steering change (all default 0, so the
cost is the geometric length). The heuristic is the obstacle-free Reeds–Shepp length (Dubins when
reversing is disallowed), admissible because every penalty is non-negative. At the start node, and then
every `shot_every expansions (default None = adaptive: a node with cost-to-go h` tries when the
expansion count is a multiple of `ceil(h / step)`, so nodes near the goal try every time, as in the
paper), the shortest analytic path from the node to the goal is collision-checked, and the search ends
when that shot is free. On an obstacle-free grid the first shot succeeds and the result equals the
Reeds–Shepp (Dubins) length exactly; with obstacles the result is never below it (`lower_bound`).
Cell pruning makes Hybrid A* an approximation of the optimum among all feasible paths, as in the paper.
Returns `points (N, 3)` poses along the path (start, tree part, analytic shot to the goal),
`length (metres), cost, lower_bound` (Reeds–Shepp/Dubins length start→goal),
`segments [(kind, gear, length)] of the whole path, n_expanded, n_generated`,
`closed_by_shot (True when the analytic expansion ended the search; False` when the goal cell
itself was popped), `shot_from (pose where the shot started), tree ((K, 3)` expanded poses,
only when `return_tree`).
Raises `ValueError: grid not 2-D or empty; poses not (2, 3)` finite, outside the grid or in
collision; `radius/cell/step not positive, n_theta < 4`, negative penalties; the goal is
unreachable (open set exhausted) or `max_expansions` was hit (reported, never a partial path).
• サンプルデータ カタログ(DL URL / ライセンス) — 2-D は skimage.data(BSD/public)+ 合成、3-D は実データ源(Stanford/PDS 等)の DL URL。
• 演算子の来歴・参考文献 — この op 族の元になった研究/手法の出典。
• アルゴリズムの正典(著者・年)と用途は上記ファミリ使い方ガイドに記載。
• poc_car_parking — py -3.11 examples/poc_car_parking.py
• poc_driving_school — py -3.11 examples/poc_driving_school.py
table を入力に取れる)graph_edge_consensus · graph_core_persistence · tree_morphometry · tree_sholl · tree_run_length
path)car_dubins_path · car_reeds_shepp_path
*Provenance: carpath.py — GRAPH operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.