בקטע הזה מתוארים צירים של חיישנים, חיישנים בסיסיים וחיישנים מורכבים (פעילות, מיקום, לא מכויל ואינטראקציה).
צירי חיישן
ערכי אירועים של חיישנים רבים מבוטאים במסגרת ספציפית שהיא סטטית ביחס למכשיר.
צירים של מכשירים ניידים
ה-API של החיישן הוא יחסי רק לכיוון הטבעי של המסך (הצירים לא מתחלפים כשכיוון המסך של המכשיר משתנה).
איור 1. מערכת קואורדינטות (ביחס למכשיר נייד) שמשמשת את Sensor API
גרזנים לרכב
בהטמעות של Android Automotive, הצירים מוגדרים ביחס למסגרת המרכב של הרכב. נקודת המוצא של מערכת הייחוס של הרכב היא מרכז הסרן האחורי. מערכת הייחוס של הרכב מכוונת כך ש:
- ציר X מצביע ימינה ונמצא במישור אופקי, בניצב למישור הסימטריה של הרכב.
- ציר Y מצביע קדימה ונמצא במישור אופקי.
איור 2. מערכת קואורדינטות (ביחס למכשיר לרכב) שמשמשת את Sensor API
מסגרת ההפניה של הרכב היא מערכת קואורדינטות ימנית. לכן, ציר ה-Z מצביע כלפי מעלה.
ציר ה-Z של מסגרת הייחוס מיושר עם כוח המשיכה, כלומר ציר ה-X וציר ה-Y הם אופקיים. כתוצאה מכך, יכול להיות שציר ה-Y לא תמיד יעבור דרך הסרן הקדמי.
חיישנים בסיסיים
סוגי החיישנים הבסיסיים נקראים על שם החיישנים הפיזיים שהם מייצגים. החיישנים האלה מעבירים נתונים מחיישן פיזי יחיד (בניגוד לחיישנים מורכבים שמפיקים נתונים מחיישנים אחרים). דוגמאות לסוגים בסיסיים של חיישנים:
SENSOR_TYPE_ACCELEROMETERSENSOR_TYPE_GYROSCOPESENSOR_TYPE_MAGNETOMETER
עם זאת, חיישני הבסיס לא שווים לחיישנים הפיזיים הבסיסיים שלהם, ואין לבלבל ביניהם. הנתונים מחיישן בסיסי לא כוללים את הפלט הגולמי של החיישן הפיזי, כי מתבצעים תיקונים (כמו פיצוי על הטיה ופיצוי על טמפרטורה).
לדוגמה, המאפיינים של חיישן בסיסי עשויים להיות שונים מהמאפיינים של החיישן הפיזי הבסיסי שלו במקרים הבאים:
- צ'יפ ג'ירוסקופ עם טווח הטיה של 1 deg/sec.
- אחרי הכיול של היצרן, הפיצוי על הטמפרטורה והפיצוי על ההטיה, ההטיה בפועל של חיישן Android תצטמצם, ואולי תגיע לנקודה שבה ההטיה מובטחת להיות מתחת ל-0.01 deg/sec.
- במצב כזה, נאמר שלחיישן 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. מכיוון שהחיישן הזה הוא on-change, אירועים נוצרים רק אם הערך של 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)
מחזירה חיישן שלא מפעיל את המסך
חיישן לחות יחסית מודד את הלחות היחסית באוויר הסביבה ומחזיר ערך באחוזים.
סוגי חיישנים מורכבים
חיישן מורכב יוצר נתונים על ידי עיבוד ו/או מיזוג נתונים מחיישן פיזי אחד או מכמה חיישנים פיזיים. (כל חיישן שאינו חיישן בסיסי נקרא חיישן מורכב). דוגמאות לחיישנים מורכבים:
- גלאי צעדים ותנועה ניכרת, שמבוססים בדרך כלל על מד תאוצה, אבל יכולים להתבסס גם על חיישנים אחרים, אם צריכת החשמל והדיוק מקובלים.
- וקטור סיבוב של משחק, שמבוסס על מד תאוצה וג'ירוסקופ.
- ג'ירוסקופ לא מכויל, שדומה לחיישן הבסיס של הג'ירוסקופ, אבל כיול ההטיה מדווח בנפרד במקום לתקן אותו במדידה.
בדומה לחיישני הבסיס, המאפיינים של החיישנים המורכבים מגיעים מהמאפיינים של הנתונים הסופיים שלהם. לדוגמה, צריכת החשמל של וקטור סיבוב במשחק שווה כנראה לסכום צריכת החשמל של שבב מד התאוצה, שבב הג'ירוסקופ, השבב שמעבד את הנתונים והאוטובוסים שמעבירים את הנתונים. דוגמה נוספת: הסחיפה של וקטור סיבוב במשחק תלויה באיכות של אלגוריתם הכיול, כמו גם במאפיינים הפיזיים של החיישן.
בטבלה הבאה מפורטים סוגי החיישנים המורכבים שזמינים. כל חיישן מורכב מסתמך על נתונים מחיישן פיזי אחד או יותר. לא מומלץ לבחור חיישנים פיזיים אחרים כדי להעריך את התוצאות, כי הם מספקים חוויית משתמש גרועה.
| סוג החיישן | קטגוריה | חיישנים פיזיים בסיסיים | מצב דיווח |
|---|---|---|---|
התנהגות |
מד תאוצה, ג'ירוסקופ, אסור להשתמש במגנטומטר |
Continuous |
|
התנהגות |
מד תאוצה, מגנטומטר, אסור להשתמש בג'ירוסקופ |
Continuous |
|
| תנועת הצצה |
אינטראקציה |
לא מוגדר |
One-shot |
התנהגות |
מד תאוצה, ג'ירוסקופ (אם יש) או מגנטומטר (אם אין ג'ירוסקופ) |
Continuous |
|
לא מכויל |
ג'ירוסקופ |
Continuous |
|
פעילות |
מד תאוצה, ג'ירוסקופ (אם יש) או מגנטומטר (אם אין ג'ירוסקופ) |
Continuous |
|
לא מכויל |
מגנטומטר |
Continuous |
|
כיוון (הוצאה משימוש) |
התנהגות |
מד תאוצה, מגנטומטר, ג'ירוסקופ (אם יש) |
Continuous |
אינטראקציה |
לא מוגדר |
One-shot |
|
התנהגות |
מד תאוצה, מגנטומטר, ג'ירוסקופ (אם יש) |
Continuous |
|
פעילות |
מד תאוצה (או חיישן אחר שצורך מעט מאוד חשמל) |
One-shot |
|
פעילות |
מד תאוצה |
On-change |
|
פעילות |
מד תאוצה |
מיוחד |
|
פעילות |
מד תאוצה |
מיוחד |
|
אינטראקציה |
לא מוגדר |
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. בדרך כלל מקבלים את הנתון הזה על ידי שילוב של קריאות ממד התאוצה, מהג'ירוסקופ וממד הכוח המגנטי. מערכת הקואורדינטות 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 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 (מ'/שנייה^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 צפויים לעלות ברגע שההערכה של ה-hard-iron משתנה, והם אמורים להיות יציבים בשאר הזמן.
צריך להחיל על המדידות כיול של ברזל רך ופיצוי על הטמפרטורה. בנוסף, צריך להטמיע הערכה של מיקום קבוע כדי שאפשר יהיה לדווח על הערכות סבירות ב-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 מעלות.