Điều chỉnh PID


13

Để tiếp tục câu hỏi tôi đã hỏi ở đây: Sự bất ổn định của quad-ray với chế độ tự động đơn giản ... Tôi muốn hỏi một vài câu hỏi về việc thực hiện một bộ điều khiển cơ bản cho một tứ giác được điều khiển bởi mô-đun APM 2.6. (Tôi đang sử dụng khung từ 3DRobotics)

Tôi đã tước toàn bộ hệ thống điều khiển xuống chỉ còn hai khối PID, một khối để điều khiển cuộn và một khối khác để điều khiển cao độ (ngáp và mọi thứ khác ... tôi sẽ nghĩ về chúng sau).

Tôi đang thử nghiệm thiết lập này trên một giàn khoan bao gồm một chùm quay tự do, trong đó tôi đã buộc chặt hai cánh tay của tứ giác. Hai người kia được tự do di chuyển. Vì vậy, tôi thực sự đang thử nghiệm một mức độ tự do (cuộn hoặc cao độ) tại một thời điểm.

Kiểm tra hình ảnh bên dưới: ở đây A, B đánh dấu chùm tia xoay tự do mà thiết lập được gắn vào. nhập mô tả hình ảnh ở đây

Với việc điều chỉnh cẩn thận các thông số P và D, tôi đã xoay sở để đạt được một chuyến bay duy trì trong khoảng 30 giây.

Nhưng bằng cách 'duy trì', tôi đơn giản có nghĩa là một thử nghiệm trong đó máy bay không bị lật đổ sang một bên. Chuyến bay ổn định của Rock vẫn không có chỗ trong tầm nhìn, và hơn 30 giây của chuyến bay cũng có vẻ khá khó khăn. Nó chao đảo từ đầu. Khi nó đạt đến 20 - 25 giây, nó bắt đầu nghiêng sang một bên. Trong vòng 30 giây, nó đã nghiêng sang một bên bởi một lề không thể chấp nhận được. Chẳng mấy chốc, tôi thấy nó nằm ngửa

Đối với bản thân mã PID, tôi đang tính toán tỷ lệ lỗi từ 'bộ lọc miễn phí' của dữ liệu con quay hồi chuyển + gia tốc. Thuật ngữ tích phân được đặt thành không. Thuật ngữ P đến khoảng 0,39 và thuật ngữ D là 0,0012. (Tôi không sử dụng thư viện Arduino Arduino trên mục đích, chỉ muốn có một trong số các PID của riêng tôi được triển khai ở đây.)

Kiểm tra video này, nếu bạn muốn xem nó hoạt động như thế nào.

http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [Yeh, thiết lập khá cổ xưa! Tôi đồng ý. :)]

Xin vui lòng cho tôi biết những gì tôi có thể làm để cải thiện sự ổn định ở giai đoạn này.

@Ian: Trong số nhiều thử nghiệm tôi đã thực hiện với thiết lập của mình, tôi đã vẽ đồ thị cho một số thử nghiệm bằng cách đọc từ màn hình nối tiếp. Dưới đây là bài đọc mẫu của Roll vs 'Motor1 & Motor2 - đầu vào PWM' (hai động cơ điều khiển cuộn):

Đầu vào cuộn và động cơ PWM

Đối với đầu vào / đầu ra:

Đầu vào: Giá trị cuộn và cường độ (tính theo độ), thu được bằng cách kết hợp gia tốc kế + con quay hồi chuyển

Đầu ra: Giá trị PWM cho động cơ, được phân phối bằng hàm motor.write () của thư viện Servo


Nghị quyết

Tôi đã giải quyết vấn đề. Đây là cách thực hiện:

  1. Mấu chốt của vấn đề nằm ở cách tôi triển khai chương trình Arduino. Tôi đã sử dụng hàm write () để cập nhật các góc servo, điều này chỉ chấp nhận các bước nguyên trong đối số (hoặc bằng cách nào đó chỉ đáp ứng với đầu vào số nguyên, 100 và 100.2 tạo ra kết quả tương tự). Tôi đã thay đổi nó thành writeMicroseconds () và điều đó làm cho máy photocopy ổn định hơn đáng kể.

  2. Tôi đã thêm RPM trên một động cơ trong khi giữ cho động cơ kia ở giá trị ổn định. Tôi đã thay đổi điều này để tăng RPM trong một động cơ trong khi giảm động cơ đối diện. Điều đó giữ cho tổng lực đẩy ngang không thay đổi, điều này có thể giúp tôi khi tôi cố gắng giữ độ cao thẳng đứng giữ vật này.

  3. Tôi đã đẩy RPM lên đến giới hạn tối đa, đó là lý do tại sao quad quad cứ mất kiểm soát ở mức tối đa. Không có chỗ cho RPM tăng khi cảm nhận được độ nghiêng.

  4. Tôi quan sát thấy rằng một trong những động cơ vốn đã yếu hơn so với cái kia, tôi không biết tại sao. Tôi đã mã hóa một phần bù vào đầu vào động cơ PWM đó.

Cảm ơn tất cả mọi người vì đã ủng hộ tôi.


Mã nguồn:

Nếu bạn quan tâm, đây là mã nguồn của việc triển khai PID đơn giản của tôi: Mã nguồn PID

Xin vui lòng kiểm tra nó trong phần cứng của bạn. Bất kỳ đóng góp cho dự án sẽ được hoan nghênh.


1
Đầu vào là gì và đầu ra của vòng lặp là gì?
Guy Sirton

@GuySirton: Cập nhật câu hỏi của tôi
metsburg

Những phần phẳng trong lệnh động cơ của bạn là gì? Hình như có gì đó đang bão hòa. Bạn thay đổi cuộn như một hàm liên tục nhưng các lệnh của bạn trông rất đột ngột. Ngoài ra, tại sao cả hai lệnh PWM động cơ trôi lên trong khi đầu vào cuộn của bạn vẫn ở cùng một phạm vi? Nhân tiện khoảng thời gian là gì?
Guy Sirton

1
Lý do bạn mất kiểm soát sau 30 giây có thể liên quan đến cả hai lệnh của bạn trôi đi. Tôi nghĩ rằng bạn đang cố gắng kiểm soát sự khác biệt giữa các lệnh nhưng bạn không thể cho phép chúng tiếp tục trôi đi.
Guy Sirton

@GuySirton: Chúng không trôi lên, tôi tăng nó lên từ 0, để nó đạt đến trạng thái ổn định cụ thể trong vòng 3/4 giây. Tuy nhiên, tôi nghĩ bạn đã đúng khi bạn nói "lý do bạn mất kiểm soát sau 30 giây có lẽ liên quan đến cả hai lệnh của bạn trôi đi". Nếu tôi không sử dụng mức tăng dần này, nếu tôi sửa đầu vào PWM của mình ở một mức nhất định (thấp hơn đầu vào tối đa được hiển thị ở trên), vấn đề mất kiểm soát sau 30 giây sẽ biến mất.
metsburg

Câu trả lời:


6
  1. Có vẻ như mức tăng tỷ lệ của bạn là quá cao.
  2. Bạn dường như liên tục tăng RPM trên một động cơ trong khi khóa ở động cơ kia để làm cho hệ thống xoay. Đây không phải là một chiến lược kiểm soát tốt vì cuối cùng chúng sẽ bão hòa và bạn sẽ mất kiểm soát. Ngoài ra khi thời gian tăng khả năng chỉ huy hệ thống của bạn giảm. Vì vậy, bạn cần một mô hình tốt hơn của hệ thống.
  3. Nếu bạn giao dịch với # 1 và # 2, bạn sẽ có một hệ thống ổn định hơn nhưng bạn có thể không hài lòng với băng thông điều khiển. Để giải quyết vấn đề đó, bạn cần làm cho hệ thống của mình cứng hơn, bao gồm loại bỏ bất kỳ độ trễ nào ở phía cảm biến của mọi thứ và ở phía kiểm soát của mọi thứ.

3

Tôi sẽ bắt đầu bằng cách đọc qua câu hỏi này: các chiến lược tốt để điều chỉnh các vòng lặp PID là gì?

Nếu tôi phải đoán, tôi sẽ nói rằng bạn có vấn đề trong cách xây dựng bộ lọc miễn phí của bạn. Khi tắt các động cơ quad quad, bạn nên nghiêng khung hình qua lại và xem các giá trị cuộn / cao độ được báo cáo có thực sự chính xác hay không.

Đối với tôi, có vẻ như có độ trễ giữa đầu vào từ gia tốc kế và đầu ra của bộ lọc của bạn - sự dao động có thể được giải thích bằng các phản ứng muộn với dữ liệu đầu vào. Sự thay đổi cuối cùng trông giống như một lỗi tích hợp có thể xảy ra tích lũy theo thời gian - nói cách khác, trong khi quad quad của bạn đứng về phía nó, nó thực sự nghĩ rằng nó lơ lửng ở mức độ.

(Cập nhật) Về biểu đồ của bạn, thực tế là tốc độ động cơ của bạn tiếp tục tăng (thay vì giữ cân bằng) có nghĩa là bạn có lỗi ở đâu đó. Có lẽ thuật ngữ Tích phân của bạn đang phát triển không giới hạn và bạn nên chỉ định mức tối đa hợp lý cho nó.


Tôi đã cập nhật câu hỏi của mình với các giá trị cuộn, khi nghiêng qua lại. Tôi đã giải quyết việc chuyển đổi cuối cùng bằng cách hạ thấp đầu vào PWM tối đa của mình. Có vẻ như các giá trị hiệu chỉnh không hoạt động ở RPM rất cao. Tôi có thể dễ dàng xoay giàn khoan bằng tay khi làm việc ở tốc độ RPM cao. Ở tốc độ RPM thấp hơn, tôi cảm thấy sức cản đáng kể và quad quad dường như dao động trở lại vị trí ban đầu của nó (điều này tốt, tôi đoán vậy). Vì vậy, vấn đề 'chuyển qua' có lẽ được giải quyết bằng cách hạ thấp RPM (không biết liệu máy bay không người lái sẽ cất cánh hay không, hy vọng là có). Vấn đề dao động vẫn còn.
metsburg

-3-5±90

Chà, đồ thị không chính xác cho bài kiểm tra được hiển thị trong video. Như đã đề cập ở trên, biểu đồ là từ một trong nhiều thử nghiệm tôi đã thực hiện với thiết lập này và tôi không nhớ chính xác trường hợp cụ thể này trông như thế nào. Biểu đồ chỉ là để cung cấp cho bạn ý tưởng về cách hoạt động của phản hồi đầu vào so với đầu ra và tôi cũng muốn chứng minh rằng không có độ trễ giữa đầu vào và đầu ra (với điều kiện là vòng lặp đang chạy ở tốc độ 150+ Hz). Kết hợp video với biểu đồ có thể không có nhiều ý nghĩa. Tôi không có bộ dữ liệu chính xác cho thử nghiệm trong video.
metsburg

Tôi nhận ra đồ thị là sai lệch, xin lỗi vì điều đó. Tôi sẽ thử và cập nhật biểu đồ với một biểu đồ chính xác hơn. Trên thực tế, vì tôi đang vẽ dữ liệu từ cổng nối tiếp, khi tôi tạo biểu đồ này, bo mạch Arduino đã được buộc với máy tính xách tay. Sau một chút dao động, tôi phải can thiệp và làm chậm dao động bằng tay. Đó là lý do tại sao bạn thấy nó lắng xuống ở mức - 5 độ, trong khi thực tế là khoảng 90 độ. Tôi sẽ cố gắng cập nhật một biểu đồ chính xác hơn sau này.
metsburg

Một điều khác tôi thấy từ biểu đồ là lực đẩy kết hợp của bạn luôn tăng. Điều đó có vẻ sai.
Ian

1

Chà, có thể có một số thứ đang diễn ra ở đây ...

1) Các góc báo cáo của bạn có đúng không? ồn ào? Bạn có thể dễ dàng kiểm tra xem bằng cách nghiêng thủ công của bạn và theo dõi các giá trị sắp ra.

2) việc thực hiện PID của riêng bạn có lỗi. Bạn có thể sử dụng triển khai đáng tin cậy ngoài đó để kiểm tra mã của bạn.

3) Đạo cụ, động cơ gắn sai vòng.

4) ...


1) Tôi đã nghiêng và kiểm tra các góc được báo cáo, gần như chính xác, nhưng chắc chắn là ồn ào. 2) rất có thể ... trên thực tế, tôi nghĩ rằng nó tóm tắt hoàn toàn: P 3) không có khả năng lắm, hai chiều kim đồng hồ, hai chiều ngược chiều kim đồng hồ ... Tôi đã kiểm tra đạo cụ nhiều lần + Tôi đoán loại lỗi này sẽ xảy ra đã dẫn đến lỗi hoang dã, vượt quá tầm kiểm soát. 4) ....
metsburg

4) ... một điều chỉnh PID sai có thể khiến mọi thứ trở nên tồi tệ hơn so với việc bạn hoàn toàn không có PID!
dm76

Yeh, tôi thấy điều đó bây giờ. Tôi sẽ làm việc với nó vào ngày mai. Kế hoạch đầu tiên của tôi là sử dụng thư viện PID đáng tin cậy và thứ hai là thay đổi đầu ra của PID từ tín hiệu PWM thành hiệu chỉnh roll.pitch.
metsburg
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.