इस सेक्शन में सेंसर ऐक्सिस, बेस सेंसर, और कंपोज़िट सेंसर (गतिविधि, ऐटिट्यूड, अनकैलिब्रेटेड, और इंटरैक्शन) के बारे में बताया गया है.
सेंसर ऐक्सिस
कई सेंसर से मिली सेंसर इवेंट वैल्यू को एक खास फ़्रेम में दिखाया जाता है. यह फ़्रेम, डिवाइस के हिसाब से स्टैटिक होता है.
मोबाइल डिवाइस के ऐक्सिस
Sensor API, सिर्फ़ स्क्रीन के नैचुरल ओरिएंटेशन के हिसाब से काम करता है. डिवाइस की स्क्रीन का ओरिएंटेशन बदलने पर, ऐक्सिस स्वैप नहीं होते.
पहली इमेज. सेंसर एपीआई, मोबाइल डिवाइस के हिसाब से इस कोऑर्डिनेट सिस्टम का इस्तेमाल करता है
ऑटोमोटिव ऐक्सिस
Android Automotive में, ऐक्सिस को वाहन के बॉडी फ़्रेम के हिसाब से तय किया जाता है. वाहन के रेफ़रंस फ़्रेम का ओरिजन, पीछे के ऐक्सल का सेंटर होता है. वाहन के रेफ़रंस फ़्रेम को इस तरह से ओरिएंट किया जाता है कि:
- X-ऐक्सिस दाईं ओर होता है और हॉरिज़ॉन्टल प्लेन पर होता है. यह सिमिट्री के वाहन प्लेन के लंबवत होता है.
- Y-ऐक्सिस आगे की ओर होता है और हॉरिज़ॉन्टल प्लेन पर होता है.
दूसरी इमेज. Sensor API, कोऑर्डिनेट सिस्टम का इस्तेमाल करता है. यह कोऑर्डिनेट सिस्टम, किसी Automotive डिवाइस के हिसाब से होता है
वाहन का रेफ़रंस फ़्रेम, राइट-हैंडेड कोऑर्डिनेट सिस्टम होता है. इसलिए, Z-ऐक्सिस ऊपर की ओर होता है.
रेफ़रंस फ़्रेम का Z-ऐक्सिस, गुरुत्वाकर्षण के साथ अलाइन होता है. इसका मतलब है कि X-ऐक्सिस और Y-ऐक्सिस, दोनों हॉरिज़ॉन्टल होते हैं. इस वजह से, हो सकता है कि Y-ऐक्सिस हमेशा सामने के ऐक्सल से न गुज़रे.
बेस सेंसर
सेंसर के बुनियादी टाइप के नाम, उन फ़िज़िकल सेंसर के नाम पर रखे जाते हैं जिनसे वे जुड़े होते हैं. ये सेंसर, किसी एक फ़िज़िकल सेंसर से डेटा रिले करते हैं. कंपोज़िट सेंसर, अन्य सेंसर से डेटा जनरेट करते हैं. सेंसर के बुनियादी टाइप के उदाहरणों में ये शामिल हैं:
SENSOR_TYPE_ACCELEROMETERSENSOR_TYPE_GYROSCOPESENSOR_TYPE_MAGNETOMETER
हालांकि, बेस सेंसर, अंडरलाइंग फ़िज़िकल सेंसर के बराबर नहीं होते हैं और न ही इन्हें अंडरलाइंग फ़िज़िकल सेंसर के साथ भ्रमित किया जाना चाहिए. बेस सेंसर से मिलने वाला डेटा, फ़िज़िकल सेंसर का रॉ आउटपुट नहीं होता है. ऐसा इसलिए, क्योंकि इसमें कुछ सुधार किए जाते हैं. जैसे, बायस कंपेंसेशन और तापमान कंपेंसेशन.
उदाहरण के लिए, इस्तेमाल के इन मामलों में, बेस सेंसर की विशेषताएं, उसके फ़िजिकल सेंसर की विशेषताओं से अलग हो सकती हैं:
- जाइरोस्कोप चिप की रेटिंग 1 डिग्री/सेकंड है.
- फ़ैक्ट्री कैलिब्रेशन के बाद, तापमान और बायस के असर को कम करने की सुविधा लागू की जाती है. इससे Android सेंसर का असल बायस कम हो जाएगा. ऐसा हो सकता है कि बायस को इस हद तक कम कर दिया जाए कि वह 0.01 डिग्री/सेकंड से कम हो जाए.
- इस स्थिति में, हम कहते हैं कि Android सेंसर में 0.01 डिग्री/सेकंड से कम का पूर्वाग्रह है. भले ही, सेंसर की डेटा शीट में 1 डिग्री/सेकंड लिखा हो.
- ऐसा बैरोमीटर जिसकी पावर की खपत 100 uW है.
- जनरेट किए गए डेटा को चिप से SoC तक ले जाना होता है. इसलिए, Android डिवाइस के बैरोमीटर सेंसर से डेटा इकट्ठा करने में लगने वाली बिजली की लागत काफ़ी ज़्यादा हो सकती है. उदाहरण के लिए, 1000 uW.
- इस स्थिति में, हम कहते हैं कि Android सेंसर की बिजली की खपत 1,000 uW है. भले ही, बैरोमीटर चिप पर मापी गई बिजली की खपत 100 uW हो.
- एक मैग्नेटोमीटर, जिसे कैलिब्रेट करने पर 100uW की खपत होती है. हालांकि, कैलिब्रेट करते समय यह ज़्यादा खपत करता है.
- इसके कैलिब्रेशन रूटीन के लिए, जायरोस्कोप को चालू करना पड़ सकता है. इसमें 5,000 माइक्रोवॉट की खपत होती है. साथ ही, कुछ एल्गोरिदम चलाने पड़ सकते हैं, जिसमें 900 माइक्रोवॉट की खपत होती है.
- इस स्थिति में, हम कहते हैं कि Android सेंसर (मैग्नेटोमीटर) की ज़्यादा से ज़्यादा बिजली की खपत 6000 uW है.
- इस मामले में, बिजली की औसत खपत ज़्यादा काम की होती है. साथ ही, इसे HAL के ज़रिए सेंसर की स्टैटिक विशेषताओं में रिपोर्ट किया जाता है.
एक्सलरोमीटर
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)
returns a non-wake-up sensor
एक्सलरोमीटर सेंसर, डिवाइस के तीन सेंसर ऐक्सिस के हिसाब से डिवाइस के ऐक्सलरेशन की जानकारी देता है. मेजर किए गए ऐक्सलरेशन में, फ़िज़िकल ऐक्सलरेशन (वेलोसिटी में बदलाव) और ग्रैविटी, दोनों शामिल होती हैं. मेज़रमेंट को sensors_event_t.acceleration के x, y, और z फ़ील्ड में रिपोर्ट किया जाता है.
सभी वैल्यू, एसआई यूनिट (m/s^2) में होती हैं. इनसे डिवाइस के ऐक्सलरेशन को मापा जाता है. हालांकि, इसमें सेंसर के तीनों ऐक्सिस पर लगने वाले गुरुत्वाकर्षण बल को घटा दिया जाता है.
यहां कुछ उदाहरण दिए गए हैं:
- फ़्री फ़ॉल के दौरान, (x, y, z) का नॉर्म 0 के आस-पास होना चाहिए.
- जब डिवाइस को टेबल पर सीधा रखा जाता है और उसे बाईं ओर से दाईं ओर धकेला जाता है, तब x ऐक्सलरेशन की वैल्यू पॉज़िटिव होती है.
- जब डिवाइस को टेबल पर सीधा रखा जाता है, तब z-ऐक्सिस के साथ ऐक्सलरेशन की वैल्यू +9.81 होती है. यह डिवाइस के ऐक्सलरेशन (0 मीटर/सेकंड^2) में से गुरुत्वाकर्षण बल (-9.81 मीटर/सेकंड^2) को घटाने पर मिलती है.
- जब डिवाइस को टेबल पर सीधा रखा जाता है और ऊपर की ओर धकेला जाता है, तो ऐक्सलरेशन की वैल्यू +9.81 से ज़्यादा होती है. यह डिवाइस के ऐक्सलरेशन (+A m/s^2) में से गुरुत्वाकर्षण बल (-9.81 m/s^2) को घटाने पर मिलती है.
रीडिंग को कैलिब्रेट करने के लिए, इन तरीकों का इस्तेमाल किया जाता है:
- तापमान के हिसाब से बैटरी के चार्ज होने की दर में बदलाव
- ऑनलाइन बायस कैलिब्रेशन
- स्केल का ऑनलाइन कैलिब्रेशन
सेंसर के बंद होने पर ही, बायस और स्केल कैलिब्रेशन को अपडेट किया जाना चाहिए. इससे स्ट्रीमिंग के दौरान वैल्यू में अचानक होने वाले बदलावों से बचा जा सकेगा.
ऐक्सिलरोमीटर, sensors_event_t.acceleration.status के ज़रिए यह भी बताता है कि उसे अपनी रीडिंग के सटीक होने की कितनी उम्मीद है. इस फ़ील्ड की संभावित वैल्यू के बारे में ज़्यादा जानने के लिए,
SensorManager के
SENSOR_STATUS_* कॉन्स्टेंट देखें.
आस-पास का तापमान
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)
returns a non-wake-up sensor
यह सेंसर, कमरे के तापमान की जानकारी डिग्री सेल्सियस में देता है.
मैग्नेटिक फ़ील्ड सेंसर
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)
returns a non-wake-up sensor
SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD
मैग्नेटिक फ़ील्ड सेंसर (इसे मैग्नेटोमीटर भी कहा जाता है) आस-पास के मैग्नेटिक फ़ील्ड की जानकारी देता है. यह जानकारी, सेंसर के तीन ऐक्सिस के हिसाब से मेज़र की जाती है.
मेज़रमेंट को sensors_event_t.magnetic के x, y, और z फ़ील्ड में रिपोर्ट किया जाता है. साथ ही, सभी वैल्यू माइक्रो-टेस्ला (uT) में होती हैं.
मैग्नेटोमीटर, sensors_event_t.magnetic.status के ज़रिए यह भी बताता है कि उसे अपनी रीडिंग कितनी सटीक होने की उम्मीद है. इस फ़ील्ड की संभावित वैल्यू के बारे में ज़्यादा जानने के लिए,
SensorManager के
SENSOR_STATUS_* कॉन्स्टेंट देखें.
रीडिंग को कैलिब्रेट करने के लिए, इन तरीकों का इस्तेमाल किया जाता है:
- तापमान के हिसाब से बैटरी के चार्ज होने की दर में बदलाव
- फ़ैक्ट्री (या ऑनलाइन) में सॉफ़्ट-आयरन कैलिब्रेशन
- ऑनलाइन हार्ड-आयरन कैलिब्रेशन
जाइरोस्कोप
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
returns a non-wake-up sensor
जाइरोस्कोप सेंसर, डिवाइस के तीन सेंसर ऐक्सिस के चारों ओर घूमने की दर की जानकारी देता है.
घड़ी की उलटी दिशा में घुमाने पर, रोटेशन पॉज़िटिव होता है (राइट-हैंड रूल). इसका मतलब है कि अगर कोई व्यक्ति x, y या z ऐक्सिस पर किसी पॉज़िटिव जगह से, ऑरिजिन पर रखे गए डिवाइस को देखता है, तो डिवाइस के एंटी-क्लॉकवाइज़ घूमने पर वह पॉज़िटिव रोटेशन की रिपोर्ट करेगा. ध्यान दें कि यह पॉज़िटिव रोटेशन की स्टैंडर्ड गणितीय परिभाषा है. यह एयरोस्पेस में रोल की परिभाषा से मेल नहीं खाती.
मेज़रमेंट को sensors_event_t.gyro के x, y, और z फ़ील्ड में रिपोर्ट किया जाता है. साथ ही, सभी वैल्यू रेडियन प्रति सेकंड (rad/s) में होती हैं.
रीडिंग को कैलिब्रेट करने के लिए, इन तरीकों का इस्तेमाल किया जाता है:
- तापमान के हिसाब से बैटरी के चार्ज होने की दर में बदलाव
- फ़ैक्ट्री (या ऑनलाइन) स्केल पर मुआवज़ा
- ऑनलाइन बायस कैलिब्रेशन (ड्रift को हटाने के लिए)
जायरोस्कोप, sensors_event_t.gyro.status के ज़रिए यह भी बताता है कि उसे अपनी रीडिंग कितनी सटीक होने की उम्मीद है. इस फ़ील्ड की संभावित वैल्यू के बारे में ज़्यादा जानने के लिए,
SensorManager के
SENSOR_STATUS_* कॉन्स्टेंट देखें.
मैग्नेटोमीटर और ऐक्सिलरोमीटर के आधार पर, जायरोस्कोप का इम्यूलेशन नहीं किया जा सकता. ऐसा करने से, इसकी लोकल कंसिस्टेंसी और रिस्पॉन्स देने की क्षमता कम हो जाएगी. यह सामान्य जायरोस्कोप चिप पर आधारित होना चाहिए.
धड़कन की दर
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
returns a non-wake-up sensor
धड़कन की दर मापने वाला सेंसर, डिवाइस को छूने वाले व्यक्ति की मौजूदा धड़कन की दर की जानकारी देता है.
धड़कन की मौजूदा दर, धड़कन प्रति मिनट (बीपीएम) के हिसाब से sensors_event_t.heart_rate.bpm में दिखाई जाती है. साथ ही, सेंसर की स्थिति sensors_event_t.heart_rate.status में दिखाई जाती है. इस फ़ील्ड की संभावित वैल्यू के बारे में ज़्यादा जानने के लिए,
SensorManager के
SENSOR_STATUS_* कॉन्स्टेंट देखें. खास तौर पर, पहली बार चालू करने पर, पहले इवेंट के स्टेटस फ़ील्ड को SENSOR_STATUS_UNRELIABLE पर सेट करना होगा. ऐसा तब तक करना होगा, जब तक यह पता न चल जाए कि डिवाइस शरीर पर नहीं है. यह सेंसर, बदलाव होने पर काम करता है. इसलिए, इवेंट तब और सिर्फ़ तब जनरेट होते हैं, जब पिछले इवेंट के बाद से heart_rate.bpm या heart_rate.status में बदलाव हुआ हो. इवेंट, हर sampling_period से ज़्यादा तेज़ी से जनरेट नहीं होते.
यह फ़्रेमवर्क, sensor_t.requiredPermission को अपने-आप बदलकर, सही अनुमति पर सेट कर देता है, ताकि यह फ़्रेमवर्क काम करता रहे. यह फ़्रेमवर्क, Android 16 और इसके बाद के वर्शन के लिए SENSOR_PERMISSION_READ_HEART_RATE अनुमति का इस्तेमाल करता है. साथ ही, Android 15 और इससे पहले के वर्शन के लिए SENSOR_PERMISSION_BODY_SENSORS अनुमति का इस्तेमाल करता है.
हल्का
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_LIGHT)
returns a non-wake-up sensor
लाइट सेंसर, एसआई लक्स यूनिट में मौजूदा रोशनी की जानकारी देता है.
मेज़रमेंट को sensors_event_t.light में रिपोर्ट किया जाता है.
निकटता
Reporting-mode: On-change
इसे आम तौर पर वेक-अप सेंसर के तौर पर तय किया जाता है
getDefaultSensor(SENSOR_TYPE_PROXIMITY)
यह वेक-अप सेंसर दिखाता है
प्रॉक्सिमिटी सेंसर, सेंसर से सबसे नज़दीक दिखने वाली सतह की दूरी की जानकारी देता है.
Android 4.4 तक, प्रॉक्सिमिटी सेंसर हमेशा वेक-अप सेंसर होते थे. ये प्रॉक्सिमिटी में बदलाव का पता चलने पर, SoC को चालू कर देते थे. Android 4.4 के बाद, हमारा सुझाव है कि आप इस सेंसर के वेक-अप वर्शन को सबसे पहले लागू करें. ऐसा इसलिए, क्योंकि इसका इस्तेमाल फ़ोन कॉल करते समय स्क्रीन को चालू और बंद करने के लिए किया जाता है.
इस मेज़रमेंट को sensors_event_t.distance में सेंटीमीटर में रिपोर्ट किया जाता है. ध्यान दें कि कुछ प्रॉक्सिमिटी सेंसर, सिर्फ़ बाइनरी "पास" या "दूर" मेज़रमेंट के साथ काम करते हैं.
इस मामले में, सेंसर "दूर" स्थिति में sensor_t.maxRange
वैल्यू और "पास" स्थिति में sensor_t.maxRange से कम वैल्यू रिपोर्ट करता है.
दबाव
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_PRESSURE)
returns a non-wake-up sensor
प्रेशर सेंसर को बैरोमीटर भी कहा जाता है. यह वायुमंडल के दबाव को हेक्टोपास्कल (hPa) में दिखाता है.
रीडिंग को कैलिब्रेट करने के लिए, इनका इस्तेमाल किया जाता है
- तापमान के हिसाब से बैटरी के चार्ज होने की दर में बदलाव
- फ़ैक्ट्री बायस कैलिब्रेशन
- फ़ैक्ट्री स्केल कैलिब्रेशन
बैरोमीटर का इस्तेमाल, अक्सर ऊंचाई में होने वाले बदलावों का अनुमान लगाने के लिए किया जाता है. समुद्र तल से ऊंचाई का अनुमान लगाने के लिए, समुद्र तल पर दबाव (मौसम के हिसाब से बदलता रहता है) को रेफ़रंस के तौर पर इस्तेमाल करना ज़रूरी है.
संबंधित आर्द्रता
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)
returns a non-wake-up sensor
रिलेटिव ह्यूमिडिटी सेंसर, आस-पास की हवा में मौजूद रिलेटिव ह्यूमिडिटी को मापता है. साथ ही, यह वैल्यू को प्रतिशत में दिखाता है.
कंपोज़िट सेंसर टाइप
कंपोज़िट सेंसर, एक या कई फ़िज़िकल सेंसर से मिले डेटा को प्रोसेस करके और/या जोड़कर डेटा जनरेट करता है. (बेस सेंसर के अलावा, किसी भी सेंसर को कंपोज़िट सेंसर कहा जाता है.) कंपोज़िट सेंसर के उदाहरणों में ये शामिल हैं:
- कदम का पता लगाने वाला सेंसर और गतिविधि का पता लगाने वाला सेंसर. ये दोनों सेंसर आम तौर पर ऐक्सिलरोमीटर पर आधारित होते हैं. हालांकि, अगर बैटरी की खपत और सटीक जानकारी देने के मामले में ये सेंसर ठीक हों, तो इन्हें अन्य सेंसर पर भी आधारित किया जा सकता है.
- गेम रोटेशन वेक्टर, जो एक्सलरोमीटर और जाइरोस्कोप पर आधारित होता है.
- कैलिब्रेट न किया गया जाइरोस्कोप. यह जाइरोस्कोप के बेस सेंसर जैसा ही होता है. हालांकि, इसमें बायस कैलिब्रेशन को मेज़रमेंट में ठीक करने के बजाय, अलग से रिपोर्ट किया जाता है.
बेसिक सेंसर की तरह ही, कंपोज़िट सेंसर की विशेषताएं उनके फ़ाइनल डेटा की विशेषताओं से मिलती हैं. उदाहरण के लिए, गेम रोटेशन वेक्टर की बैटरी की खपत, एक्सलरोमीटर चिप, जाइरोस्कोप चिप, डेटा को प्रोसेस करने वाली चिप, और डेटा को ट्रांसफ़र करने वाली बसों की बैटरी की खपत के योग के बराबर होती है. एक और उदाहरण के तौर पर, गेम रोटेशन वेक्टर का ड्रिफ़्ट, कैलिब्रेशन एल्गोरिदम की क्वालिटी और फ़िज़िकल सेंसर की विशेषताओं पर निर्भर करता है.
यहां दी गई टेबल में, कंपोज़िट सेंसर के उपलब्ध टाइप दिए गए हैं. हर कंपोज़िट सेंसर, एक या कई फ़िज़िकल सेंसर से मिले डेटा पर निर्भर करता है. नतीजों का अनुमान लगाने के लिए, अन्य फ़िज़िकल सेंसर न चुनें. इनसे उपयोगकर्ता को खराब अनुभव मिलता है.
| सेंसर का टाइप | कैटगरी | फ़िज़िकल सेंसर | रिपोर्टिंग मोड |
|---|---|---|---|
नज़रिया |
एक्सलरोमीटर, जाइरोस्कोप, मैग्नेटोमीटर का इस्तेमाल नहीं किया जाना चाहिए |
कंटिन्युअस |
|
नज़रिया |
एक्सलरोमीटर, मैग्नेटोमीटर, जाइरोस्कोप का इस्तेमाल नहीं करना चाहिए |
कंटिन्युअस |
|
| एक नज़र डालने वाला जेस्चर |
इंटरैक्शन |
तय नहीं किया है |
एक उदाहरण वाला प्रॉम्प्ट |
नज़रिया |
एक्सलरोमीटर, जाइरोस्कोप (अगर मौजूद है) या मैग्नेटोमीटर (अगर जाइरोस्कोप मौजूद नहीं है) |
कंटिन्युअस |
|
कैलिब्रेट नहीं किया गया |
जाइरोस्कोप |
कंटिन्युअस |
|
गतिविधि |
एक्सलरोमीटर, जाइरोस्कोप (अगर मौजूद है) या मैग्नेटोमीटर (अगर जाइरोस्कोप मौजूद नहीं है) |
कंटिन्युअस |
|
कैलिब्रेट नहीं किया गया |
मैग्नेटोमीटर |
कंटिन्युअस |
|
स्क्रीन की दिशा (अब सेवा में नहीं है) |
नज़रिया |
एक्सलरोमीटर, मैग्नेटोमीटर, जाइरोस्कोप (अगर मौजूद हो) |
कंटिन्युअस |
इंटरैक्शन |
तय नहीं किया है |
एक उदाहरण वाला प्रॉम्प्ट |
|
नज़रिया |
एक्सलरोमीटर, मैग्नेटोमीटर, जाइरोस्कोप (अगर मौजूद हो) |
कंटिन्युअस |
|
गतिविधि |
एक्सलरोमीटर (या कोई दूसरा सेंसर, बशर्ते कि वह बहुत कम पावर इस्तेमाल करता हो) |
एक उदाहरण वाला प्रॉम्प्ट |
|
गतिविधि |
एक्सलरोमीटर |
बदले जाने पर |
|
गतिविधि |
एक्सलरोमीटर |
स्पेशल |
|
गतिविधि |
एक्सलरोमीटर |
स्पेशल |
|
इंटरैक्शन |
तय नहीं किया है |
एक उदाहरण वाला प्रॉम्प्ट |
= कम बैटरी इस्तेमाल करने वाला सेंसर
गतिविधि के कंपोज़िट सेंसर
लीनियर ऐक्सेलरेशन
फ़ोन में मौजूद फ़िज़िकल सेंसर: एक्सलरोमीटर और (अगर मौजूद है, तो) जाइरोस्कोप (या अगर जाइरोस्कोप मौजूद नहीं है, तो मैग्नेटोमीटर)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)
returns a non-wake-up sensor
लीनियर ऐक्सलरेशन सेंसर, डिवाइस के लीनियर ऐक्सलरेशन की जानकारी देता है. यह जानकारी, सेंसर फ़्रेम में होती है. इसमें ग्रैविटी शामिल नहीं होती.
सैद्धांतिक तौर पर, आउटपुट इस तरह होता है: एक्सलरोमीटर का आउटपुट माइनस ग्रैविटी सेंसर का आउटपुट. इसे sensors_event_t.acceleration के x, y, और z फ़ील्ड में m/s^2 में रिपोर्ट किया जाता है.
जब डिवाइस स्थिर हो, तब सभी ऐक्सिस पर रीडिंग 0 के आस-पास होनी चाहिए.
अगर डिवाइस में जाइरोस्कोप है, तो लीनियर ऐक्सलरेशन सेंसर को इनपुट के तौर पर जाइरोस्कोप और ऐक्सलरोमीटर का इस्तेमाल करना होगा.
अगर डिवाइस में जाइरोस्कोप नहीं है, तो लीनियर ऐक्सलरेशन सेंसर को एक्सलरोमीटर और मैग्नेटोमीटर का इस्तेमाल इनपुट के तौर पर करना होगा.
ज़्यादा गति
फ़िज़िकल सेंसर: एक्सलरोमीटर (या कम पावर वाला कोई अन्य सेंसर)
Reporting-mode: One-shot
बैटरी कम है
इस सेंसर का सिर्फ़ वेक-अप वर्शन लागू करें.
getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)
यह वेक-अप सेंसर दिखाता है
मोशन डिटेक्टर, तेज़ गति का पता चलने पर ट्रिगर होता है. यह ऐसी गति होती है जिससे उपयोगकर्ता की जगह में बदलाव हो सकता है.
इस तरह के अहम बदलावों के उदाहरण:
- पैदल चलना या साइकल चलाना
- चलती हुई कार, बस या ट्रेन में बैठे रहना
ऐसी स्थितियों के उदाहरण जिनमें ज़्यादा हलचल नहीं होती:
- फ़ोन जेब में हो और व्यक्ति न चल रहा हो
- फ़ोन को मेज़ पर रखा गया है और आस-पास के ट्रैफ़िक या वॉशिंग मशीन की वजह से मेज़ थोड़ी हिल रही है
ज़्यादा बैटरी खर्च करने वाली गतिविधियों का पता लगाने वाले सेंसर का इस्तेमाल, जगह की जानकारी का पता लगाने के लिए बैटरी की खपत को कम करने के लिए किया जाता है. जब लोकलाइज़ेशन एल्गोरिदम को पता चलता है कि डिवाइस एक ही जगह पर है, तो वे कम बैटरी इस्तेमाल करने वाले मोड पर स्विच कर सकते हैं. इस मोड में, डिवाइस को चालू करने के लिए, डिवाइस में काफ़ी हलचल होना ज़रूरी है. ऐसा तब होता है, जब उपयोगकर्ता अपनी जगह बदल रहा हो.
यह सेंसर कम पावर वाला होना चाहिए. यह बैटरी की खपत को कम करने के लिए, कुछ हद तक समझौता करता है. इस वजह से, कुछ मामलों में गलत नतीजे मिल सकते हैं. ऐसा कुछ वजहों से किया जाता है:
- इस सेंसर का मकसद, बैटरी की बचत करना है.
- जब उपयोगकर्ता नहीं चल रहा होता है, तब इवेंट को ट्रिगर करना (फ़ॉल्स पॉज़िटिव) बैटरी के हिसाब से महंगा होता है. इसलिए, इससे बचना चाहिए.
- अगर उपयोगकर्ता के चलने के दौरान इवेंट ट्रिगर नहीं होता है (फ़ॉल्स नेगेटिव), तो यह स्वीकार किया जा सकता है. हालांकि, ऐसा बार-बार नहीं होना चाहिए. अगर उपयोगकर्ता 10 सेकंड से चल रहा है, तो उन 10 सेकंड के अंदर इवेंट ट्रिगर न करना स्वीकार नहीं किया जाएगा.
हर सेंसर इवेंट, 1 में sensors_event_t.data[0] की रिपोर्ट करता है.
कदमों का पता लगाने वाला सेंसर
फ़िज़िकल सेंसर: एक्सलरोमीटर (+ कम बैटरी इस्तेमाल करने वाले अन्य सेंसर भी हो सकते हैं)
Reporting-mode: Special (one event per step taken)
बैटरी कम है
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)
returns a non-wake-up sensor
स्टेप डिटेक्टर, उपयोगकर्ता के हर कदम पर एक इवेंट जनरेट करता है.
इवेंट sensors_event_t.timestamp का टाइमस्टैंप, उस समय से जुड़ा है जब पैर ज़मीन से टकराया था. इससे ऐक्सलरेशन में काफ़ी बदलाव हुआ.
कदमों का पता लगाने वाले सेंसर की लेटेन्सी, स्टेप काउंटर की तुलना में कम होनी चाहिए. यह दो सेकंड से कम होनी चाहिए. स्टेप डिटेक्टर और स्टेप काउंटर, दोनों यह पता लगाते हैं कि उपयोगकर्ता कब चल रहा है, दौड़ रहा है, और सीढ़ियां चढ़ रहा है. ये सुविधाएँ तब ट्रिगर नहीं होनी चाहिए, जब उपयोगकर्ता साइकल चला रहा हो, गाड़ी चला रहा हो या किसी अन्य वाहन में हो.
यह सेंसर कम पावर वाला होना चाहिए. इसका मतलब है कि अगर हार्डवेयर में स्टेप डिटेक्शन नहीं किया जा सकता, तो इस सेंसर को तय नहीं किया जाना चाहिए. खास तौर पर, जब स्टेप डिटेक्टर चालू हो और ऐक्सिलरोमीटर बंद हो, तो सिर्फ़ कदमों की गिनती से इंटरप्ट ट्रिगर होने चाहिए (ऐक्सिलरोमीटर की हर रीडिंग से नहीं).
sampling_period_ns का असर, स्टेप डिटेक्ट करने वाले सेंसर पर नहीं पड़ता.
हर सेंसर इवेंट, 1 में sensors_event_t.data[0] की रिपोर्ट करता है.
कदमों की गिनती करने वाला डिवाइस
फ़िज़िकल सेंसर: एक्सलरोमीटर (+ कम बैटरी इस्तेमाल करने वाले अन्य सेंसर भी हो सकते हैं)
Reporting-mode: On-change
कम पावर
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
returns a non-wake-up sensor
स्टेप काउंटर, डिवाइस के चालू होने के बाद से उपयोगकर्ता के चलने की संख्या रिपोर्ट करता है.
मेज़रमेंट को uint64_t में sensors_event_t.step_counter के तौर पर रिपोर्ट किया जाता है. साथ ही, सिस्टम रीबूट होने पर ही इसे शून्य पर रीसेट किया जाता है.
इवेंट का टाइमस्टैंप, उस समय पर सेट होता है जब इवेंट का आखिरी चरण पूरा किया गया था.
कदम चलने के समय के बारे में जानने के लिए, कदम का पता लगाने वाला सेंसर टाइप देखें.
स्टेप डिटेक्टर की तुलना में, स्टेप काउंटर में ज़्यादा लेटेन्सी (10 सेकंड तक) हो सकती है. इस सेंसर में कम समय में डेटा प्रोसेस होता है. इसलिए, यह ज़्यादा सटीक होता है. पूरे दिन की गतिविधि मेज़र करने के बाद, कदमों की संख्या में 10% से ज़्यादा का अंतर नहीं होना चाहिए. स्टेप डिटेक्टर और स्टेप काउंटर, दोनों यह पता लगाते हैं कि उपयोगकर्ता कब चल रहा है, दौड़ रहा है, और सीढ़ियां चढ़ रहा है. ये तब ट्रिगर नहीं होने चाहिए, जब उपयोगकर्ता साइकल चला रहा हो, गाड़ी चला रहा हो या किसी अन्य वाहन में हो.
हार्डवेयर को यह पक्का करना होगा कि इंटरनल स्टेप काउंट कभी भी ओवरफ़्लो न हो. हार्डवेयर के इंटरनल काउंटर का साइज़ कम से कम 16 बिट होना चाहिए. अगर काउंटर में जल्द ही ओवरफ़्लो होने वाला है (ज़्यादा से ज़्यादा हर ~2^16 चरणों पर), तो एसओसी को चालू किया जा सकता है, ताकि ड्राइवर काउंटर को मैनेज कर सके.
इंटरैक्शन में बताया गया है कि जब यह सेंसर काम करता है, तब यह किसी दूसरे सेंसर में रुकावट नहीं डालता. खास तौर पर, ऐक्सिलरोमीटर में, जिसका इस्तेमाल किया जा सकता है.
अगर कोई डिवाइस इन मोड में काम नहीं कर सकता, तो एचएएल को इस सेंसर टाइप की जानकारी नहीं देनी चाहिए. इसका मतलब है कि HAL में इस सेंसर को "इम्यूलेट" नहीं किया जा सकता.
यह सेंसर कम पावर वाला होना चाहिए. इसका मतलब है कि अगर हार्डवेयर में कदम का पता नहीं लगाया जा सकता, तो इस सेंसर को तय नहीं किया जाना चाहिए. खास तौर पर, जब स्टेप काउंटर चालू हो और एक्सलरोमीटर बंद हो, तो सिर्फ़ चरणों को इंटरप्ट ट्रिगर करना चाहिए (एक्सलरोमीटर डेटा को नहीं).
झुकने का पता लगाने वाला सेंसर
फ़िज़िकल सेंसर: एक्सलरोमीटर (+ कम बैटरी इस्तेमाल करने वाले अन्य सेंसर भी हो सकते हैं)
Reporting-mode: Special
कम पावर
इस सेंसर का सिर्फ़ वेक-अप वर्शन लागू करें.
getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)
यह वेक-अप सेंसर दिखाता है
झुकने का पता लगाने वाला सेंसर, हर बार झुकने का पता चलने पर एक इवेंट जनरेट करता है.
झुकने की घटना को इस तरह से तय किया जाता है: दो सेकंड की विंडो में गुरुत्वाकर्षण की दिशा में बदलाव, सेंसर के चालू होने या सेंसर से जनरेट हुए आखिरी इवेंट के बाद से कम से कम 35 डिग्री तक बदल गई हो. यहां एल्गोरिदम दिया गया है:
reference_estimated_gravity= ऐक्टिवेट होने के बाद पहले सेकंड में ऐक्सिलरोमीटर से मिली मेज़रमेंट का औसत या झुकाने से जुड़ा आखिरी इवेंट जनरेट होने के समय अनुमानित गुरुत्वाकर्षण.current_estimated_gravity= पिछले दो सेकंड में ऐक्सिलरोमीटर से लिए गए मेज़रमेंट का औसत.- कब ट्रिगर होता है
angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees
फ़ोन के ओरिएंटेशन में बदलाव किए बिना, तेज़ी से होने वाले बड़े बदलावों से, टिल्ट इवेंट ट्रिगर नहीं होना चाहिए. उदाहरण के लिए, कार चलाते समय अचानक मुड़ने या तेज़ी से ऐक्सलरेट करने पर, टिल्ट इवेंट ट्रिगर नहीं होना चाहिए. भले ही, औसत ऐक्सलरेशन का कोण 35 डिग्री से ज़्यादा हो.
आम तौर पर, इस सेंसर को सिर्फ़ ऐक्सिलरोमीटर की मदद से लागू किया जाता है. अगर अन्य सेंसर से बैटरी की खपत ज़्यादा नहीं होती है, तो उनका इस्तेमाल भी किया जा सकता है. यह कम पावर वाला सेंसर है. इससे SoC को स्लीप मोड में जाने की अनुमति मिलनी चाहिए. HAL में इस सेंसर की नक़ल न करें. हर सेंसर इवेंट, 1 में sensors_event_t.data[0] की रिपोर्ट करता है.
ऐटिट्यूड कंपोज़िट सेंसर
रोटेशन वेक्टर
फ़िज़िकल सेंसर: एक्सलरोमीटर, मैग्नेटोमीटर, और जाइरोस्कोप
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) returns a
non-wake-up sensor
रोटेशन वेक्टर सेंसर, डिवाइस के ओरिएंटेशन की जानकारी देता है. यह जानकारी, ईस्ट-नॉर्थ-अप कोऑर्डिनेट फ़्रेम के हिसाब से होती है. आम तौर पर, यह जानकारी ऐक्सिलरोमीटर, जायरोस्कोप, और मैग्नेटोमीटर की रीडिंग को इंटिग्रेट करके मिलती है. ईस्ट-नॉर्थ-अप को-ऑर्डिनेट सिस्टम को डायरेक्ट ऑर्थोनॉर्मल बेसिस के तौर पर तय किया जाता है. इसमें:
- X, पूरब की ओर इशारा करता है और ज़मीन के समानांतर होता है.
- Y उत्तर की ओर इशारा करता है और ज़मीन के समानांतर होता है.
- Z, आसमान की ओर इशारा करता है और ज़मीन से 90 डिग्री के ऐंगल पर होता है.
फ़ोन की स्क्रीन की दिशा को इस तरह से दिखाया जाता है कि फ़ोन के कोऑर्डिनेट के साथ ईस्ट-नॉर्थ-अप कोऑर्डिनेट को अलाइन करने के लिए, ज़रूरी घुमाव को दिखाया जा सके. इसका मतलब है कि दुनिया के फ़्रेम (X,Y,Z) पर रोटेशन लागू करने से,वे फ़ोन के कोऑर्डिनेट (x,y,z) के साथ अलाइन हो जाएंगे.
रोटेशन को इस तरह से देखा जा सकता है कि फ़ोन को थीटा कोण से घुमाया जा रहा है. ऐसा ऐक्सिस rot_axis के चारों ओर किया जाता है, ताकि डिवाइस को रेफ़रंस (ईस्ट-नॉर्थ-अप अलाइन किया गया) डिवाइस ओरिएंटेशन से मौजूदा डिवाइस ओरिएंटेशन में बदला जा सके. रोटेशन को यूनिट-लेस x, y, z, w कॉम्पोनेंट के तौर पर कोड किया जाता है. ये कॉम्पोनेंट, यूनिट क्वाटर्नियन के होते हैं:
sensors_event_t.data[0] = rot_axis.x*sin(theta/2)sensors_event_t.data[1] = rot_axis.y*sin(theta/2)sensors_event_t.data[2] = rot_axis.z*sin(theta/2)sensors_event_t.data[3] = cos(theta/2)
जगह:
rot_axisके x, y, और z फ़ील्ड, रोटेशन ऐक्सिस को दिखाने वाले यूनिट लेंथ वेक्टर के ईस्ट-नॉर्थ-अप कोऑर्डिनेट होते हैंthetaरोटेशन ऐंगल है
क्वाटरनियन एक यूनिट क्वाटरनियन है: इसका नॉर्म 1 होना चाहिए.
ऐसा न करने पर, क्लाइंट का व्यवहार अनियमित हो जाएगा.
इसके अलावा, यह सेंसर हेडिंग की अनुमानित सटीक जानकारी देता है:
sensors_event_t.data[4] = estimated_accuracy (रेडियन में)
हेडिंग में गड़बड़ी होने की दर estimated_accuracy 95% से कम होनी चाहिए. इस सेंसर को, ओरिएंटेशन में बदलाव के मुख्य इनपुट के तौर पर जायरोस्कोप का इस्तेमाल करना चाहिए.
यह सेंसर, जाइरोस्कोप के ड्रिफ़्ट को ठीक करने के लिए एक्सलरोमीटर और मैग्नेटोमीटर के इनपुट का भी इस्तेमाल करता है. इसे सिर्फ़ एक्सलरोमीटर और मैग्नेटोमीटर का इस्तेमाल करके लागू नहीं किया जा सकता.
गेम रोटेशन वेक्टर
फ़िज़िकल सेंसर: एक्सलरोमीटर और जाइरोस्कोप (मैग्नेटोमीटर नहीं)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)
returns a non-wake-up sensor
गेम रोटेशन वेक्टर सेंसर, रोटेशन वेक्टर सेंसर की तरह ही होता है. हालांकि, यह जियोमैग्नेटिक फ़ील्ड का इस्तेमाल नहीं करता. इसलिए, Y ऐक्सिस उत्तर की ओर नहीं, बल्कि किसी और दिशा में है. इस रेफ़रंस को, Z ऐक्सिस के आस-पास जायरोस्कोप के घूमने की वजह से होने वाले बदलाव के बराबर ही बदलने की अनुमति है.
sensors_event_t.data[0-3] को सेट करने के तरीके के बारे में जानने के लिए, रोटेशन वेक्टर सेंसर देखें. यह सेंसर, अनुमानित हेडिंग की सटीक जानकारी नहीं देता:
sensors_event_t.data[4] रिज़र्व है और इसे 0 पर सेट किया जाना चाहिए.
अगर किसी फ़ोन को घुमाकर वापस उसी दिशा में लाया जाता है, तो गेम रोटेशन वेक्टर की वैल्यू में कोई बदलाव नहीं होना चाहिए.
यह सेंसर, जाइरोस्कोप और एक्सलरोमीटर पर आधारित होना चाहिए. यह मैग्नेटोमीटर का इस्तेमाल इनपुट के तौर पर नहीं कर सकता. हालांकि, यह जाइरोस्कोप के बायस का अनुमान लगाकर, परोक्ष रूप से मैग्नेटोमीटर का इस्तेमाल कर सकता है.
गुरुत्व
फ़ोन में मौजूद फ़िज़िकल सेंसर: एक्सलरोमीटर और (अगर मौजूद है, तो) जाइरोस्कोप (या अगर जाइरोस्कोप मौजूद नहीं है, तो मैग्नेटोमीटर)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GRAVITY)
returns a non-wake-up sensor
ग्रेविटी सेंसर, डिवाइस के कोऑर्डिनेट में ग्रेविटी की दिशा और मैग्नीट्यूड की जानकारी देता है.
ग्रैविटी वेक्टर कॉम्पोनेंट को m/s^2 में रिपोर्ट किया जाता है. ये कॉम्पोनेंट, sensors_event_t.acceleration के x, y, और z फ़ील्ड में मौजूद होते हैं.
जब डिवाइस आराम के समय हो, तो ग्रेविटी सेंसर का आउटपुट, एक्सलरोमीटर के आउटपुट के जैसा होना चाहिए. धरती पर, इसकी वैल्यू करीब 9.8 मी॰/से॰^2 होती है.
अगर डिवाइस में जाइरोस्कोप है, तो ग्रेविटी सेंसर को इनपुट के तौर पर जाइरोस्कोप और एक्सलरोमीटर का इस्तेमाल करना होगा.
अगर डिवाइस में जाइरोस्कोप नहीं है, तो ग्रेविटी सेंसर को इनपुट के तौर पर एक्सलरोमीटर और मैग्नेटोमीटर का इस्तेमाल करना होगा.
जियोमैग्नेटिक रोटेशन वेक्टर
फ़िज़िकल सेंसर: एक्सलरोमीटर और मैग्नेटोमीटर (जाइरोस्कोप नहीं)
Reporting-mode: Continuous
कम पावर
getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR)
returns a non-wake-up sensor
जियोमैग्नेटिक रोटेशन वेक्टर, रोटेशन वेक्टर सेंसर की तरह ही होता है. हालांकि, यह मैग्नेटोमीटर का इस्तेमाल करता है और इसमें जाइरोस्कोप नहीं होता.
यह सेंसर, मैग्नेटोमीटर पर आधारित होना चाहिए. इसे जायरोस्कोप का इस्तेमाल करके लागू नहीं किया जा सकता. साथ ही, जायरोस्कोप के इनपुट का इस्तेमाल इस सेंसर के लिए नहीं किया जा सकता.
sensors_event_t.data[0-4] को सेट करने के तरीके के बारे में जानने के लिए, रोटेशन वेक्टर सेंसर देखें.
रोटेशन वेक्टर सेंसर की तरह ही, हेडिंग में गड़बड़ी 95% समय में अनुमानित सटीकता (sensors_event_t.data[4]) से कम होनी चाहिए.
यह सेंसर कम पावर वाला होना चाहिए, इसलिए इसे हार्डवेयर में लागू करना होगा.
ओरिएंटेशन (अब सेवा में नहीं है)
फ़िज़िकल सेंसर: एक्सलरोमीटर, मैग्नेटोमीटर, और (अगर मौजूद है, तो) जाइरोस्कोप
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ORIENTATION)
returns a non-wake-up sensor
ध्यान दें: यह एक पुराना सेंसर टाइप है, जिसे Android SDK में बंद कर दिया गया है. इसे रोटेशन वेक्टर सेंसर से बदल दिया गया है, जिसे ज़्यादा साफ़ तौर पर परिभाषित किया गया है. जब भी हो सके, ओरिएंटेशन सेंसर के बजाय रोटेशन वेक्टर सेंसर का इस्तेमाल करें.
ओरिएंटेशन सेंसर, डिवाइस की दिशा के बारे में जानकारी देता है. मेज़रमेंट को sensors_event_t.orientation के x, y, और z फ़ील्ड में डिग्री में रिपोर्ट किया जाता है:
sensors_event_t.orientation.x: ऐज़िमुथ, यह मैग्नेटिक नॉर्थ की दिशा और Y ऐक्सिस के बीच का कोण होता है. यह Z ऐक्सिस (0<=azimuth<360) के चारों ओर होता है. 0=उत्तर, 90=पूरब, 180=दक्षिण, 270=पश्चिम.sensors_event_t.orientation.y: पिच, X ऐक्सिस के चारों ओर रोटेशन (-180<=pitch<=180). Z ऐक्सिस के Y ऐक्सिस की ओर बढ़ने पर, इसकी वैल्यू पॉज़िटिव होती है.sensors_event_t.orientation.z: रोल, Y ऐक्सिस के चारों ओर रोटेशन (-90<=roll<=90), जब X ऐक्सिस, Z ऐक्सिस की ओर बढ़ता है, तब पॉज़िटिव वैल्यू के साथ.
कृपया ध्यान दें कि पहले से तय किए गए नियमों के मुताबिक, रोल ऐंगल क्लॉकवाइज़ दिशा में पॉज़िटिव होता है. (गणित के हिसाब से, यह घड़ी की सुई की उलटी दिशा में पॉज़िटिव होना चाहिए):
तीसरी इमेज. डिवाइस के हिसाब से ओरिएंटेशन
यह परिभाषा, विमानन में इस्तेमाल किए जाने वाले यॉ, पिच, और रोल से अलग है. विमानन में, X ऐक्सिस विमान की लंबी साइड (पूंछ से लेकर नाक तक) के साथ होता है.
ओरिएंटेशन सेंसर, sensors_event_t.orientation.status के ज़रिए यह भी बताता है कि उसे अपनी रीडिंग कितनी सटीक होने की उम्मीद है. इस फ़ील्ड के लिए संभावित वैल्यू के बारे में ज़्यादा जानने के लिए,
SensorManager के
SENSOR_STATUS_* कॉन्स्टेंट देखें.
कैलिब्रेट नहीं किए गए सेंसर
कैलिब्रेट न किए गए सेंसर से, ज़्यादा रॉ डेटा मिलता है. इसमें कुछ पूर्वाग्रह शामिल हो सकते हैं. हालांकि, इसमें कैलिब्रेशन के ज़रिए किए गए सुधारों की वजह से "जंप" भी कम होते हैं. कुछ ऐप्लिकेशन, बिना कैलिब्रेट किए गए इन नतीजों को ज़्यादा सटीक और भरोसेमंद मान सकते हैं. उदाहरण के लिए, अगर कोई ऐप्लिकेशन खुद सेंसर फ़्यूज़न करने की कोशिश कर रहा है, तो कैलिब्रेशन करने से नतीजे खराब हो सकते हैं.
एक्सलरोमीटर कैलिब्रेट नहीं किया गया है
फ़िजिकल सेंसर: ऐक्सिलरोमीटर
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
returns a non-wake-up sensor
कैलिब्रेट न किए गए एक्सलरोमीटर सेंसर से, डिवाइस के तीनों सेंसर ऐक्सिस के हिसाब से ऐक्सलरेशन की जानकारी मिलती है. इसमें किसी तरह का बायस करेक्शन नहीं होता है. हालांकि, कैलिब्रेट न किए गए मेज़रमेंट पर फ़ैक्ट्री बायस और तापमान के असर को कम करने की सुविधा लागू होती है. साथ ही, इसमें बायस का अनुमान भी शामिल होता है.
सभी वैल्यू, एसआई यूनिट (m/s^2) में होती हैं. इन्हें sensors_event_t.uncalibrated_accelerometer के फ़ील्ड में रिपोर्ट किया जाता है:
x_uncalib: X-ऐक्सिस के साथ-साथ ऐक्सलरेशन (बिना बायस कॉम्पेंसेशन के)y_uncalib: Y ऐक्सिस के हिसाब से ऐक्सलरेशन (बिना बायस कॉम्पन्सेशन के)z_uncalib: ऐक्सलरेशन (बायस कंपनसेशन के बिना) Z ऐक्सिस के साथx_bias: X ऐक्सिस के हिसाब से अनुमानित पूर्वाग्रहy_bias: Y ऐक्सिस के हिसाब से अनुमानित बायसz_bias: Z ऐक्सिस के हिसाब से अनुमानित बायस
जाइरोस्कोप को कैलिब्रेट नहीं किया गया है
फ़िज़िकल सेंसर: जाइरोस्कोप
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)
returns a non-wake-up sensor
एक अनकैलिब्रेटेड जाइरोस्कोप, बायस क्षतिपूर्ति लागू किए बिना, सेंसर अक्षों के चारों ओर घूर्णन की दर और साथ ही बायस अनुमान की रिपोर्ट करता है. सभी वैल्यू, रेडियन/सेकंड में होती हैं और इन्हें sensors_event_t.uncalibrated_gyro के फ़ील्ड में रिपोर्ट किया जाता है:
x_uncalib: X ऐक्सिस के चारों ओर ऐंगुलर स्पीड (ड्रिफ़्ट कॉम्पन्सेशन के बिना)y_uncalib: Y ऐक्सिस के आस-पास ऐंगुलर स्पीड (ड्रिफ़्ट के असर को कम किए बिना)z_uncalib: Z ऐक्सिस के चारों ओर ऐंगुलर स्पीड (ड्रिफ़्ट कंपनसेशन के बिना)x_bias: X ऐक्सिस के आस-पास अनुमानित ड्रिफ़्टy_bias: Y ऐक्सिस के आस-पास अनुमानित ड्रिफ़्टz_bias: Z ऐक्सिस के आस-पास अनुमानित ड्रिफ़्ट
सैद्धांतिक तौर पर, बिना कैलिब्रेट किए गए मेज़रमेंट का मतलब, कैलिब्रेट किए गए मेज़रमेंट और अनुमानित पूर्वाग्रह का योग होता है: _uncalibrated = _calibrated + _bias.
पूर्वाग्रह के अनुमान में बदलाव होने पर, x_bias, y_bias, और z_bias की वैल्यू में तुरंत बदलाव होना चाहिए. साथ ही, बाकी समय में ये वैल्यू स्थिर रहनी चाहिए.
इस्तेमाल किए गए कोऑर्डिनेट सिस्टम के बारे में ज़्यादा जानने के लिए, जायरोस्कोप सेंसर की परिभाषा देखें.
मेज़रमेंट पर फ़ैक्ट्री कैलिब्रेशन और तापमान के असर को कम करने की सुविधा लागू होनी चाहिए. साथ ही, जायरोस्कोप के ड्रिफ़्ट का अनुमान लगाने की सुविधा लागू की जानी चाहिए, ताकि x_bias, y_bias, और z_bias में सही अनुमान रिपोर्ट किए जा सकें. अगर लागू करने की प्रोसेस में, ड्रिफ़्ट का अनुमान नहीं लगाया जा सकता, तो इस सेंसर को लागू नहीं किया जाना चाहिए.
अगर यह सेंसर मौजूद है, तो इससे जुड़ा जायरोस्कोप सेंसर भी मौजूद होना चाहिए. साथ ही, दोनों सेंसर के लिए sensor_t.name और sensor_t.vendor की वैल्यू एक जैसी होनी चाहिए.
मैग्नेटिक फ़ील्ड को कैलिब्रेट नहीं किया गया
फ़िज़िकल सेंसर: मैग्नेटोमीटर
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)
returns a non-wake-up sensor
कैलिब्रेट नहीं किया गया मैग्नेटिक फ़ील्ड सेंसर, आस-पास के मैग्नेटिक फ़ील्ड की जानकारी देता है. साथ ही, हार्ड आयरन कैलिब्रेशन का अनुमान भी देता है. सभी वैल्यू माइक्रो-टेस्ला (uT) में होती हैं और इन्हें sensors_event_t.uncalibrated_magnetic फ़ील्ड में रिपोर्ट किया जाता है:
x_uncalib: X ऐक्सिस के साथ मैग्नेटिक फ़ील्ड (हार्ड-आयरन कॉम्पन्सेशन के बिना)y_uncalib: Y ऐक्सिस के साथ मैग्नेटिक फ़ील्ड (हार्ड-आयरन कॉम्पेंसेशन के बिना)z_uncalib: मैग्नेटिक फ़ील्ड (हार्ड-आयरन कंपनसेशन के बिना) Z ऐक्सिस के साथx_bias: X ऐक्सिस के साथ हार्ड-आयरन बायस का अनुमानy_bias: Y ऐक्सिस के साथ हार्ड-आयरन बायस का अनुमानz_bias: Z ऐक्सिस के हिसाब से अनुमानित हार्ड-आयरन बायस
सैद्धांतिक तौर पर, बिना कैलिब्रेट किए गए मेज़रमेंट का मतलब, कैलिब्रेट किए गए मेज़रमेंट और अनुमानित पूर्वाग्रह का योग होता है: _uncalibrated = _calibrated + _bias.
अनकैलिब्रेटेड मैग्नेटोमीटर, ज़्यादा लेवल के एल्गोरिदम को हार्ड आयरन के खराब अनुमान को मैनेज करने की अनुमति देता है. हार्ड-आयरन के अनुमान में बदलाव होने पर, x_bias, y_bias, और z_bias की वैल्यू में तुरंत बदलाव होना चाहिए. इसके बाद, ये वैल्यू स्थिर रहनी चाहिए.
मेज़रमेंट पर, सॉफ़्ट-आयरन कैलिब्रेशन और तापमान के असर को कम करने की सुविधा लागू होनी चाहिए. साथ ही, हार्ड-आयरन का अनुमान लगाने की सुविधा लागू की जानी चाहिए, ताकि x_bias, y_bias, और z_bias में सही अनुमान रिपोर्ट किए जा सकें. अगर लागू करने के दौरान, पूर्वाग्रह का अनुमान नहीं लगाया जा सकता, तो इस सेंसर को लागू नहीं किया जाना चाहिए.
अगर यह सेंसर मौजूद है, तो इससे जुड़ा मैग्नेटिक फ़ील्ड सेंसर भी मौजूद होना चाहिए. साथ ही, दोनों सेंसर के लिए sensor_t.name और sensor_t.vendor की वैल्यू एक ही होनी चाहिए.
हिंज का ऐंगल
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)
returns a wake-up sensor
हिंज एंगल सेंसर, डिवाइस के दो इंटिग्रल पार्ट के बीच के कोण को डिग्री में मापता है. इस तरह के सेंसर से, हिंज के मूवमेंट को मेज़र किया जाता है. इससे डिवाइस के साथ उपयोगकर्ता के इंटरैक्ट करने के तरीके में बदलाव होने की उम्मीद है. उदाहरण के लिए, डिसप्ले को खोलकर या दिखाकर.
इंटरैक्शन कंपोज़िट सेंसर
कुछ सेंसर का इस्तेमाल, मुख्य रूप से उपयोगकर्ता के साथ इंटरैक्शन का पता लगाने के लिए किया जाता है. हम यह तय नहीं करते कि उन सेंसर को कैसे लागू किया जाना चाहिए. हालांकि, वे कम पावर वाले होने चाहिए. साथ ही, डिवाइस बनाने वाली कंपनी की यह ज़िम्मेदारी है कि वह उपयोगकर्ता अनुभव के हिसाब से उनकी क्वालिटी की पुष्टि करे.
डिवाइस को चालू करने के लिए हाथ का जेस्चर
फ़िजिकल सेंसर: तय नहीं किया गया (कम पावर वाला कोई भी सेंसर)
Reporting-mode: One-shot
कम पावर
इस सेंसर का सिर्फ़ वेक-अप वर्शन लागू करें.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
यह वेक-अप सेंसर दिखाता है
डिवाइस को चालू करने के लिए जेस्चर सेंसर, डिवाइस की खास गतिविधि के आधार पर डिवाइस को चालू करता है. जब यह सेंसर ट्रिगर होता है, तो डिवाइस इस तरह काम करता है जैसे पावर बटन दबाया गया हो. इससे स्क्रीन चालू हो जाती है. इस सेंसर के ट्रिगर होने पर स्क्रीन चालू होने की सुविधा को उपयोगकर्ता, डिवाइस की सेटिंग में जाकर बंद कर सकता है. सेटिंग में बदलाव करने से, सेंसर के काम करने के तरीके पर कोई असर नहीं पड़ता. इससे सिर्फ़ यह तय होता है कि सेंसर के ट्रिगर होने पर, फ़्रेमवर्क स्क्रीन को चालू करेगा या नहीं. इसमें यह नहीं बताया गया है कि किस जेस्चर का पता लगाना है. इसे डिवाइस बनाने वाली कंपनी चुन सकती है.
यह सेंसर कम पावर वाला होना चाहिए, क्योंकि इसे 24 घंटे चालू रखा जा सकता है.
हर सेंसर इवेंट, 1 में sensors_event_t.data[0] की रिपोर्ट करता है.
'लेने का स्थान' जेस्चर
फ़िजिकल सेंसर: तय नहीं किया गया (कम पावर वाला कोई भी सेंसर)
Reporting-mode: One-shot
कम पावर
इस सेंसर का सिर्फ़ वेक-अप वर्शन लागू करें.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
यह वेक-अप सेंसर दिखाता है
डिवाइस को उठाते ही पिक-अप जेस्चर सेंसर चालू हो जाता है. इससे कोई फ़र्क़ नहीं पड़ता कि डिवाइस को कहां से उठाया गया है (डेस्क, जेब, बैग).
हर सेंसर इवेंट, 1 में sensors_event_t.data[0] की रिपोर्ट करता है.
एक नज़र में किए जाने वाले जेस्चर
फ़िजिकल सेंसर: तय नहीं किया गया (कम पावर वाला कोई भी सेंसर)
Reporting-mode: One-shot
कम पावर
इस सेंसर का सिर्फ़ वेक-अप वर्शन लागू करें.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
यह वेक-अप सेंसर दिखाता है
'स्क्रीन पर एक नज़र' सुविधा के लिए इस्तेमाल होने वाला सेंसर, स्क्रीन को कुछ समय के लिए चालू करता है. इससे उपयोगकर्ता, किसी खास गतिविधि के आधार पर स्क्रीन पर मौजूद कॉन्टेंट को देख पाता है. इस सेंसर के चालू होने पर, डिवाइस कुछ समय के लिए स्क्रीन चालू कर देगा. इससे उपयोगकर्ता, डिवाइस के लॉक रहने पर भी सूचनाएं या अन्य कॉन्टेंट देख पाएंगे. इस दौरान, डिवाइस का इस्तेमाल नहीं किया जा सकेगा. इसके बाद, स्क्रीन फिर से बंद हो जाएगी. इस सुविधा के तहत, सेंसर के ट्रिगर होने पर स्क्रीन कुछ समय के लिए चालू हो जाती है. हालांकि, उपयोगकर्ता डिवाइस की सेटिंग में जाकर, इस सुविधा को बंद कर सकता है. सेटिंग में किए गए बदलावों से सेंसर के काम करने के तरीके पर कोई असर नहीं पड़ता. इससे सिर्फ़ यह तय होता है कि सेंसर के ट्रिगर होने पर, फ़्रेमवर्क कुछ समय के लिए स्क्रीन चालू करेगा या नहीं. इसमें, पता लगाए जाने वाले जेस्चर के बारे में नहीं बताया गया है. इसे डिवाइस बनाने वाली कंपनी चुन सकती है.
यह सेंसर कम पावर वाला होना चाहिए, क्योंकि इसे 24 घंटे चालू रखा जा सकता है.
हर सेंसर इवेंट, 1 में sensors_event_t.data[0] की रिपोर्ट करता है.
आईएमयू सेंसर के सीमित ऐक्सिस
Android 13 से उपलब्ध, सीमित ऐक्सिस वाले आईएमयू सेंसर ऐसे सेंसर होते हैं जो उन स्थितियों में काम करते हैं जहां तीनों ऐक्सिस (x, y, z) उपलब्ध नहीं होते हैं. Android में स्टैंडर्ड आईएमयू टाइप (जैसे कि
SENSOR_TYPE_ACCELEROMETER
और
SENSOR_TYPE_GYROSCOPE)
यह मानते हैं कि तीनों ऐक्सिस काम करते हैं. हालांकि, सभी डिवाइसों और फ़ॉर्म फ़ैक्टर में 3-ऐक्सिस एक्सलरोमीटर और 3-ऐक्सिस जाइरोस्कोप सेंसर की सुविधा उपलब्ध नहीं होती.
एक्सलरोमीटर के सीमित ऐक्सिस
फ़िज़िकल सेंसर: एक्सलरोमीटर
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
returns a non-wake-up sensor
एक्सलरोमीटर के सीमित ऐक्सिस वाला सेंसर, TYPE_ACCELEROMETER के बराबर होता है. हालांकि, यह उन मामलों में काम करता है जहां एक या दो ऐक्सिस काम नहीं करते.
सेंसर से रिपोर्ट की गई, सेंसर इवेंट की आखिरी तीन वैल्यू से पता चलता है कि x, y, और z ऐक्सिस के लिए ऐक्सलरेशन वैल्यू काम करती है या नहीं. 1.0 वैल्यू से पता चलता है कि ऐक्सिस काम करता है. वहीं, 0 वैल्यू से पता चलता है कि ऐक्सिस काम नहीं करता. डिवाइस बनाने वाली कंपनियां, बिल्ड टाइम पर उन ऐक्सिस की पहचान करती हैं जिन पर यह सुविधा काम करती है. साथ ही, रनटाइम के दौरान वैल्यू नहीं बदलती हैं.
डिवाइस बनाने वाली कंपनियों को, इस्तेमाल न किए गए ऐक्सिस के लिए ऐक्सलरेशन की वैल्यू को 0 पर सेट करना होगा. ऐसा इसलिए, ताकि वैल्यू को 'तय नहीं है' के तौर पर सेट न किया जाए.
जाइरोस्कोप की सीमित ऐक्सिस
फ़िज़िकल सेंसर: जाइरोस्कोप
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
returns a non-wake-up sensor
जायरोस्कोप के सीमित ऐक्सिस वाला सेंसर, TYPE_GYROSCOPE के बराबर होता है. हालांकि, यह उन मामलों में काम करता है जहां एक या दो ऐक्सिस काम नहीं करते.
सेंसर से रिपोर्ट की गई, सेंसर इवेंट की पिछली तीन वैल्यू से पता चलता है कि x, y, और z ऐक्सिस के लिए कोणीय गति की वैल्यू काम करती है या नहीं. 1.0 वैल्यू से पता चलता है कि ऐक्सिस काम करता है. वहीं, 0 वैल्यू से पता चलता है कि ऐक्सिस काम नहीं करता. डिवाइस बनाने वाली कंपनियां, बिल्ड टाइम पर उन ऐक्सिस की पहचान करती हैं जिन पर यह सुविधा काम करती है. साथ ही, रनटाइम के दौरान वैल्यू नहीं बदलती हैं.
डिवाइस बनाने वाली कंपनियों को, इस्तेमाल न किए गए ऐक्सिस के लिए कोणीय गति की वैल्यू को 0 पर सेट करना होगा.
एक्सलरोमीटर के कुछ ऐक्सिस कैलिब्रेट नहीं किए गए हैं
फ़िज़िकल सेंसर: एक्सलरोमीटर
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
returns a non-wake-up sensor
एक्सलरोमीटर के सीमित ऐक्सिस वाले अनकैलिब्रेटेड सेंसर का मतलब TYPE_ACCELEROMETER_UNCALIBRATED है. हालांकि, यह उन मामलों में काम करता है जहां एक या दो ऐक्सिस काम नहीं करते.
सेंसर से रिपोर्ट की गई, सेंसर इवेंट की आखिरी तीन वैल्यू से पता चलता है कि x, y, और z ऐक्सिस के लिए, ऐक्सलरेशन और बायस वैल्यू काम करती हैं या नहीं. 1.0 वैल्यू से पता चलता है कि ऐक्सिस काम करता है. वहीं, 0 वैल्यू से पता चलता है कि ऐक्सिस काम नहीं करता. डिवाइस बनाने वाली कंपनियां, बिल्ड टाइम पर उन ऐक्सिस की पहचान करती हैं जिन पर यह सुविधा काम करती है. साथ ही, रनटाइम के दौरान वैल्यू नहीं बदलती हैं.
डिवाइस बनाने वाली कंपनियों को, इस्तेमाल न किए गए ऐक्सिस के लिए ऐक्सलरेशन और बायस वैल्यू को 0 पर सेट करना होगा.
जाइरोस्कोप के कुछ ऐक्सिस कैलिब्रेट नहीं किए गए हैं
फ़िज़िकल सेंसर: जाइरोस्कोप
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
returns a non-wake-up sensor
जायरोस्कोप के सीमित ऐक्सिस वाला अनकैलिब्रेटेड सेंसर, TYPE_GYROSCOPE_UNCALIBRATED के बराबर होता है. हालांकि, यह उन मामलों में काम करता है जहां एक या दो ऐक्सिस काम नहीं करते.
सेंसर से रिपोर्ट की गई सेंसर इवेंट की आखिरी तीन वैल्यू से पता चलता है कि x, y, और z ऐक्सिस के लिए, कोणीय गति और ड्रिफ़्ट वैल्यू काम करती हैं या नहीं. 1.0 वैल्यू से पता चलता है कि ऐक्सिस काम करता है. वहीं, 0 वैल्यू से पता चलता है कि ऐक्सिस काम नहीं करता. डिवाइस बनाने वाली कंपनियां, बिल्ड टाइम पर उन ऐक्सिस की पहचान करती हैं जिन पर यह सुविधा काम करती है. साथ ही, रनटाइम के दौरान वैल्यू नहीं बदलती हैं.
डिवाइस बनाने वाली कंपनियों को, इस्तेमाल न किए गए ऐक्सिस के लिए कोणीय गति और ड्रिफ़्ट की वैल्यू को 0 पर सेट करना होगा.
कंपोज़िट लिमिटेड ऐक्सिस आईएमयू
फ़िजिकल सेंसर: 3-ऐक्सिस एक्सलरोमीटर, 3-ऐक्सिस जाइरोस्कोप, 3-ऐक्सिस एक्सलरोमीटर अनकैलिब्रेटेड, और 3-ऐक्सिस जाइरोस्कोप अनकैलिब्रेटेड सेंसर का कोई भी कॉम्बिनेशन.
Reporting-mode: Continuous
कंपोज़िट लिमिटेड ऐक्सिस आईएमयू सेंसर, लिमिटेड ऐक्सिस आईएमयू सेंसर के बराबर होता है. हालांकि, इसे HAL पर सपोर्ट करने के बजाय, यह 3-ऐक्सिस सेंसर डेटा को लिमिटेड ऐक्सिस के बराबर के वैरिएंट में बदलता है. ये कंपोज़िट सेंसर, सिर्फ़ वाहन में लगे डिवाइसों के लिए चालू किए जाते हैं.
यहां दी गई टेबल में, स्टैंडर्ड 3-ऐक्सिस ऐक्सिलरोमीटर से कंपोज़िट लिमिटेड ऐक्सिस ऐक्सिलरोमीटर में कन्वर्ज़न का उदाहरण दिखाया गया है.
| SENSOR_TYPE_ACCELEROMETER के लिए SensorEvent वैल्यू | SENSOR_TYPE_ACCELEROMETER SensorEvent का उदाहरण | कंपोज़िट SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent |
|---|---|---|
| values[0] | -0.065 |
-0.065 |
| values[1] | 0.078 |
0.078 |
| values[2] | 9.808 |
9.808 |
| values[3] | लागू नहीं |
1.0 |
| values[4] | लागू नहीं |
1.0 |
| values[5] | लागू नहीं |
1.0 |
वाहन के सेंसर
ऑटोमोटिव से जुड़े इस्तेमाल के उदाहरणों के लिए सेंसर.
शीर्षक
फ़िजिकल सेंसर: जीपीएस, मैग्नेटोमीटर, एक्सलरोमीटर, और जाइरोस्कोप का कोई भी कॉम्बिनेशन.
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_HEADING)
returns a non-wake-up sensor
हेडिंग सेंसर, Android 13 से उपलब्ध है. यह डिग्री में, डिवाइस की दिशा को ट्रू नॉर्थ के हिसाब से मापता है. हेडिंग सेंसर में दो SensorEvent वैल्यू शामिल होती हैं.
एक मेज़र किए गए डिवाइस के हेडिंग के लिए और दूसरा दी गई हेडिंग की वैल्यू की सटीकता के लिए.
इस सेंसर से रिपोर्ट की गई हेडिंग की वैल्यू, 0.0 (को मिलाकर) और 360.0 (को छोड़कर) के बीच होनी चाहिए. साथ ही, 0 का मतलब उत्तर, 90 का मतलब पूरब, 180 का मतलब दक्षिण, और 270 का मतलब पश्चिम होना चाहिए.
इस सेंसर की सटीकता को 68 प्रतिशत कॉन्फ़िडेंस लेवल पर तय किया जाता है. अगर डिस्ट्रिब्यूशन, गॉसियन नॉर्मल है, तो सटीकता एक स्टैंडर्ड डेविएशन होती है. उदाहरण के लिए, अगर हेडिंग सेंसर, हेडिंग की वैल्यू 60 डिग्री और सटीक वैल्यू 10 डिग्री दिखाता है, तो इस बात की 68% संभावना है कि सही हेडिंग 50 डिग्री और 70 डिग्री के बीच है.