Tiếp cận sử dụng PID để điều khiển robot vi sai lái thẳng


13

Hãy xem xét một robot điều khiển vi sai có hai bánh xe cơ giới với một bộ mã hóa gắn liền với nhau để phản hồi. Giả sử có một chức năng cho mỗi động cơ DC có độ nổi từ -1 đến 1 và đặt các tín hiệu PWM để cung cấp một lượng điện năng tương ứng cho động cơ đó. Thật không may, không phải tất cả các động cơ đều được tạo ra bằng nhau, vì vậy việc gửi mỗi động cơ cùng một tín hiệu PWM khiến cho robot xoay sang trái hoặc phải. Tôi đang cố gắng nghĩ về cách điều khiển robot thẳng bằng cách sử dụng các bộ mã hóa được gắn vào mỗi động cơ làm đầu vào cho vòng lặp PID.

Đây là cách tôi sẽ làm: Tôi sẽ lấy sự khác biệt giữa các bộ mã hóa bên trái và bên phải, ràng buộc lỗi giữa một số phạm vi, chuẩn hóa nó thành từ [-1, 1], sau đó ánh xạ nó tới các công suất động cơ 0 đến 1. Vì vậy, nếu I và D bằng 0 và chúng ta có sai số là 1 (vì vậy động cơ bên trái đã quay nhiều hơn động cơ bên phải), thì động cơ bên trái sẽ được đặt thành 0 và động cơ bên phải được đặt thành 1 (gây ra khó khăn trái).

Có bất kỳ vấn đề với điều này? Một cách tiếp cận tốt hơn là gì?

Câu trả lời:


5

Có bất kỳ vấn đề với điều này?

Vấn đề chính với điều này là trong khi giải pháp đề xuất của bạn sẽ ngay lập tức sửa lỗi không khớp giữa hiệu suất của các động cơ, nó sẽ không sửa lỗi tích lũy, chứ đừng nói đến các lỗi phức tạp hơn ở vị trí như lỗi Abbe (xem phần sau).

Một cách tiếp cận tốt hơn là gì?

Có một số điều bạn có thể làm, tùy thuộc vào mức độ chịu đựng lỗi của bạn và mức độ nỗ lực bạn muốn đưa vào để sửa lỗi.

Bước đầu tiên sẽ là thiết lập một cặp vòng lặp PID, một vòng cho mỗi bánh xe, cho cả hai cùng một vị trí nhu cầu. Như tôi đã đề nghị trong câu trả lời của mình cho một câu hỏi tương tự , nếu bạn giữ cả hai bánh xe trong một lỗi rất chặt chẽ ràng buộc về nơi bạn yêu cầu, thì sẽ mất một thời gian để tích lũy đủ lỗi để gây ra sự xoay vòng đáng chú ý.

Nó cũng sẽ dễ dàng hơn nhiều để điều chỉnh hai vòng PID cấp độ động cơ độc lập trên danh nghĩa hơn là điều chỉnh một hệ thống kết hợp phụ thuộc lẫn nhau, phức tạp. Để chịu mọi thay đổi của bộ điều khiển cấp cao hơn, bạn thực sự cần mỗi động cơ hoạt động tương tự nhất có thể với động cơ khác trong càng nhiều thời gian càng tốt và điều đó thực sự đòi hỏi các vòng servo riêng biệt.

Tuy nhiên, có một số biến chứng tiếp theo, và nó phụ thuộc vào độ chính xác mà bạn cần và mức độ nỗ lực của bạn để chuẩn bị cho chúng về giải pháp bạn thực hiện. Có thể là Dead Reckaming là đủ, hoặc bạn có thể cần thêm xác định vị trí Tương đối hoặc Tuyệt đối cho robot của mình.

Một vấn đề là ngay cả khi bánh xe bên trái và bên phải của bạn đều di chuyển 1000 bộ mã hóa, bạn vẫn có thể ở một vị trí khác nhau trên hai lần chạy khác nhau.

Ví dụ: giả sử bạn có lỗi tối đa sau 10 lần mã hóa và các động cơ của bạn đang chạy ở tốc độ 10 lần mã hóa cho mỗi lần lặp vòng lặp PID. Động cơ bên trái của bạn có thể di chuyển 5,10,10,10 ... 10,5 trong khi động cơ bên phải của bạn có thể có cấu hình 4,11,10,10 ... 10,5 và thậm chí có sự khác biệt nhỏ về gia tốc khi bắt đầu di chuyển có thể khiến robot khởi hành sai hướng. Không chỉ vậy mà bạn càng di chuyển theo hướng đó, lỗi sẽ càng lớn hơn về mặt tuyệt đối. Đây là những gì chúng ta đang nói về khi chúng ta nói về lỗi Abbe và không có mô hình động học phức tạp hoặc một loại tham chiếu bên ngoài nào đó, bạn sẽ không bao giờ có thể sửa chữa cho nó.

Để biết thêm thông tin, hãy xem câu trả lời của tôi cho một câu hỏi tương tự nhưng không hoàn toàn trùng lặp: Làm thế nào tôi có thể sử dụng thư viện Arduino PID để điều khiển robot theo đường thẳng? câu trả lời của tôi cho tối ưu hóa Line Follower cũng liên quan


2

Tôi có một bot với 2 bánh xe điều khiển độc lập.

Tôi đã chọn sử dụng một con quay hồi chuyển để giữ cho nó đi theo hướng mong muốn, va chạm trượt và thậm chí nhặt nó lên và xoay nó là một hệ quả nhỏ đối với nó vì nó sẽ điều chỉnh đúng hướng của nó.

Tôi sử dụng một PID duy nhất, cộng / trừ một hiệu chỉnh theo tốc độ hiện tại mong muốn cho mỗi 2 động cơ theo lỗi trong tiêu đề (hướng) hiện tại được xác định bởi con quay hồi chuyển.

Ví dụ: tôi đặt tốc độ thành 50% và tiêu đề là 20 độ. điều này thường sẽ lái cả hai động cơ với công suất 50%. nhưng khi tiêu đề đi ra, PID sẽ điều chỉnh thêm một số năng lượng cho một động cơ và loại bỏ một số năng lượng từ động cơ kia, do đó bạn có thể kết thúc với sự phân chia công suất 45% / 55% giữa các động cơ khi pid điều chỉnh tiêu đề.

Gyros có vấn đề của họ, ngay cả khi mất một thời gian để hiệu chỉnh, tôi vẫn thấy gryo của mình trôi đi khoảng 1 độ mỗi phút. Có thể là do trái đất quay 15 độ mỗi giờ, điều này cũng cần được xem xét trong thời gian dài.

Như các bộ mã hóa đã nêu trước đây trên các bánh xe là một ý tưởng tuyệt vời để thực sự biết bạn đã đi được bao xa.


Tôi rất thích xem mã của bạn cho điều này. Tôi đang bắt đầu đi xuống cùng một con đường với con quay hồi chuyển / gia tốc kế / từ kế nhưng tôi vẫn ở giai đoạn đầu tiên chỉ cố gắng hiểu ý nghĩa của các bài đọc từ các cảm biến này.
Ron Smith

Đây là một liên kết đến mã của tôi, tôi sợ nó có thể không dễ hiểu. github.com/rlsutton1/piBot/blob/master/src/main/java/au/com/ Kẻ
Robert Sutton
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.