Tối ưu hóa dòng người theo dõi


9

Tôi đang làm việc để xây dựng một robot theo dõi dòng và muốn tối ưu hóa hiệu suất của nó. Có ý kiến ​​cho rằng tôi sử dụng thuật toán PID. Tôi đã đọc rất nhiều về PID nhưng tôi bối rối một chút về việc sau:

Tôi đã tính toán error_value bằng cách sử dụng Nhưng liên quan đến sự thay đổi tốc độ động cơ, tôi bối rối không biết nên sử dụng gì trong khi so sánh sự khác biệt (ví dụ: hiện tại - điểm đặt) hoặc giá trị lỗi. Đó là tôi nên sử dụngkpproportional+...

if (difference > 0)
{ //code for changing appropriate motor's speed using error_value }

hoặc là

if (error_value > 0)
{ //code for changing appropriate motor's speed using error_value }

Ngoài ra có bất kỳ phạm vi được chỉ định cho các giá trị của hằng số , và không? Tôi đang sử dụng một robot có bánh xe vi sai cho người theo dõi dòng của tôi.k i k dkpkikd

Ngoài ra tôi sẽ rất vui nếu ai đó gợi ý cho tôi bất kỳ thuật toán tối ưu hóa nâng cao nào khác để cải thiện robot theo dõi dòng.


Tôi không chắc bạn đang sử dụng thuật ngữ nào, nhưng thông thường trong thuật ngữ hệ thống kiểm soát, "sự khác biệt" của bạn là giá trị lỗi và (gần như tôi có thể nói) "error_value" của bạn là lệnh điều khiển.
TimWescott

Xin chào, ví dụ, biến là mức tăng tỷ lệ thuận của bạn. Bạn có quen thuộc với lý thuyết điều khiển? Kp
leCrazyEngineer

@leCrazyEngineer Tôi không nhớ phần lớn câu hỏi này vì nó giống như 3 năm trước. Tôi cũng không có ý tưởng về lý thuyết điều khiển. Có lẽ những người trả lời sẽ có một số manh mối.
thiên thạch

Câu trả lời:


8

Khi sử dụng vòng lặp PID để điều khiển bằng cách sử dụng dòng sau, thì điểm đặt của bạn sẽ luôn giống nhau. Bạn sẽ luôn muốn đường dây ở cùng một vị trí đối với robot, ví dụ như ở trung tâm cảm biến của bạn.

Vì vậy, nếu cảm biến dòng của bạn xuất ra một giá trị từ -1 đến 1 với 0 là trung tâm của cảm biến, thì bạn sẽ muốn điểm đặt của mình bằng 0 (và cảm biến đọc lại và sự khác biệt sẽ giống nhau). Nếu cảm biến dòng của bạn xuất ra giá trị từ 0 đến 10, thì bạn sẽ muốn điểm đặt của bạn là 5 (và cảm biến của bạn đọc lại và sự khác biệt sẽ khác nhau).

Vì bạn đang điều khiển bằng cách đặt các bánh xe quay ở các tốc độ khác nhau, sau đó để theo một đường trơn tru với vận tốc không đổi, có lẽ bạn sẽ muốn điều chỉnh tốc độ cho cả hai bánh dựa trên lỗi. Ví dụ, nếu bạn cần rẽ trái để ở trên vạch, bạn sẽ làm chậm bánh xe bên trái và tăng tốc cho bánh xe bên phải. Bạn càng cần quay nhiều, bạn sẽ càng cần làm chậm bánh xe bên trong và bạn sẽ càng cần tăng tốc cho bánh xe bên ngoài.

θeS0

Chỉ đạo khác biệt

SL= =rθSR= =(r+b)θ

S0S0= =(r+b/2)θSL= =S0-(b/2)θSR= =S0+(b/2)θ

Khi lỗi của bạn có xu hướng về 0, tốc độ của mỗi động cơ cũng sẽ có xu hướng về nhau. Khi lỗi tăng lên, sự khác biệt về tốc độ cũng sẽ tăng lên.

Bạn thậm chí có thể cần bánh xe bên trong của mình để quay ngược lại nếu cảm biến của bạn nói với bạn rằng đường thẳng cong hơn so với khoảng cách giữa các bánh xe của bạn. Đây là những biến chứng mà bạn có thể làm việc từng bước một khi sự kiểm soát của bạn trở nên tinh vi hơn.

Ngoài ra, vì lỗi của bạn sẽ có cả giá trị dương và âm (để biểu thị tính liên tục từ ngoài thang đo ... quá xa bên trái ... trên dòng ... quá xa phải ... ngoài thang đo ngay thì bạn nên không bao giờ cần hỏi iflỗi là dương hay âm, bạn chỉ nên tính giá trị mới dựa trên giá trị lỗi, vì giá trị dương và giá trị âm sẽ có tác động ngược và đối xứng lên động cơ.

Lưu ý rằng đối với dòng tiếp theo, bạn có thể thoát khỏi chỉ với thời hạn tăng tỷ lệ (nghĩa là để các điều khoản khác ở mức 0). Việc thực hiện một thuật ngữ phái sinh cũng có thể cho phép bạn đẩy thời hạn tăng tỷ lệ lên cao hơn để có được một hệ thống nhạy hơn, nhưng một thuật ngữ không thể thiếu sẽ không có ích. Thực tế là nếu robot của bạn đi sai hướng, lỗi sẽ lớn hơn có nghĩa là các chuyển động vật lý của robot của bạn sẽ hoạt động như một thuật ngữ không thể thiếu.

Các giá trị cụ thể của P, D và tôi sẽ được xác định bởi mức độ đáp ứng của hệ thống của bạn. Để được tư vấn chung về việc điều chỉnh các tham số PID, hãy xem câu trả lời của tôi và những người khác về các chiến lược tốt để điều chỉnh các vòng lặp PID là gì?


theo bạn "bạn chỉ nên tính toán các giá trị mới dựa trên giá trị lỗi, vì giá trị dương và giá trị âm sẽ có tác động ngược và đối xứng trên các động cơ." nhưng làm thế nào để xác định động cơ nào sẽ có hiệu lực của lỗi?
thiên thạch

@AnkitShah Cả hai đều làm. Hy vọng bản cập nhật của tôi sẽ giải thích nó tốt hơn một chút.
Gian hàng Mark

Cảm ơn bạn @Mark Gian hàng đã thực sự giải thích các công cụ. Tôi đã không có đủ đại diện. trên trang web để nâng cao câu trả lời của bạn nhưng thực sự điều đó đã được giải thích.
thiên thạch

Vui mừng tôi có thể giúp @AnkitShah - Nếu bạn chỉnh sửa câu hỏi của mình để loại bỏ một số sự mơ hồ (chẳng hạn như bạn đang sử dụng bộ điều khiển vi sai hoặc ackermann) thì bạn sẽ nhận được một upvote từ ít nhất là tôi và cả những người khác nữa. Sẽ không mất nhiều thời gian để có được 15 đại diện nếu bạn lắng nghe những gợi ý mà mọi người đưa ra.
Đánh dấu gian hàng

Cảm ơn @Mark có thuật toán nào khác giúp giảm lỗi và làm cho bot di chuyển trơn tru hơn và đi theo dòng không?
thiên thạch

3

Bạn có thể muốn kiểm tra câu hỏi này về cách điều chỉnh các PID .

Có vẻ như bạn đang nhầm lẫn vai trò của errortính toán này. Phương trình PID thực hiện phép đo lỗi (vị trí thực tế - vị trí mong muốn) và xác định mức độ "đáp ứng" sẽ được ra lệnh trong bộ điều khiển (ví dụ: bao nhiêu lực).

Vì vậy, thay vì nói if (error_value > 0) { }, bạn nên nói một cái gì đó như response = get_PID_calculation(error_value). Tùy thuộc vào cấu tạo của chiếc xe cụ thể của bạn, phản ứng đó sẽ được gửi đến động cơ truyền động dưới dạng lượng bướm ga, tay lái như góc mong muốn hoặc một số đầu vào điều khiển khác.


Đây là liên kết đến mã arduino của tôi những gì bạn đề nghị. www1.datafilehost.com/d/5dcbdd4e
thiên thạch

Điều đó phụ thuộc, robot đang làm gì sai?
Ian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.