दो व्यापक दृष्टिकोण हैं:
- एनालिटिकल सॉल्यूशन, एक एंड-इफ़ेक्टर पोज़ दिया गया, जो सीधे संयुक्त निर्देशांक की गणना करता है। सामान्य तौर पर समाधान अद्वितीय नहीं है, इसलिए आप संभावित संयुक्त निर्देशांक के एक सेट की गणना कर सकते हैं। कुछ लोग अपने वातावरण (या स्वयं) में रोबोट को हिट करने का कारण बन सकते हैं, या आपका कार्य आपको एक विशेष समाधान चुनने में मदद कर सकता है, अर्थात। आप कोहनी को ऊपर (या नीचे), या रोबोट को अपनी सूंड के बाईं ओर (या दाएं) पसंद कर सकते हैं। सामान्य तौर पर 6-अक्ष वाले रोबोट के लिए एक विश्लेषणात्मक समाधान प्राप्त करने में बाधाएं होती हैं, एक गोलाकार कलाई (सभी अक्षों को काटना) मान लिया जाता है। कई अलग-अलग प्रकार के रोबोट के लिए विश्लेषणात्मक समाधान दशकों से गणना की गई है और आप शायद एक ऐसा पेपर पा सकते हैं जो आपके रोबोट के लिए एक समाधान देता है।
- संख्यात्मक समाधान, जैसा कि अन्य उत्तरों में वर्णित है, संयुक्त निर्देशांक को समायोजित करने के लिए एक अनुकूलन दृष्टिकोण का उपयोग करता है जब तक कि आगे कीनेमेटिक्स सही समाधान नहीं देता है। फिर, इस पर बहुत बड़ा साहित्य है, और बहुत सारे सॉफ्टवेयर हैं।
MATLAB के लिए अपने रोबोटिक्स टूलबॉक्स का उपयोग करते हुए, मैं एक अच्छी तरह से ज्ञात 6-अक्ष रोबोट का एक मॉडल बनाता हूं, जो डेनवेट-हर्टन पार्टनर्स मापदंडों का उपयोग करता है
>> 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|
+---+-----------+-----------+-----------+-----------+-----------+
फिर एक यादृच्छिक संयुक्त समन्वय चुनें
>> q = rand(1,6)
q =
0.7922 0.9595 0.6557 0.0357 0.8491 0.9340
फिर आगे कीनेमेटीक्स की गणना करें
>> 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
अब हम उल्टे कीनेमेटिक्स की गणना 6 जोड़ों और एक गोलाकार कलाई वाले रोबोट के लिए प्रकाशित विश्लेषणात्मक समाधान का उपयोग करके कर सकते हैं
>> p560.ikine6s(T)
ans =
0.7922 0.9595 0.6557 0.0357 0.8491 0.9340
और वॉइला, हमारे पास मूल संयुक्त निर्देशांक हैं।
संख्यात्मक समाधान
>> 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 =
[]
विफल हो गया है, और यह एक सामान्य समस्या है क्योंकि उन्हें आमतौर पर एक अच्छे प्रारंभिक समाधान की आवश्यकता होती है। कोशिश करते हैं
>> p560.ikine(T, 'q0', [1 1 0 0 0 0])
ans =
0.7922 0.9595 0.6557 0.0357 0.8491 0.9340
जो अब एक जवाब देता है, लेकिन यह विश्लेषणात्मक समाधान के लिए अलग है। हालांकि यह ठीक है, क्योंकि IK समस्या के कई समाधान हैं। हम सत्यापित कर सकते हैं कि हमारा समाधान आगे कीनेमेटीक्स की गणना करके सही है
>> 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
और यह जाँचना कि यह वही परिवर्तन है जो हमने शुरू किया था (जो यह है)।
अन्य संसाधन: