उलटा गतिज समस्या को कैसे हल किया जा सकता है?


20

रोबोट बांह के आगे केनेमेटिक्स को आसानी से हल किया जा सकता है। हम Denavit-Hartenberg रूपांतरण मैट्रिसेस का उपयोग करके प्रत्येक संयुक्त का प्रतिनिधित्व कर सकते हैं ।

उदाहरण के लिए, यदि संयुक्त एक रैखिक actuator है, तो इसमें परिवर्तन मैट्रिक्स हो सकता है:मैंटी

टीमैं=[10000100001मैं0001] जहां विस्तार लंबाई द्वारा परिभाषित की गई हैमैं

जबकि, एक घूर्णन लिंक हो सकता है:

टीमैं=[100एल0क्योंकिαमैं-पापαमैं00पापαमैंक्योंकिαमैं00001] जहां है कोण, और लिंक की लंबाई है।एलαएल

फिर हम सभी ट्रांसफॉर्मेशन मैट्रिसेस को गुणा करके एंड की स्थिति और अभिविन्यास पा सकते हैं: ।Πटीमैं

सवाल यह है कि हम उलटे समस्या को कैसे हल करें?

गणित के अनुसार, एक वांछित अंत प्रेरक पद के लिए , खोजने के मानकों , ऐसी है कि । इस समीकरण को हल करने के लिए क्या तरीके मौजूद हैं?मैंαमैंΠटीमैं=

जवाबों:


11

दिन में वापस, जब मैं सीख रहा था, इसे बनाते हुए मैं साथ गया, मैंने IK समस्या को हल करने के लिए सरल ढाल का उपयोग किया।

अपने मॉडल में, आप प्रत्येक संयुक्त को एक छोटी सी राशि में घुमाने की कोशिश करते हैं, देखें कि अंत बिंदु स्थिति त्रुटि के लिए कितना अंतर है। ऐसा करने के बाद, आप फिर प्रत्येक जोड़ को उस लाभ के लिए आनुपातिक रूप से घुमाते हैं। तब तक आप बार-बार ऐसा करते हैं, जब तक आप काफी करीब नहीं होते।

आम तौर पर, यह ढाल निम्नलिखित, या पहाड़ी निम्नलिखित के रूप में जाना जाता है। स्वतंत्रता की दो डिग्री के साथ एक रोबोट बांह की कल्पना करें:

इंद्रकुमार

संयुक्त घूर्णन एक एक छोटा सा में दिशा अंत बिंदु ले जाता है एक । संयुक्त B को एक छोटा सा घूर्णन करने से दिशा B में अंतिम बिंदु आ जाता है । ये दोनों हमें एक ही राशि के अनुसार लक्ष्य के करीब ले जाते हैं, इसलिए हमें दोनों जोड़ों को समान गति से घुमाना चाहिए।

यदि हम लक्ष्य बनाम संयुक्त कोण की दूरी के ग्राफ को प्लॉट करें, तो यह इस तरह दिखेगा:

इंद्रकुमार

मैं सिर्फ मदद करने के लिए कुछ कंट्रोवर्स में रंग गया हूं। हम इस एल्गोरिथ्म के पथ को देख सकते हैं। आप देखेंगे कि संयुक्त अंतरिक्ष में, जो पथ लिया गया है वह इष्टतम नहीं है। यह एक वक्र लेता है। हालाँकि, वास्तविक स्थान में, आप अंतिम बिंदु को लक्ष्य के लिए काफी सीधी रेखा लेते हुए देखेंगे। आप यह भी देख सकते हैं कि वास्तव में समस्या के दो समाधान हैं, और एल्गोरिथ्म ने अभी सबसे निकटतम पाया है।

यह उलटा किनेमैटिक्स समस्या को हल करने का एकमात्र तरीका नहीं है। यह निश्चित रूप से सबसे अच्छा तरीका नहीं है।

पेशेवरों:

  • यह वैचारिक रूप से सरल है, अगर आप इसे सीख रहे हैं तो बहुत अच्छा है।
  • इसे लागू करना आसान है, भले ही Denavit-Hartenberg ट्रांसफॉर्मेशन मैट्रिसेस की दृष्टि आपको भयावहता देती हो।
  • यह बहुत सामान्य है, आपको सभी प्रकार के जोड़ों का उपयोग करने की अनुमति देता है: रोटरी, रैखिक, कुछ और, जब तक आप अनुमान लगा सकते हैं कि वे अंत बिंदु को स्थानांतरित करने का कारण कैसे बनते हैं।
  • यह अच्छी तरह से मुकाबला करता है, यहां तक ​​कि जब शून्य या अनंत संख्या में समाधान होते हैं।

विपक्ष:

  • यह धीमा है, समाधान खोजने के लिए कई पुनरावृत्तियों को ले रहा है। हालाँकि, यह ठीक है अगर आप गणना के अनुसार वास्तविक हाथ को एल्गोरिथम की प्रगति का पालन कर सकते हैं।
  • यह स्थानीय मिनीमा में फंस सकता है। IE यह सबसे अच्छा संभव समाधान नहीं मिल सकता है, अगर यह एक अच्छा पर्याप्त मिल जाए।

मेरे बहुत पुराने वेब साइट पर इसके बारे में अधिक विवरण हैं: अच्छी दिखने वाली बनावट वाली हल्की खट्टी बाउंसी फन स्मार्ट और स्ट्रेची पेज


3

इस समस्या के कई समाधान हैं जो कि याकूबियन मैट्रिक्स के आसपास हैं। इस स्लाइड शो में जैकबियन विधियों को शामिल किया गया है और इसमें एक चक्रीय समन्वित वंश विधि का भी उल्लेख किया गया है, जिससे मैं अपरिचित हूं।

इस विषय पर संसाधनों की अधिकता है - यदि आप "उलटा किनेमैटिक्स जैकबियन" के लिए Google से पूछते हैं ।

इसके अलावा, परिचयात्मक रोबोटिक्स पर एम आईटी के ओपन कोर्स से व्याख्यान नोट्स के अध्याय 5.3 की जांच करें ।


1

दो व्यापक दृष्टिकोण हैं:

  • एनालिटिकल सॉल्यूशन, एक एंड-इफ़ेक्टर पोज़ दिया गया, जो सीधे संयुक्त निर्देशांक की गणना करता है। सामान्य तौर पर समाधान अद्वितीय नहीं है, इसलिए आप संभावित संयुक्त निर्देशांक के एक सेट की गणना कर सकते हैं। कुछ लोग अपने वातावरण (या स्वयं) में रोबोट को हिट करने का कारण बन सकते हैं, या आपका कार्य आपको एक विशेष समाधान चुनने में मदद कर सकता है, अर्थात। आप कोहनी को ऊपर (या नीचे), या रोबोट को अपनी सूंड के बाईं ओर (या दाएं) पसंद कर सकते हैं। सामान्य तौर पर 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

और यह जाँचना कि यह वही परिवर्तन है जो हमने शुरू किया था (जो यह है)।

अन्य संसाधन:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.