Bài 8 - Làm xe dò line dùng thuật toán PID.

From MakerLab Wiki
Jump to navigation Jump to search


Chuẩn bị.

Down Code:

... các bạn vào link này (link github)

... bấm vào "code", chọn "download zip"

... sau khi down về, bạn giải nén ra

Kiểm tra căn chỉnh đầu dò của xe:

... để xe hoạt động tốt, bạn cần đảm bảo lắp đặt phần đầu khung xe này chính xác ... chi tiết xem lại bài thực hành trong phần "I) Phần cứng".

Chương trình.

... vào thư mục ... mở file ...

... nạp code này vào uno, lưu ý nhớ tắt nguồn pin trong quá trình nạp.

Chú ý, bạn nào chưa biết cách nạp code, các bạn cần phải xem lại mục "Hướng dẫn sử dụng phần mềm Arduino".

... code...

Giải thích code.

Các đoạn comment trong code là nơi mình giải thích chi tiết chức năng của từng đoạn code.

... đặc biệt các bạn chú ý đến những comment "//!" ... đây là những dòng define, để chỉnh các thông số cấu hình

trong đó có 6 thông số chính bạn cần quan tâm, và có thể thay đổi

#define KP 25.0    //!

#define KI 0.00001 //!

#define KD 11.0    //!

#define SPEED_DEFAULT PER_30 //!

#define MAX PER_50  //!

#define MIN -PER_50 //!

Chương trình hoạt động:

... bảng trang thai cac truong hop cua 3 mat do line co the xu ly

Mình có thể mô tả cơ bản cách chương trình hoạt động theo trình tự các bước như sau:

  1. Đầu tiên xe đọc dữ liệu từ 3 cảm biến dò line
  2. Dựa trên 3 giá trị này, xe sẽ ước định "mức độ lệch hiện tại" của xe
  3. Tiếp theo sử dụng "mức độ lệch" này, để tính khâu P, khâu I, và khâu D
  4. Giá trị cuối cùng của 3 khâu cộng lại (PID) sẽ được sử dụng để bù trừ cho riêng từng bánh trái và phải
  5. Xe điều khiển các bánh theo giá trị trên, và kết thúc vòng lặp để quay lại bước đầu tiên

Thuật toán PID:

Có tất cả 3 khâu, thường được đề cập theo thứ tự:

P - (Propotional) - đây là khâu tỉ lệ.

D - (Derivative) - đây là khâu đạo hàm.

I - (Integral) - đây là khâu tích phân.

Mình sẽ giải thích khái niệm PID theo cách đơn giản sau:

- Mình đặt 1 biến tên là E (viết tắt của error), biến này chứa giá trị "mức độ lệch" hiện tại của xe

- Về cơ bản, mục tiêu của xe là làm sao điều khiển xe đi về phía trước theo line, lý tưởng nhất giá trị E này cố gắng giữa bằng 0, hoặc chí ít dao động quanh điểm 0 ở một khoảng nhỏ chấp nhận được. Nếu xe lệch phải, giá trị E là số dương. Và ngược lại lệch trái, giá trị E là số âm.

- Hay nói cách khác, hệ thống phải làm sao để E tiến dần về điểm mong muốn, thường gọi là "setpoint". mà giá trị cụ thể ở đây là số 0.

- Nếu nhìn theo phương diện toán học, ta sẽ có 1 hàm số e(t). Hàm số này biểu diễn được mức độ xe bị lệch ở mỗi thời điểm.

- Trong đó khâu P là "tỉ lệ". Theo toán học sẽ là P*e(t). Khâu P sẽ giúp hệ thống điều khiển sao cho sai số E tiến tới điểm setpoint nhưng thường xảy ra "hiện tượng vọt lố" (Overshot) do quán tính. Tạo nhiều dao động quanh điểm này.

- Tùy theo giá trị P mà bạn đặt, sẽ tác động đến đầu ra tổng của PID. Giá trị P càng lớn, E càng thay đổi nhanh hướng về 0, nhưng dao động cũng nhiều.

- Lúc này khâu D là "đạo hàm", theo toán học có công thức D*e'(t). Đạo hàm có ý nghĩa, giúp ta biết được "tốc độ thay đổi" của E trong một khoảng thời gian nhỏ, hay còn được gọi là tốc độ tức thời.

- Điều này giúp ta biết được E có thay đổi quá nhanh hay ko. Từ đó khâu D làm phần "hãm", giúp giảm bớt hiện tượng "vọt lố" do P gây ra.

- Tùy theo giá trị D mà bạn đặt. sẽ tác động đến đầu ra tổng của PID. Giá trị D càng lớn, hệ thống càng ít bộ "vot lố".

- Tuy nhiên nếu D lớn đến mức, phần "thắng" lớn hơn cả phần "đẩy" của P. Thì hệ thống lại rơi vào tình huống có thể bị đứng yên mãi dù sai số E vẫn chưa về bằng 0. Tình huống này gọi là "sai số trạng thái tĩnh" (Steady State Error).

- Lúc này khâu I là "tích phân", theo toán học sẽ là I*f[e(t)]. Tích phân có ý nghĩa giúp ta biết được tổng các giá trị E ở từng thời điểm cộng lại, trong một khoảng thời gian.

- Điều này giúp tránh được tình trạng trên, bằng khả năng "cộng dồn" sai số theo thời gian.

- Đến một lúc nào đó, phần "đẩy" của hệ thống được cộng dồn dần sẽ lớn hơn phần "thắng", giúp E tiến về setpoint tiếp.

- Cho nên giá trị I này các bạn nên đặt một con số nhỏ thôi, nếu ko sẽ phá hủy chức năng của cả 2 khâu trước đó.

... hình minh họa PID

Căn chỉnh PID:

Sau khi đã hiểu được các chức năng của mỗi hệ số P - I - D.

Các bạn có thể tự chỉnh cac he so nay cho phu hop voi duong line cua ban nhe

Thao tác điều khiển.

Sau khi nạp code xong, bật nguồn pin, xe sẽ tự chạy liên tục theo chu trình xử lý trên. Đến khi nào bạn tắt nguồn thì xe mới dừng hoạt động.

Video hướng dẫn.

... link video youtube