Skip to content

Commit 0acb99d

Browse files
authored
Merge pull request #8 from rsasaki0109/feat/hybrid-astar-dyn
hybrid_astar_dyn_pp: control experiment shows dyn-aware search alone is brittle
2 parents c0581be + 2ff73c4 commit 0acb99d

4 files changed

Lines changed: 549 additions & 337 deletions

File tree

docs/hybrid_astar_baseline.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,45 @@ value proposition explicit.
9393
- Hybrid A* + a local replanner (MPC or DWA) inside the planned
9494
corridor, which is the common production split.
9595

96+
## Dynamic-aware Hybrid A* alone is not enough: hybrid_astar_dyn_pp (planner_kind=5)
97+
98+
`hybrid_astar_dyn_pp` runs the same Hybrid A* search but with each
99+
dynamic obstacle's predicted position along the candidate trajectory
100+
inflated by `hap_robot_radius + hap_dyn_inflation` (default 0.6 + 1.0
101+
= 1.6 m of buffer). The tracker is the same pure-pursuit as
102+
`hybrid_astar_pp`. The point is to test whether the global planner
103+
*can* avoid moving obstacles without a local replanner.
104+
105+
The result on the same 30-cell sweep is a clear negative: the dyn-
106+
aware variant is **worse** than the blind one on hard cells.
107+
108+
| planner | family | hard cells | solved | mean succ | mean coll |
109+
|---------------------|-----------|-----------:|-------:|----------:|----------:|
110+
| hybrid_astar_pp | Hybrid-A* | 12 | 3 | 0.25 | 15.58 |
111+
| hybrid_astar_dyn_pp | Hybrid-A* | 12 | 2 | 0.17 | 15.92 |
112+
| hybrid_astar_dwa | Hybrid-A* | 12 | 12 | 1.00 | 0.00 |
113+
114+
Across all 30 cells `hybrid_astar_dyn_pp` solves 20 (mean coll 6.37)
115+
vs. `hybrid_astar_pp` 21 (6.23). On easier cells the dyn-aware path is
116+
slightly *more* direct and occasionally beats the blind variant, but
117+
on the hard half the dynamic prediction backfires.
118+
119+
Why does it fail: the search uses a constant `v_search` for time
120+
stamps along the candidate, but the simulator starts from rest and
121+
accelerates to `target_speed`, so the robot arrives at each pose
122+
*earlier* than the search predicts. Linearised obstacle prediction
123+
along the search timestamp is therefore offset from reality by
124+
~1 s, which against a 2 m/s obstacle is ~2 m -- the same scale as
125+
the inflated robot circle. The search avoids "ghost" positions and
126+
walks into the real obstacle.
127+
128+
Inflating the buffer larger (we tested 2.0 m) just makes the search
129+
either fail to find a path through the pincer convergence or fall
130+
back to the same path as the static search; smaller buffers leave
131+
the brittleness in place. The fundamental fix is to close the loop
132+
with a per-step local controller, which is exactly what
133+
`hybrid_astar_dwa` (below) does.
134+
96135
## Closing the paradigm gap: hybrid_astar_dwa (planner_kind=4)
97136

98137
The follow-up variant `hybrid_astar_dwa` takes the third option above

0 commit comments

Comments
 (0)