Có hai cách tiếp cận rộng:
- các giải pháp phân tích, đưa ra một tư thế đầu cuối, tính toán trực tiếp các tọa độ khớp. Nói chung, giải pháp không phải là duy nhất, vì vậy bạn có thể tính toán một tập hợp tọa độ khớp có thể. Một số có thể khiến robot tấn công mọi thứ trong môi trường của nó (hoặc chính nó) hoặc nhiệm vụ của bạn có thể giúp bạn chọn một giải pháp cụ thể, nghĩa là. bạn có thể thích khuỷu tay lên (hoặc xuống) hoặc robot có cánh tay ở bên trái (hoặc phải) của thân cây. Nhìn chung, có những hạn chế trong việc thu được giải pháp phân tích, đối với robot 6 trục, một cổ tay hình cầu (tất cả các trục giao nhau) được giả định. Các giải pháp phân tích cho nhiều loại robot khác nhau đã được tính toán trong nhiều thập kỷ và bạn có thể tìm thấy một bài báo đưa ra giải pháp cho robot của mình.
- các giải pháp số, như được mô tả trong các câu trả lời khác, sử dụng phương pháp tối ưu hóa để điều chỉnh tọa độ khớp cho đến khi động học chuyển tiếp đưa ra giải pháp phù hợp. Một lần nữa, có một tài liệu khổng lồ về điều này, và rất nhiều phần mềm.
Sử dụng Hộp công cụ Robotics của tôi cho MATLAB, tôi tạo mô hình của robot 6 trục nổi tiếng sử dụng các tham số Denavit-Hartenberg
>> mdl_puma560
>> p560
p560 =
Puma 560 [Unimation]:: 6 axis, RRRRRR, stdDH, fastRNE
- viscous friction; params of 8/95;
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 0| 0| 1.5708| 0|
| 2| q2| 0| 0.4318| 0| 0|
| 3| q3| 0.15005| 0.0203| -1.5708| 0|
| 4| q4| 0.4318| 0| 1.5708| 0|
| 5| q5| 0| 0| -1.5708| 0|
| 6| q6| 0| 0| 0| 0|
+---+-----------+-----------+-----------+-----------+-----------+
sau đó chọn tọa độ khớp ngẫu nhiên
>> q = rand(1,6)
q =
0.7922 0.9595 0.6557 0.0357 0.8491 0.9340
sau đó tính toán động học về phía trước
>> T = p560.fkine(q)
T =
-0.9065 0.0311 -0.4210 -0.02271
0.2451 0.8507 -0.4649 -0.2367
0.3437 -0.5247 -0.7788 0.3547
0 0 0 1
Bây giờ chúng ta có thể tính toán các động học nghịch đảo bằng cách sử dụng một giải pháp phân tích được công bố cho một robot có 6 khớp và một cổ tay hình cầu
>> p560.ikine6s(T)
ans =
0.7922 0.9595 0.6557 0.0357 0.8491 0.9340
và voila, chúng ta có tọa độ khớp ban đầu.
Giải pháp số
>> p560.ikine(T)
Warning: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.63042
> In SerialLink/ikine (line 244)
Warning: failed to converge: try a different initial value of joint coordinates
> In SerialLink/ikine (line 273)
ans =
[]
đã thất bại, và đây là một vấn đề phổ biến vì họ thường cần một giải pháp ban đầu tốt. Hãy thử
>> p560.ikine(T, 'q0', [1 1 0 0 0 0])
ans =
0.7922 0.9595 0.6557 0.0357 0.8491 0.9340
mà bây giờ đưa ra một câu trả lời nhưng nó khác với giải pháp phân tích. Mặc dù vậy cũng không sao, vì có nhiều giải pháp cho vấn đề IK. Chúng tôi có thể xác minh rằng giải pháp của chúng tôi là chính xác bằng cách tính toán động học chuyển tiếp
>> p560.fkine(ans)
ans =
-0.9065 0.0311 -0.4210 -0.02271
0.2451 0.8507 -0.4649 -0.2367
0.3437 -0.5247 -0.7788 0.3547
0 0 0 1
và kiểm tra xem nó có giống với phép biến đổi mà chúng ta đã bắt đầu không (đó là).
Các nguồn lực khác: