मैं एक सीधी रेखा में रोबोट को चलाने के लिए Arduino PID लाइब्रेरी का उपयोग कैसे कर सकता हूं?


19

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

एक वैचारिक स्तर पर, (मोटरों को पीडब्लूएम स्तरों के लिए पहचान के रूप में प्रतिक्रिया नहीं देता) मैं पीआईडी ​​नियंत्रण को कैसे लागू कर सकता हूं ताकि यह एक सीधी रेखा में और यात्रा करने के लिए बाईं ओर की दूरी के लिए आनुपातिक हो?


यह सवाल यहाँ भी अपनी जगह रखता है, क्योंकि यह विशेष रूप से अर्डुइनो पीआईडी ​​पुस्तकालय के आसपास आधारित है ।
अनिंदो घोष

जवाबों:


18

विशिष्ट तथ्य

पीआईडी ​​बेसिक उदाहरण को देखते हुए मुझे लगता है कि आपको पीआईडी ​​नियंत्रक की दो प्रतियों को तत्काल भरने की आवश्यकता है, प्रत्येक पहिया के लिए एक, एनकोडर और pwm:

PID leftPID(&InputLeft, &OutputLeft, &SetpointLeft,2,5,1, DIRECT);
PID rightPID(&InputRight, &OutputRight, &SetpointRight,2,5,1, DIRECT);

फिर, अपने loop()समकक्ष में, आप बस दोनों एन्कोडर्स को पढ़ते हैं, प्रत्येक एनकोडर मान को संबंधित के पास करते हैं PIDऔर अंत में दोनों PWM मान लिखते हैं।

अभी के लिए SetpointLeft और SetpointRightवास्तव में एक ही मूल्य पर इंगित कर सकते हैं, लेकिन उन्हें इस तरह अलग-अलग परिभाषित करना आपको बाद में मुड़ने की क्षमता जोड़ने की अनुमति देता है।

अवधारणाओं

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

मृत गणना

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

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

सापेक्ष स्थिति निर्धारण

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

मोबाइल रोबोटिक्स में, कलमन फ़िल्टरिंग तकनीकों का उपयोग आमतौर पर कई स्रोतों से डेटा को फ्यूज करने के लिए किया जाता है, जैसे कि एक्सेलेरोमीटर और पहिया एनकोडर वर्तमान स्थिति को बेहतर ढंग से निर्धारित करने के लिए।

आप जो भी करते हैं, वह सापेक्ष स्थिति निर्धारण के साथ करते हैं, लेकिन समय के साथ जिस स्थिति के बारे में आप मानते हैं कि वह आपकी वास्तविक भौतिक स्थिति से दूर हो जाएगी

पूर्ण स्थिति निर्धारण

इसके चारों ओर जाने का एकमात्र तरीका आपके वाहनों के संदर्भ के फ्रेम के बाहर एक संदर्भ बिंदु है।

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

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

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

तकनीकों का एक संयोजन

अंततः, आपकी सटीकता की आवश्यकताओं के आधार पर, आपको इन तकनीकों के संयोजन का उपयोग करने की आवश्यकता हो सकती है।

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

यहां बहुत सारे विकल्प हैं, और आपने जो चुना है वह इस बात पर निर्भर करेगा कि आपको क्या चाहिए।


1

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


0

जैसा कि ऊपर कहा गया है, आप प्रत्येक पहिया को एक ही गति से चलने के लिए कहकर शुरू करते हैं और फिर पीआईडी ​​सुनिश्चित करता है कि वे उस गति से चल रहे हैं। लेकिन यह सही नहीं होगा। आपको समय-समय पर त्रुटियों को ठीक करने और (1) समय-समय पर पढ़ने और दो पहिया एनकोडर की गिनती की तुलना करने और एक पहिया को थोड़ा तेज करने की आवश्यकता होती है, यदि गणनाओं को बराबर करने के लिए आवश्यक हो। और (2) आपको कभी भी एक्सीलरोमीटर और कम्पास की आवश्यकता होती है।

आप एक कलमन फ़िल्टर देख रहे हैं। यदि आप एनकोडर, कम्पास और एक्सेलेरोमीटर डेटा को संयोजित करना चाहते हैं तो आपको शीर्षक देना होगा।


0

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

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