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í):
Giải quyết cho , một 1 , một 2 , và một 3 :
r a t e ( t ) = p o s i t i o n ′ ( t ) = a 1 + 2 a 2 t + 3 a 3 t
Cho: , p o s i t i o n ( t f ) , r a t e ( 0 ) , r a t e ( t f )
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?