2011-04-07 17 views
8

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

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

क्या कोई मेरी मदद कर सकता है ?? मैं एक महीने के लिए इस समस्या में फंस गया हूँ।

उत्तर

15

यह यॉ, पिच और रोल के साथ एक आम समस्या है। जब तक आप यॉ, पिच और रोल (यूलर कोण) का उपयोग कर रहे हैं, तब तक आप इससे छुटकारा नहीं पा सकते हैं। This video बताता है क्यों।

मैं अपने गति संवेदन अनुप्रयोग में यूलर कोणों के बजाय रोटेशन मैट्रिस का उपयोग करता हूं। रोटेशन मैट्रिक्स के परिचय के लिए मेरा सुझाव है:

Direction Cosine Matrix IMU: Theory

रोटेशन मैट्रिक्स एक आकर्षण की तरह काम करते हैं।

क्वाटरनियंस भी बहुत लोकप्रिय हैं और सबसे स्थिर कहा जाता है।

[इस उत्तर here से नकल किया गया था।]

+0

अपने जवाब के लिए धन्यवाद :) आपका समाधान कोशिश कर रहा लायक लगता है बदल सकते हैं। तो क्या मैं सीधे एंड्रॉइड एपीआई से प्राप्त रोटेशन मैट्रिक्स का उपयोग कर सकता हूं? अफसोस की बात है कि मुझे कोई ज्ञान नहीं है कि 3 डी कैसे काम करता है, इसलिए मैं यह नहीं समझ सकता कि 'शुद्ध' रोटेशन मैट्रिक्स पर कुछ हेरफेर की आवश्यकता है या नहीं। –

+1

यह इस बात पर निर्भर करता है कि आप अपना घूर्णन कैसे करते हैं। मैंने कभी एंड्रॉइड का उपयोग नहीं किया है। यदि आप रोटेशन के लिए ओपनजीएल का उपयोग करते हैं (और मुझे लगता है कि आप करते हैं), तो आपको यूट्यूब वीडियो में 41:58 से कुछ ज़ीरो और एक जोड़ना पड़ सकता है। लेकिन इसके अलावा, 'शुद्ध' रोटेशन मैट्रिक्स पर्याप्त है। सौभाग्य! – Ali

+0

क्या आप यूलर कोणों के बिना रोटेशन मैट्रिक्स का उपयोग करने का उदाहरण दे सकते हैं? मैं इसे समझने के लिए प्रतीत नहीं कर सकता ^^ –

1

YPR गणना करने के लिए किसी भी समस्या को हल करने के लिए बहुत से काम नहीं चलेगा quaternions का उपयोग करना। जिम्बल लॉक की समस्या (जो +/- 9 0 के पिच के पास यॉ और रोल ड्राइव कर सकती है - वास्तव में उत्तरी ध्रुव पर यॉ-रोल - अंतर्निहित क्वाटरनियन में मामूली परिवर्तन/शोर के नीचे पागल हो सकती है)।

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

लेकिन, यह भी ध्यान रखें कि एचटीएमएल 5 के लिए फोन और ब्राउज़र एंड्रॉइड के लिए यॉ, पिच और रोल प्रति सम्मेलनों को सही ढंग से लागू नहीं करते हैं। यहाँ संदर्भ के लिए एक अच्छा ब्लॉग है:

http://www.sensorplatforms.com/understanding-orientation-conventions-mobile-platforms/

+0

, अक्ष कोण गणित का उपयोग न करें। जब तक आप धुरी कोण कार्यान्वयन से बचें तब तक यूलर रोटेशन ठीक होते हैं। – Tcll

0

यहाँ एक बुनियादी उदाहरण है, यह गुरुत्वाकर्षण के वेक्टर वापस आ जाएगी। ध्यान दें कि आप संवेदक प्रकार और नमूने की गति, अधिक जानकारी के here

SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

sensorManager.registerListener(new SensorEventListener() { 
    @Override 
    public void onSensorChanged(SensorEvent event) { 

     float x = event.values[0]; 
     float y = event.values[1]; 
     float z = event.values[2]; 
     double total = Math.sqrt(x * x + y * y + z * z); 

    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    } 

}, sensor, SensorManager.SENSOR_DELAY_FASTEST); 
संबंधित मुद्दे