hybrid_astar_dyn_pp: control experiment shows dyn-aware search alone is brittle#8
Merged
Merged
Conversation
A control experiment that complements hybrid_astar_dwa: same Hybrid A* search but the candidate-trajectory collision check uses the predicted position of each dynamic obstacle along its time stamp, and the tracker is the same pure-pursuit used by hybrid_astar_pp -- so the *only* difference vs. blind hybrid_astar_pp is the dynamic-aware search. The question this answers: "does global predictive avoidance close the gap without per-step local replanning?" Search-side wiring: - include/hybrid_astar_pp.h: hybrid_astar_plan now takes an optional vector<DynamicObstacleSpec> + t_offset. The Node tracks a per-node time stamp; each sub-step rejects expansions whose predicted obstacle position is inside (o.r + robot_radius). The lattice key is still (x, y, theta) -- the search inherits whichever arrival-time happens to reach a cell first, which is the standard 4D-lattice-without-time approximation. - benchmark_diff_mppi.cu: ensure_hap_path_planned takes an include_dynamic flag. When set, the search uses target_speed for its v_search (so search-t roughly matches sim-t) and inflates robot_radius by hap_dyn_inflation = 1.0 m to absorb the constant-speed-search vs. accelerate-from-rest mismatch. Sweep result (3 scenarios x 5 speed x 2 radius x 4 seeds, K=4096): | planner | cells | solved | mean coll | hard solved | hard coll | |---------------------|------:|-------:|----------:|------------:|----------:| | hybrid_astar_pp | 30 | 21 | 6.23 | 3/12 | 15.58 | | hybrid_astar_dyn_pp | 30 | 20 | 6.37 | 2/12 | 15.92 | | hybrid_astar_dwa | 30 | 30 | 0.00 | 12/12 | 0.00 | Headline: dyn-aware search alone is *worse* than blind on hard cells. The linearised constant-speed prediction is offset from the simulator's acceleration-from-rest schedule by ~1 s; the search avoids the ghost position and walks into the real obstacle. Inflating the buffer beyond 1 m either kills the path through the pincer convergence funnel or collapses back to the static path. The negative result is the point. It tightens the case for hybrid_astar_dwa by demonstrating that a per-step local controller isn't optional once the obstacle dynamics matter -- a smarter global search alone doesn't compensate. docs/local_planner_comparison.md regenerated from the new sweep, and docs/hybrid_astar_baseline.md extended with the negative-result section.
3bd3a09 to
2ff73c4
Compare
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A control experiment that complements PR #6 (
hybrid_astar_dwa). Same Hybrid A* search as the baselinehybrid_astar_pp, but the search's collision check inflates each dynamic obstacle's predicted position along its time stamp. The tracker remains the same pure-pursuit. So the only difference vs. blindhybrid_astar_ppis the dynamic-aware search, and the question is: does global predictive avoidance close the gap without per-step local replanning?Answer: no. The dyn-aware variant is worse than blind on hard cells.
The linearised constant-speed prediction is offset from the simulator's acceleration-from-rest schedule by ~1 s; the search avoids the ghost position and walks into the real obstacle. Inflating the safety buffer beyond 1 m either kills the path through the pincer convergence or collapses to the static path. The negative result tightens the case for
hybrid_astar_dwaby showing that a per-step local controller is not optional once the obstacle dynamics matter — a smarter global search alone doesn't compensate.What changed
include/hybrid_astar_pp.h:hybrid_astar_plannow takes an optionalvector<DynamicObstacleSpec>+t_offset. TheNodetracks a per-node time stamp; each sub-step rejects expansions whose predicted obstacle position is inside(o.r + robot_radius). Lattice key is still(x, y, theta)(the standard 4D-without-time approximation).benchmark_diff_mppi.cu:ensure_hap_path_plannedtakes aninclude_dynamicflag. When set, the search usestarget_speedfor itsv_search(so search-t roughly matches sim-t) and inflatesrobot_radiusbyhap_dyn_inflation = 1.0 mto absorb the constant-speed-search vs. accelerate-from-rest mismatch.hybrid_astar_dyn_pp(planner_kind=5).docs/local_planner_comparison.mdregenerated from a new 11-planner sweep.docs/hybrid_astar_baseline.mdextended with the negative-result section before thehybrid_astar_dwasection.Test plan
cd build && cmake --build . --target benchmark_diff_mppi -j\$(nproc)(clean).docs/local_planner_comparison.md.Known CI failure
validate_design_workflowfails onexperiments.horizon_selection is missing PROBLEM_KIND— same pre-existing breakage on master. PR #7 fixes that; merge order is independent.