2012-11-28 29 views
5

आगे बढ़ने के बाद yaw कोण को घुमाएं मेरे वर्तमान प्रोजेक्ट में मैंने कोर मोशन के सीएमएटीटीयूटी द्वारा प्रदान किए गए क्वाटरनियन के बारे में परेशानी में भाग लिया। मैंने आईफोन 5 (आईओएस 6.0.1) को एक अच्छी तरह परिभाषित प्रारंभ स्थिति में रखा है। फिर मैं डिवाइस को तेज़ी से तेज गति से खेलना शुरू कर देता हूं। जब मैं 10-30 सेकंड के बाद प्रारंभ स्थिति में लौटता हूं तो रिपोर्ट किया गया यो कोण 10-20 डिग्री (अधिकांश समय ≈11 डिग्री) के लिए प्रारंभ स्थिति से अलग होता है।तेज

मैंने प्रभाव को मान्य करने के लिए पुरानी (और दुख की बात नहीं है) कोर मोशन टीपोट नमूना का उपयोग किया। यूलर कोण प्रवेश के लिए CMAttitude से पढ़ी जाती:

Start PositionSame place after 15 seconds

 NSLog(@"pitch: %f, roll: %f, yaw: %f", attitude.pitch * 180/M_PI, attitude.roll * 180/M_PI, attitude.yaw * 180/M_PI); 

मैं दो अलग अलग iPhone 5 विभिन्न कारखानों में अलग अलग समय पर निर्मित उपकरणों पर यह पाया। लेकिन वास्तव में अजीब बात यह है कि मेरा आईफोन 4, आईओएस 5.1.1 चला रहा है, के रूप में काम कर रहा है। ऐसा लगता है कि मुझे एक आईओएस बग लगता है और मैंने पहले से ही एक बग रिपोर्ट दायर की है, लेकिन दूसरी तरफ मैं शायद ही कल्पना कर सकता हूं कि अभी तक कोई भी उस पर ठोकर नहीं लगा है। मुझे संदेह है कि इसे फिर से डिजाइन कोर मोशन एपीआई के साथ करना पड़ सकता है। संस्करण 5 से शुरू होने पर सेंसर संलयन के लिए मैग्नेटोमीटर (कंपास) भी माना जाता है। कंसोल पता चलता है कि locationd से पूर्वाग्रह अनुमानों CoreMotion प्रदान की जाती हैं:

locationd[41] <Notice>: GYTT inserted: bias,-0.196419,1.749323,-1.828088,variance,0.002644,0.004651,0.002527,temperature,31.554688 

मेरा प्रश्न (ओं): वहाँ जब डिवाइस मोशन का उपयोग कर मैग्नेटोमीटर रीडिंग ब्लॉक करने के लिए मौका है? मैंने स्थान सेवाओं को निष्क्रिय करने की कोशिश की लेकिन यह कोर मोशन को प्रभावित नहीं करता है। यदि संभव नहीं है, तो वैकल्पिक/वर्कअराउंड, एक्सेलेरोमीटर आधारित गुरुत्वाकर्षण अनुमान क्या है?

पुनश्च: कुछ और माप यह स्पष्ट लगता है कि केवल विचलन प्रभावित होता है करने के बाद: हम चार का समुदाय आधारित मॉडलों के साथ काम कर रहे हैं जैसा कि इस नहीं गिम्बल लॉक

संपादित करने के लिए संबंधित है। सहिष्णुता के भीतर पिच और रोल शो विचलन (< = 1 डिग्री) जबकि यॉ शुरुआती स्थिति के बावजूद बहती जा रही है। CMDeviceMotion.gravity भी साफ दिखता है।

संपादित करें (2): मैं MotionGraphs नमूना हाल ही में XCode संस्करणों से जुड़ी साथ समस्या को पुन: हो सकता है। Yaw ग्राफ पुनरुत्पादन मूल से दूर बहती है।

+1

उपरोक्त, एक दिलचस्प मुद्दा! हां, मुझे मैग्नेटोमीटर के साथ भी बुरा अनुभव था: यह झूठ बोलता है (पूर्वाग्रह पैदा करता है) और नरक की तरह शोर। मैंने यह भी देखा कि जीरो, एएसपी को संतृप्त करना आसान है। तेजी से आंदोलनों के साथ। क्या संदिग्धों से संतृप्ति को दूर करने का कोई तरीका है? – Ali

+0

@Ali मुझे कोई रास्ता नहीं पता। लेकिन दूसरी ओर आईओएस 5.1.1 के साथ मेरा आईफोन 4 पहले से स्थापित आईओएस 4.3 के साथ एक आकर्षण की तरह काम करता था। अंधेरे में एक शॉट लेकिन मुझे लगता है कि आईओएस 6 दोष है। – Kay

+0

मुझे आशा है कि किसी को जवाब पता चलेगा, माफ करना, मैं मदद नहीं कर सकता :( – Ali

उत्तर

4

निश्चित समाधान नहीं है लेकिन कम से कम मेरे अपने प्रश्न के लिए एक समाधान (मैं इसे आपको आमंत्रित करने के लिए अनुत्तरित छोड़ देता हूं)। यह पता चला कि कम से कम DeviceMotion.gravity बग से प्रभावित नहीं है। इसलिए मैंने गति का पता लगाने के इस सरल सरल भाग को फिर से डिजाइन करने का निर्णय लिया और डिवाइस को टिल्ट करते समय मुख्य प्लेयर चरित्र को तरफ ले जाने के लिए arcsin (gravity.x/||gravity||) का उपयोग किया।

यह निश्चित रूप से दूसरा सबसे अच्छा समाधान है क्योंकि यह quaternion में निहित पूर्ण रोटेशन स्थिति के बारे में जानकारी को नष्ट कर देता है।

  1. मुझे लगता है कि सबसे डेवलपर्स CMAttitude.quaternion से गुरुत्वाकर्षण वेक्टर साथ झुकाव गति का पता लगाने क्योंकि अधिकांश लोगों कि इस प्रकार किसी भी भविष्य से संबंधित कीड़े ;-) चौका गणित के बारे में खुश नहीं हैं करते हैं: मैं यह करने के लिए सामरिक विचार के लिए इस तरह का निर्णय लिया बड़ी संख्या में उपयोगकर्ताओं की वजह से गुरुत्वाकर्षण वेक्टर शायद बीटा चरण के दौरान तय किया जाएगा।
  2. यदि यह सॉफ़्टवेयर बग है और हार्डवेयर समस्याओं से संबंधित नहीं है, तो मुझे क्या लगता है, और यदि बग ASAP को ठीक किया जाएगा, तो अभी भी कई डिवाइस हैं जो शायद किसी कारण से अपडेट नहीं हो सकते हैं।इस प्रकार जोखिम जो संभावित भविष्य ग्राहक परेशानी में भाग लेगा वह छोटा है लेकिन 0। तो दूसरा सबसे अच्छा समाधान कभी-कभी सबसे अच्छा हो सकता है।
1

मैंने अपने कोड में कुछ ऐसा किया है और उसी z-axis rotational drift (yaw) को पाया है। मैंने एक संतुलित फ़िल्टर लागू किया है। प्रत्येक गति प्रबंधक समय अंतराल पर, मैं वर्तमान quaternion (z-घटक) को पकड़ता हूं और उसके बाद गणना के अगले सेट में उपयोग के लिए पुराने जेड के रूप में गणना के बाद इसे सहेजता हूं। मेरा फ़िल्टर केवल जेड वैल्यू के साथ नए जेड वैल्यू को तुरंत आगे बढ़ाता है, इसे बहुत तेज़ी से आगे बढ़ने से रोकता है। अपने हार्डवेयर और आपके प्रोग्राम में सटीक सहिष्णुता के आधार पर, आप इस तरह से बहाव को अच्छी तरह से प्रबंधित कर सकते हैं। आप थोड़ा सा ग्रिरो ड्रिफ्ट देखेंगे, लेकिन फिर फ़िल्टर को जारी रखने के रूप में सही किया जाना शुरू हो जाएगा। मेरा फ़िल्टर ऐसा कुछ दिखता है और "stray" की 0.5 डिग्री से अधिक की रोकथाम करता है:

filtZ = 0.65 * oldZ + 0.35 * z;

0.65 और 0.35 मान प्रयोगात्मक रूप से निर्धारित किए गए थे और मैं आपको सलाह देता हूं कि आपके पास समय है। आउटपुट को अभी भी 0-1 से स्केल किया जाएगा और उसके बाद आप उसी तरह उपयोग कर सकते हैं (या अगर आप सभी 4 आयामों को बरकरार रखना चाहते हैं तो quaternion को फिर से पेश किया गया है)।