Planning and Control
When walking or cycling along a narrow and busy street it happens often that somebody comes from the opposite direction just towards us. Most of the cases our brain subconsciously makes the plan to avoid the other person by moving sideways. Sometimes when we execute this subconscious plan we realize that the other person has made exactly the same plan.
We immediately take control of the situation and choose the other side. In rare cases this goes back and forth a few times.
An autonomous robot driving on a path with obstacles needs to divide its behavior in the same way. First, a planning method creates an optimal path around an obstacle, and then a control module leads the robot along this planned path. While the control module changes the direction of the robot many times a second, the planning method is more complex and consequently, executed more seldom.
We have implemented several planning methods that consider various aspects when creating a path for the autonomous vehicle:
- Avoid all obstacles with a safety distance.
- At high velocities, do not make turns that would lead the vehicle to tilt.
- Deviate from the desired route as little as possible.
- Correct the direction as little as possible and as much as necessary.
- All corrective movements should be smooth.
These planning methods have considerable complexity and operate on the obstacle map.
Fig. 1: The planning method considers different paths (in gray) and chooses the optimal path (in red) based on the desired path (in blue) and obstacles (light blue and pink). The current laser scanner measurement is shown in red.
After a path has been chosen, the planning method transfers it to the vehicle control module. The vehicle control module corrects the course many times a second to follow the created path as closely as possible.
The control module uses various separate smart control algorithms for determination of optimal speed and direction. The desired vehicle behavior is then translated into actuator actions. Actuator actions, for example, might be simultaneously controlling accelerator pedal and steering wheel, or accessing an existing communication bus for hydraulic controls. When using the actuator models in our Device Abstraction Layer, such differences between various mechatronic setups can be ignored on higher levels of your software's architecture.