סוגי חיישנים

בקטע הזה מתוארים צירי חיישנים, חיישנים בסיסיים וחיישנים מורכבים (פעילות, מצב, לא מכויל ואינטראקציה).

צירי חיישן

ערכי אירועים של חיישנים רבים מבוטאים במסגרת ספציפית שהיא סטטית ביחס למכשיר.

צירים של מכשירים ניידים

ה-API של החיישן מתייחס רק לכיוון הטבעי של המסך (הצירים לא מתחלפים כשכיוון המסך של המכשיר משתנה).

מערכת
קואורדינטות של Sensor 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 deg/sec.
    • אחרי כיול במפעל, פיצוי על טמפרטורה ופיצוי על הטיה, ההטיה בפועל של חיישן Android תצטמצם, אולי עד לנקודה שבה מובטח שההטיה תהיה מתחת ל-0.01 מעלות לשנייה.
    • במצב כזה, נאמר שלחיישן Android יש הטיה מתחת ל-0.01 מעלות לשנייה, למרות שגיליון הנתונים של החיישן הבסיסי מציין 1 מעלות לשנייה.
  • ברומטר עם צריכת חשמל של 100 מיקרוואט.
    • מכיוון שהנתונים שנוצרו צריכים לעבור מהשבב אל ה-SoC, העלות האמיתית של צריכת החשמל לצורך איסוף נתונים מחיישן הברומטר של Android עשויה להיות גבוהה בהרבה, למשל 1,000 מיקרוואט.
    • במצב הזה, נאמר שלחיישן Android יש צריכת חשמל של 1,000 מיקרוואט, למרות שצריכת החשמל שנמדדה בפינים של שבב הברומטר היא 100 מיקרוואט.
  • מגנטומטר שצורך 100 מיקרוואט כשהוא מכויל, אבל צורך יותר במהלך הכיול.
    • יכול להיות ששגרת הכיול שלו תדרוש הפעלה של הג'ירוסקופ, עם צריכה של 5,000 מיקרו-ואט, והרצה של אלגוריתם מסוים, עם צריכה נוספת של 900 מיקרו-ואט.
    • במצב הזה, צריכת החשמל המקסימלית של חיישן Android (מגנטומטר) היא 6,000 מיקרוואט.
    • במקרה הזה, צריכת החשמל הממוצעת היא המדד השימושי יותר, והיא מה שמופיע בדוח על המאפיינים הסטטיים של החיישן דרך 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. מידע נוסף על הערכים האפשריים בשדה הזה זמין בקבועי SensorManager של SENSOR_STATUS_*.

טמפרטורת הסביבה

מצב דיווח: On-change

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 וכל הערכים הם במיקרו-טסלה (uT).

המדד הזה מדווח גם על רמת הדיוק של הקריאות שלו באמצעות sensors_event_t.magnetic.status. למידע נוסף על הערכים האפשריים בשדה הזה, אפשר לעיין בקבועים של SensorManager SENSOR_STATUS_*.

הקריאות מכוילות באמצעות:

  • פיצוי טמפרטורה
  • כיול של ברזל רך במפעל (או באינטרנט)
  • כיול מקוון של ברזל קשה

ג'ירוסקופ

מצב דיווח: מתמשך

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) מחזירה חיישן שלא מפעיל את המסך

חיישן ג'ירוסקופ מדווח על קצב הסיבוב של המכשיר סביב שלושת הצירים של החיישן.

הסיבוב חיובי בכיוון נגד השעון (כלל יד ימין). כלומר, צופה שמסתכל ממקום חיובי כלשהו על הציר x, ‏ y או z על מכשיר שממוקם בנקודת האפס, ידווח על סיבוב חיובי אם המכשיר נראה מסתובב נגד כיוון השעון. שימו לב שזו ההגדרה המתמטית הרגילה של סיבוב חיובי, והיא לא תואמת להגדרה של גלגול בתחום התעופה והחלל.

הנתונים מדווחים בשדות x,‏ y ו-z של sensors_event_t.gyro וכל הערכים הם ברדיאנים לשנייה (rad/s).

הקריאות מכוילות באמצעות:

  • פיצוי טמפרטורה
  • פיצוי על סולם (או באינטרנט)
  • כיול הטיה אונליין (להסרת סחף)

הגירוסקופ גם מדווח על רמת הדיוק של הקריאות שלו באמצעות sensors_event_t.gyro.status. מידע נוסף על הערכים האפשריים בשדה הזה זמין בקבועי SensorManager של SENSOR_STATUS_*.

אי אפשר לבצע אמולציה של הג'ירוסקופ על סמך מגנטומטרים ומדדי תאוצה, כי זה יגרום לירידה בעקביות המקומית ובתגובתיות שלו. הוא חייב להתבסס על שבב גירוסקופ רגיל.

דופק

מצב דיווח: On-change

getDefaultSensor(SENSOR_TYPE_HEART_RATE) מחזירה חיישן שלא מפעיל את המסך

חיישן הדופק מדווח על הדופק הנוכחי של האדם שמבצע את המגע עם המכשיר.

הדופק הנוכחי בפעימות לדקה (BPM) מדווח ב-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 כדי להעניק את ההרשאה המתאימה ולשמור על תאימות. המסגרת משתמשת בהרשאה SENSOR_PERMISSION_READ_HEART_RATE ב-Android 16 ואילך, ובהרשאה SENSOR_PERMISSION_BODY_SENSORS ב-Android 15 ובגרסאות קודמות.

בהיר

מצב דיווח: On-change

getDefaultSensor(SENSOR_TYPE_LIGHT) מחזירה חיישן שלא מפעיל את המסך

חיישן אור מדווח על עוצמת ההארה הנוכחית ביחידות לוקס של SI.

הנתונים מהמדידה מדווחים ב-sensors_event_t.light.

קירבה

מצב דיווח: On-change

בדרך כלל מוגדר כחיישן התעוררות

getDefaultSensor(SENSOR_TYPE_PROXIMITY) מחזירה חיישן יציאה ממצב שינה

חיישן קירבה מדווח על המרחק מהחיישן אל המשטח הנראה הקרוב ביותר.

עד Android 4.4, חיישני הקרבה תמיד היו חיישני השכמה, והם העירו את ה-SoC כשזיהו שינוי בקרבה. אחרי Android 4.4, מומלץ להטמיע קודם את גרסת ההפעלה של החיישן הזה, כי היא הגרסה שמשמשת להפעלה ולהשבתה של המסך בזמן שיחות טלפון.

המידה מדווחת בסנטימטרים ב-sensors_event_t.distance. הערה: חלק מחיישני הקרבה תומכים רק במדידה בינארית של 'קרוב' או 'רחוק'. במקרה הזה, החיישן מדווח על הערך sensor_t.maxRange במצב 'רחוק' ועל ערך נמוך מ-sensor_t.maxRange במצב 'קרוב'.

הלחץ

מצב דיווח: מתמשך

getDefaultSensor(SENSOR_TYPE_PRESSURE) מחזירה חיישן שלא מפעיל את המסך

חיישן לחץ (שנקרא גם ברומטר) מדווח על הלחץ האטמוספרי בהקטו-פסקל (hPa).

הקריאות מכוילות באמצעות

  • פיצוי טמפרטורה
  • כיול הטיה מקורית
  • כיול משקל להגדרות המקוריות

לרוב משתמשים בברומטר כדי להעריך שינויים בגובה. כדי להעריך את הגובה המוחלט, צריך להשתמש בלחץ בגובה פני הים (שמשתנה בהתאם למזג האוויר) כנקודת ייחוס.

לחות יחסית

מצב דיווח: On-change

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) מחזירה חיישן שלא מפעיל את המסך

חיישן לחות יחסית מודד את הלחות היחסית של האוויר הסביבתי ומחזיר ערך באחוזים.

סוגי חיישנים מורכבים

חיישן מורכב יוצר נתונים על ידי עיבוד או שילוב של נתונים מחיישן פיזי אחד או מכמה חיישנים פיזיים. (כל חיישן שאינו חיישן בסיסי נקרא חיישן מורכב). דוגמאות לחיישנים מורכבים:

בדומה לחיישני הבסיס, המאפיינים של החיישנים המורכבים נגזרים מהמאפיינים של הנתונים הסופיים שלהם. לדוגמה, צריכת החשמל של וקטור סיבוב במשחק שווה כנראה לסכום צריכות החשמל של שבב מד התאוצה, שבב הג'ירוסקופ, השבב שמעבד את הנתונים והאפיקים שמעבירים את הנתונים. דוגמה נוספת: הסחף של וקטור הסיבוב של משחק תלוי באיכות של אלגוריתם הכיול, בדיוק כמו שהוא תלוי במאפיינים הפיזיים של החיישן.

בטבלה הבאה מפורטים סוגי החיישנים המורכבים שזמינים. כל חיישן מורכב מסתמך על נתונים מחיישן פיזי אחד או יותר. לא מומלץ לבחור חיישנים פיזיים אחרים כדי להעריך את התוצאות, כי הם מספקים חוויית משתמש גרועה.

סוג החיישן קטגוריה חיישנים פיזיים בסיסיים מצב דיווח

וקטור סיבוב המשחק

התנהגות

מד תאוצה, ג'ירוסקופ, אסור להשתמש במגנטומטר

רציף

וקטור הסיבוב הגיאומגנטי חיישן עם צריכת חשמל נמוכה

התנהגות

מד תאוצה, מגנטומטר, אסור להשתמש בג'ירוסקופ

רציף

תנועת הצצה חיישן עם צריכת חשמל נמוכה

אינטראקציה

לא מוגדר

One-shot

Gravity

התנהגות

מד תאוצה, ג'ירוסקופ (אם יש) או מגנטומטר (אם אין ג'ירוסקופ)

רציף

ג'ירוסקופ לא מכויל

לא מכויל

ג'ירוסקופ

רציף

האצה לינארית

פעילות

מד תאוצה, ג'ירוסקופ (אם יש) או מגנטומטר (אם אין ג'ירוסקופ)

רציף

השדה המגנטי לא מכויל

לא מכויל

מגנטומטר

רציף

כיוון (הוצאה משימוש)

התנהגות

מד תאוצה, מגנטומטר, ג'ירוסקופ (אם יש)

רציף

תנועת האיסוף חיישן עם צריכת חשמל נמוכה

אינטראקציה

לא מוגדר

One-shot

וקטור סיבוב

התנהגות

מד תאוצה, מגנטומטר, ג'ירוסקופ (אם יש)

רציף

תנועה משמעותית חיישן עם צריכת חשמל נמוכה

פעילות

מד תאוצה (או חיישן אחר שצורך מעט מאוד חשמל)

One-shot

מונה צעדים חיישן עם צריכת חשמל נמוכה

פעילות

מד תאוצה

בעת ביצוע שינוי

זיהוי צעדים חיישן עם צריכת חשמל נמוכה

פעילות

מד תאוצה

מיוחד

חיישן הטיה חיישן עם צריכת חשמל נמוכה

פעילות

מד תאוצה

מיוחד

תנועת השכמה חיישן עם צריכת חשמל נמוכה

אינטראקציה

לא מוגדר

One-shot

חיישן עם צריכת חשמל נמוכה = חיישן עם צריכת חשמל נמוכה

חיישנים מורכבים של פעילות

האצה לינארית

חיישנים פיזיים בסיסיים: מד תאוצה וג'ירוסקופ (אם יש) או מגנטומטר (אם אין ג'ירוסקופ)

מצב דיווח: מתמשך

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) מחזירה חיישן שלא מפעיל את המסך

חיישן תאוצה ליניארית מדווח על התאוצה הליניארית של המכשיר במסגרת החיישן, לא כולל כוח משיכה.

הפלט הוא באופן עקרוני: הפלט של מד התאוצה פחות הפלט של חיישן הכבידה. הערך מדווח ב-m/s^2 בשדות x,‏ y ו-z של sensors_event_t.acceleration.

הערכים בכל הצירים צריכים להיות קרובים ל-0 כשהמכשיר לא זז.

אם במכשיר יש ג'ירוסקופ, חיישן התאוצה הלינארית חייב להשתמש בג'ירוסקופ ובמד התאוצה כקלט.

אם למכשיר אין ג'ירוסקופ, חיישן התאוצה הליניארית צריך להשתמש במד התאוצה ובמגנטומטר כקלט.

תנועה משמעותית

חיישן פיזי בסיסי: מד תאוצה (או חיישן אחר, כל עוד הוא צורך מעט חשמל)

מצב דיווח: One-shot

צריכת חשמל נמוכה

הטמעה רק של גרסת ההפעלה של החיישן הזה.

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].

מונה צעדים

חיישן פיזי בסיסי: מד תאוצה (+ חיישנים נוספים, בתנאי שההספק נמוך)

מצב דיווח: On-change

צריכת חשמל נמוכה

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) מחזירה חיישן שלא מפעיל את המסך

מד צעדים מדווח על מספר הצעדים שהמשתמש עשה מאז ההפעלה האחרונה של המכשיר.

הערך של המדידה מדווח כ-uint64_t ב-sensors_event_t.step_counter והוא מתאפס לאפס רק בהפעלה מחדש של המערכת.

חותמת הזמן של האירוע מוגדרת לזמן שבו בוצע השלב האחרון של האירוע.

בסוג החיישן Step detector מוסבר מה המשמעות של הזמן של צעד.

בהשוואה לגלאי הצעדים, למונה הצעדים יכול להיות זמן אחזור ארוך יותר (עד 10 שניות). בגלל ההשהיה הזו, רמת הדיוק של החיישן גבוהה. מספר הצעדים אחרי יום שלם של מדידות צריך להיות בטווח של 10% ממספר הצעדים בפועל. גם חיישן זיהוי הצעדים וגם מד הצעדים מזהים מתי המשתמש הולך, רץ ועולה במדרגות. הם לא אמורים לפעול כשהמשתמש רוכב על אופניים, נוהג או נמצא בכלי רכב אחרים.

החומרה צריכה להבטיח שמספר הצעדים הפנימי אף פעם לא יחרוג מהקיבולת. הגודל המינימלי של המונה הפנימי של החומרה צריך להיות 16 ביט. במקרה של הצפה קרובה (לכל היותר כל ‎~2^16 צעדים), אפשר להפעיל את ה-SoC כדי שהדרייבר יוכל לבצע את תחזוקת המונה.

כפי שצוין בקטע אינטראקציה, בזמן שהחיישן הזה פועל, הוא לא יכול לשבש חיישנים אחרים, במיוחד את מד התאוצה, שעשוי להיות בשימוש.

אם מכשיר מסוים לא יכול לתמוך במצבי הפעולה האלה, ה-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) מחזירה חיישן שלא מפעיל את המסך

חיישן וקטור הסיבוב מדווח על האוריינטציה של המכשיר ביחס למערכת הצירים מזרח-צפון-מעלה. הוא מתקבל בדרך כלל משילוב של קריאות ממד תאוצה, ג'ירוסקופ ומגנטומטר. מערכת הקואורדינטות East-North-Up מוגדרת כבסיס אורתונורמלי ישיר שבו:

  • ציר 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 95% מהזמן. החיישן הזה חייב להשתמש בג'ירוסקופ כקלט העיקרי לשינוי הכיוון.

החיישן הזה משתמש גם בקלט של מד תאוצה ומגנטומטר כדי לפצות על סחיפה של הג'ירוסקופ, ואי אפשר להטמיע אותו באמצעות מד התאוצה והמגנטומטר בלבד.

וקטור סיבוב של משחק

חיישנים פיזיים בסיסיים: מד תאוצה וג'ירוסקופ (ללא מגנטומטר)

מצב דיווח: מתמשך

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 מ'/שנייה בריבוע.

אם במכשיר יש ג'ירוסקופ, חיישן הכבידה חייב להשתמש בג'ירוסקופ ובמד התאוצה כקלט.

אם במכשיר אין ג'ירוסקופ, חיישן הכבידה צריך להשתמש במד התאוצה ובמגנטומטר כקלט.

וקטור סיבוב גיאומגנטי

חיישנים פיזיים בסיסיים: מד תאוצה ומגנטומטר (ללא ג'ירוסקופ)

מצב דיווח: מתמשך

צריכת חשמל נמוכה

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. למידע נוסף על הערכים האפשריים בשדה הזה, אפשר לעיין בקבועי SensorManager של SENSOR_STATUS_*.

חיישנים לא מכוילים

חיישנים לא מכוילים מספקים יותר תוצאות גולמיות ועשויים לכלול הטיה מסוימת, אבל הם גם מכילים פחות 'קפיצות' מתיקונים שמוחלים באמצעות כיול. יכול להיות שחלק מהאפליקציות יעדיפו את התוצאות הלא מכוילות האלה כי הן חלקות ואמינות יותר. לדוגמה, אם אפליקציה מנסה לבצע שילוב של נתוני חיישנים, ביצוע כיולים עלול לעוות את התוצאות.

מד תאוצה לא מכויל

חיישן פיזי בסיסי: מד תאוצה

מצב דיווח: מתמשך

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) מחזירה חיישן שלא מפעיל את המסך

חיישן מד תאוצה לא מכויל מדווח על התאוצה של המכשיר לאורך שלושת צירי החיישן ללא תיקון הטיה (הטיה מהמפעל ופיצוי טמפרטורה מוחלים על מדידות לא מכוילות), וגם על הערכת הטיה. כל הערכים הם ביחידות SI (מ'/ש'^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.name ושל sensor_t.vendor.

שדה מגנטי לא מכויל

חיישן פיזי בסיסי: מגנטומטר

מצב דיווח: מתמשך

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.name ו-sensor_t.vendor.

זווית הציר

מצב דיווח: On-change

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) מחזירה חיישן השכמה

חיישן זווית הציר מודד את הזווית, במעלות, בין שני חלקים אינטגרליים של המכשיר. התנועה של ציר שנמדדת על ידי סוג החיישן הזה צפויה לשנות את הדרכים שבהן המשתמש יכול ליצור אינטראקציה עם המכשיר, למשל, על ידי פתיחה או חשיפה של מסך.

חיישנים מורכבים לאינטראקציה

חלק מהחיישנים משמשים בעיקר לזיהוי אינטראקציות עם המשתמש. אנחנו לא מגדירים איך צריך להטמיע את החיישנים האלה, אבל הם צריכים להיות בעלי צריכת חשמל נמוכה. יצרן המכשיר אחראי לוודא שהאיכות שלהם טובה מבחינת חוויית המשתמש.

תנועת השכמה

חיישנים פיזיים בסיסיים: לא מוגדר (כל דבר שדורש מעט חשמל)

מצב דיווח: One-shot

צריכת חשמל נמוכה

הטמעה רק של גרסת ההפעלה של החיישן הזה.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) מחזירה חיישן התעוררות

חיישן תנועות להוצאת המכשיר ממצב שינה מאפשר להוציא את המכשיר ממצב שינה על סמך תנועה ספציפית למכשיר. כשהחיישן הזה מופעל, המכשיר מתנהג כאילו לחצו על לחצן ההפעלה, והמסך נדלק. יכול להיות שהמשתמש ישבית את ההתנהגות הזו (הפעלת המסך כשהחיישן הזה מופעל) בהגדרות המכשיר. שינויים בהגדרות לא משפיעים על ההתנהגות של החיישן: רק על השאלה אם המסגרת תפעיל את המסך כשהיא מופעלת. לא מצוינת התנועה בפועל שצריך לזהות, והיצרן של המכשיר יכול לבחור אותה.

החיישן הזה צריך להיות בעל צריכת חשמל נמוכה, כי סביר להניח שהוא יופעל 24 שעות ביממה.

כל אירוע של חיישן מדווח על 1 ב-sensors_event_t.data[0].

תנועת איסוף

חיישנים פיזיים בסיסיים: לא מוגדר (כל דבר שדורש מעט חשמל)

מצב דיווח: One-shot

צריכת חשמל נמוכה

הטמעה רק של גרסת ההפעלה של החיישן הזה.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) מחזירה חיישן התעוררות

חיישן תנועת ההרמה מופעל כשמרימים את המכשיר, לא משנה איפה הוא היה לפני כן (שולחן, כיס, תיק).

כל אירוע של חיישן מדווח על 1 ב-sensors_event_t.data[0].

תנועת הצצה

חיישנים פיזיים בסיסיים: לא מוגדר (כל דבר שדורש מעט חשמל)

מצב דיווח: One-shot

צריכת חשמל נמוכה

הטמעה רק של גרסת ההפעלה של החיישן הזה.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) מחזירה חיישן התעוררות

חיישן של תנועת הצצה מאפשר להפעיל את המסך לזמן קצר כדי שהמשתמש יוכל להציץ בתוכן שמוצג בו על סמך תנועה ספציפית. כשחיישן מופעל, המסך של המכשיר נדלק לרגע כדי לאפשר למשתמש להציץ בהתראות או בתוכן אחר, בזמן שהמכשיר נשאר נעול במצב לא אינטראקטיבי (מצב שינה). לאחר מכן המסך נכבה שוב. המשתמש יכול להשבית את ההתנהגות הזו (הפעלה קצרה של המסך כשהחיישן הזה מופעל) בהגדרות המכשיר. שינויים בהגדרות לא משפיעים על ההתנהגות של החיישן: רק על השאלה אם המסגרת תפעיל את המסך לזמן קצר כשהיא מופעלת. לא מצוינת התנועה בפועל שצריך לזהות, והיצרן של המכשיר יכול לבחור אותה.

החיישן הזה צריך להיות בעל צריכת חשמל נמוכה, כי סביר להניח שהוא יופעל 24 שעות ביממה. כל אירוע של חיישן מדווח על 1 ב-sensors_event_t.data[0].

חיישני IMU עם צירים מוגבלים

חיישני IMU עם צירים מוגבלים, שזמינים החל מ-Android 13, הם חיישנים שתומכים בתרחישי שימוש שבהם לא כל שלושת הצירים (x,‏ y,‏ z) זמינים. סוגי IMU רגילים ב-Android (כמו SENSOR_TYPE_ACCELEROMETER ו- SENSOR_TYPE_GYROSCOPE) מניחים שיש תמיכה בכל שלושת הצירים. עם זאת, לא כל גורמי הצורה והמכשירים תומכים במד תאוצה בעל 3 צירים ובג'ירוסקופ בעל 3 צירים.

מד תאוצה עם צירים מוגבלים

חיישנים פיזיים בסיסיים: מד תאוצה

מצב דיווח: מתמשך

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) מחזירה חיישן שלא מפעיל את המסך

חיישן מד תאוצה עם צירים מוגבלים שווה ל-TYPE_ACCELEROMETER אבל תומך במקרים שבהם ציר אחד או שניים לא נתמכים.

שלושת הערכים האחרונים של אירועי החיישן שמדווחים על ידי החיישן מייצגים אם יש תמיכה בערך התאוצה עבור הצירים x,‏ y ו-z. הערך 1.0 מציין שהציר נתמך, והערך 0 מציין שהוא לא נתמך. יצרני המכשירים מזהים את הצירים הנתמכים בזמן הבנייה, והערכים לא משתנים במהלך זמן הריצה.

יצרני מכשירים צריכים להגדיר את ערכי התאוצה של צירים לא בשימוש כ-0, במקום להשאיר את הערכים לא מוגדרים.

ג'ירוסקופ עם צירים מוגבלים

חיישנים פיזיים בסיסיים: ג'ירוסקופ

מצב דיווח: מתמשך

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) מחזירה חיישן שלא מפעיל את המסך

חיישן גירוסקופ עם צירים מוגבלים שווה ל-TYPE_GYROSCOPE אבל הוא תומך במקרים שבהם ציר אחד או שניים לא נתמכים.

שלושת הערכים האחרונים של אירועי החיישן שמדווחים על ידי החיישן מייצגים אם יש תמיכה בערך המהירות הזוויתית עבור הצירים x,‏ y ו-z. הערך 1.0 מציין שהציר נתמך, והערך 0 מציין שהוא לא נתמך. יצרני המכשירים מזהים את הצירים הנתמכים בזמן הבנייה, והערכים לא משתנים במהלך זמן הריצה.

יצרני מכשירים צריכים להגדיר את ערכי המהירות הזוויתית של צירים לא בשימוש ל-0.

מד תאוצה עם צירים מוגבלים לא מכויל

חיישנים פיזיים בסיסיים: מד תאוצה

מצב דיווח: מתמשך

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) מחזירה חיישן שלא מפעיל את המסך

חיישן לא מכויל של מד תאוצה עם צירים מוגבלים שווה ל-TYPE_ACCELEROMETER_UNCALIBRATED, אבל הוא תומך במקרים שבהם ציר אחד או שניים לא נתמכים.

שלושת הערכים האחרונים של אירוע החיישן שמדווחים על ידי החיישן מייצגים אם יש תמיכה בערכי התאוצה וההטיה עבור הצירים x,‏ y ו-z. הערך 1.0 מציין שהציר נתמך, והערך 0 מציין שהוא לא נתמך. יצרני המכשירים מזהים את הצירים הנתמכים בזמן הבנייה, והערכים לא משתנים במהלך זמן הריצה.

יצרני מכשירים צריכים להגדיר את ערכי התאוצה וההטיה של צירים לא בשימוש ל-0.

ג'ירוסקופ עם צירים מוגבלים ללא כיול

חיישנים פיזיים בסיסיים: ג'ירוסקופ

מצב דיווח: מתמשך

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) מחזירה חיישן שלא מפעיל את המסך

חיישן ג'ירוסקופ עם צירים מוגבלים שלא עבר כיול שווה ל-TYPE_GYROSCOPE_UNCALIBRATED, אבל הוא תומך במקרים שבהם ציר אחד או שניים לא נתמכים.

שלושת הערכים האחרונים של אירועי החיישן שמדווחים על ידי החיישן מייצגים אם יש תמיכה במהירויות הזוויתיות ובערכי הסחף של הצירים x,‏ y ו-z. הערך 1.0 מציין שהציר נתמך, והערך 0 מציין שהוא לא נתמך. יצרני המכשירים מזהים את הצירים הנתמכים בזמן הבנייה, והערכים לא משתנים במהלך זמן הריצה.

יצרני מכשירים צריכים להגדיר את הערכים של המהירות הזוויתית והסחיפה עבור צירים לא בשימוש כ-0.

חיישן IMU מורכב עם צירים מוגבלים

חיישנים פיזיים בסיסיים: כל שילוב של מד תאוצה עם 3 צירים, ג'ירוסקופ עם 3 צירים, מד תאוצה לא מכויל עם 3 צירים וחיישני ג'ירוסקופ לא מכוילים עם 3 צירים.

מצב דיווח: מתמשך

חיישן IMU מוגבל צירים מורכב שווה ערך לחיישן IMU מוגבל צירים, אבל במקום להיות נתמך ב-HAL, הוא ממיר את נתוני החיישן בעל 3 הצירים לגרסאות המקבילות של צירים מוגבלים. חיישנים מורכבים כאלה מופעלים רק במכשירים לרכב.

בטבלה הבאה מוצגת דוגמה להמרה ממד תאוצה רגיל עם 3 צירים למד תאוצה מורכב עם צירים מוגבלים.

ערכי SensorEvent עבור SENSOR_TYPE_ACCELEROMETER דוגמה ל-SensorEvent של SENSOR_TYPE_ACCELEROMETER ‫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]

לא רלוונטי

1.0

values[4]

לא רלוונטי

1.0

values[5]

לא רלוונטי

1.0

חיישנים לרכב

חיישנים לתמיכה בתרחישי שימוש ברכב.

כותרת

חיישנים פיזיים בסיסיים: כל שילוב של GPS, מגנטומטר, מד תאוצה וג'ירוסקופ.

מצב דיווח: מתמשך

getDefaultSensor(SENSOR_TYPE_HEADING) מחזירה חיישן שלא מפעיל את המסך

חיישן הכיוון, שזמין מ-Android 13, מודד את הכיוון שאליו המכשיר מופנה ביחס לצפון האמיתי, במעלות. הכותרת sensor כוללת שני ערכים של SensorEvent. אחד עבור הכותרת של המכשיר שנמדד ואחד עבור הדיוק של ערך הכותרת שצוין.

הערכים של הכיוון שמדווחים על ידי החיישן הזה צריכים להיות בין 0.0 (כולל) ל-360.0 (לא כולל), כאשר 0 מציין צפון, 90 מזרח, 180 דרום ו-270 מערב.

רמת הדיוק של החיישן הזה מוגדרת ברמת סמך של 68%. במקרה שבו ההתפלגות הבסיסית היא נורמלית גאוסית, הדיוק הוא סטיית תקן אחת. לדוגמה, אם חיישן הכיוון מחזיר ערך כיוון של 60 מעלות וערך דיוק של 10 מעלות, יש הסתברות של 68% שהכיוון האמיתי הוא בין 50 ל-70 מעלות.