בקטע הזה מתוארים צירי חיישנים, חיישנים בסיסיים וחיישנים מורכבים (פעילות, תנוחת גוף, לא מכויל ואינטראקציה).
גרזנים של חיישנים
ערכים של אירועי חיישנים מחיישני רבים מפורטים בפריים ספציפי שהוא סטטי ביחס למכשיר.
צירים למכשירים ניידים
ה-Sensor API הוא יחסי רק לכיוון הטבעי של המסך (הצירים לא מוחלפים כשכיוון המסך של המכשיר משתנה.
סרנים לרכב
בהטמעות של Android Automotive, מוגדרים צירים ביחס למסגרת של גוף הרכב. מקור מסגרת העזר של הרכב הוא מרכז הציר האחורי. מסגרת הייחוס של הרכב מכוונת כך ש:
- ציר X מצביע ימינה ונמצא במישור אופקי, בניצב למישור הסימטריה של הרכב.
- ציר Y מצביע קדימה ונמצא במישור אופקי.
מסגרת העזר של הרכב היא מערכת קואורדינטות ימנית. לכן, ציר Z פונה כלפי מעלה.
ציר ה-Z של מסגרת העזר מיושר לכוח הכבידה, כלומר ציר ה-X וציר ה-Y הם אופקיים. כתוצאה מכך, ציר ה-Y לא תמיד עובר דרך הסרן הקדמי.
חיישנים בסיסיים
סוגי החיישנים הבסיסיים נקראים על שם החיישנים הפיזיים שהם מייצגים. החיישנים האלה מעבירים נתונים מחישן פיזי יחיד (בניגוד לחיישנים מורכבים שיוצרים נתונים מחישנים אחרים). דוגמאות לסוגי חיישנים בסיסיים:
SENSOR_TYPE_ACCELEROMETER
SENSOR_TYPE_GYROSCOPE
SENSOR_TYPE_MAGNETOMETER
עם זאת, חיישנים בסיסיים הם לא זהים לחיישן הפיזי שמתבסס עליהם, ואין להתבלבל ביניהם. הנתונים מחיישן הבסיס הם לא הפלט הגולמי של החיישן הפיזי, כי חלים תיקונים (כמו פיצוי הטיה ופיצוי טמפרטורה).
לדוגמה, המאפיינים של חיישן בסיס עשויים להיות שונים מהמאפיינים של החיישן הפיזי הבסיסי שלו במקרי השימוש הבאים:
- צ'יפ ג'ירוסקופ עם טווח הטיה של 1 מעלה לשנייה.
- אחרי כיול המפעל, פיצוי על טמפרטורה ופיצוי על הטיות, ההטיה בפועל של חיישן Android תקטן ויכול להיות שההטיה תהיה מתחת ל-0.01 מעלות לשנייה.
- במצב כזה, אנחנו אומרים שלחיישן Android יש הטיה מתחת ל-0.01 מעלות לשנייה, למרות שבגיליון הנתונים של החיישן הבסיסי צוין 1 מעלה לשנייה.
- ברומטר עם צריכת חשמל של 100 uW.
- מכיוון שהנתונים שנוצרים צריכים להיות מועברים מהצ'יפ ל-SoC, עלות האנרגיה בפועל לאיסוף נתונים מהחיישן של ברומטר Android עשויה להיות גבוהה בהרבה, למשל 1,000 uW.
- במצב כזה, אנחנו אומרים שלחיישן Android יש צריכת חשמל של 1,000 מיקרו-וואט, למרות שצריכת החשמל שנמדדת בקצוות הצ'יפ של הברומטר היא 100 מיקרו-וואט.
- מגנטומטר שצורך 100uW במהלך כיול, אבל צורך יותר במהלך תהליך הכיול.
- יכול להיות שכדי לשגרת הכיול שלה צריך להפעיל את הג'ירוסקופ, לצרוך 5,000 uW ולהפעיל אלגוריתם כלשהו. עלות נוספת של 900 uW.
- במקרה כזה, צריכת האנרגיה המקסימלית של חיישן Android (מגנטומטר) היא 6,000 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
כדי לקבל מידע נוסף על הערכים האפשריים בשדה הזה.
טמפרטורת הסביבה
סטטוס הדיווח: 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
. למידע נוסף על הערכים האפשריים בשדה הזה, אפשר לעיין בערכי הקבועים
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
.
אי אפשר לדמות את הג'ירוסקופ על סמך מגנטומטרים ומדדי תאוצה, כי זה יגרום לירידה בעקביות ובתגובה המקומית. הוא חייב להיות מבוסס על צ'יפ גיירוסקופ רגיל.
דופק
סטטוס הדיווח: On-change
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)
מחזירה חיישן ללא התעוררות
חיישן אור מדווח על התאורה הנוכחית ביחידות לוקס (lux) במערכת היחידות הבינלאומית (SI).
המדידה מדווחת ב-sensors_event_t.light
.
קירבה
סטטוס הדיווח: בזמן שינוי
בדרך כלל מוגדר כחיישן התעוררות
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).
הקריאות מתואמות באמצעות
- פיצוי על טמפרטורה
- כיול הטיה מברירת המחדל של היצרן
- כיול של מאזניים מקוריים
לרוב משתמשים בברומטר כדי להעריך שינויי גובה. כדי להעריך את הגובה המוחלט, צריך להשתמש בלחץ ברמת פני הים (שמשתנה בהתאם למזג האוויר) בתור נקודת ייחוס.
לחות יחסית
סטטוס הדיווח: בזמן שינוי
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)
מחזירה חיישן ללא התעוררות
חיישן לחות יחסית מודד את הלחות היחסית של האוויר בסביבה ומחזיר ערך באחוזים.
סוגי חיישנים מורכבים
חיישן מורכב יוצר נתונים על ידי עיבוד ו/או מיזוג של נתונים מחושן פיזי אחד או מכמה חיישנים פיזיים. (כל חיישן שאינו חיישן בסיס נקרא חיישן מורכב). דוגמאות לחיישנים מורכבים:
- חיישן צעדים ותנועה משמעותית, שבדרך כלל מבוססים על תאוצה, אבל יכולים להתבסס גם על חיישנים אחרים, אם צריכת החשמל והדיוק שלהם סבירים.
- וקטור הסיבוב במשחק, על סמך מד תאוצה וג'ירוסקופ.
- ג'ירוסקופ לא מכוונן, שהוא דומה לחיישן הבסיס של הג'ירוסקופ, אבל תיקון הטיה (bias) מדווח בנפרד במקום להתבצע במהלך המדידה.
בדומה לחיישנים הבסיסיים, המאפיינים של החיישנים המשולבים נובעים מהמאפיינים של הנתונים הסופיים שלהם. לדוגמה, צריכת החשמל של וקטור סיבוב במשחק שווה כנראה לסכום של צריכת החשמל של צ'יפ מד התאוצה, צ'יפ הג'ירוסקופ, הצ'יפ שעיבד את הנתונים והמערכות להעברת הנתונים. דוגמה נוספת: ההטיה של וקטור הסיבוב של המשחק תלויה באותה מידה באיכות של אלגוריתם התאמת הנתונים, כמו גם במאפיינים הפיזיים של החיישן.
בטבלה הבאה מפורטים סוגי החיישנים המשולבים הזמינים. כל חיישן מורכב מסתמך על נתונים מחישן פיזי אחד או יותר. מומלץ להימנע מבחירת חיישנים פיזיים בסיסיים אחרים כדי לקבל תוצאות משוערות, כי הם מספקים חוויית משתמש גרועה.
סוג החיישן | קטגוריה | חיישנים פיזיים בסיסיים | מצב הדיווח |
---|---|---|---|
התנהגות |
מד תאוצה, ג'ירוסקופ, אסור להשתמש במגנטומטר |
רציף |
|
התנהגות |
מד תאוצה, מגנטומטר, אסור להשתמש בג'ירוסקופ |
רציף |
|
תנועת 'בקצרה' | אינטראקציה |
לא מוגדר |
קליע בודד |
התנהגות |
מד תאוצה, ג'ירוסקופ |
רציף |
|
ללא כיול |
ג'ירוסקופ |
רציף |
|
פעילות |
מד תאוצה, ג'ירוסקופ (אם קיים) או מגנטומטר (אם אין ג'ירוסקופ) |
רציף |
|
ללא כיול |
מגנטומטר |
רציף |
|
Orientation (הוצא משימוש) |
התנהגות |
מד תאוצה, מגנטומטר, ג'ירוסקופ (אם יש) |
רציף |
אינטראקציה |
לא מוגדר |
קליע בודד |
|
התנהגות |
מד תאוצה, מגנטומטר, ג'ירוסקופ |
רציף |
|
פעילות |
מד תאוצה (או מד תאוצה אחר, כל עוד הספק נמוך מאוד) |
תמונה אחת |
|
פעילות |
מד תאוצה |
בעת שינוי |
|
פעילות |
מד תאוצה |
מיוחד |
|
פעילות |
מד תאוצה |
מיוחד |
|
אינטראקציה |
לא מוגדר |
קליע בודד |
= חיישן עם צריכת אנרגיה נמוכה
חיישנים מורכבים של פעילות
האצה לינארית
חיישנים פיזיים בסיסיים: מד תאוצה וג'ירוסקופ (אם יש) (או מגנטומטר אם אין ג'ירוסקופ)
מצב דיווח: רציף
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)
מחזירה חיישן ללא התעוררות
חיישן האצה לינארי מדווח על התאוצה הלינארית של המכשיר במסגרת החיישן, לא כולל כוח הכבידה.
הרעיון מאחורי הפלט הוא: הפלט של מד התאוצה בניכוי הפלט של חיישן הכבידה. מדווח ב-m/s^2 בשדות x, y ו-z של sensors_event_t.acceleration
.
כשהמכשיר לא זז, הקריאות בכל הצירים צריכות להיות קרובות ל-0.
אם יש במכשיר ג'ירוסקופ, יש להשתמש בחיישן התאוצה הליניארית בג'ירוסקופ ובמד התאוצה כקלט.
אם אין במכשיר ג'ירוסקופ, יש להשתמש בחיישן התאוצה הליניארית במד התאוצה ובמגנטומטר כקלט.
תנועה משמעותית
החיישן הפיזי הבסיסי: מד תאוצה (או חיישן אחר כל עוד הוא צורך מעט אנרגיה)
Reporting-mode: 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]
.
מונה צעדים
חיישן פיזי בסיסי: מד תאוצה (+ אולי אחרים, כל עוד הספק נמוך)
סטטוס הדיווח: בזמן שינוי
צריכת אנרגיה נמוכה
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
מחזירה חיישן ללא התעוררות
מונה הצעדים מדווח על מספר הצעדים שהמשתמש עשה מאז ההפעלה האחרונה של המכשיר.
המדידה מדווחת כ-uint64_t
ב-sensors_event_t.step_counter
, והיא מתאפסת לאפס רק בהפעלה מחדש של המערכת.
חותמת הזמן של האירוע מוגדרת לשעה שבה בוצע השלב האחרון של האירוע.
אפשר לעיין בסוג החיישן גלאי צעדים כדי לקבל מידע על המשמעות של זמן הצעד.
בהשוואה למזהה הצעדים, למונה הצעדים יכולה להיות זמן אחזור ארוך יותר (עד 10 שניות). בזכות זמן האחזור הזה, רמת הדיוק של החיישן הזה גבוהה. ספירת הצעדים אחרי יום שלם של מדדים צריכה להיות בטווח של 10% ממספר הצעדים בפועל. גם גלאי הצעדים וגם ספירת הצעדים מזהים מתי המשתמש הולך, רץ ועולה במדרגות. הן לא אמורות להופיע כשהמשתמש רוכב על אופניים, נוהג או נמצא בכלי רכב אחרים.
החומרה חייבת להבטיח שספירת השלבים הפנימית לא תחרוג אף פעם. הגודל המינימלי של המונה הפנימי של החומרה הוא 16 ביטים. במקרה של סכנה ממשית של חריגה ממכסת הנתונים (לכל היותר בכל ~2^16 שלבים), אפשר להעיר את ה-SoC כדי שהדרייבר יוכל לבצע את תחזוקת המונה.
כפי שצוין בקטע אינטראקציה, בזמן שהחיישן הזה פועל, הוא לא יפריע לחישה של חיישנים אחרים, במיוחד לחיישן ה-accelerometer, שעשוי להיות בשימוש.
אם מכשיר מסוים לא תומך במצבי הפעולה האלה, אסור שסוג החיישן הזה ידווח על ידי HAL. כלומר, לא ניתן לבצע 'אמולציה' של החיישן הזה ב‐HAL.
רמת הטעינה של החיישן צריכה להיות נמוכה. כלומר, אם אי אפשר לזהות את הצעדים בחומרה, לא צריך להגדיר את החיישן הזה. באופן ספציפי, כשמונה הצעדים מופעל ומד התאוצה לא מופעל, רק הצעדים אמורים לגרום להפרעות (ולא נתוני מד התאוצה).
גלאי הטיה
החיישן הפיזי הבסיסי: מד תאוצה (וגם יכול להיות חיישנים אחרים, כל עוד הם צורכים מעט אנרגיה)
מצב דיווח: מיוחד
צריכת אנרגיה נמוכה
יש להטמיע רק את גרסת החיישן הזה ליציאה ממצב שינה.
getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)
מחזיר חיישן של מצב שינה
גלאי הטיה יוצר אירוע בכל פעם שמזוהה אירוע הטיה.
אירוע הטיה מוגדר לפי הכיוון של שינוי בכוח הכבידה הממוצע של חלון, באורך 2 שניות, ב-35 מעלות לפחות מאז ההפעלה או מהאירוע האחרון שנוצר על ידי החיישן. זהו האלגוריתם:
reference_estimated_gravity
= הממוצע של מדידות ה-accelerometer במהלך השנייה הראשונה אחרי ההפעלה, או כוח הכבידה המשוער כשאירוע ההטיה האחרון נוצר.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
ב-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)
מחזירה חיישן ללא התעוררות
וקטור סיבוב גיאו-מגנטי דומה לחיישן וקטור סיבוב, אבל הוא משתמש במגנטומטר ולא בג'ירוסקופ.
החיישן הזה חייב להיות מבוסס על מגנטומטר. אי אפשר להטמיע אותו באמצעות גירוסקופ, והחיישן הזה לא יכול להשתמש בקלט של גירוסקופ.
בחיישן Rotation וקטור מוסבר איך להגדיר את 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
: כיוון azimuth, הזווית בין כיוון הצפון המגנטי לבין ציר 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.
חשוב לזכור שמסיבות היסטוריות, זווית הרוחב היא חיובית בכיוון השעון. (מבחינה מתמטית, הערך צריך להיות חיובי בכיוון נגד כיוון השעון):
ההגדרה הזו שונה מהגדרות של תנועת יאוו (yaw), תנועת נטייה (pitch) ותנועת רוטציה (roll) שמשמשות בתחום התעופה, שבהן ציר X נמצא לאורך הצד הארוך של המטוס (מהזנב לחלק הקדמי).
חיישן הכיוון גם מדווח על מידת הדיוק הצפויה של הקריאות שלו דרך sensors_event_t.orientation.status
. למידע נוסף על הערכים האפשריים בשדה הזה, אפשר לעיין בקבועים של
SensorManager
SENSOR_STATUS_*
.
חיישנים לא מכוילים
חיישנים לא מכוילים מספקים תוצאות גולמיות יותר ועשויים לכלול הטיה מסוימת, אבל הם מכילים גם פחות 'קפיצות' מתיקונים שהוחלו במהלך הכיול. יכול להיות שחלק מהאפליקציות יעדיפו את התוצאות הלא מתואמות האלה כי הן חלקות ואמינות יותר. לדוגמה, אם אפליקציה מנסה לבצע שילוב נתונים של חיישנים בעצמה, הוספת כיול עלולה למעשה לעוות את התוצאות.
מד התאוצה לא מכויל
החיישן הפיזי הבסיסי: מד תאוצה
סטטוס הדיווח: מתמשך
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
מחזירה חיישן ללא התעוררות
חיישן תאוצה לא מכוונן מדווח על תאוצת המכשיר לאורך שלושת צירי החיישן ללא תיקון הטיה (הטיה מברירת המחדל ותיקון הטמפרטורה חלים על מדידות לא מכווננות), יחד עם אומדן הטיה.
כל הערכים הם ביחידות SI (m/s^2) ומדווחים בשדות של sensors_event_t.uncalibrated_accelerometer
:
x_uncalib
: תאוצה (ללא תיקון הטיה) לאורך ציר ה-Xy_uncalib
: תאוצה (ללא תיקון הטיה) לאורך ציר ה-Yz_uncalib
: תאוצה (ללא תיקון הטיה) לאורך ציר Zx_bias
: הטיה משוערת לאורך ציר ה-Xy_bias
: הטיה משוערת לאורך ציר ה-Yz_bias
: הטיה משוערת לאורך ציר Z
הג'ירוסקופ לא מכויל
החיישן הפיזי הבסיסי: ג'ירוסקופ
סטטוס הדיווח: רציף
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)
מחזיר חיישן שאי אפשר להוציא ממצב שינה
ג'ירוסקופ לא מכוונן מדווח על קצב הסיבוב סביב צירי החיישן בלי להחיל עליהם תיקון הטיה, יחד עם אומדן הטיה. כל
הערכים מסודרים ברדיאנים לשנייה ומדווחים בשדות של sensors_event_t.uncalibrated_gyro
:
x_uncalib
: מהירות זוויתית (ללא תיקון של סטייה) סביב ציר ה-Xy_uncalib
: מהירות זוויתית (ללא תיקון של סטייה) סביב ציר ה-Yz_uncalib
: מהירות זוויתית (ללא תיקון של סטייה) סביב ציר Zx_bias
: סטייה משוערת סביב ציר ה-Xy_bias
: סטייה משוערת סביב ציר ה-Yz_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
: שדה מגנטי (ללא תיקון לברזל קשיח) לאורך ציר Xy_uncalib
: שדה מגנטי (ללא פיצוי ברזל) לאורך ציר ה-Yz_uncalib
: שדה מגנטי (ללא תיקון לברזל קשיח) לאורך ציר Zx_bias
: הטיות משוערות של ברזל קשיח לאורך ציר ה-Xy_bias
: הטיה משוערת של רכיב ברזל קשיח לאורך ציר ה-Yz_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_HINGE_ANGLE)
מחזיר חיישן התעוררות
חיישן זווית הציר מודד את הזווית, במעלות, בין שני חלקים אינטגרליים של המכשיר. תנועה של ציר שנמדדת על ידי סוג החיישן הזה צפויה לשנות את הדרכים שבהן המשתמש יכול לקיים אינטראקציה עם המכשיר, למשל, על ידי פתיחה או חשיפת מסך.
חיישנים מורכבים של אינטראקציה
חיישנים מסוימים משמשים בעיקר לזיהוי אינטראקציות עם המשתמש. אנחנו לא מגדירים איך צריך להטמיע את החיישנים האלה, אבל הם צריכים להיות בעוצמה נמוכה ובאחריות יצרן המכשיר לבדוק את האיכות שלהם מבחינת חוויית המשתמש.
תנועת ההשכמה
חיישנים פיזיים בסיסיים: לא מוגדר (כל דבר עם צריכת אנרגיה נמוכה)
Reporting-mode: One-shot
צריכת אנרגיה נמוכה
מטמיעים רק את גרסת ההתעוררות של החיישן הזה.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
מחזירה חיישן התעוררות
חיישן תנועות להפעלה מאפשר להפעיל את המכשיר על סמך תנועה ספציפית למכשיר. כשהחיישן הזה מופעל, המכשיר פועל כאילו על לחצן ההפעלה נלחץ ומדליק את המסך. המשתמש יכול להשבית את ההתנהגות הזו (הפעלת המסך כשהחיישן הזה מופעל) בהגדרות המכשיר. שינויים בהגדרות לא משפיעים על התנהגות החיישן: הם משפיעים רק על האופן שבו המסגרת מפעילה את המסך כשהיא מופעלת. התנועה בפועל שצריך לזהות לא צוינה, ומיצרן המכשיר יכול לבחור אותה.
חיישן כזה צריך להיות בעל צריכת אנרגיה נמוכה, כי סביר להניח שהוא יופעל מסביב לשעון.
כל אירוע של חיישן מדווח על 1
ב-sensors_event_t.data[0]
.
תנועת איסוף
חיישנים פיזיים בסיסיים: לא מוגדר (כל דבר עם צריכת אנרגיה נמוכה)
Reporting-mode: One-shot
צריכת אנרגיה נמוכה
מטמיעים רק את גרסת ההתעוררות של החיישן הזה.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
מחזירה חיישן התעוררות
חיישן תנועת ההרמה מופעל כשאתם מרימים את המכשיר, ללא קשר למיקום הקודם שלו (שולחן, כיס, תיק).
כל אירוע חיישן מדווח על 1
ב-sensors_event_t.data[0]
.
תנועת מבט
חיישנים פיזיים בסיסיים: לא מוגדר (כל דבר עם צריכת אנרגיה נמוכה)
Reporting-mode: One-shot
עוצמה נמוכה
מטמיעים רק את גרסת ההתעוררות של החיישן הזה.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
מחזירה חיישן התעוררות
חיישן תנועת מבט מאפשר להפעיל לזמן קצר את המסך כדי לאפשר למשתמש להביט בתוכן במסך על סמך תנועה ספציפית. כשהחיישן הזה מופעל, המסך במכשיר יופעל לרגע כדי לאפשר למשתמש להציץ בהתראות או בתוכן אחר, בזמן שהמכשיר נשאר נעול במצב לא אינטראקטיבי (שינה). לאחר מכן המסך יכבה שוב. המשתמש יכול להשבית את ההתנהגות הזו (הפעלה קצרה של המסך כשהחיישן הזה מופעל) בהגדרות המכשיר. שינויים בהגדרות לא משפיעים על התנהגות החיישן: הם משפיעים רק על האופן שבו המסגרת מפעילה את המסך לזמן קצר כשהיא מופעלת. התנועה בפועל שצריך לזהות לא צוינה, ומיצרן המכשיר יכול לבחור אותה.
חיישן כזה צריך להיות בעל צריכת אנרגיה נמוכה, כי סביר להניח שהוא יופעל מסביב לשעון.
כל אירוע חיישן מדווח על 1
ב-sensors_event_t.data[0]
.
חיישני IMU עם צירים מוגבלים
זמינים ב-Android 13. חיישני IMU עם צירים מוגבלים
הם חיישנים שתומכים בתרחישים לדוגמה שבהם לא כל שלושת הצירים
זמינים. סוגי IMU רגילים ב-Android (כמו
SENSOR_TYPE_ACCELEROMETER
ו-
SENSOR_TYPE_GYROSCOPE
) מניחים שיש תמיכה בכל שלושת הצירים. עם זאת, לא כל המכשירים והעיצובים תומכים ב-3-axis accelerometers וב-3-axis gyroscopes.
צירים מוגבלים של מד תאוצה
חיישנים פיזיים בסיסיים: מד תאוצה
מצב דיווח: רציף
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
מחזירה חיישן ללא התעוררות
חיישן תאוצה עם צירים מוגבלים שווה ל-TYPE_ACCELEROMETER
, אבל תומך במקרים שבהם ציר אחד או שניים לא נתמכים.
שלושת ערכי האירועים האחרונים של החיישן שדווחו על ידי החיישן מייצגים את התמיכה בערך התאוצה של צירי x, y ו-z. הערך 1.0
מציין שהציר נתמך, והערך 0
מציין שהוא לא נתמך. יצרני המכשירים מזהים את הצירים הנתמכים בזמן ה-build והערכים לא משתנים במהלך זמן הריצה.
יצרני המכשירים חייבים להגדיר את ערכי התאוצה לציונים 0
לציונים של צירים שלא בשימוש, במקום להגדיר ערכים לא מוגדרים.
צירים מוגבלים של ג'ירוסקופ
חיישנים פיזיים בסיסיים: ג'ירוסקופ
סטטוס הדיווח: מתמשך
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
מחזירה חיישן ללא התעוררות
חיישן ג'ירוסקופ עם צירים מוגבלים שווה ל-TYPE_GYROSCOPE
, אבל תומך במקרים שבהם ציר אחד או שניים לא נתמכים.
שלושת ערכי האירועים האחרונים של החיישן שדווחו על ידי החיישן מייצגים את התמיכה בערך המהירות הזוויתית של צירי x, y ו-z. הערך 1.0
מציין שהציר נתמך, והערך 0
מציין שהוא לא נתמך. יצרני המכשירים מזהים את הצירים הנתמכים בזמן ה-build, והערכים לא משתנים במהלך זמן הריצה.
יצרני המכשירים חייבים להגדיר את ערכי המהירות הזוויתית של צירים שלא בשימוש לערך 0
.
צירים מוגבלים של מד תאוצה לא מכוילים
חיישנים פיזיים בסיסיים: מד תאוצה
סטטוס הדיווח: מתמשך
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
מחזירה חיישן ללא התעוררות
חיישן לא מכויל עם צירים מוגבל במד תאוצה זהה ל-TYPE_ACCELEROMETER_UNCALIBRATED
, אבל הוא תומך במקרים שבהם אין תמיכה בציר אחד או שניים.
שלושת ערכי האירועים האחרונים של החיישן שדווחו על ידי החיישן מייצגים את התמיכה בערכי האצה ובייסוס לצירים x, y ו-z. ערך של 1.0
מציין שיש תמיכה בציר, וערך של 0
מציין שאין תמיכה בו. יצרני המכשירים מזהים את הצירים הנתמכים בזמן ה-build, והערכים לא משתנים במהלך זמן הריצה.
יצרני המכשירים חייבים להגדיר ל-0
את ערכי ההאצה וההטיה של צירים שלא בשימוש.
מספר מוגבל של צירים בג'ירוסקופ לא מכויל
חיישנים פיזיים בסיסיים: ג'יירוסקופ
סטטוס הדיווח: מתמשך
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
מחזירה חיישן ללא התעוררות
חיישן ג'ירוסקופ עם צירים מוגבלים ולא מכויל שווה ל-TYPE_GYROSCOPE_UNCALIBRATED
, אבל תומך במקרים שבהם אין תמיכה בציר אחד או בשניים.
שלושת ערכי האירועים האחרונים של החיישן שדווחו על ידי החיישן מייצגים את התמיכה בערכי המהירות הזוויתית והסטייה בציריות x, y ו-z. ערך של 1.0
מציין שיש תמיכה בציר, וערך של 0
מציין שאין תמיכה בו. יצרני המכשירים מזהים את הצירים הנתמכים בזמן ה-build והערכים לא משתנים במהלך זמן הריצה.
יצרני המכשירים צריכים להגדיר את המהירות הזוויתית ואת ערכי הסחף של צירים
שלא בשימוש ל-0
.
IMU עם צירים מוגבלים
חיישנים פיזיים בסיסיים: כל שילוב של מד תאוצה ב-3 צירים, ג'ירוסקופ עם 3 צירים, מד תאוצה לא מכויל ב-3 צירים וג'ירוסקופ עם 3 צירים חיישנים לא מכוילים.
סטטוס הדיווח: מתמשך
חיישן IMU מורכב עם צירים מוגבלים שווה ערך לחיישן IMU עם צירים מוגבלים, אבל במקום לקבל תמיכה ב-HAL, הוא ממיר את נתוני החיישן עם 3 הצירים לאפשרויות המקבילות עם צירים מוגבלים. החיישנים המשולבים האלה מופעלים רק במכשירים לרכב.
בטבלה הבאה מוצגת דוגמה להמרה ממכשיר תאוצה סטנדרטי בן 3 צירים למכשיר תאוצה מורכב עם צירים מוגבלים.
ערכים של SensorEvent עבור SENSOR_TYPE_ACCELEROMETER | דוגמה ל-SensorEvent מסוג SENSOR_TYPE_ACCELEROMETER | אירוע חיישן מרוכב SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES |
---|---|---|
ערכים[0] | -0.065 |
0.065- |
values[1] | 0.078 |
0.078 |
ערכים[2] | 9.808 |
9.808 |
values[3] | לא רלוונטי |
1.0 |
values[4] | לא רלוונטי |
1.0 |
ערכים[5] | לא רלוונטי |
1.0 |
חיישנים לכלי רכב
חיישנים שתומכים בתרחישים לדוגמה בכלי רכב.
כותרת
חיישנים פיזיים בסיסיים: כל שילוב של GPS, מגנטומטר, מד תאוצה וג'ירוסקופ.
סטטוס הדיווח: רציף
getDefaultSensor(SENSOR_TYPE_HEADING)
מחזיר חיישן שאי אפשר להוציא ממצב שינה
חיישן כיוון זמין ב-Android 13, והוא מודד את הכיוון שאליו המכשיר מכוון ביחס לצפון האמיתי, במדידה בפרוגרסיב. חיישן הכיוון כולל שני ערכים של SensorEvent
.
אחת עבור כיוון המכשיר שנמדד ואחת עבור הדיוק של ערך הכיוון שסופק.
ערכי הכותרות המדווחים על ידי החיישן הזה חייבים להיות בין
0.0
(כולל) לבין 360.0
(לא כולל), כאשר
0
מציין את צפון, 90
מזרח, 180
דרום ו-270
מערב.
רמת הדיוק של החיישן הזה מוגדרת ברמת סמך של 68%. במקרה שבו ההתפלגות הבסיסית היא נורמלית גאוסיאנית, הדיוק הוא סטיית תקן אחת. לדוגמה, אם חיישן הכיוון מחזיר ערך כיוון של 60 מעלות וערך דיוק של 10 מעלות, יש 68% סבירות שהכיוון האמיתי הוא בין 50 מעלות ל-70 מעלות.