क्वाडकॉप्टर पीआईडी ​​ट्यूनिंग


13

मेरे द्वारा यहां पूछे गए प्रश्न की निरंतरता में: स्वायत्त मोड में सरल टेकऑफ़ के साथ क्वॉडकॉप्टर अस्थिरता ... मैं एपीएम 2.6 मॉड्यूल द्वारा नियंत्रित क्वाड्रोटर के लिए एक बुनियादी पीआईडी ​​को लागू करने के बारे में कुछ सवाल पूछना चाहूंगा। (मैं 3DRobotics से एक फ्रेम का उपयोग कर रहा हूं)

मैंने पूरे नियंत्रण प्रणाली को सिर्फ दो पीआईडी ​​ब्लॉक, एक को नियंत्रित करने वाले रोल के लिए और दूसरा पिच को नियंत्रित करने के लिए (यॉ और बाकी सब कुछ ... मैं बाद में उनके बारे में सोचूंगा) को छीन लिया है।

मैं इस सेटअप को एक रिग पर परीक्षण कर रहा हूं, जिसमें एक स्वतंत्र रूप से घूर्णन बीम होता है, जिसमें मैंने क्वाड्रोटर की दो भुजाओं को बांधा है। अन्य दो स्थानांतरित करने के लिए स्वतंत्र हैं। इसलिए, मैं वास्तव में एक बार में एक डिग्री की स्वतंत्रता (रोल या पिच) का परीक्षण कर रहा हूं।

नीचे दी गई छवि की जांच करें: यहां ए, बी स्वतंत्र रूप से घूर्णन बीम को चिह्नित करता है जिस पर सेटअप माउंट किया गया है। यहाँ छवि विवरण दर्ज करें

पी और डी मापदंडों के सावधानीपूर्वक ट्यूनिंग के साथ, मैं लगभग 30 सेकंड की निरंतर उड़ान प्राप्त करने में कामयाब रहा।

लेकिन 'निरंतर' द्वारा, मेरा मतलब है कि एक ऐसा परीक्षण जिसमें ड्रोन एक तरफ से ऊपर नहीं जा रहा है। रॉक स्टेबल फ़्लाइट अभी भी देखने में नहीं है, और उड़ान के 30 से अधिक सेकंड भी काफी मुश्किल दिखते हैं। यह शुरू से ही लड़खड़ाता है। जब तक यह 20 - 25 सेकंड तक पहुंचता है, तब तक यह एक तरफ झुकना शुरू कर देता है। 30 सेकंड के भीतर, यह अस्वीकार्य मार्जिन द्वारा एक तरफ झुका हुआ है। जल्द ही, मुझे लगता है कि यह उल्टा आराम कर रहा है

पीआईडी ​​कोड के लिए ही, मैं gyro + एक्सेलेरोमीटर डेटा के 'मानार्थ फ़िल्टर' से आनुपातिक त्रुटि की गणना कर रहा हूँ। अभिन्न शब्द शून्य पर सेट है। P शब्द लगभग 0.39 पर आता है और D शब्द 0.0012 पर है। (मैं उद्देश्य पर Arduino PID लाइब्रेरी का उपयोग नहीं कर रहा हूं, बस अपने खुद के PID को यहां लागू करना चाहता हूं।)

इस वीडियो को देखें, यदि आप यह देखना चाहते हैं कि यह कैसे काम करता है।

http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [ये, सेटअप बहुत प्राचीन है! मैं सहमत हूँ। :)]

कृपया मुझे बताएं कि मैं इस स्तर पर स्थिरता को बेहतर बनाने के लिए क्या कर सकता हूं।

@ इयान: मैंने अपने सेटअप के साथ किए गए कई परीक्षणों में, मैंने धारावाहिक मॉनीटर से रीडिंग का उपयोग करते हुए कुछ परीक्षणों के लिए प्लॉट ग्राफ़ बनाए। यहाँ रोल बनाम 'Motor1 & Motor2 - PWM इनपुट' (रोल को नियंत्रित करने वाले दो मोटर्स) का एक नमूना पढ़ना है:

रोल बनाम मोटर PWM इनपुट

इनपुट / आउटपुट के लिए:

इनपुट: रोल और पिच मान (डिग्री में), जैसा कि एक्सेलेरोमीटर + जाइरो के संयोजन से प्राप्त होता है

आउटपुट: मोटर्स के लिए PWM मान, सर्वो लाइब्रेरी के मोटर। राइट () फ़ंक्शन का उपयोग करके दिया गया


संकल्प

मैंने समस्या का समाधान किया। ऐसे:

  1. इस मुद्दे की क्रूरता ने उस तरीके से झूठ बोला जिस तरह से मैंने Arduino प्रोग्राम को लागू किया था। मैं सर्वो कोणों को अद्यतन करने के लिए लेखन () फ़ंक्शन का उपयोग कर रहा था, जो तर्क में केवल पूर्णांक चरणों को स्वीकार करने के लिए होता है (या किसी तरह केवल पूर्णांक इनपुट पर प्रतिक्रिया करता है, 100 और 100.2 एक ही परिणाम उत्पन्न करता है)। मैंने इसे लिखने के लिए बदल दिया मैक्माइक्रोसेकंड () और इससे कॉप्टर काफी हद तक स्थिर हो गया।

  2. मैं एक मोटर पर आरपीएम जोड़ रहा था जबकि दूसरे को स्थिर मूल्य पर रख रहा था। मैंने विरोध मोटर को कम करते हुए RPM को एक मोटर में बढ़ाने के लिए इसे बदल दिया। उस थोड़े कुल क्षैतिज जोर को अपरिवर्तित रखता है, जो मुझे इस चीज पर ऊर्ध्वाधर ऊंचाई पकड़ पाने की कोशिश कर रहा है।

  3. मैं आरपीएम को अधिकतम सीमा तक बढ़ा रहा था, यही वजह है कि क्वाडकॉप्टर पूरे गला घोंटकर नियंत्रण खो रहा था। आरपीएम में वृद्धि के लिए कोई जगह नहीं थी जब उसने एक झुकाव महसूस किया।

  4. मैंने देखा कि एक मोटर दूसरे की तुलना में स्वाभाविक रूप से कमजोर थी, मुझे नहीं पता कि क्यों। मैंने उस मोटर्स PWM इनपुट में एक ऑफसेट को हार्डकोड किया।

समर्थन के लिए धन्यवाद।


सोर्स कोड:

यदि आप रुचि रखते हैं, तो यहां मेरे नंगे-हड्डियों के स्रोत कोड पीआईडी ​​कार्यान्वयन: पीआईडी ​​स्रोत कोड है

कृपया इसे अपने हार्डवेयर में परीक्षण करने के लिए स्वतंत्र महसूस करें। परियोजना में किसी भी योगदान का स्वागत किया जाएगा।


1
इनपुट क्या है और लूप का आउटपुट क्या है?
गाय सिर्टन

@GuySirton: मेरे सवाल का अपडेट करें
metsburg

आपके मोटर कमांड में कौन से फ्लैट सेक्शन हैं? लगता है जैसे कुछ संतृप्त कर रहा है। आप एक निरंतर फ़ंक्शन की तरह परिवर्तन को रोल करते हैं लेकिन आपके आदेश बहुत अचानक दिखते हैं। इसके अलावा दोनों मोटर पीडब्लूएम कमांड्स क्यों बहती हैं जबकि आपका रोल इनपुट उसी रेंज की तरह दिखता है? जिस तरह से लगभग timescale है?
गाय सिरटन

1
30 सेकंड के बाद आप जिस कारण से नियंत्रण खो रहे हैं वह संभवतः आपके दोनों आदेशों से संबंधित है। मुझे लगता है कि आप आदेशों के बीच अंतर को नियंत्रित करने की कोशिश कर रहे हैं, लेकिन आप उन लोगों को बहते रहने की अनुमति नहीं दे सकते।
गाइ सिर्टन

@GuySirton: वे बहती नहीं हैं, मैं इसे शून्य से ऊपर की ओर बढ़ा रहा हूं, ताकि यह 3/4 सेकंड के भीतर एक विशेष स्थिर स्थिति तक पहुंच जाए। हालाँकि, मुझे लगता है कि आप सही हैं जब आप कहते हैं "कारण आप 30 सेकंड के बाद नियंत्रण खो रहे हैं, संभवतः आपके दोनों आदेशों से संबंधित है जो कि बहती हैं"। यदि मैं इस क्रमिक वेतन वृद्धि का उपयोग नहीं करता हूं, अगर मैं अपने PWM इनपुट को एक निश्चित स्तर (ऊपर दिखाए गए अधिकतम इनपुट से कम) को ठीक करता हूं, तो 30secs के बाद नियंत्रण खोने की समस्या दूर हो जाती है।
मेट्सबर्ग

जवाबों:


6
  1. ऐसा लगता है कि आपका आनुपातिक लाभ बहुत अधिक है।
  2. आपको लगता है कि सिस्टम को घुमाने के लिए दूसरे में लॉक करने के दौरान एक मोटर पर आरपीएम लगातार बढ़ रहा है। यह एक अच्छी नियंत्रण रणनीति नहीं है क्योंकि अंततः वे दोनों संतृप्त हो रहे हैं और आप नियंत्रण खो देंगे। साथ ही समय बढ़ने के साथ सिस्टम को कमांड करने की आपकी क्षमता कम हो जाती है। इसलिए आपको सिस्टम के बेहतर मॉडल की आवश्यकता है।
  3. यदि आप # 1, और # 2 से निपटते हैं, तो आपके पास अधिक स्थिर प्रणाली होगी, लेकिन आप नियंत्रण बैंडविड्थ से खुश नहीं हो सकते। इससे निपटने के लिए आपको अपनी प्रणाली को सख्त बनाने की आवश्यकता है जिसमें चीजों के सेंसर पक्ष और चीजों के नियंत्रण पक्ष पर किसी भी अंतराल से छुटकारा पाना शामिल है।

3

मैं इस सवाल पर पढ़ना शुरू करूँगा: पीआईडी ​​लूप्स को ट्यूनिंग के लिए अच्छी रणनीति क्या है?

अगर मुझे अनुमान लगाना होता, तो मैं कहता कि आपके मानार्थ फ़िल्टर के निर्माण में आपको समस्या है। Quadcopter मोटर्स बंद होने के साथ, आपको फ्रेम को आगे और पीछे झुकाना चाहिए और देखना चाहिए कि रिपोर्ट किए गए रोल / पिच मान वास्तव में सही हैं या नहीं।

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

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


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

35±90

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

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

एक अन्य चीज जो मैं ग्राफ से देख रहा हूं वह यह है कि आपका संयुक्त जोर हमेशा बढ़ रहा है। जो गलत लगता है।
इयान

1

वैसे यहाँ पर बहुत सारी चीज़ें हो सकती हैं ...

1) क्या आपके सूचित कोण सही हैं? शोर? आप आसानी से जाँच सकते हैं कि मैन्युअल रूप से अपने क्वाड को झुकाकर और बाहर आने वाले मानों की निगरानी कर सकते हैं।

2) आपके अपने पीआईडी ​​कार्यान्वयन में एक बग है। आप अपने कोड की जांच करने के लिए वहां पर विश्वसनीय कार्यान्वयन का उपयोग कर सकते हैं।

3) प्रॉप्स, मोटर्स ने गलत तरीके से गोल किया।

4) ...


1) मैं झुका हुआ और रिपोर्ट किए गए कोणों की जांच कर रहा हूं, लगभग सही, लेकिन निश्चित रूप से शोर। 2) बहुत संभावना ... वास्तव में, मुझे लगता है कि यह पूरी तरह से संक्षेप में बताता है: पी 3) बहुत संभावना नहीं है, दो दक्षिणावर्त, दो विरोधी दक्षिणावर्त ... मैंने कई बार प्रॉपर चेक किया है + मुझे लगता है कि इस प्रकार की त्रुटि है। नियंत्रण से परे, जंगली त्रुटियों का परिणाम है। 4) ....
मेट्सबर्ग

4) ... एक गलत पीआईडी ​​ट्यूनिंग चीजों को सबसे खराब बना सकती है अगर आपके पास पीआईडी ​​नहीं थी!
dm76

हाँ, अब मैं देख रहा हूँ। मैं कल इस पर काम करूंगा। मेरा पहला प्लान विश्वसनीय पीआईडी ​​लाइब्रेरी का उपयोग करना है और दूसरा पीआईडी ​​के आउटपुट को पीडब्लूएम सिग्नल से रोल.पाइच करेक्शन में बदलना है।
मेट्सबर्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.