Cách tiếp cận đúng để viết bộ điều khiển quay cho robot bóng đá là gì?


14

Hãy tưởng tượng lập trình một robot bóng đá 3 bánh. Loại điều khiển nào bạn sẽ sử dụng để quay nó? P? PID?

Mục tiêu của bộ điều khiển này là nó sẽ làm cho robot đứng ở một góc xác định (0 độ) và quay lại nếu quay bằng tay hoặc robot khác.

Tôi sử dụng động cơ bước cho robot của tôi chứ không phải động cơ servo nên tôi cần thực hiện điều này trong phần mềm của mình!

Tôi đã viết một bộ điều khiển loại P mẫu và chuyển động khá tốt. Nhưng tôi muốn làm cho nó tốt hơn nếu có thể. Mã như sau:

void spinSpeed(int devidedValue, int addedValue, int correction) {

    if(degree<correction && degree>-correction) {
        motorSpeed = 0;
    } else {
        if(degree > 0) {
            motorSpeed = ((degree)/(devidedValue) + (addedValue));
        } else {
            motorSpeed = ((degree)/(devidedValue) - (addedValue));  
        }
    }
}

correctionlà một phạm vi, trong đó robot không có chuyển động. degreelà một số trong khoảng từ -27 đến 128 được trả về từ la bàn. motorSpeedlà một số trong khoảng từ 0 đến 255 được áp dụng cho PWM.


Có lẽ thói quen này được chạy mỗi khi compas tạo ra một giá trị mới cho degree?
Gian hàng Mark

@MarkBooth Tôi có mã của mình trong một thời gian (1) vì vậy trong mỗi chu kỳ, nó nhận được giá trị từ la bàn cung cấp cho hàm và sau đó áp dụng kết quả cho các động cơ.
Miro Markaravanes

Tôi sẽ điều tra loại bộ điều khiển mà servo sử dụng, vì bạn đang cố gắng sao chép hành vi servo trong phần mềm.
Chris Laplante

Tôi không sử dụng động cơ servo. Tôi sử dụng động cơ bước để không có hành vi như vậy trong động cơ.
Miro Markaravanes

2
Xin chào Miro, khi trao đổi ngăn xếp, tốt hơn là chỉnh sửa câu hỏi của bạn để trả lời các câu hỏi trong các bình luận, theo cách đó các bình luận có thể được dọn dẹp (xóa) để chúng không bị phân tâm khỏi câu hỏi.
Gian hàng Mark

Câu trả lời:


7

Điều quan trọng cần nhớ về vòng điều khiển PID là mỗi thuật ngữ được dự định để thống trị kiểm soát tại các thời điểm khác nhau trong quá trình di chuyển.

Thuật ngữ tỷ lệ được dự định để chiếm ưu thế và cung cấp mô-men xoắn lớn hơn (hoặc trong tốc độ trường hợp của bạn) khi bạn càng rời xa vị trí mục tiêu của mình.

Thuật ngữ phái sinh được dự định để chiếm ưu thế trong giai đoạn 'hành trình' của di chuyển hình thang điển hình của bạn. Nó giúp điều chỉnh lại một thuật ngữ tỷ lệ rất cao và hạn chế gia tốc bỏ chạy khi bạn ở xa điểm đến của mình, nhưng nó cũng có thể giúp tăng tốc độ bạn hội tụ về đích khi bạn đến gần nó và thuật ngữ tỷ lệ đóng góp ít hơn nhiều .

Nếu bạn đang sử dụng bộ điều khiển vận tốc chứ không phải bộ điều khiển mô-men xoắn thì thuật ngữ phái sinh thực sự có thể được ẩn bên trong bộ điều khiển tốc độ của bạn và không thể truy cập trực tiếp vào vòng lặp PID của bạn. Điều này có thể làm cho việc điều khiển trở nên đơn giản hơn (thông thường nó sẽ chỉ tăng tốc nhanh nhất có thể với tốc độ tối đa hoặc tốc độ tối đa mong muốn, tùy theo mức nào thấp hơn) nhưng nó cũng có thể làm cho nó ít dự đoán hơn. Thông thường, thuật ngữ D (hoặc P) quá mạnh có thể dẫn đến chu kỳ giới hạn (thường được gọi không chính xác là cộng hưởng hoặc dao động do âm thanh của động cơ ngân nga hoặc thậm chí la hét trong trạng thái này, mặc dù chu kỳ giới hạn là mô tả chính xác hơn nhiều ).

Thuật ngữ tích phân là có để sửa cho lỗi trạng thái ổn định còn lại , đó là nơi có sự khác biệt lâu dài, liên tục giữa nơi bạn được yêu cầu đến và nơi bạn thực sự đang ở. correctionGiá trị hiện tại (thực sự chỉ là dung sai) của bạn hoạt động giống như đối diện với một điều khoản tích phân, nó cắt hoàn toàn động cơ khi bạn ở trong một dải chết xung quanh vị trí mong muốn.

Do những yếu tố này, bạn sẽ thu được rất ít từ việc thực hiện một vòng lặp đầy đủ trừ khi bạn cũng lập kế hoạch trong một cấu hình vận tốc với các giai đoạn tăng tốc, hành trình và giảm tốc riêng biệt.

Cũng nên nhớ rằng dải chết và thiếu thuật ngữ I sẽ có nghĩa là vị trí cuối cùng sẽ luôn có phần ngẫu nhiên và rất có thể sẽ khác nhau tùy thuộc vào hướng bạn tiếp cận vị trí mong muốn. Như vậy, độ lặp lại hai chiều của bạn có thể tệ hơn nhiều so với độ lặp lại tiêu chuẩn của bạn.

Để biết thêm thông tin về sự khác biệt giữa độ chính xác, độ lặp lại và độ phân giải, hãy xem mô tả tuyệt vời này . Trong trường hợp của bạn, độ phân giải của bạn là cảm biến la bàn của bạn, trong khi cả độ chính xác, độ lặp lại rất có thể bị giới hạn bởi correctiongiá trị của bạn , vì nếu correctiongiá trị này lớn hơn độ phân giải la bàn của bạn, bạn sẽ vứt bỏ một số độ chính xác vị trí của mình để có thể tắt động cơ của bạn khi bạn đang ở gần.


8

Bộ điều khiển PID sẽ là tốt nhất, Sử dụng một la bàn, đó là nhiệm vụ tương đối đơn giản để có được ổ bi của robot và so sánh nó với ổ trục bạn muốn đạt được, và sử dụng một số kỹ thuật điều chỉnh PID để đạt được chuyển động mượt mà tiêu đề mong muốn của bạn. Cách tiếp cận này cũng có thể được áp dụng để xoay theo một lượng nhất định một cách chính xác.

Tôi đã thực hiện một số robot trong lĩnh vực này, đây là những gì chúng tôi đã sử dụng trong robot của chúng tôi, thực hiện một nhiệm vụ không quá khác biệt với bạn ...


1
Cảm ơn câu trả lời của bạn. Tôi muốn chấp nhận câu trả lời nhưng tôi muốn xem nhiều câu trả lời hơn, vì vậy tôi sẽ chấp nhận khi có nhiều câu trả lời hơn;)
Miro Markaravanes
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.