Hi all,
I am doing a sim-to-real analysis of MPPI vs DWB on a skid-steer robot in a narrow warehouse task, and I am trying to understand whether DWB can be made to drive deeper into the XY goal region before final rotation, without tightening DWB’s own internal near-goal tolerance.
Context
- Platform: skid-steer / differential-drive robot
- Stack: Nav2 Jazzy
- Controllers compared: DWB vs MPPI
- Same robot, same task, same localization pipeline, same goals, same goal checker
- Goal checker:
SimpleGoalChecker(xy_goal_tolerance=0.10, yaw_goal_tolerance=0.05, stateful=false)
- I am explicitly comparing native controller behaviour, so I am not using Rotation Shim or controller switching
Observed behaviour in the controller-visible map frame
- DWB sim: 29/30 success
- DWB real: 1/15 success
- MPPI sim: 29/30 success
- MPPI real: 15/15 success
Near-goal metrics:
- DWB median
min_xy_err: 0.094 m in sim, 0.105 m in real
- MPPI median
min_xy_err: 0.023 m in sim, 0.030 m in real
What I consistently see is:
- DWB tends to operate right at the XY tolerance boundary
- Near goal, DWB often becomes rotate-dominant while still having very little XY margin
- MPPI tends to drive much deeper into the goal region before final orientation correction
This makes DWB much more sensitive to small real-world effects such as skid-steer motion behaviour, wheel separation / ICR mismatch, low-speed rotation effects, and localization imperfections.
What I can already do
I was able to make DWB converge much deeper by reducing DWB’s internal xy_goal_tolerance from 0.10 to 0.05, while keeping the external goal checker at 0.10.
In a runtime single-goal probe, that gave:
- final_xy_error:
0.057 m
- min_xy_error_est:
0.053 m
- success:
True
So tightening the controller’s internal near-goal threshold clearly changes the behaviour in the direction I want.
My actual question
I do NOT mainly want to know whether DWB can be made deeper by changing its internal xy_goal_tolerance, because I have already confirmed that.
What I want to understand is:
Can DWB be made to converge deeper before final rotation while keeping its internal xy_goal_tolerance unchanged?
In other words:
- is deeper XY penetration fundamentally tied to the internal threshold at which DWB switches into terminal behaviour
- or are there supported ways to get similar behaviour from the algorithm itself, without moving that threshold?
More concretely:
- Is DWB fundamentally expected to stop around its internal
xy_goal_tolerance and then rotate?
- If I keep that internal threshold unchanged, are there tuning paths that can still make DWB translate deeper before final rotation?
- If yes, which parameters matter most?
RotateToGoal
slowing_factor
GoalDist, GoalAlign, PathAlign
- sampling / horizon settings
- any other near-goal mechanism
- Or is this effectively a structural limitation of DWB, where deeper terminal convergence mostly requires changing the internal threshold itself?
What I already tried
- Changing critic weights
- Adjusting
RotateToGoal related settings
- Trying to bias the controller toward stronger translational convergence near goal
So far, the only thing that clearly changes the behaviour in the desired way is reducing DWB’s internal xy_goal_tolerance.
That is why my main question is whether I am missing an intended algorithmic tuning path, or whether this is simply not how DWB is designed to behave.
If useful, I can also share:
- a minimal config
- the runtime single-goal probe output
- short near-goal trajectory plots comparing DWB and MPPI
Hi all,
I am doing a sim-to-real analysis of MPPI vs DWB on a skid-steer robot in a narrow warehouse task, and I am trying to understand whether DWB can be made to drive deeper into the XY goal region before final rotation, without tightening DWB’s own internal near-goal tolerance.
Context
SimpleGoalChecker(xy_goal_tolerance=0.10, yaw_goal_tolerance=0.05, stateful=false)Observed behaviour in the controller-visible map frame
Near-goal metrics:
min_xy_err: 0.094 m in sim, 0.105 m in realmin_xy_err: 0.023 m in sim, 0.030 m in realWhat I consistently see is:
This makes DWB much more sensitive to small real-world effects such as skid-steer motion behaviour, wheel separation / ICR mismatch, low-speed rotation effects, and localization imperfections.
What I can already do
I was able to make DWB converge much deeper by reducing DWB’s internal
xy_goal_tolerancefrom0.10to0.05, while keeping the external goal checker at0.10.In a runtime single-goal probe, that gave:
0.057 m0.053 mTrueSo tightening the controller’s internal near-goal threshold clearly changes the behaviour in the direction I want.
My actual question
I do NOT mainly want to know whether DWB can be made deeper by changing its internal
xy_goal_tolerance, because I have already confirmed that.What I want to understand is:
Can DWB be made to converge deeper before final rotation while keeping its internal
xy_goal_toleranceunchanged?In other words:
More concretely:
xy_goal_toleranceand then rotate?RotateToGoalslowing_factorGoalDist,GoalAlign,PathAlignWhat I already tried
RotateToGoalrelated settingsSo far, the only thing that clearly changes the behaviour in the desired way is reducing DWB’s internal
xy_goal_tolerance.That is why my main question is whether I am missing an intended algorithmic tuning path, or whether this is simply not how DWB is designed to behave.
If useful, I can also share: