انواع سنسور

این بخش محورهای حسگر، حسگرهای پایه و حسگرهای ترکیبی (فعالیت، نگرش، کالیبره نشده و تعامل) را توضیح می‌دهد.

محورهای حسگر

مقادیر رویداد سنسور از بسیاری از سنسورها در یک قاب خاص که نسبت به دستگاه ثابت است بیان می شود.

محورهای دستگاه سیار

سنسور API فقط نسبت به جهت طبیعی صفحه نمایش است (هنگامی که جهت صفحه دستگاه تغییر می کند محورها عوض نمی شوند.

سیستم مختصات API حسگر برای دستگاه های تلفن همراه

شکل 1. سیستم مختصات (نسبت به یک دستگاه تلفن همراه) مورد استفاده توسط Sensor API

محورهای خودرویی

در پیاده‌سازی‌های Android Automotive، محورها با توجه به قاب بدنه خودرو تعریف می‌شوند. مبدا قاب مرجع خودرو مرکز محور عقب است. چارچوب مرجع خودرو به گونه ای است که:

  • محور X به سمت راست و در یک صفحه افقی، عمود بر صفحه متقارن وسیله نقلیه قرار دارد.
  • محور Y به سمت جلو و در یک صفحه افقی است.
سیستم مختصات سنسور API برای دستگاه های خودرو

شکل 2. سیستم مختصات (نسبت به یک دستگاه خودرو) مورد استفاده توسط Sensor API

چارچوب مرجع خودرو یک سیستم مختصات راست دست است. بنابراین، محور Z به سمت بالا اشاره می کند.

محور Z قاب مرجع با گرانش تراز است، به این معنی که محور X و محور Y هر دو افقی هستند. در نتیجه، محور Y ممکن است همیشه از محور جلو عبور نکند.

سنسورهای پایه

انواع حسگرهای پایه بر اساس حسگرهای فیزیکی که نشان می دهند نامگذاری می شوند. این حسگرها داده‌ها را از یک حسگر فیزیکی منفرد (در مقابل سنسورهای ترکیبی که داده‌ها را از سنسورهای دیگر تولید می‌کنند) رله می‌کنند. نمونه هایی از انواع سنسور پایه عبارتند از:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

با این حال، سنسورهای پایه برابر نیستند و نباید با حسگر فیزیکی زیرین خود اشتباه گرفته شوند. داده های یک حسگر پایه خروجی خام حسگر فیزیکی نیستند زیرا اصلاحاتی (مانند جبران بایاس و جبران دما) اعمال می شود.

برای مثال، ویژگی‌های یک حسگر پایه ممکن است با ویژگی‌های حسگر فیزیکی زیرین آن در موارد استفاده زیر متفاوت باشد:

  • یک تراشه ژیروسکوپ دارای محدوده بایاس 1 درجه در ثانیه است.
    • پس از کالیبراسیون کارخانه، جبران دما و جبران بایاس اعمال می شود، بایاس واقعی سنسور اندروید کاهش می یابد، ممکن است به نقطه ای برسد که تضمین شود که بایاس زیر 0.01 درجه در ثانیه باشد.
    • در این شرایط، ما می گوییم که سنسور اندروید دارای بایاس زیر 0.01 درجه در ثانیه است، حتی اگر برگه داده سنسور زیرین 1 درجه در ثانیه گفته شده باشد.
  • فشارسنج با توان مصرفی 100 uW.
    • از آنجایی که داده های تولید شده باید از تراشه به SoC منتقل شوند، هزینه واقعی انرژی برای جمع آوری داده ها از سنسور فشارسنج اندروید ممکن است بسیار بیشتر باشد، برای مثال 1000 uW.
    • در این شرایط، می گوییم که سنسور اندروید دارای مصرف برق 1000 uW است، حتی اگر مصرف انرژی اندازه گیری شده در لیدهای تراشه فشارسنج 100uW باشد.
  • یک مغناطیس سنج که هنگام کالیبره شدن 100uW مصرف می کند، اما هنگام کالیبره کردن مصرف آن بیشتر است.
    • روال کالیبراسیون آن ممکن است نیازمند فعال کردن ژیروسکوپ، مصرف 5000 uW و اجرای برخی الگوریتم ها باشد که هزینه آن 900 uW دیگر است.
    • در این شرایط می گوییم حداکثر توان مصرفی سنسور (مغناطیس سنج) اندروید 6000 uW است.
    • در این مورد، میانگین مصرف برق معیار مفیدتری است و این همان چیزی است که در ویژگی های استاتیک سنسور از طریق HAL گزارش می شود.

شتاب سنج

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) یک حسگر بدون بیدار شدن را برمی‌گرداند

یک سنسور شتاب سنج شتاب دستگاه را در امتداد سه محور سنسور گزارش می کند. شتاب اندازه گیری شده هم شامل شتاب فیزیکی (تغییر سرعت) و هم گرانش می شود. اندازه گیری در فیلدهای x، y و z sensors_event_t.acceleration گزارش شده است.

همه مقادیر بر حسب واحد SI (m/s^2) هستند و شتاب دستگاه منهای نیروی گرانش را در امتداد سه محور سنسور اندازه گیری می کنند.

در اینجا نمونه هایی وجود دارد:

  • هنجار (x، y، z) باید نزدیک به 0 در هنگام سقوط آزاد باشد.
  • هنگامی که دستگاه صاف روی میز قرار می گیرد و در سمت چپ آن به سمت راست فشار داده می شود، مقدار شتاب x مثبت است.
  • هنگامی که دستگاه صاف روی میز قرار می گیرد، مقدار شتاب در امتداد z +9.81 alo است که مربوط به شتاب دستگاه (0 m/s^2) منهای نیروی گرانش (-9.81 m/s^2) است.
  • هنگامی که دستگاه صاف روی میز قرار می گیرد و به سمت آسمان هل داده می شود، مقدار شتاب بیشتر از 9.81+ است که مربوط به شتاب دستگاه (+A m/s^2) منهای نیروی گرانش (9.81-m) است. /s^2).

خوانش ها با استفاده از موارد زیر کالیبره می شوند:

  • جبران درجە حرارت
  • کالیبراسیون سوگیری آنلاین
  • کالیبراسیون مقیاس آنلاین

بایاس و کالیبراسیون مقیاس باید فقط در زمانی که حسگر غیرفعال است به روز شود تا از ایجاد جهش در مقادیر در طول پخش جلوگیری شود.

شتاب‌سنج همچنین گزارش می‌دهد که انتظار دارد خوانش‌هایش از طریق sensors_event_t.acceleration.status چقدر دقیق باشد. برای اطلاعات بیشتر در مورد مقادیر احتمالی این فیلد، به ثابت های SENSOR_STATUS_* SensorManager مراجعه کنید.

دمای محیط

حالت گزارش: در حال تغییر

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) حسگر بدون بیدار شدن را برمی‌گرداند

این سنسور دمای محیط (اتاق) را بر حسب درجه سانتیگراد فراهم می کند.

سنسور میدان مغناطیسی

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) یک حسگر بدون بیدار شدن را برمی گرداند

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

یک حسگر میدان مغناطیسی (همچنین به عنوان مغناطیس سنج شناخته می شود) میدان مغناطیسی محیط را گزارش می دهد، همانطور که در امتداد سه محور سنسور اندازه گیری می شود.

اندازه گیری در فیلدهای x، y و z sensors_event_t.magnetic گزارش شده است و همه مقادیر در میکرو تسلا ( sensors_event_t.magnetic ) هستند.

مغناطیس‌سنج همچنین گزارش می‌دهد که انتظار دارد خوانش‌هایش از طریق sensors_event_t.magnetic.status چقدر دقیق باشد. برای اطلاعات بیشتر در مورد مقادیر احتمالی این فیلد، به ثابت های SENSOR_STATUS_* SensorManager مراجعه کنید.

خوانش ها با استفاده از موارد زیر کالیبره می شوند:

  • جبران درجە حرارت
  • کالیبراسیون آهن نرم کارخانه (یا آنلاین).
  • کالیبراسیون آنلاین آهن سخت

ژیروسکوپ

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) یک حسگر بدون بیدار شدن را برمی گرداند

یک سنسور ژیروسکوپ میزان چرخش دستگاه را حول سه محور سنسور گزارش می کند.

چرخش در جهت خلاف جهت عقربه های ساعت مثبت است (قانون سمت راست). یعنی ناظری که از نقطه‌ای مثبت در محور x، y یا z به دستگاهی که در مبدا قرار دارد نگاه می‌کند، اگر به نظر می‌رسید که دستگاه در خلاف جهت عقربه‌های ساعت می‌چرخد، چرخش مثبت را گزارش می‌کند. توجه داشته باشید که این تعریف ریاضی استاندارد چرخش مثبت است و با تعریف هوافضا از رول موافق نیست.

اندازه گیری در فیلدهای x، y و z sensors_event_t.gyro شده است و همه مقادیر بر حسب رادیان در ثانیه (rad/s) هستند.

خوانش ها با استفاده از موارد زیر کالیبره می شوند:

  • جبران درجە حرارت
  • غرامت مقیاس کارخانه (یا آنلاین).
  • کالیبراسیون بایاس آنلاین (برای حذف دریفت)

ژیروسکوپ همچنین گزارش می‌دهد که انتظار دارد خوانش‌هایش از طریق sensors_event_t.gyro.status چقدر دقیق باشد. برای اطلاعات بیشتر در مورد مقادیر احتمالی این فیلد، به ثابت های SENSOR_STATUS_* SensorManager مراجعه کنید.

ژیروسکوپ را نمی‌توان بر اساس مغناطیس‌سنج‌ها و شتاب‌سنج‌ها شبیه‌سازی کرد، زیرا این امر باعث کاهش قوام محلی و پاسخگویی آن می‌شود. باید بر اساس یک تراشه ژیروسکوپ معمولی باشد.

ضربان قلب

حالت گزارش: در حال تغییر

getDefaultSensor(SENSOR_TYPE_HEART_RATE) یک حسگر بدون بیدار شدن را برمی‌گرداند

یک سنسور ضربان قلب، ضربان قلب فعلی شخصی را که دستگاه را لمس می کند، گزارش می دهد.

ضربان قلب فعلی بر حسب ضربان در دقیقه (BPM) در sensors_event_t.heart_rate.bpm و وضعیت سنسور در sensors_event_t.heart_rate.status گزارش شده است. برای اطلاعات بیشتر در مورد مقادیر احتمالی این فیلد، به ثابت های SENSOR_STATUS_* SensorManager مراجعه کنید. به ویژه، در اولین فعال‌سازی، مگر اینکه مشخص شود دستگاه روی بدنه نیست، قسمت وضعیت رویداد اول باید روی SENSOR_STATUS_UNRELIABLE تنظیم شود. از آنجایی که این حسگر در حال تغییر است، رویدادها زمانی و تنها زمانی ایجاد می‌شوند که heart_rate.bpm یا heart_rate.status از آخرین رویداد تغییر کرده باشد. رویدادها سریعتر از هر sampling_period ایجاد نمی شوند.

sensor_t.requiredPermission همیشه SENSOR_PERMISSION_BODY_SENSORS است.

سبک

حالت گزارش: در حال تغییر

getDefaultSensor(SENSOR_TYPE_LIGHT) یک حسگر بدون بیدار شدن را برمی‌گرداند

یک سنسور نور، روشنایی فعلی را در واحدهای SI lux گزارش می‌کند.

اندازه گیری در sensors_event_t.light گزارش شده است.

نزدیکی

حالت گزارش: در حال تغییر

معمولاً به عنوان یک سنسور بیداری تعریف می شود

getDefaultSensor(SENSOR_TYPE_PROXIMITY) حسگر بیدار شدن را برمی گرداند

یک سنسور مجاورت فاصله سنسور تا نزدیکترین سطح قابل مشاهده را گزارش می کند.

تا آندروید 4.4، سنسورهای مجاورت همیشه حسگرهای بیدارکننده بودند و SoC را با تشخیص تغییر نزدیکی بیدار می کردند. پس از اندروید 4.4، توصیه می کنیم ابتدا نسخه بیدار کننده این سنسور را اجرا کنید، زیرا این حسگر است که برای روشن و خاموش کردن صفحه هنگام برقراری تماس تلفنی استفاده می شود.

اندازه گیری بر حسب سانتی متر در sensors_event_t.distance می شود. توجه داشته باشید که برخی از حسگرهای مجاورت فقط از اندازه گیری "نزدیک" یا "دور" باینری پشتیبانی می کنند. در این حالت، سنسور مقدار sensor_t.maxRange خود را در حالت "دور" و مقداری کمتر از sensor_t.maxRange در حالت "نزدیک" گزارش می دهد.

فشار

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_PRESSURE) یک حسگر بدون بیدار شدن را برمی گرداند

یک سنسور فشار (همچنین به عنوان فشارسنج شناخته می شود) فشار اتمسفر را بر حسب هکتوپاسکال (hPa) گزارش می کند.

قرائت ها با استفاده از کالیبره می شوند

  • جبران درجە حرارت
  • کالیبراسیون بایاس کارخانه
  • کالیبراسیون مقیاس کارخانه

فشارسنج اغلب برای تخمین تغییرات ارتفاع استفاده می شود. برای تخمین ارتفاع مطلق، فشار سطح دریا (تغییر بسته به آب و هوا) باید به عنوان مرجع استفاده شود.

رطوبت نسبی

حالت گزارش: در حال تغییر

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) یک حسگر بدون بیدار شدن را برمی گرداند

یک سنسور رطوبت نسبی رطوبت نسبی هوای محیط را اندازه گیری می کند و مقداری را بر حسب درصد برمی گرداند.

انواع سنسور کامپوزیت

یک حسگر مرکب داده‌ها را با پردازش و/یا ترکیب داده‌های یک یا چند حسگر فیزیکی تولید می‌کند. (هر سنسوری که سنسور پایه نباشد، سنسور ترکیبی نامیده می شود.) نمونه هایی از سنسورهای کامپوزیت عبارتند از:

  • ردیاب استپ و حرکت قابل توجه که معمولاً مبتنی بر شتاب‌سنج است، اما می‌توان بر اساس سنسورهای دیگر نیز در صورت مصرف برق و دقت قابل قبول بود.
  • بردار چرخش بازی ، بر اساس شتاب سنج و ژیروسکوپ.
  • ژیروسکوپ کالیبره نشده، که مشابه سنسور پایه ژیروسکوپ است، اما به جای اصلاح در اندازه گیری، کالیبراسیون بایاس به طور جداگانه گزارش می شود.

همانند سنسورهای پایه، ویژگی‌های سنسورهای مرکب از ویژگی‌های داده‌های نهایی آنها ناشی می‌شود. برای مثال، توان مصرفی یک بردار چرخش بازی احتمالاً برابر است با مجموع توان مصرفی تراشه شتاب‌سنج، تراشه ژیروسکوپ، تراشه پردازش داده‌ها و اتوبوس‌های انتقال داده‌ها. به عنوان مثالی دیگر، رانش یک بردار چرخش بازی به همان اندازه که به ویژگی‌های حسگر فیزیکی بستگی دارد، به کیفیت الگوریتم کالیبراسیون نیز بستگی دارد.

جدول زیر انواع سنسورهای مرکب موجود را فهرست می کند. هر حسگر مرکب به داده های یک یا چند حسگر فیزیکی متکی است. از انتخاب سایر حسگرهای فیزیکی زیربنایی برای تقریبی نتایج خودداری کنید زیرا تجربه کاربری ضعیفی را ارائه می دهند.

نوع سنسور دسته بندی حسگرهای فیزیکی زیرین حالت گزارش

بردار چرخش بازی

نگرش

شتاب سنج، ژیروسکوپ، نباید از مغناطیس سنج استفاده کنید

مداوم

بردار چرخش ژئومغناطیسی سنسور کم مصرف

نگرش

شتاب سنج، مغناطیس سنج، نباید از ژیروسکوپ استفاده کنید

مداوم

ژست نگاه سنسور کم مصرف

اثر متقابل

تعریف نشده

تک شات

جاذبه زمین

نگرش

شتاب سنج، ژیروسکوپ

مداوم

ژیروسکوپ کالیبره نشده

کالیبره نشده

ژیروسکوپ

مداوم

شتاب خطی

فعالیت

شتاب سنج، ژیروسکوپ (در صورت وجود)، یا مغناطیس سنج (در صورت نبود ژیروسکوپ)

مداوم

میدان مغناطیسی کالیبره نشده

کالیبره نشده

مغناطیس سنج

مداوم

جهت گیری (منسوخ شده)

نگرش

شتاب سنج، مغناطیس سنج، ژیروسکوپ (در صورت وجود)

مداوم

ژست بردارید سنسور کم مصرف

اثر متقابل

تعریف نشده

تک شات

بردار چرخش

نگرش

شتاب سنج، مغناطیس سنج، ژیروسکوپ

مداوم

حرکت قابل توجه سنسور کم مصرف

فعالیت

شتاب سنج (یا شتاب سنج دیگر با قدرت بسیار کم)

تک شات

گام شمار سنسور کم مصرف

فعالیت

شتاب سنج

در تغییر

آشکارساز مرحله سنسور کم مصرف

فعالیت

شتاب سنج

ویژه

آشکارساز شیب سنسور کم مصرف

فعالیت

شتاب سنج

ویژه

ژست بیدار شدن سنسور کم مصرف

اثر متقابل

تعریف نشده

تک شات

سنسور کم مصرف = سنسور کم مصرف

فعالیت سنسورهای مرکب

شتاب خطی

حسگرهای فیزیکی زیرین: شتاب سنج و (در صورت وجود) ژیروسکوپ (یا مغناطیس سنج در صورت نبود ژیروسکوپ)

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) یک حسگر بدون بیدار شدن را برمی‌گرداند

یک سنسور شتاب خطی، شتاب خطی دستگاه را در قاب حسگر، بدون احتساب گرانش، گزارش می‌کند.

خروجی به صورت مفهومی است: خروجی شتاب سنج منهای خروجی سنسور گرانش . در m/s^2 در فیلدهای x، y و z sensors_event_t.acceleration شده است.

زمانی که دستگاه بی حرکت است، قرائت در همه محورها باید نزدیک به 0 باشد.

اگر دستگاه دارای ژیروسکوپ باشد، سنسور شتاب خطی باید از ژیروسکوپ و شتاب سنج به عنوان ورودی استفاده کند.

اگر دستگاه فاقد ژیروسکوپ باشد، سنسور شتاب خطی باید از شتاب سنج و مغناطیس سنج به عنوان ورودی استفاده کند.

حرکت قابل توجه

حسگر فیزیکی زیربنایی: شتاب سنج (یا حسگر دیگر تا زمانی که قدرت کم باشد)

حالت گزارش: تک شات

کم قدرت

فقط نسخه بیدار شدن این سنسور را اجرا کنید.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) حسگر بیدار شدن را برمی گرداند

یک آشکارساز حرکت قابل توجه هنگام تشخیص یک حرکت قابل توجه فعال می شود : حرکتی که ممکن است منجر به تغییر در مکان کاربر شود.

نمونه هایی از این حرکات مهم عبارتند از:

  • پیاده روی یا دوچرخه سواری
  • نشستن در ماشین در حال حرکت، مربی یا قطار

نمونه هایی از موقعیت هایی که حرکت قابل توجهی را تحریک نمی کنند:

  • تلفن در جیب است و شخص حرکت نمی کند
  • تلفن روی میز است و به دلیل ترافیک نزدیک یا ماشین لباسشویی میز کمی تکان می خورد

در سطح بالا، آشکارساز حرکت قابل توجه برای کاهش مصرف برق تعیین مکان استفاده می شود. زمانی که الگوریتم‌های محلی‌سازی تشخیص می‌دهند که دستگاه ثابت است، می‌توانند به حالت کم مصرف سوئیچ کنند، جایی که به حرکت قابل توجهی تکیه می‌کنند تا وقتی کاربر در حال تغییر مکان است، دستگاه را بیدار کند.

این سنسور باید کم قدرت باشد. این یک معاوضه برای مصرف برق ایجاد می کند که ممکن است منجر به مقدار کمی منفی کاذب شود. این کار به چند دلیل انجام می شود:

  • هدف این سنسور صرفه جویی در مصرف برق است.
  • راه اندازی یک رویداد زمانی که کاربر در حال حرکت نیست (مثبت کاذب) از نظر قدرت پرهزینه است، بنابراین باید از آن اجتناب شود.
  • راه اندازی نکردن یک رویداد در هنگام حرکت کاربر (منفی کاذب) تا زمانی که به طور مکرر انجام نشود قابل قبول است. اگر کاربر به مدت 10 ثانیه راه رفته باشد، راه اندازی نکردن یک رویداد در این 10 ثانیه قابل قبول نیست.

هر رویداد حسگر 1 را در sensors_event_t.data[0] گزارش می‌کند.

آشکارساز مرحله

حسگر فیزیکی زیربنایی: شتاب سنج (+احتمالاً سایر حسگرها تا زمانی که قدرت کم باشد)

حالت گزارش: ویژه (یک رویداد در هر مرحله برداشته شده)

کم قدرت

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) یک حسگر بدون بیدار شدن را برمی گرداند

یک ردیاب گام هر بار که یک قدم توسط کاربر برداشته می شود یک رویداد ایجاد می کند.

مهر زمانی رویداد sensors_event_t.timestamp مربوط به زمانی است که پا با زمین برخورد می کند و باعث ایجاد تغییرات زیادی در شتاب می شود.

در مقایسه با گام شمار، آشکارساز گام باید تأخیر کمتری (کمتر از دو ثانیه) داشته باشد. هر دو ردیاب گام و شمارنده گام تشخیص می دهند که کاربر در حال راه رفتن، دویدن و بالا رفتن از پله ها است. زمانی که کاربر در حال دوچرخه سواری، رانندگی، یا در وسایل نقلیه دیگر است، آنها نباید فعال شوند.

این سنسور باید کم قدرت باشد. یعنی اگر تشخیص گام در سخت افزار قابل انجام نباشد، این سنسور نباید تعریف شود. به ویژه، زمانی که آشکارساز گام فعال است و شتاب‌سنج فعال نیست، فقط مراحل باید باعث وقفه شوند (نه هر خواندن شتاب‌سنج).

sampling_period_ns هیچ تاثیری بر آشکارسازهای مرحله ندارد.

هر رویداد حسگر 1 را در sensors_event_t.data[0] گزارش می‌کند.

گام شمار

حسگر فیزیکی زیربنایی: شتاب سنج (+احتمالاً سایر حسگرها تا زمانی که قدرت کم باشد)

حالت گزارش: در حال تغییر

کم قدرت

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) یک حسگر بدون بیدار شدن را برمی‌گرداند

یک گام شمار تعداد گام های برداشته شده توسط کاربر از آخرین راه اندازی مجدد در حالی که فعال شده است را گزارش می دهد.

اندازه‌گیری به‌عنوان uint64_t در sensors_event_t.step_counter گزارش می‌شود و تنها با راه‌اندازی مجدد سیستم به صفر بازنشانی می‌شود.

مهر زمانی رویداد به زمانی تنظیم می شود که آخرین گام برای آن رویداد برداشته شده است.

نوع سنسور آشکارساز مرحله را برای نشان دادن زمان یک مرحله ببینید.

در مقایسه با ردیاب استپ، گام شمار می تواند تاخیر بیشتری داشته باشد (تا 10 ثانیه). به لطف این تأخیر، این سنسور از دقت بالایی برخوردار است. تعداد گام‌ها پس از یک روز کامل اقدامات باید در 10% تعداد گام‌های واقعی باشد. هر دو ردیاب گام و شمارنده گام تشخیص می دهند که کاربر در حال راه رفتن، دویدن و بالا رفتن از پله ها است. زمانی که کاربر در حال دوچرخه سواری، رانندگی، یا در وسایل نقلیه دیگر است، آنها نباید فعال شوند.

سخت افزار باید اطمینان حاصل کند که تعداد گام های داخلی هرگز سرریز نمی شود. حداقل اندازه شمارنده داخلی سخت افزار باید 16 بیت باشد. در صورت سرریز قریب الوقوع (حداکثر هر ~2^16 مرحله)، SoC می تواند بیدار شود تا راننده بتواند تعمیر و نگهداری پیشخوان را انجام دهد.

همانطور که در Interaction بیان شد، در حالی که این سنسور کار می کند، نباید هیچ سنسور دیگری، به ویژه شتاب سنج را که ممکن است در حال استفاده باشد، مختل کند.

اگر دستگاه خاصی نمی تواند این حالت های عملکرد را پشتیبانی کند، این نوع سنسور نباید توسط HAL گزارش شود. یعنی "شبیه سازی" این سنسور در HAL قابل قبول نیست.

این سنسور باید کم قدرت باشد. یعنی اگر تشخیص گام در سخت افزار قابل انجام نباشد، این سنسور نباید تعریف شود. به طور خاص، زمانی که شمارنده گام فعال است و شتاب سنج فعال نیست، فقط مراحل باید باعث وقفه شوند (نه داده های شتاب سنج).

آشکارساز شیب

حسگر فیزیکی زیربنایی: شتاب سنج (+احتمالاً سایر حسگرها تا زمانی که قدرت کم باشد)

حالت گزارش: ویژه

کم قدرت

فقط نسخه بیدار شدن این سنسور را اجرا کنید.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) حسگر بیدار شدن را برمی گرداند

یک آشکارساز شیب هر بار که یک رویداد شیب شناسایی می شود یک رویداد ایجاد می کند.

یک رویداد شیب با تغییر جهت میانگین گرانش پنجره 2 ثانیه ای حداقل 35 درجه از زمان فعال سازی یا آخرین رویداد ایجاد شده توسط سنسور تعریف می شود. این الگوریتم است:

  • reference_estimated_gravity = میانگین اندازه‌گیری‌های شتاب‌سنج در اولین ثانیه پس از فعال‌سازی یا گرانش تخمینی زمانی که آخرین رویداد شیب ایجاد شد.
  • current_estimated_gravity = میانگین اندازه گیری های شتاب سنج در 2 ثانیه گذشته.
  • هنگامی که angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

شتاب‌های زیاد بدون تغییر جهت تلفن نباید باعث ایجاد یک رویداد شیب شوند. به عنوان مثال، یک پیچ تند یا شتاب شدید در هنگام رانندگی نباید باعث ایجاد یک رویداد شیب شود، حتی اگر زاویه شتاب متوسط ​​ممکن است بیش از 35 درجه تغییر کند. به طور معمول، این سنسور تنها با کمک یک شتاب سنج اجرا می شود. در صورتی که مصرف برق را به میزان قابل توجهی افزایش ندهند می توان از سنسورهای دیگری نیز استفاده کرد. این یک سنسور کم مصرف است که باید به SoC اجازه دهد تا به حالت تعلیق برود. این سنسور را در HAL تقلید نکنید. هر رویداد حسگر 1 را در sensors_event_t.data[0] گزارش می‌کند.

سنسورهای ترکیبی نگرش

بردار چرخش

حسگرهای فیزیکی زیرین: شتاب سنج، مغناطیس سنج و ژیروسکوپ

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) یک حسگر بدون بیدار شدن را برمی‌گرداند

یک سنسور بردار چرخشی جهت گیری دستگاه را نسبت به قاب مختصات شرق-شمال-بالا گزارش می کند. معمولاً با ادغام خوانش های شتاب سنج، ژیروسکوپ و مغناطیس سنج به دست می آید. سیستم مختصات شرق-شمال-بالا به عنوان یک مبنای متعارف مستقیم تعریف می شود که در آن:

  • X به سمت شرق و مماس با زمین است.
  • Y به سمت شمال و مماس با زمین است.
  • Z به سمت آسمان و عمود بر زمین است.

جهت گیری تلفن با چرخش لازم برای تراز کردن مختصات شرق-شمال-بالا با مختصات تلفن نشان داده می شود. یعنی اعمال چرخش به فریم جهان (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)

جایی که:

  • فیلدهای x، y و z rot_axis شرق-شمال-بالا بردار واحد طول هستند که محور چرخش را نشان می دهند.
  • theta زاویه چرخش است

کواترنیون یک کواترنیون واحد است: باید از هنجار 1 باشد. عدم اطمینان از این امر باعث رفتار نامنظم مشتری می شود.

علاوه بر این، این سنسور یک دقت عنوان تخمینی را گزارش می دهد:

sensors_event_t.data[4] = estimated_accuracy (به رادیان)

خطای عنوان باید کمتر از estimated_accuracy در ۹۵٪ مواقع باشد. این سنسور باید از ژیروسکوپ به عنوان ورودی اصلی تغییر جهت استفاده کند.

این سنسور همچنین از ورودی شتاب‌سنج و مغناطیس‌سنج برای جبران رانش ژیروسکوپ استفاده می‌کند و تنها با استفاده از شتاب‌سنج و مغناطیس‌سنج نمی‌توان آن را پیاده‌سازی کرد.

بردار چرخش بازی

حسگرهای فیزیکی زیرین: شتاب سنج و ژیروسکوپ (بدون مغناطیس سنج)

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) یک حسگر بدون بیدار شدن را برمی‌گرداند

حسگر بردار چرخش بازی شبیه حسگر بردار چرخشی است اما از میدان ژئومغناطیسی استفاده نمی کند. بنابراین محور Y به شمال اشاره نمی کند بلکه به مرجع دیگری اشاره می کند. آن مرجع مجاز است به همان ترتیبی از بزرگی حرکت کند که ژیروسکوپ حول محور Z حرکت می کند.

برای جزئیات در مورد نحوه تنظیم sensors_event_t.data[0-3] به حسگر برداری چرخش مراجعه کنید. این حسگر دقت عنوان تخمینی را گزارش نمی‌کند: sensors_event_t.data[4] رزرو شده است و باید روی 0 تنظیم شود.

در یک حالت ایده‌آل، تلفنی که می‌چرخد و به همان جهت‌گیری در دنیای واقعی باز می‌گردد، باید همان بردار چرخش بازی را گزارش کند.

این سنسور باید مبتنی بر ژیروسکوپ و شتاب سنج باشد. علاوه بر این، به طور غیر مستقیم، از طریق تخمین بایاس ژیروسکوپ، نمی تواند از مغناطیس سنج به عنوان ورودی استفاده کند.

جاذبه زمین

حسگرهای فیزیکی زیرین: شتاب سنج و (در صورت وجود) ژیروسکوپ (یا مغناطیس سنج در صورت نبود ژیروسکوپ)

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_GRAVITY) یک حسگر بدون بیدار شدن را برمی گرداند

یک سنسور گرانش جهت و مقدار گرانش را در مختصات دستگاه گزارش می دهد.

اجزای بردار گرانش بر حسب m/s^2 در فیلدهای x، y و z sensors_event_t.acceleration .

هنگامی که دستگاه در حالت استراحت است، خروجی سنسور گرانش باید با شتاب سنج یکسان باشد. در زمین، قدر حدود 9.8 m/s^2 است.

اگر دستگاه دارای ژیروسکوپ باشد، حسگر جاذبه باید از ژیروسکوپ و شتاب سنج به عنوان ورودی استفاده کند.

اگر دستگاه فاقد ژیروسکوپ باشد، حسگر جاذبه باید از شتاب سنج و مغناطیس سنج به عنوان ورودی استفاده کند.

بردار چرخش ژئومغناطیسی

حسگرهای فیزیکی زیرین: شتاب سنج و مغناطیس سنج (بدون ژیروسکوپ)

حالت گزارش: پیوسته

کم قدرت

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) یک حسگر بدون بیدار شدن را برمی گرداند

بردار چرخش ژئومغناطیسی شبیه حسگر بردار چرخشی است اما از مغناطیس‌سنج و بدون ژیروسکوپ استفاده می‌کند.

این سنسور باید بر اساس یک مغناطیس سنج باشد. نمی توان آن را با استفاده از ژیروسکوپ پیاده سازی کرد و ورودی ژیروسکوپ نمی تواند توسط این سنسور استفاده شود.

برای جزئیات در مورد نحوه تنظیم sensors_event_t.data[0-4] به حسگر برداری چرخش مراجعه کنید.

درست مانند سنسور بردار چرخش، خطای عنوان باید کمتر از دقت تخمینی ( sensors_event_t.data[4] ) در 95٪ مواقع باشد.

این سنسور باید کم قدرت باشد، بنابراین باید در سخت افزار پیاده سازی شود.

جهت گیری (منسوخ شده)

حسگرهای فیزیکی زیرین: شتاب سنج، مغناطیس سنج و (در صورت وجود) ژیروسکوپ

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_ORIENTATION) یک حسگر بدون بیدار شدن را برمی‌گرداند

توجه: این یک نوع سنسور قدیمی است که در Android SDK منسوخ شده است. سنسور بردار چرخش جایگزین آن شده است که با وضوح بیشتری تعریف شده است. تا حد امکان از سنسور بردار چرخش روی سنسور جهت استفاده کنید.

یک حسگر جهت یابی وضعیت دستگاه را گزارش می کند. اندازه‌گیری‌ها بر حسب درجه در فیلدهای x، y، و z sensors_event_t.orientation :

  • 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 حرکت می کند.

لطفا توجه داشته باشید، به دلایل تاریخی، زاویه چرخش در جهت عقربه های ساعت مثبت است. (از نظر ریاضی، باید در جهت خلاف جهت عقربه های ساعت مثبت باشد):

تصویر جهت گیری نسبت به یک دستگاه

شکل 3. جهت گیری نسبت به یک دستگاه

این تعریف با انحراف، گام و رول مورد استفاده در هوانوردی که در آن محور X در امتداد سمت طولانی هواپیما (دم به دماغه) است، متفاوت است.

حسگر جهت‌یابی همچنین گزارش می‌دهد که انتظار دارد خوانش‌هایش چقدر دقیق باشد از طریق sensors_event_t.orientation.status . برای اطلاعات بیشتر در مورد مقادیر احتمالی این فیلد، به ثابت های SENSOR_STATUS_* SensorManager مراجعه کنید.

سنسورهای کالیبره نشده

حسگرهای کالیبره نشده نتایج خام بیشتری را ارائه می دهند و ممکن است دارای برخی سوگیری باشند، اما همچنین حاوی «پرش» کمتری از اصلاحات اعمال شده از طریق کالیبراسیون هستند. برخی از برنامه‌ها ممکن است این نتایج کالیبره‌نشده را روان‌تر و قابل اطمینان‌تر ترجیح دهند. به عنوان مثال، اگر یک برنامه سعی می کند ترکیب حسگر خود را انجام دهد، ارائه کالیبراسیون در واقع می تواند نتایج را مخدوش کند.

شتاب سنج کالیبره نشده

حسگر فیزیکی زیرین: شتاب سنج

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) یک حسگر بدون بیدار شدن را برمی‌گرداند

یک سنسور شتاب‌سنج کالیبره نشده، شتاب دستگاه را در امتداد سه محور حسگر بدون هیچ گونه اصلاح بایاس گزارش می‌کند (بایاس کارخانه و جبران دما برای اندازه‌گیری‌های کالیبره نشده اعمال می‌شود)، همراه با یک تخمین بایاس. همه مقادیر در واحدهای SI (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

ژیروسکوپ کالیبره نشده

حسگر فیزیکی زیرین: ژیروسکوپ

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) یک حسگر بدون بیدار شدن را برمی گرداند

یک ژیروسکوپ کالیبره نشده نرخ چرخش حول محورهای حسگر را بدون اعمال جبران بایاس به همراه یک تخمین بایاس گزارش می دهد. همه مقادیر بر حسب رادیان/ثانیه هستند و در فیلدهای 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.vendor و sensor_t.name یکسانی داشته باشند.

میدان مغناطیسی کالیبره نشده

حسگر فیزیکی زیرین: مغناطیس سنج

حالت گزارش: پیوسته

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) یک حسگر بدون بیدار شدن را برمی گرداند

یک حسگر میدان مغناطیسی کالیبره نشده، میدان مغناطیسی محیط را همراه با تخمین کالیبراسیون آهن سخت گزارش می‌کند. همه مقادیر در میکرو تسلا (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.vendor و sensor_t.name یکسانی داشته باشند.

زاویه لولا

حالت گزارش: در حال تغییر

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) حسگر بیدار شدن را برمی گرداند

یک سنسور زاویه لولا، زاویه بین دو قسمت جدایی ناپذیر دستگاه را بر حسب درجه اندازه گیری می کند. انتظار می رود که حرکت یک لولا که توسط این نوع سنسور اندازه گیری می شود، روش های تعامل کاربر با دستگاه را تغییر دهد، به عنوان مثال، با باز کردن یا آشکار کردن نمایشگر.

سنسورهای کامپوزیت تعاملی

برخی از سنسورها بیشتر برای تشخیص تعامل با کاربر استفاده می شوند. We don't define how those sensors must be implemented, but they must be low power and it's the responsibility of the device manufacturer to verify their quality in terms of user experience.

Wake up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) returns a wake-up sensor

A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7.

Each sensor event reports 1 in sensors_event_t.data[0] .

Pick up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) returns a wake-up sensor

A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).

Each sensor event reports 1 in sensors_event_t.data[0] .

Glance gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) returns a wake-up sensor

A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1 in sensors_event_t.data[0] .

Limited axes IMU sensors

Available from Android 13, limited axes IMU sensors are sensors that support use cases where not all three axes (x, y, z) are available. Standard IMU types in Android (such as SENSOR_TYPE_ACCELEROMETER and SENSOR_TYPE_GYROSCOPE ) assume that all three axes are supported. However, not all form factors and devices support 3-axis accelerometers and 3-axis gyroscopes.

Accelerometer limited axes

Underlying physical sensors: Accelerometer

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) returns a non-wake-up sensor

An accelerometer limited axes sensor is equivalent to TYPE_ACCELEROMETER but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the acceleration value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the acceleration values for unused axes to 0 , instead of having undefined values.

Gyroscope limited axes

Underlying physical sensors: Gyroscope

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) returns a non-wake-up sensor

A gyroscope limited axes sensor is equivalent to TYPE_GYROSCOPE but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the angular speed value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the angular speed values for unused axes to 0 .

Accelerometer limited axes uncalibrated

Underlying physical sensors: Accelerometer

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor

An accelerometer limited axes uncalibrated sensor is equivalent to TYPE_ACCELEROMETER_UNCALIBRATED but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the acceleration and bias values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the acceleration and bias values for unused axes to 0 .

Gyroscope limited axes uncalibrated

Underlying physical sensors: Gyroscope

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor

A gyroscope limited axes uncalibrated sensor is equivalent to TYPE_GYROSCOPE_UNCALIBRATED but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the angular speed and drift values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the angular speed and drift values for unused axes to 0 .

Composite limited axes IMU

Underlying physical sensors: Any combination of 3-axis accelerometer, 3-axis gyroscope, 3-axis accelerometer uncalibrated, and 3-axis gyroscope uncalibrated sensors.

Reporting-mode: Continuous

A composite limited axes IMU sensor is equivalent to a limited axes IMU sensor but instead of being supported at the HAL, it converts the 3-axis sensor data into the equivalent limited axes variants. These composite sensors are only enabled for automotive devices.

The following table shows an example conversion from a standard 3-axis accelerometer to a composite limited axes accelerometer.

SensorEvent Values for SENSOR_TYPE_ACCELEROMETER Example SENSOR_TYPE_ACCELEROMETER SensorEvent Composite 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]

N/A

1.0

values[4]

N/A

1.0

values[5]

N/A

1.0

Automotive sensors

Sensors to support automotive use cases.

Heading

Underlying physical sensors: Any combination of GPS, magnetometer, accelerometer, and gyroscope.

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_HEADING) returns a non-wake-up sensor

Available from Android 13, a heading sensor measures the direction in which the device is pointing relative to true north in degrees. The heading sensor includes two SensorEvent values. One for the measured device heading and one for the accuracy of the provided heading value.

Heading values reported by this sensor must be between 0.0 (inclusive) and 360.0 (exclusive), with 0 indicating north, 90 east, 180 south, and 270 west.

Accuracy for this sensor is defined at 68 percent confidence. In the case where the underlying distribution is Gaussian normal, the accuracy is one standard deviation. For example, if the heading sensor returns a heading value of 60 degrees and an accuracy value of 10 degrees, there's a 68 percent probability of the true heading being between 50 degrees and 70 degrees.