6-अक्ष वाले रोबोट के साथ, अंत-प्रभावकार स्थिति और अभिविन्यास की सीमा को देखते हुए, इष्टतम संयुक्त मान कैसे खोजें


10

अपने अंत-प्रभावक पर एक उपकरण रखने वाले छह-अक्षीय रोबोट भुजा को देखते हुए, अगर मेरे पास एक वांछित उपकरण स्थिति और उपकरण अभिविन्यास है, तो उस स्थिति तक पहुंचने के लिए रोबोट के लिए व्युत्क्रम गतिज समीकरण का ठीक 1 समाधान होगा।
(या जोड़ों के रेंज के आधार पर 16 अलग-अलग समाधानों तक)

http://en.wikipedia.org/wiki/Robotic_arm

लेकिन अगर रोबोट पेन की तरह कुछ पकड़ रहा है, और मैं चाहता हूं कि रोबोट लक्ष्य पर उस पेन के साथ एक विशिष्ट बिंदु को चिह्नित करे, तो मुझे परवाह नहीं है कि पेन कैसे उन्मुख है, जब तक कि यह चिह्नित सतह पर लंबवत नहीं है।

तो उलटा- kinematics समीकरण में असीम रूप से कई समाधान होंगे।

मैं इन समाधानों के बीच संयुक्त कॉन्फ़िगरेशन को कैसे चुन सकता हूं जो वर्तमान कॉन्फ़िगरेशन के सबसे करीब है: जिस तक पहुंचने के लिए कम से कम आंदोलन की आवश्यकता होगी?
(या संयुक्त कॉन्फ़िगरेशन जो कुछ अन्य समान मानदंड के अनुसार इष्टतम है, जैसे कि सभी संयुक्त कोण अधिकतम और न्यूनतम से दूर हैं?)

जवाबों:


9

सबसे पहले, हमें इष्टतम परिभाषित करने की आवश्यकता है । चूंकि आप यह नहीं कहते हैं कि आप क्या इष्टतम मानते हैं, ज्यादातर लोग एक द्विघात अभिव्यक्ति का चयन करते हैं। उदाहरण के लिए, मान लीजिए कि आपके वर्तमान संयुक्त कोण वेक्टर द्वारा दिए गए हैं । हम आवश्यक आंदोलन को कम करने पर विचार कर सकते हैं - त्रुटि , आप एक लागत फ़ंक्शन परिभाषित कर सकते हैं कुछ मैट्रिक्स लिए । हम आम तौर पर एक विकर्ण मैट्रिक्स का उपयोग करते हैं, लेकिन कोई भी सकारात्मक-निश्चित मैट्रिक्स करेगा।α→x→=α→−α→startJ=x→TQx→Q

दो संयुक्त कोण के साथ एक सरलीकृत उदाहरण में, यदि संयुक्त एक सस्ता मोटर (शायद अंत प्रेरक के करीब) था, हम की लागत समारोह हो सकता हैa

J=[xaxb][1002][xaxb] , यानी। संयुक्त का आंदोलन संयुक्त की तुलना में दोगुना महंगा ।ba

अब, काइनेमैटिक समीकरण एक मैट्रिक्स फॉर्मूला है, और डेनवेट-हर्टनबर्ग संकेतन में हो सकता है:

∏Ti=[100x010y001z0001] , जहां दाहिने हाथ की स्थिति और अभिविन्यास का प्रतिनिधित्व करती है। (वर्तमान में शून्य रोटेशन के रूप में सेट), संयुक्त कोण दिए गए।(x,y,z)

चूंकि हम अभिविन्यास, और केवल स्थिति की परवाह नहीं करते हैं, हम अंतिम परिवर्तन मैट्रिक्स के पहले 3 कॉलम, और पहले परिवर्तन मैट्रिक्स की अंतिम पंक्ति को काट सकते हैं। हम इस सूत्र को समान रूप से व्यक्त कर सकते हैं:

[100001000010]∏Ti[0001]=[xyz]

बाएं हाथ की तरफ से गुणा करने पर हमें तीन समीकरण मिलते हैं। यदि पैरामीटर रैखिक थे, तो हल करना आसान होगा। यह मामला है यदि सभी एक्ट्यूएटर रैखिक एक्ट्यूएटर हैं। इस मामले में, समस्या वास्तव में एक द्विघात कार्यक्रम है । हम समीकरण प्राप्त करने के लिए बाएं हाथ की ओर फिर से व्यवस्था कर सकते हैं:

Kx→=[xyz]कुछ मैट्रिक्स लिए ।K

एक द्विघात कार्यक्रम एक समस्या है जिसे प्रपत्र में व्यक्त किया जा सकता है:

कम से कमJ=12x→TQx→+c→Tx→

, अधीनAx→≤b→Ex→=d→

इसे हल करने के लिए, कई एल्गोरिदम हैं जिनका आप उपयोग कर सकते हैं, उदाहरण के लिए, आंतरिक बिंदु, सक्रिय सेट, ...। बस एक उपयुक्त पुस्तकालय ढूंढें, और यह आपके लिए इसे हल करेगा।

समीकरणों की एक गैर-रेखीय प्रणाली को हल करना अधिक कठिन है। इसे नॉन-लीनियर प्रोग्रामिंग कहा जाता है , लेकिन यह आपके पास है यदि आपके पास घूमने वाले जोड़ हैं।

अनिवार्य रूप से, मैट्रिक्स समीकरणों के स्थान पर, आपके पास गैर-रेखीय कार्य हैं।

कम से कम के अधीन , (शून्य की कमी आरएचएस बनाने के लिए फिर से व्यवस्था यदि आवश्यक हो)f(x)h→(x)=0g→(x)≤0

इसे हल करने के लिए उपयोग किए जाने वाले एल्गोरिदम और भी अधिक जटिल हैं, लेकिन इसमें आंतरिक-बिंदु, अनुक्रमिक द्विघात प्रोग्रामिंग (SQP), सक्रिय-सेट, ट्रस्ट-क्षेत्र चिंतनशील एल्गोरिदम शामिल हैं। जाहिर है, इन एल्गोरिदम का काम कितना लंबा है, इसका स्पष्टीकरण और मैं इसे इस उत्तर के दायरे से बाहर कर दूंगा। यह कहने के लिए पर्याप्त है कि, केवल द्विघात प्रोग्रामिंग के लिए उपयोग किए जाने वाले एल्गोरिदम पर सामग्री की मात्रा अपने आप में एक संपूर्ण पाठ्यक्रम हो सकती है।

आपको समस्या को हल करने के लिए बस एक पुस्तकालय ढूंढना चाहिए, एक कुशल कार्यान्वयन को कोड करने में एक लंबा समय लगेगा, और कुशल कार्यान्वयन एक समय में 100 (या अधिक) चर को संभाल सकता है। उदाहरण के लिए, यदि आप MATLAB का उपयोग करते हैं, तो ऑप्टिमाइज़ेशन टूलबॉक्स से फ़ंक्शन फ़िनकोन का उपयोग करने के तरीके पर प्रलेखन है ।

इसे ऑनलाइन हल करने के लिए, आप C ++ या अन्य मूल कार्यान्वयन चाहते हैं, उदाहरण के लिए, NLopt। ध्यान दें कि यह कुछ ऐसा नहीं हो सकता है जो एक माइक्रोकंट्रोलर जल्दी से हल कर सकता है, और कई पुस्तकालयों में अन्य निर्भरताएं हो सकती हैं जो कि माइक्रोकंट्रोलर पर उपयोग करना आसान नहीं है (क्योंकि वे कंप्यूटर के लिए अभिप्रेत हैं)।


यदि आप दक्षता के बारे में चिंतित नहीं हैं, और बस कुछ आप अपने आप को कोड कर सकते हैं, तो यह मानते हुए कि एक फ़ंक्शन है जिसे आप उलटा गतिज समस्या को हल करने के लिए कॉल कर सकते हैं , आप बस एक ढाल वंश विधि कर सकते हैं। उदाहरण के लिए, मनमाने ढंग से एक यादृच्छिक प्रारंभिक अभिविन्यास चुनना, उलटा समस्या को हल करना, फिर लागत फ़ंक्शन की जांच करना। फिर आप यह जांचने के लिए कि आप अभिविन्यास में क्या अंतर होना चाहिए, गड़बड़ी विश्लेषण का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आप अपने वर्तमान अभिविन्यास (यानी एक क्यूबिक ग्रिड में 8 अंक) के आसपास समान अभिविन्यासों की जांच करते हैं, तो आप एक दूसरा आदेश प्राप्त कर सकते हैं कि प्रत्येक दिशा में लागत फ़ंक्शन कैसे भिन्न होता है।

दूसरे क्रम सन्निकटन का उपयोग करना (जिसे हेसियन मैट्रिक्स के रूप में जाना जाता है क्योंकि यह बहुभिन्नरूपी है - 3-आयामी अभिविन्यास के लिए), आप लागत फ़ंक्शन के ढाल के शून्य-क्रॉसिंग (यानी स्थानीय अनुमानित मिनीमा) को पा सकते हैं।

नई भविष्यवाणी की गई अभिविन्यास के साथ, बस इसे उलटा सॉल्वर के माध्यम से फिर से डालें, और सटीकता पर्याप्त होने तक दोहराएं।

ध्यान दें कि यह संभवतः उतना कुशल नहीं होगा, क्योंकि उलटा गतिज समस्या स्वयं ही इसे हल किया जाना चाहिए (इसलिए आप बार-बार एक फ़ंक्शन का उपयोग कर रहे हैं जिसे हल करने में कुछ समय लगता है)। इसके अलावा, इसमें शामिल कोड पूरी तरह से अनुकूलन एल्गोरिथ्म से कम हो सकता है, लेकिन यह अभी भी काफी पर्याप्त है, और समय का महत्वहीन निवेश नहीं है।


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

  • यादृच्छिक पुनरारंभ (यह अनियमित रूप से उत्पन्न होता है)
  • ग्रिड आधारित

या अन्य कस्टम तरीके।

हालांकि, ध्यान दें कि यदि कई मिनीमा हैं, तो गारंटी देने का कोई अच्छा तरीका नहीं है कि आप वैश्विक मिनीमा पाएंगे। आप केवल अपने अवसरों में सुधार कर सकते हैं।


2

चूंकि सवाल एक औद्योगिक रोबोट के बारे में है, इसलिए हमारे पास शायद रोबोट की गतिशीलता का एक मॉडल नहीं है, इसलिए मैं मान रहा हूं कि हम ऐसे समाधान की तलाश कर रहे हैं जो केवल एक गतिज मानदंड को अनुकूलित करते हैं।

रोबोट के पास अपने व्युत्क्रम कीनेमेटीक्स के लिए एक क्लोज-फॉर्म सॉल्यूशन है, लेकिन अनजाने में एंड-इफ़ेक्टर में स्वतंत्रता की एक अतिरिक्त घूर्णी डिग्री है, जिसका अर्थ है कि रोबोट में अनिवार्य रूप से स्वतंत्रता की 7 डिग्री है। लेकिन क्योंकि यह सिर्फ एक और डॉफ है , इसलिए यह उतना मुद्दा नहीं है जितना कि कोई सोच सकता है।

ऐसे लगभग गैर-निरर्थक रोबोटों के लिए एक सामान्य चाल स्वतंत्रता की अतिरिक्त डिग्री को लॉक करना और शेष संयुक्त मूल्यों के लिए विश्लेषणात्मक रूप से हल करना है। मान लें कि हम 6 डॉफ रोबोट के लिए एक बंद-रूप आइक सॉल्वर लिखते हैं जो औसतन एमएस में समाधान देता है । से तक पुनरावृत्ति करके आप इसलिए लगभग एमएस में के पेन कोण के विवेकाधिकार के लिए इष्टतम समाधान पा सकते हैं , जो कि दिया गया आवेदन संभवतः पर्याप्त से अधिक है।0.0513601∘18

यदि अधिकांश समय पेन केवल थोड़ा आगे बढ़ रहा है (जैसे एक रेखा खींचते समय), तो खोज को गति देने के लिए एक और चाल संख्यात्मक आईके का उपयोग करना है, उदाहरण के लिए छद्म बिंदु विधि:

बता दें कि रोबोट का वर्तमान विन्यास है, को इसका जेकोबिएन, और वर्तमान अंत-प्रभावकारी परिवर्तन के सापेक्ष लक्ष्य का विस्थापन होने दें । को लिए हल करें और एक नया विन्यास गणना करें । मैं यहाँ विवरण छोड़ रहा हूँ, लेकिन समाधान को छोटा करना चाहिएठीक से चुनी गई मीट्रिक के लिए।q1JΔxΔx=JΔqΔqq2=q1+ΔqΔq‖Δq‖

यह 7 डॉफ रोबोट के लिए किया जाता है और फिर से केवल एक मिलीसेकंड के अंशों को लेना चाहिए। हालाँकि, एक वैध विन्यास नहीं हो सकता है (संयुक्त मान सीमा से बाहर हो सकते हैं) और एक सटीक आईके समाधान नहीं हो सकता है (आप अधिक छद्मविरोधी कदम उठा सकते हैं, हालांकि), अधिकांश समय यह एक अच्छा प्रारंभिक बिंदु होगा बंद-प्रपत्र-सॉल्वर का उपयोग करके खोज करें।q2


1

इस के लिए एक अच्छा बंद रूप है। मान लीजिए कि हमें परवाह नहीं है कि क्या है (यानी हमें परवाह नहीं है कि हम इसे कैसे बदलते हैं)।rz

J−1X˙=Θ˙=[j1→j2→j3→j4→j5→j6→][x˙y˙z˙rx˙ry˙rz˙]=[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]
कहाँ है के स्तंभ । हम उस हिस्से में को तोड़ सकते हैं जो पर निर्भर करता है और जो हिस्सा नहीं है। ji→ithJ−1Θ˙rz˙
Θ˙=Θ˙x˙…ry˙+Θ˙rz˙Θ˙rz˙=j6→rz˙
तो अब खेल बन गया है, चलो कम से कम कुछ डायवर्टिक मैट्रिक्स जैसे ronalchn ने कहा कि ऊपर। मैं और का उपयोग करने जा रहा हूं आसान देखने के लिए ।
(Θ˙x˙…ry˙+Θ˙rz˙)TD(Θ˙x˙…ry˙+Θ˙rz˙)
DA=Θ˙x˙…ry˙B=Θ˙rz˙∗

हम इसे

ATDA+2BTDA+BTDBorATDA+2rz˙j6→TDA+rz˙2j6→TDj6→

अब हमारे पास पर अंतर करने के लिए एक आसान समीकरण है । हम संबंध में व्युत्पन्न पाते हैं और इसे सेट करते हैं । यह आपके दो बीच संयुक्त कोण "दूरी" को कम करता है।rz˙rz˙0

2j6→TDA+2rz˙j6→TDj6→=0rz˙=−j6→TDAj6→TDj6→
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.