मग, एसीसी और गायरो डेटा से पिच, यव और रोल की गणना


19

मेरे पास 9 डिग्री के स्वतंत्रता सेंसर के साथ एक Arduino बोर्ड है, जिसमें से मुझे बोर्ड की पिच, यॉ और रोल को निर्धारित करना होगा।

9-डीओएफ सेंसर से डेटा के एक सेट का एक उदाहरण यहां दिया गया है:

एक्सेलेरोमीटर (एम / एस)

  • = -5,85एसीसीएक्स
  • = 1,46एसीसीY
  • = 17,98एसीसीजेड

गायरोस्कोप (RPM)

  • = 35,14Gyrएक्स
  • = -40,22GyrY
  • = -9,86GyrZ

मैग्नेटोमीटर (गॉस)

  • = 0,18MagX
  • = -0,04MagY
  • = -0,15MagZ

मैं इन आंकड़ों से पिच, यव और रोल की गणना कैसे कर सकता हूं?


1
मूल सिद्धांत: अपने एक्सेलेरोमीटर में गुरुत्वाकर्षण का पता लगाने से आपको पता चलता है कि नीचे कौन सा रास्ता है; आपके मैग्नेटोमीटर में पृथ्वी के चुंबकीय क्षेत्र का पता लगाने से आपको पता चलता है कि उत्तर कौन सा है। इसके आधार पर और कोई अन्य महत्वपूर्ण त्वरण या मजबूत चुंबकीय क्षेत्र मानकर आप अपना दृष्टिकोण निर्धारित नहीं कर सकते।
Welf

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

1
रोलमैन-पिच और यव के विश्वसनीय अनुमान देने के लिए, कलमन फिल्टर को भी देखें, क्योंकि स्थैतिक संख्याओं को काफी संसाधित करने की आवश्यकता है। यह भी ध्यान दें कि, सेंसर की स्थिति महत्वपूर्ण है (आपको इसे ध्यान में रखना होगा)।
गुरुकान inतीन

जवाबों:


15

पिच, रोल और यव को एक्स, वाई और जेड अक्ष के चारों ओर रोटेशन के रूप में परिभाषित किया गया है। एक तस्वीर के रूप में नीचे परिभाषा को चित्रित करने के लिए।

रोल पिच और Yaw

पिछली परियोजना में मैंने रोल और पिच की गणना करने के लिए एनालॉग उपकरणों से ADXL345 एक्सेलेरोमीटर का उपयोग किया था। नीचे गणना रोल और पिच के लिए उपयोग किए जाने वाले समीकरण हैं। मैंने सार्वजनिक उपयोग के लिए कुछ स्रोत कोड उपलब्ध कराए हैं।

accelerationX = (signed int)(((signed int)rawData_X) * 3.9);
accelerationY = (signed int)(((signed int)rawData_Y) * 3.9);
accelerationZ = (signed int)(((signed int)rawData_Z) * 3.9);
pitch = 180 * atan (accelerationX/sqrt(accelerationY*accelerationY + accelerationZ*accelerationZ))/M_PI;
roll = 180 * atan (accelerationY/sqrt(accelerationX*accelerationX + accelerationZ*accelerationZ))/M_PI;

पूर्ण स्रोत कोड यहां पाया जा सकता है

उपरोक्त परिभाषाओं के आधार पर

yaw = 180 * atan (accelerationZ/sqrt(accelerationX*accelerationX + accelerationZ*accelerationZ))/M_PI;

नोट: M_PI = 3.14159265358979323846 यह math.h में निरंतर परिभाषित है

नीचे Arduino आधार स्रोत कोड सहित कुछ संदर्भ दिए गए हैं जो आपकी सहायता कर सकते हैं।


संदर्भ:


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

(@ ज़ुबैर) "yaw = 180 * atan (एक्सेलेरेशनZ / sqrt (एक्सेलेरेशनXaccelerationX + एक्सेलेरेशनZaccelerationZ)) / M_PI;" वह 'M_PI ’क्या है ??
वसाबी

@ कासाबी M_PI = 3.14159265358979323846 यह math.h लाइब्रेरी में निरंतर परिभाषित होता है।
महेंद्र गनवार्डन

9

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

सेंसर विशेषताओं और पृष्ठभूमि

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

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

तीन सेंसर में से, जाइरोस्कोप सबसे विश्वसनीय है और वे घूर्णी गति को मापने में सामान्य रूप से बहुत अच्छे हैं। यह लोहे के स्रोतों जैसी चीजों से प्रभावित नहीं है और मूल रूप से घूर्णी गति को मापने की उनकी क्षमता पर कोई प्रभाव नहीं पड़ता है। वे उस गति को रिपोर्ट करने का एक बहुत अच्छा काम करते हैं जिस पर उपकरण चालू है, हालांकि जब से आप एक निरपेक्ष कोण की तलाश कर रहे हैं तो आपको स्थिति प्राप्त करने के लिए गति को एकीकृत करना होगा। ऐसा करने से अंतिम माप की त्रुटि नए माप की त्रुटि में जुड़ जाएगी क्योंकि एकीकरण मूल रूप से एक सीमा पर मानों का योग है, भले ही एक माप के लिए त्रुटि 100 माप में केवल 0.01 डिग्री प्रति सेकंड की दर से हो, आपकी स्थिति। 1 डिग्री से बंद किया जा सकता है, 1000 माप से, आप 10 डिग्री से बंद कर सकते हैं। यदि आप सैकड़ों माप एक सेकंड ले रहे हैं, आप देख सकते हैं कि यह समस्या का कारण बनता है। इसे आमतौर पर जाइरो ड्रिफ्ट कहा जाता है।

सेंसर फ्यूजन

अब इन सभी सेंसरों के एक साथ काम करने की सुंदरता यह है कि आप एक्सेलेरोमीटर और मैग्नेटोमीटर से जानकारी का उपयोग कर जिफ्ट ड्रिफ्ट को रद्द कर सकते हैं। यह आपको जाइरो बहाव के घातक दोष के बिना आपको ग्यरो की सटीकता और गति प्रदान करने की अनुमति देता है।

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

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

filteredData = (1-weight)*filteredData + weight*newData

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

fusedData = (1-weight)*gyroData + weight*accelMagData

यह ध्यान दिया जाना चाहिए कि डेटा पिच, रोल और यव का वेक्टर है। यदि आप चाहते हैं तो आप सरणियों के बजाय ऐसा करने के लिए केवल तीन चर का उपयोग कर सकते हैं। इस गणना के लिए gyro पिच, रोल और yaw में डिग्री में एक स्थिति प्रदान करता है, मैग्नेटोमीटर yaw के लिए एक कोण प्रदान करता है जबकि एक्सेलेरोमीटर पिच और रोल के लिए अपने स्वयं के नंबर प्रदान करता है।

यदि आप अभी भी अधिक जानकारी चाहते हैं तो आप "पूरक फिल्टर के साथ सेंसर संलयन" को गूगल कर सकते हैं "इस बारे में बहुत सारे लेख हैं।


3

त्वरक सेंसर डेटा से, आप केवल पिच और रोल की गणना कर सकते हैं। फ़्रीस्केल से बोले दस्तावेज़ आपको क्या चाहिए, इसकी बहुत सारी जानकारी के साथ बताते हैं:

AN3461 - तीन-एक्सिस एक्सेलेरोमीटर का उपयोग करके झुकाव संवेदना

दस्तावेज़ के कहने के आधार पर,

तनφएक्सyz=जीपीyजीपीz

तनθएक्सyz=-जीपीएक्सजीपीyपापφ+जीपीzक्योंकिφ=-जीपीएक्सजीपीy2+जीपीz2

जो इसके बराबर है:

roll = atan2(accelerationY, accelerationZ)

pitch = atan2(-accelerationX, sqrt(accelerationY*accelerationY + accelerationZ*accelerationZ))

बेशक, इसका परिणाम केवल तब होता है जब घुमाव किसी विशिष्ट क्रम (Rxyz) पर हो रहे हों:

  1. φ
  2. कोण द्वारा y- अक्ष के आसपास पिचθ
  3. ψ

आरएक्सyzψ


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