2012-02-27 13 views
10

मैं एंड्रॉइड सेंसर डेटा के साथ काम कर रहा हूं। मेरा आवेदनकम्पास मुझे पागल डेटा देता है, अंशांकन आवश्यक है या सेंसर टूट गया है?

SensorManager.getRotationMatrixFromVector(
      mRotationMatrix , event.values); 

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

यह मेरे कोड में कोई समस्या नहीं है, क्योंकि शुक्रवार को काम कर रहा था और कोई बदलाव नहीं हुआ है। मैंने बाजार से एक कंपास ऐप का उपयोग किया है, और कंपास यादृच्छिक डेटा दे रहा है।

मैंने अपने ऐप का परीक्षण किसी अन्य टैबलेट पर किया है, और यह अच्छी तरह से काम कर रहा है।

क्या कोई जानता है कि यह क्यों हो रहा है? सेंसर के साथ एक समस्या? क्या इसे अंशांकन की आवश्यकता है?

उत्तर

18

मैंने मोबाइल फोन पर इन इलेक्ट्रॉनिक कंपास के साथ काफी काम किया है और यह संभव है कि आपके कोड या सेंसर में कुछ भी गलत न हो।

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

इस प्रयास करें: स्थापित GPS status तो सभी को छानने बंद कर देते हैं (सेटिंग ... जीपीएस & सेंसर ... सेंसर छानने ...कोई फ़िल्टरिंग नहीं)। अंशांकन (8 वांछित सामान का आंकड़ा) करें और उसके बाद फोन को अपने डेस्क के चारों ओर ले जाएं .. मॉनीटर, केबल्स इत्यादि के पास आप इसे पागल देखेंगे। जानकारी पूरी तरह से अविश्वसनीय है। मैंने अतीत में पाया कि फोन को कुछ इंच सही तरीके से ले जाना पूरी तरह से पढ़ रहा है। असली कंपास के साथ भी यही होता है। कड़ाई से बोलना कोई समस्या नहीं है। डिवाइस का कंपास स्वयं को सबसे मजबूत चुंबकीय क्षेत्र के साथ असाइन कर रहा है। यहां तक ​​कि पास के चट्टानों की चुंबकीय सामग्री भी कंपास में हस्तक्षेप कर सकती है।

एक और परीक्षण के रूप में मैंने अपने फोन पर एक वास्तविक (उन्मुख) कंपास रखा है जिसमें एक कंपास ऐप स्थापित है। असली कंपास अब हर जगह इंगित कर रहा है लेकिन चुंबकीय उत्तर। दोनों डिवाइस एक दूसरे के साथ हस्तक्षेप कर रहे हैं।

तो मेरी सलाह है .. किसी भी संभावित हस्तक्षेप और पावर लाइनों से दूर, पार्क या फील्ड की तरह खुले में कहीं भी जाएं, (यदि आपके पास कोई वास्तविक कंपास लाता है तो यह जांचने के लिए कि GPS status ऐप सही इंगित कर रहा है रास्ता), और देखें कि आपका कंपास काम करता है या नहीं।

अतिरिक्त: कैलिब्रेटिंग करते समय @resus का उत्तर भी महत्वपूर्ण है। प्रत्येक धुरी में फोन को कुछ बार घुमाएं। मूर्खतापूर्ण लग रहा है लेकिन यह इसे ठीक से कैलिब्रेट करता है।

अतिरिक्त 2: क्या आपके जीपीएस के compass bearing का उपयोग करना संभव/व्यावहारिक होगा? यह आवश्यक होगा कि डिवाइस चल रहा है (चलने की गति ठीक होनी चाहिए) लेकिन आपको किसी भी हस्तक्षेप के बारे में चिंता करने की आवश्यकता नहीं होगी। यह एक सटीक पठन देना चाहिए बशर्ते आपका जीपीएस सिग्नल अच्छा हो।

अतिरिक्त 3: एक और विचार सिर्फ मेरे लिए हुआ .. आप सेंसर को कम पास फ़िल्टर लागू करने का प्रयास कर सकते हैं। इसका मतलब है कि सेंसर पढ़ने में अचानक परिवर्तन फ़िल्टर किए गए हैं .. इस answer पर एक नज़र डालें। और यदि यह अच्छा काम नहीं करता है तो आपके लिए चुनने के लिए वेब पर बहुत से एल्गोरिदम हैं।

+0

धन्यवाद, मैं पहले ही जीपीएस स्थिति का परीक्षण कर रहा हूं, और जब तक टैबलेट एक मजबूत चुंबकीय क्षेत्र में पूरी रात रुक गया तब तक ठीक काम कर रहा था, यह हो सकता है कि मैं समर्थन – vgonisanz

+0

पर कॉल करूंगा बस resus की तरह "3 अक्ष" स्पिन आज़माएं। इसे लगभग 3 गुना मोर्चे पर वापस घुमाएं, फिर इसे दूसरी तरफ घुमाएं और फिर 3 बार फिर से घुमाएं, फिर इसे घुमाएं (इसे एक मेज पर कताई की तरह) 3 बार। मुझे नहीं लगता कि समर्थन मदद करेगा क्योंकि यह शायद दोषपूर्ण नहीं है। बस हस्तक्षेप के सभी संभावित स्रोतों से दूर जाने का प्रयास करें - शुभकामनाएं – Tim

+0

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

6

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

जबकि आपका ऐप चल रहा है (यानी कंपास उपयोग में है), आप कम्पास को स्वचालित रूप से पुन: संयोजित करने के लिए इसे 8 के आंकड़े में घुमाने में सक्षम होना चाहिए। आपको यह भी सुनिश्चित करना चाहिए कि आप धातु के किसी भी बड़े गांठ के बगल में खड़े नहीं हैं जो रीडिंग में हस्तक्षेप कर सकता है।

आप SensorEventListener की onAccuracyChanged() विधि ओवरराइड कर सकते हैं उपयोगकर्ता के लिए संदेश अप फ्लैश करने के लिए जब कम्पास recalibration की आवश्यकता है (शायद जब सटीकता SENSOR_STATUS_ACCURACY_LOW लिए चला जाता है)।

Android फोन पर कम्पास के साथ खेलने का मेरा अनुभव में, वे बहुत अविश्वसनीय हो सकता है ...

4

एक और गोली और अन्य कम्पास एप्लिकेशन को आपके उपकरण पर काम नहीं करते पर अपने आवेदन काम करते हैं, यह शायद कारण है एक खराब अंशांकन के लिए।

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

3

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

आप आमतौर पर टैबलेट कहां रखते हैं? क्या यह हो सकता है कि यह बड़े सर्वर या मैग्नेट के पास था? आपको बस मामले में कंपास की जांच करनी चाहिए, एंड्रॉइड के तकनीकी समर्थन से बात करें।

उम्मीद है कि यह मदद करता है।

1

मुझे लगता है कि सवाल यह था कि अगर अंशांकन किसी भी डेटा को कंपास में भेजने के बिना किया जा सकता है। चूंकि सभी लोग कहते हैं कि इस वीडियो में दिखाए गए कंपास को कैलिब्रेटेड किया गया है: https://support.google.com/maps/answer/6145351?hl=en और स्पष्ट रूप से आप प्रोग्राम का उपयोग करने से पहले या जब आपको बहुत अधिक परिवर्तन मिलते हैं तो उपयोगकर्ता को कैलिब्रेट करने की सलाह देने के अलावा कुछ और नहीं कर सकते हैं। उदाहरण के लिए लगभग 25 एमएस में बाएं और दाएं 90 डिग्री जा रहे हैं।

वैसे भी मुझे लगता है कि डेटा लेने शुरू करने से पहले ऐप को कुछ सेकंड देना अच्छा होता है, क्योंकि यह ऐप लोडिंग पल पर कुछ अस्थिर मान (बहुत कम और कम समय में बिना आंदोलन के) देता है। बस हैंडलर onSensorChanged() को सशर्त के साथ कोडित करें, और onCreate() हैंडलर पर एक थ्रेड शुरू करें, जो कुछ सेकंड के बाद boolean को सत्य पर सेट करेगा। फिर आप onSensorChanged() हैंडलर पर डेटा कैप्चर करना प्रारंभ करते हैं।

इसके अलावा इस सूत्र सेंसर सटीकता का पता लगाने के लिए मदद कर सकते हैं, और फिर आप पॉपअप कर सकते हैं: In Android can I programmatically detect that the compass is not yet calibrated?

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

1

आजकल मुझे HMC-5983 और MPU-6050 के साथ रोबोट विकसित करने की किस्मत है, जिसे Arduino के साथ अपने पुस्तकालयों का उपयोग करके कैलिब्रेटेड किया जा सकता है।

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

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

तो, शुभकामनाएँ! यह भी सच है कि, दोनों उपकरणों (स्मार्टफोन और मेरे रोबोट) में उन्हें अच्छी तरह से काम करने के लिए उन्हें स्थानांतरित करने की आवश्यकता है, क्योंकि मैंने आपको नवीनतम उत्तर के वीडियो में दिखाया है, रोबोट पर भी सहायक है।

अच्छी किस्मत और उन चीजों के साथ बहुत मज़ा, बहुत शक्तिशाली हैं।