The reasons for adding a separate inflation layer to the teb_local_planner
are:
The costmap is actually a grid with occupied cells. Lethal obstacles have maximum cell cost, free space zero cost. The concept of inflation adds an exponential cost decay in the vicinity of lethal obstalces.
This representation is perfectly suited for sampling-based planners that can simply evaluate the cost of the current trajectory sample in a discrete /counting manner.
On the other hand, planning approaches with continuous optimization (requiring derivatives of the cost function) cannot directly use such a grid-based cost-function.
In order to integrate the teb_local_planner as part of the navigation stack, lethal obstacle cells are included as point-shaped obstacles. This is by far not efficient, but works for small/mid-scale costmap sizes.
But if we would also include all the inflation cells, the computational burden required for planning would be intractable.
Hence I just added a separate cost function term for each lethal obstacle with a smaller weight to slightly penalize the distance to obstacles even in case no collision occurs.