रेंगने वाले रोबोट के लिए चिकना सर्वो आंदोलन


11

मैंने थोड़ी देर पहले एक छोटा क्रॉलर रोबोट बनाया था जिसमें दो पैर थे जिनमें से प्रत्येक की दो डिग्री थी, इसलिए कुल 4 आरसी सर्वो। जब मैं पैरों के संचलन की प्रोग्रामिंग कर रहा था तो मैंने देखा कि वे बहुत कठोर हो गए थे। यह समझ में आता है कि आरसी सर्वो के आंतरिक नियंत्रक के पास स्थिति कमांड के लिए बहुत ही त्वरित प्रतिक्रिया होगी, लेकिन मैं चाहता था कि मेरा क्रॉलर एक तरह से आगे बढ़े, जो थोड़ा अधिक सहज और जीवन की तरह लगता है।

मेरा समाधान समय का एक क्यूबिक फ़ंक्शन बना रहा था जो सर्वो के पथ का वर्णन करता है, और फिर छोटे समय के वेतन वृद्धि में उनकी स्थिति निर्धारित करता है, जिसके परिणामस्वरूप अधिक चिकनी गति होती है। अनिवार्य रूप से मैंने जो किया वह गुणांक के लिए क्यूबिक समीकरण में समय अंतराल का उपयोग करके शुरू किया गया था , सर्वो की स्थिति को शुरू करने और समाप्त करने और दरों को शुरू करने और समाप्त करने के लिए सर्वो को स्थानांतरित करना चाहिए (जो कि स्थिति का व्युत्पन्न है:ai

के लिए समाधान , , , और :एक 1 एक 2 एक 3a0a1a2a3

आर एक टी ( टी ) = पी एस मैं टी मैं एन ' ( टी ) = एक 1 + 2 a 2 t + 3 a 3 t

position(t)=a0+a1t+a2t2+a3t3
rate(t)=position(t)=a1+2a2t+3a3t2

दिया: , , ,p o s i i t i o n ( t f ) r a t e ( 0 ) r a t e ( t f )position(0)position(tf)rate(0)rate(tf)

मैं आंदोलनों की एक जोड़ी के बीच सर्वो की दर को शून्य बनाता हूं यदि आंदोलनों विपरीत दिशाओं में थे, और सकारात्मक या नकारात्मक अगर आंदोलनों दोनों सकारात्मक या नकारात्मक दिशा में क्रमशः थे।

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

उस आखिरी चिंता की उपेक्षा करते हुए, इन मुद्दों को बहुपद की डिग्री बढ़ाकर और गुणांक के लिए हल करने के लिए बाधाओं को जोड़कर हल किया जा सकता है, लेकिन मैं अब आश्चर्यचकित करना शुरू कर रहा हूं ...

क्या सर्वो आंदोलन को सुचारू बनाने और जीवन के समान प्रतीत होने के लिए इससे बेहतर तरीका है?


कोड अपेक्षाकृत सीधे आगे होना चाहिए था। क्या आप इसके बारे में अधिक बात कर सकते हैं कि यह क्यों शामिल था?
डेमनमेकर

1
आप सही हैं, कोड काफी सीधे आगे था, हालांकि इमदादी को नियंत्रित करने के लिए परिणामस्वरूप विधि पहले की तुलना में अधिक जटिल थी। मैंने इस पद्धति की सीमाओं का विवरण शामिल करने के लिए अपने प्रश्न को संपादित किया है।
रोबज

NURBS , गैर-समान तर्कसंगत बी-
स्प्लिन

@ jwpat7 आपके इनपुट के लिए धन्यवाद, लेकिन मुझे नहीं लगता कि NURBS काम करेगा क्योंकि उन घटता अंक प्रदान करने की गारंटी नहीं है
Robz

यह अपने गुणांक को कम करने के रूप में सरल है ? Kp
इयान

जवाबों:


6

मोशन प्रोफाइल जनरेशन

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

बिंदु पूर्व फ़िल्टरिंग सेट करें

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


+1: निश्चित रूप से प्रोफ़ाइल पीढ़ी को गति देता है।
गाइ सीरटन

2

मुझे लगता है कि प्रश्न इस प्रकार के डिवाइस को संदर्भित करता है: आरसी सर्वो

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

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

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