Chuyển động servo mượt mà cho robot bò


11

Tôi đã tạo ra một robot thu thập thông tin nhỏ cách đây một lúc, có hai chân với hai bậc tự do mỗi cái, vì vậy tổng cộng 4 động cơ RC. Trong khi tôi đang lập trình chuyển động của chân tôi nhận thấy rằng chúng di chuyển khá cứng. Điều có nghĩa là bộ điều khiển bên trong của RC servo sẽ phản ứng rất nhanh với các lệnh vị trí, nhưng tôi muốn trình thu thập thông tin của mình di chuyển theo cách có vẻ mượt mà và giống như cuộc sống hơn một chút.

Giải pháp của tôi là tạo ra một hàm thời gian mô tả đường đi của các servo, sau đó đặt vị trí của chúng theo các khoảng thời gian nhỏ, dẫn đến chuyển động trơn tru hơn. Về cơ bản những gì tôi đã làm là giải quyết cho hệ số trong một phương trình bậc ba bằng cách sử dụng khoảng thời gian, bắt đầu và kết thúc vị trí của servo, và bắt đầu và kết thúc giá servo nên di chuyển (mà chỉ là đạo hàm của vị trí):ai

Giải quyết cho , một 1 , một 2 , và một 3 :a0a1a2a3

r a t e ( t ) = p o s i t i o n ( t ) = a 1 + 2 a 2 t + 3 a 3 t

position(t)=a0+a1t+a2t2+a3t3
rate(t)=position(t)=a1+2a2t+3a3t2

Cho: , p o s i t i o n ( t f ) , r a t e ( 0 ) , r a t e ( t f )position(0)position(tf)rate(0)rate(tf)

Tôi đặt tốc độ của servo giữa một cặp chuyển động bằng 0 nếu các chuyển động ngược chiều nhau và dương hoặc âm nếu các chuyển động tương ứng theo hướng tích cực hoặc tiêu cực.

Điều này làm việc khá tốt, nhưng giải pháp này bị hạn chế theo một số cách. Đối với một người, thật khó để quyết định chính xác tỷ lệ giữa các chuyển động đi theo cùng một hướng. Tôi đã sử dụng trung bình của các sườn phía trước và phía sau của một vị trí cụ thể giữa các chuyển động, nhưng đối với tôi điều đó là không tối ưu. Thứ hai, các đường cong hình khối có thể đưa servo đến một vị trí bên ngoài phạm vi của các vị trí ở đầu và cuối của một chuyển động, điều này có thể không mong muốn. Ví dụ, tại một số thời điểm trong khoảng thời gian, đường cong có thể khiến servo vượt ra khỏi vị trí thứ hai hoặc bên dưới vị trí đầu tiên. Thứ ba, việc tạo đường cong ở đây không xem xét tốc độ tối đa mà servo có thể xoay, do đó, một đường cong có thể có chuyển động servo ở tốc độ không thực tế. Với,

Bỏ qua mối quan tâm cuối cùng, những vấn đề này có thể được giải quyết bằng cách tăng mức độ của đa thức và thêm các ràng buộc để giải quyết các hệ số, nhưng giờ tôi bắt đầu tự hỏi ...

Có cách nào tốt hơn cách này để làm cho chuyển động servo trơn tru và trông giống cuộc sống hơn không?


Các mã nên đã được tương đối thẳng về phía trước. Bạn có thể nói thêm về lý do tại sao nó có liên quan?
DaemonMaker

1
Bạn nói đúng, mã khá đơn giản, mặc dù phương thức kết quả để kiểm soát các servo đã phức tạp hơn trước. Tôi đã chỉnh sửa câu hỏi của tôi để bao gồm một mô tả về những hạn chế của phương pháp này thay thế.
Robz

NURBS , B-splines hợp lý không đồng nhất, có thể thực hiện công việc
James Waldby - jwpat7

@ jwpat7 cảm ơn bạn đã đóng góp, nhưng tôi không nghĩ NURBS sẽ hoạt động vì những đường cong đó không được đảm bảo để đạt được điểm được cung cấp
Robz

Kp

Câu trả lời:


6

Tạo hồ sơ chuyển động

Trước đây, tôi đã sử dụng một trình tạo hồ sơ chuyển động để giải quyết vấn đề này. Để sử dụng nó, bạn sẽ cần vị trí mục tiêu mong muốn (điểm đặt), vận tốc tối đa và giá trị gia tốc được liên kết với động cơ của bạn. Nó hoạt động bằng cách tích hợp một đường cong vận tốc hình thang để có được một hồ sơ vị trí trơn tru. Đường cong S có thể được sử dụng nếu chuyển động phải mượt mà hơn. Tham khảo bài viết giải thích hồ sơ chuyển động .

Đặt điểm lọc trước

Ngoài lộ trình định hình chuyển động, bạn có thể thử đơn giản là lọc thông thấp cho lệnh tới các servo. Kiểu lọc điểm đặt này sẽ làm chậm phản hồi của bạn nhưng nó cũng sẽ làm mượt nó và dễ thực hiện. Tần số cắt sẽ phải được chọn để nó hỗ trợ băng thông của hệ thống của bạn (để nó không lọc ra chuyển động mong muốn). Thực hiện bộ lọc thông thấp đơn giản trong C


+1: chắc chắn tạo hồ sơ chuyển động.
Guy Sirton

2

Tôi nghĩ rằng câu hỏi đề cập đến loại thiết bị này: RC servo

Chúng thường không có hiệu suất rất cao nên chúng sẽ không thể theo dõi cấu hình chuyển động được tạo rất tốt. Hầu hết các hệ thống điều khiển động cơ thương mại sử dụng đường cong S để di chuyển điểm tới điểm (xem câu trả lời của @ ddevaz) thực hiện một cấu hình khôn ngoan trong đó mỗi phân đoạn sử dụng một phương trình khác nhau. Vấn đề của bạn sẽ là để động cơ của bạn theo dõi hồ sơ được tạo, có lẽ bạn sẽ có một hồ sơ rất "chậm". Nếu không, cấu hình bạn thử và ra lệnh cho thiết bị theo dõi sẽ có lỗi vị trí lớn so với vị trí thực tế của thiết bị.

Lý tưởng nhất là bạn sẽ muốn một số loại phản hồi bạn có thể xem trong khi bạn đang thực hiện chuyển động để bạn có thể thấy thiết bị theo dõi lệnh tốt như thế nào. Từ góc độ thực tế hơn, nếu bạn muốn chuyển động tốt hơn đáng kể, bạn có thể cần các động cơ khác nhau và điều khiển động cơ khác nhau.

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.