Implementing PID
control for a line following robot
The first
requirement in implementing PID for a line follower is calculating the error of
the robot. To calculate the error we will need to know the current position of
the robot with respect to the line. There are a number of ways of knowing this.
A simple approach
would be to place two IR sensors on either side of the line. The IR sensors
should be tuned to give an output voltage that is promotional to the distance
between the line and the sensor. The output can then be connected to the ADC
pin of a microcontroller and the error can be calculated.
Though this method
may seem simple and easy to implement it has a few drawbacks. Firstly, a robot
using this method will have problems following a line whose width is varying.
Secondly, the output of these sensors will be highly susceptible to
interference from external light. And lastly, for this method to work, you have
to ensure that the track is completely flat. Any change in the distance between
the sensor and the surface will affect the sensor readings.
A better approach
would be to use the traditional sensor array. Using an array of sensors, you
can easily calculate the error by knowing which sensor is on the line. Consider
you have an array of 10 sensors each placed 1cm apart. When the 7th sensor from the
left detects the line you can be sure that the centre of the robot is 2 cm to
the right of the line. Using a sensor array the processor can calculate the
error faster as there is no ADC required to be done and thus you can increase
the sampling rate. You can also use the robot as a grid solver.
When building a
sensor array, there are a few things to keep in mind. Firstly, the more sensors
you have in an array, the better will be the performance of the robot, because
more sensors translates to more range of error. For line following anything
between 6 to 10 sensors (depending on your robot) will be sufficient. The
distance between each adjacent sensor determines the resolution of the
readings. It is always best to place the sensors as close to each other as
possible because your resolution will increase as you place the sensors closer
(a resolution of +/- 1cm is always better than a resolution of +/- 3 cm).
The next important
thing in implementing PID after the sensors is the writing the code itself. The
algorithm for a PID control for line followers would be something like this –
Error = target_pos
– current_pos
//calculate error
P = Error *
Kp
//error times proportional constant gives P
I = I +
Error
//integral stores the accumulated error
I = I *
Ki
//calculates the integral value
D = Error –
Previos_error //stores change in error to
derivate
Correction = P + I
+ D
The next step is
to add this correction term to the left and right motor speed.
While calculating
the derivative, the change in error can be divided by the time taken to
get the rate of change of error, but I have skipped this step in my robot,
because each loop takes almost the same time to execute.