Corner smoother
An AMR follows two graph edges through a corner. Whether the smoother lays down the arc, cuts a chord, or stops and turns depends on where the robot is when it gets there.
Arc. Room before the entry tangent and a long enough outgoing leg, so the full fillet fits. Curvature is constant at 1/R through the turn and the heading is continuous at both tangent points. — now: straight
- graph edge
- smoother output
- fillet construction
- chord rejoin
Corner geometry
Robot starts on
Fallback once inside the corner
Not in effect — the arc fits, so neither fallback is used.
Derived
- tangent length t
- 2.00
- arc_start
- −2.00, 0.00
- arc_end
- 0.00, 2.00
- centre
- −2.00, 2.00
- l_in − t
- +2.00
- chord lead
- 2.00
- path length
- 7.14
Speed
The geometry
Two edges meet at an apex with a heading change of δ. The smoother rounds the join with a fillet of radius R, which leaves the incoming edge and rejoins the outgoing one a tangent length back from the apex either side:
t = R · tan(δ/2), equivalently R / tan(φ/2) for the interior angle φ = π − δ.
That single number is the whole page. The arc is laid down only when the robot still has room before the entry tangent and the outgoing leg is at least t long. Both conditions fail routinely in a real aisle: the first whenever a corner is replanned late, and the second wherever two vertices are closer together than the radius somebody chose.
The two fallbacks
Once the fillet no longer fits there is no version of the same circle that helps — refitting it from a pose already past the entry tangent hooks the path back through the corner, which is what the outward-pointing d_in arrow in case C is showing. So the smoother does something else, and there are two honest choices with costs on opposite sides.
Stop and turn drives to the apex, rotates in place, and leaves along the outgoing edge. The robot never leaves the graph, which matters in a corridor sized to it, and it pays with a full stop and a heading reversal. Chord cuts straight from the current pose to a rejoin point at lead = min(R, 0.9 · l_out) along the outgoing edge — the cap is what keeps the rejoin short of the goal on a stubby leg. It keeps moving, and it departs the edge laterally for the length of the cut.
Neither is the right answer in general, which is why this is a diagram rather than a recommendation. The clearance you have either side of the edge decides it, and that is a fact about the building.
What this is not
It is not a model of any particular smoother, and nothing here is read from the parameter files in the rest of this section. It is the geometry the decision turns on, drawn so the trade can be looked at instead of argued about — an idealised path with no velocity limits, no acceleration, no footprint and no controller trying to track it. A real run differs from all four.
In particular the fallback control is a choice being illustrated, not a setting read from anywhere. What a given stack does when the fillet does not fit is a question for its own parameter file.
Keyboard
- A B C — pick a case
- Space — play or pause
- R — restart the run