2010-11-10 13 views
9

एक परियोजना के लिए मेरी टीम और मैं बिल्ट इन एक्सेलेरोमीटर और वाईआईमोशन प्लस जीरोस्कोप का उपयोग करके 3 डी स्पेस में एक वाइमोट ट्रैक करने की कोशिश कर रहा हूं।मैं वाईमोट के एक्सेलेरोमीटर का उपयोग करके गुरुत्वाकर्षण के लिए कैसे खाता करूं?

हम ओडीई (http://www.alglib.net/ पर पाए गए) का उपयोग करके घूर्णन और स्थिति को ट्रैक करने में सक्षम हैं, लेकिन हमने एक्सेलेरोमीटर से गुरुत्वाकर्षण घटक को हटाने में समस्या का सामना किया है।

हम Accelerometer gravity components जो सूत्र था (सी #/XNA में लागू)

private Vector3 RemoveGravityFactor(Vector3 accel) 
    { 
     float g = -1f; 
     float pitchAngle = (Rotation.Z); 
     float rollAngle = (Rotation.Y); 
     float yawAngle = (Rotation.X); 

     float x = (float)(g * Math.Sin(pitchAngle)); 
     float y = (float)(-g * Math.Cos(pitchAngle) * Math.Sin(rollAngle)); 
     float z = (float)(-g * Math.Cos(pitchAngle) * Math.Cos(rollAngle)); 

     Vector3 offset = new Vector3(x, y, z); 

     accel = accel - offset; 
     return accel; 
    } 

को देखा लेकिन यह सब पर काम नहीं करता। एक संदर्भ के रूप में, त्वरण सीधे एक्सेलेरोमीटर से होता है, और ओडीई के माध्यम से काम करने के बाद घूर्णन रेडियंस में मापा जाता है।

इसके अलावा, हमें यह समझने में समस्याएं आ रही हैं कि यह सूत्र कैसे काम करता है। इस तथ्य के कारण कि हमारी ट्रैकिंग सभी आयामों को ध्यान में रख रही है, यॉ को क्यों नहीं लिया जाता है?

किसी भी सलाह या मदद के लिए अग्रिम धन्यवाद।

संपादित करें:

अपनी टीम के साथियों और बॉस के साथ चर्चा के बाद, हम है कि इस सूत्र वास्तव में अगर हम एक्स, Y, और Z उपयोग कर रहे थे सही ढंग से काम करेगा खोजने के लिए आए हैं। हालांकि हम एक और स्टंप पर आए हैं।

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

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

उत्तर

2

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

+0

क्या इसका मतलब यह है कि रिमोट विफल हो जाता है जब आप इसे उल्टा करते हैं? –

+0

इसे शून्य गुरुत्वाकर्षण में कैलिब्रेटेड करने की आवश्यकता नहीं है। गुरुत्वाकर्षण 1 जी नीचे और बहुत अनुमानित है। ऐसा नहीं है कि आप इसके लिए क्षतिपूर्ति नहीं कर सकते हैं। –

+0

@dan_waterworth: हाँ, गुरुत्वाकर्षण बहुत अनुमानित है; और हाँ, आप इसके लिए क्षतिपूर्ति कर सकते हैं। यह "एक्सेलेरोमीटर से गुरुत्वाकर्षण प्रभाव को हटाने" से अलग है। मुआवजा प्रभाव को नहीं हटाएगा; यह इसके लिए क्षतिपूर्ति करेगा, लेकिन हटाने और मुआवजे के बीच शामिल शुद्धता का एक अलग स्तर है। –

1

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

+0

मुझे यकीन नहीं है कि जब आप "एकाधिक रोटेशन मैट्रिक्स द्वारा इसे 'कहते हैं तो आप क्या कर रहे हैं।" हालांकि, हम एक क्वाटरनियन का उपयोग कर रहे हैं (यदि आवश्यक हो तो एक घूर्णनशील मैट्रिक्स में परिवर्तित किया जा सकता है), लेकिन हम निश्चित रूप से गुरुत्वाकर्षण को कैप्चर करने के बारे में अनिश्चित हैं। अगर हम दो अक्ष पर गुरुत्वाकर्षण (अक्षांश रोल 45 डिग्री, गुरुत्वाकर्षण z और x पर है) –

+0

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

+0

आपके इनपुट के लिए धन्यवाद। वर्तमान में हम quaternion का उपयोग कर सभी संसाधनों को निकालने की कोशिश कर रहे हैं। जहां तक ​​आपका उत्तर जाता है, हम निश्चित नहीं हैं कि इसके साथ कैसे काम करें। आपका क्या मतलब है - "एक मैट्रिक्स का निर्माण करें जो एक इकाई जेड वेक्टर को ऊपर वेक्टर तक घुमाता है?" –

संबंधित मुद्दे