The motion planners we have seen so far are based on offline search. In this video we introduce a reactive real-time controller based on virtual potential fields defined on the robot's C-space. One potential field pulls the robot's configuration toward the goal configuration, while obstacle potential fields repel the robot from C-space obstacles. An attractive potential field on the C-space can be described by this quadratic in the difference between the actual configuration and the goal configuration, where the K matrix is positive definite. From physics, or from the Lagrangian approach to dynamics from Chapter 8, we know that the force due to a potential field is the negative of the gradient of the potential with respect to the configuration q. Taking the gradient of our artificial potential field, the force on the robot is proportional to the vector from the current configuration to the goal configuration, as you would get from a spring. We can plot the potential on a two-dimensional C-space as a quadratic bowl, where the z-coordinate is the potential. The left figure shows the 3D plot of the quadratic bowl, while the right plot shows the equipotential contour plot on the 2D C-space. The goal configuration is at the bottom of the bowl and the initial configuration is labeled q. The basic control law says that we apply a force to the robot that is equal to the gradient of the potential, and the robot's motion evolves according to its dynamics. If we assume that the robot's mass matrix is the identity matrix, the robot moves as a ball rolling in the bowl, as shown in this simulation, where the robot begins with a nonzero initial velocity. Since the dynamics are essentially those of a mass pulled by a spring, the robot's total energy, potential plus kinetic, remains constant, and it never comes to rest at the goal configuration. To fix this, we can add damping to the control law, where B is a positive-definite matrix. This damping subtracts energy from the robot, allowing it to settle at the goal configuration. Finally, we could use an even simpler control law, where we directly control the robot's velocity to be equal to the force calculated from the potential. Under this control law, the robot moves directly to the goal. To allow for obstacles in the environment, we define a repulsive obstacle potential. This repulsive potential requires a distance function between the C-space obstacle B and the configuration q. This distance is zero when the robot is in contact with the obstacle and positive when the robot is not in contact with the obstacle. The potential is proportional to one over the distance squared, so the potential is large when the robot is near the obstacle. The force due to the obstacle is the negative gradient, and it points in the direction in which the distance between q and the C-space obstacle grows the fastest. The total force acting on the robot is the sum of the force attracting the robot to the goal and the forces repelling the robot from the obstacles. This 2-dimensional C-space has three obstacles and the goal configuration is at the center. The sum of the attractive and repulsive potentials, capped at a maximum potential value, is shown in this figure. The equipotential contour plot is shown in this figure, with the goal configuration indicated by a plus sign. The potential field has a unique global minimum at the yellow X. Ideally this global minimum would be at the goal configuration, but the obstacles have pushed the minimum away from the bottom of the attractive quadratic bowl. The potential field also has saddle points, where the field is at a minimum in one direction and a maximum in another direction. There is also one local minimum, and this is a problem, as the local minimum attracts all points in this basis of attraction. If we simulate the robot's motion from two different initial configurations, q_1 and q_2, we see that one motion gets stuck at the local minimum while the other finds its way to the global minimum. Artificial potential fields are appropriate for real-time control as they can be evaluated relatively quickly, but local minima are a significant problem. A particular class of potential functions, called navigation functions, are guaranteed to have no local minima, but we only know how to compute navigation functions for a limited class of systems. We have not addressed the details of how to calculate the repulsive force due to an obstacle, since it may not be easy to explicitly calculate a distance between a configuration and a C-space obstacle. One option is to attach a finite set of control points to the robot, and for each of these control points, to calculate the closest point on each obstacle, and therefore the obstacle's linear repulsive force. Each repulsive force can be transformed to joint torques according to the Jacobian transpose corresponding to the location of the point on the robot.