Một hệ thống dị line có thể hoạt động với một chương trình rất đơn giản. Cơ bản, nó sẽ so sánh một cách liên tục so với điểm (vị trí) mà ta đã đặt trước với vị trí mà ta đọc được từ cảm biến quang. Lỗi thu được (error) sẽ quyết định việc xe sẽ di chuyển về bên trái hay về bên phải. Theo thời gian, thuật toán đã được cải thiện. Mục đích cuối cùng của thuật toán là làm xe di chuyển theo line một cách chính xác và di chuyển một cách nhanh nhất có thể trên bất kỳ hình dạng line nào, giảm thiểu việc giao động và di chuyển ra ngồi. Giải pháp tốt nhất có chính là bộ điều khiển PID (Hình 4.5), thuật tốn sẽ giúp xe di chuyển trong phạm vi của line. Nó là một hệ thống phản hồi một cách liên tục tính tốn Error (giữa giá trị đã đặt trước và giá trị thực của cảm biến) , và yêu cầu độ chính xác dựa trên đại lượng sau proportional (P), integral (I) và derivative (D).
Tổng ba đại lượng trên sẽ được tỉnh toán để cho ra đầu ra của bộ điều khiển PID, trong trường hợp này ta cần đầu ra để điều khiển tốc độ động cơ. Mỗi đại lượng sẽ có mục đích riêng và ảnh hưởng khác nhau đến việc xe đi theo line. Mỗi đại lượng đi cùng với một hằng số, và được nhân với nhau. Cuối cùng tạo ra phương trình cho động cơ là:
int motorspeed = Kp*p + Ki * I + Kd * D;
Để hồn thiện chương trình cho bộ điều khiển PID, phải tìm hằng số cho mỗi đại lượng. Nó có thể là bất kì giá trị nào. Ví dụ, giá trị Kp là 0.07, Ki là 0.0001 và Kd là 0.6.
Việc thay đổi những hằng số Kp, Ki, Kd chính xác sẽ giúp cho giá trị Error và giá trị Setpoint luôn là tỷ lệ thuận. Bộ điều khiển sẽ điều khiển chính xác việc rẻ hay đi trên line. Nếu line ln nằm ở giữa thì xe sẻ ln di chuyển thẳng. Việc đặt cảm biến gần với line sẽ thu được tín hiệu chính xác hơn đồng nghĩa tốc độ sẽ nhanh hơn. Nhưng chỉ sử dụng các hằng số trên sẽ khơng đủ bởi vì xe sẽ giao động. Hằng số proportional (Kp) thiết lập độ nhạy của tốc độ động cơ. Dòng lệnh sau đây sẽ thiết lập giá trị Kp, không nhân với hằng số tương ứng:
ỉnt p = error;
Đại lượng Integral (I) bằng tổng sai số (Error) trong một khoảng thời gian (kể từ lúc chương trình bắt đầu). Kết quả là một giá trị cho biết xe phải chỉnh sửa thế nào để giữ luôn ở trên line. Khi Error bằng 0, điều đó có nghĩa rằng khơng cần điều chỉnh, và xe sẽ đi trên đường thẳng. Sau đó, được nhân với hệ số Ki. Đại lượng I giúp robot theo dõi đường đi các đường cong trơn tru hơn và sẽ giúp xe định tâm trên đường một cách nhanh chóng.
int 1=1+ error;
Đại lượng Derivative là hiệu giữa giá trị cuối cùng của mảng cảm biến quang và giá trị thực. Nó làm cho hệ thống điều khiển phản ứng mạnh hơn với những thay đổi Error và giúp ổn định robot trong thời gian ngắn. Đại lượng này cũng được nhân với Kd, và giúp xe thực hiện các đường cong đột ngột.
int D = lasterror - error;
Nhưng nếu chỉ sử dụng một đại lượng trong việc điều khiển xe, thì hệ thống sẽ hoạt động một cách khơng bình thường. Nó sẽ đi đúng hướng, nhưng nó sẽ giao động. Mỗi một đại lượng đều có vai trị riêng của nó và khi kết hợp với nhau, chúng sẽ kết hợp hài hịa như trong Hình 4.6 - dẫn đến việc xe có thể chạy đúng hướng với tốc độ cao mà không bị trượt khỏi line.
Có thể thấy xe sẽ bị dao động rất lớn khi chỉ sử dụng một đại lượng (a) hoặc hai (b), (c) đại lượng được sử dụng. Ở biểu đồ có cả ba đại lượng (d) xe sẽ có xu hướng được cân bằng tại điểm đặt.