कंप्यूटर दृष्टि का उपयोग करके पीआईडी ​​एल्गोरिथ्म कार्यान्वयन


10

मैं एक स्वचालित भूलभुलैया भूलभुलैया सॉल्वर का निर्माण कर रहा हूं, और अपने भूलभुलैया को नियंत्रित करने के लिए एक वेबकैम का उपयोग कर रहा हूं।

अन्य मंचों में सुझावों के आधार पर, मैं कम से कम एक दिशा में भूलभुलैया की गेंद की गति को नियंत्रित करने की कोशिश कर रहा हूं। इसलिए, मैं दो निर्देशांक 466,288 और 466,152 के बीच अपने बॉल मूवमेंट को नियंत्रित करने की कोशिश कर रहा हूं। स्टेपर मोटर कंट्रोलर बोर्ड का इनपुट समय है, प्रत्येक एक्सिस यानी x और y को घुमाने के लिए कोई भी कदम नहीं।

स्टेपर मोटर कंट्रोलर बोर्ड जो मैं उपयोग कर रहा हूं वह एग बॉट स्टीपर मोटर कंट्रोलर बोर्ड है: http://www.sparkfun.com/products/10025

तो दो बिंदुओं के बीच स्थानांतरित करने के लिए, क्या मुझे दो बिंदुओं के बीच 288 और 152 (जैसे 260 240 230 ... 150) के बीच कई तरह के बिंदु बनाने चाहिए और अपनी गेंद की गति को सही करना चाहिए?

मेरी छवि प्रसंस्करण एल्गोरिथ्म गेंद को ट्रैक करने के लिए पर्याप्त तेज़ नहीं है कि गेंद बस स्पिन होगी और एक छेद में गिर जाएगी।

कुछ ने सुझाव दिया कि मैं निम्न वीडियो में दिखाए गए मानक टेम्पलेट का उपयोग करता हूं और मार्ग में विचलन के लिए अपनी गेंद के आंदोलनों को सही करता हूं:

http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded

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

मेरा सेटअप इस तरह दिखता है:

सेटअप की तस्वीर

... और यहां मेरे सॉफ़्टवेयर का स्क्रीनशॉट है:

स्क्रीनशॉट

संशोधन 2: मैं भी अब एक नई समस्या का सामना कर रहा हूं: पहले मैंने Arduino सीरियल पोर्ट जावा एप्लेट के माध्यम से स्टेपर मोटर्स को नियंत्रित किया था। मैं एप्लेट का उपयोग करके स्टेपर को ड्राइव करने में सक्षम हूं।

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

संशोधन 3:

मैंने कुछ प्रगति की जहां मुझे पीआईडी ​​एल्गोरिदम लागू किया गया। कृपया नीचे वीडियो देखें: http://www.youtube.com/watch?v=MEfp7RqPmqY

अब मुझे उस गति के साथ एक समस्या है जिस पर पीआईडी ​​एल्गोरिदम लागू किया गया है। वास्तव में मेरी इमेज प्रोसेसिंग 200 ms में एक चक्र पूरा करती है, एक गेंद की पहचान करती है और कमांड को स्टेपर मोटर कंट्रोलर बोर्ड को भेजती है। भले ही मेरे सीरियल पोर्ट को निर्देश स्विच करने के लिए भेजे जाते हैं, फिर भी मेरा स्टेपर उसी दिशा में घूमता रहता है। आप ऊपर दिए गए वीडियो में अजीब व्यवहार पा सकते हैं।

मेरा विचार है कि मुझे पीआईडी ​​मूल्यों को एक छत के साथ प्रतिबंधित करना चाहिए जहां यदि गणना की गई पीआईडी ​​मूल्य 100 से अधिक है, तो मुझे बस एक 100 भेजना चाहिए। मैं इस पर आपके विचार सुनने के लिए उत्सुक हूं।

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

संशोधन 4:

बूँद प्रक्षेपवक्र पृथक

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


1
पुनश्च: तो बस छवि के लिए एक लिंक पोस्ट करें और मुझे यकीन है कि कोई साथ आएगा और इसे छवि के साथ ही बदल देगा ...
माजेंको

@ मट्टा - फिक्स्ड! हालांकि, मैं पसंद करूंगा कि उपयोगकर्ता छवियों के साथ जाने के लिए पाठ प्रदान करे, न कि केवल चित्रों के लिंक। मुझे यकीन नहीं है कि @Sai उन्हें कहाँ चाहता था, मैंने उन्हें सबसे नीचे रखा।
केविन वर्मर

वाह .... क्या उन स्टेपर्स में बोर्ड को किसी भी गति से स्थानांतरित करने के लिए कहीं भी पर्याप्त टोक़ है? मुझे उम्मीद है कि कहीं न कहीं कुछ गियर की कमी है।
कॉनर वुल्फ

@ फ़ेक - स्टेपर्स को इससे कोई समस्या नहीं होनी चाहिए। बोर्ड का वजन अधिक नहीं है और इसका वजन संतुलित है। मेरे पास 40 सेमी लंबी हाथों वाली दीवार घड़ी है और यह किसी भी अन्य के समान छोटे तंत्र द्वारा नियंत्रित किया जाता है, यह भी एक स्टेपर है। (घड़ी की 80 सेमी व्यास की तुलना में 5cmx5cm तंत्र हास्यास्पद लगता है)
स्टीवनव

@ फेक: स्टीव सही है। मुझे स्टेपर की समस्या नहीं है। यह सब PID कलन विधि के बारे में है
साई

जवाबों:


2

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

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

PID नियंत्रण के लिए, इस तथ्य से शुरू करें कि आपको वास्तव में दो अलग-अलग PID नियंत्रकों की आवश्यकता है, एक पूर्व-पश्चिम मोटर के लिए, दूसरा उत्तर-दक्षिण एक के लिए। यदि आपके पास दो सटीक मोटर्स हैं, तो उनके पैरामीटर समान होने चाहिए।

कार्य करने के लिए पीआईडी ​​नियंत्रक के लिए, यह त्रुटि जानने की जरूरत है : वांछित स्थिति और गेंद की वास्तविक स्थिति के बीच अंतर। इस ऑफसेट के एक्स और वाई घटक दो पीआईडी ​​नियंत्रक (प्रत्येक मोटर के लिए एक) के लिए इनपुट होंगे। त्रुटि प्राप्त करने के लिए, आपको पहले अपने पथ पर वांछित स्थान प्राप्त करने की आवश्यकता है : एक प्रक्षेपवक्र

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

इसलिए, नियंत्रण से शुरू करने से पहले, आपको पहले चेकलिस्ट से गुजरना चाहिए:

  • तेजी से प्रतिक्रिया पाने के लिए अपनी इमेज प्रोसेसिंग एल्गोरिदम को सरल बनाएं
  • एक एल्गोरिथ्म बनाएं जो एक पूर्वनिर्धारित गति का उपयोग करके आपके पथ पर एक प्रक्षेपवक्र बनाता है
  • प्रत्येक फ्रेम में:
    • प्रक्षेपवक्र और गेंद की स्थिति के बीच अंतर की गणना करें
    • डेल्टा-एक्स घटक को पूर्व-पश्चिम पीआईडी ​​में, उत्तर-दक्षिण पीआईडी ​​को डेल्टा-वाई पास करें

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


1

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

गेंद को देखने के लिए आप कैमरे पर 1 निश्चित स्पॉट आईआर एलईडी और नैरोबैंड फिल्टर का उपयोग कर सकते हैं। एल्गोरिथ्म को सबसे चमकीले पिक्सेल की गणना करनी चाहिए और एक्स, वाई से वास्तविक एक्स, वाई की तरह खाते में कदम रखना चाहिए:

  • प्रतिभाशाली पिक्सेल खोजें
  • कैमरे से दूरी को ठीक करने के लिए दोनों कुल्हाड़ियों (सर्वो से पढ़ना) के लिए कोण का उपयोग करें
  • कुल्हाड़ी स्थिति पढ़ने के लिए टाइमस्टैम्प का उपयोग करें
  • यदि आवश्यक हो तो स्थिति पढ़ने के लिए समय के माध्यम से प्रक्षेप लागू करें
  • लेंस के ज्ञात विरूपण का उपयोग करें
  • विश्व एक्स, वाई में गेंद का असली केंद्र खोजने के लिए सही क्षेत्र से प्रतिबिंब के कोण पर विश्व एक्स, पिक्सेल के वाई का अनुवाद करें
  • फ्रेम के सही समय को पुनर्प्राप्त करने के लिए डेल्टा समय
  • यदि आवश्यक हो तो बोर्ड प्लेन X, Y में स्थिति के समय में प्रक्षेप
  • PID एल्गोरिथ्म में परिणाम X, Y (t) भेजें
  • प्रक्षेपवक्र जनरेटर / अनुक्रम से दूसरा फ़ीड लक्ष्य X, Y (t) भेजें
  • पीआईडी ​​को आउटपुट पर निर्णय लेने दें
  • उत्पादन निष्पादित (अंतिम चरण समानांतर में किया जा सकता है)

यह कम्प्यूटेशनल रूप से गहन नहीं होना चाहिए और ज्यादातर पूर्ण मूल्यों के जोड़े पर निर्भर करता है।

आम तौर पर, छोटे सीपीयू को फ्रैमरेट की गति के साथ करना चाहिए।


मुझे यकीन नहीं है कि मैं आपके समाधान को समझता हूं। मुझे आपका समाधान दिलचस्प लगा। मैं यह कैसे सुनिश्चित करूं कि मेरी गेंद सही रास्ते पर चल रही है? क्या मुझे यह सुनिश्चित करना चाहिए कि मेरे पास अनुसरण करने का एक तरीका है?
साईं

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