בקטע הזה מתוארים צירי חיישנים, חיישנים בסיסיים וחיישנים מורכבים (פעילות, תנוחה, לא מכויל ואינטראקציה).
צירים של חיישנים
ערכים של אירועי חיישנים מחיישני רבים מפורטים בפריים ספציפי שהוא סטטי ביחס למכשיר.
צירים של מכשירים ניידים
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 מיקרו-וואט, והרצה של אלגוריתם כלשהו, שתצרוך עוד 900 מיקרו-וואט.
- במקרה כזה, צריכת האנרגיה המקסימלית של חיישן 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
.
הקריאות מתכווננות באמצעות:
- פיצוי טמפרטורה
- כיול ברזל רך (soft-iron) במפעל (או באינטרנט)
- כיול ציוד כבדה באינטרנט
ג'ירוסקופ
סטטוס הדיווח: מתמשך
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% ממספר הצעדים בפועל. גם גלאי הצעדים וגם ספירת הצעדים מזהים מתי המשתמש הולך, רץ ועולה במדרגות. הן לא אמורות להופיע כשהמשתמש רוכב על אופניים, נוהג או נמצא בכלי רכב אחרים.
החומרה צריכה לוודא שמספר הצעדים הפנימי אף פעם לא יחרוג מ-overflow. הגודל המינימלי של המונה הפנימי של החומרה הוא 16 ביט. במקרה של סכנה ממשית של חריגה ממכסת הנתונים (לכל היותר בכל 2^16 שלבים), אפשר להעיר את ה-SoC כדי שהדרייבר יוכל לבצע את תחזוקת המונה.
כפי שצוין בקטע אינטראקציה, בזמן שהחיישן הזה פועל, הוא לא יפריע לחישה של חיישנים אחרים, במיוחד לחיישן ה-accelerometer, שעשוי להיות בשימוש.
אם מכשיר מסוים לא יכול לתמוך במצבי הפעולה האלה, ה-HAL לא צריך לדווח על סוג החיישן הזה. כלומר, אסור "להפעיל בתוכנה" את החיישן הזה ב-HAL.
צריך להיות לחיישן הזה צריכת אנרגיה נמוכה. כלומר, אם אי אפשר לזהות את הצעדים בחומרה, לא צריך להגדיר את החיישן הזה. באופן ספציפי, כשמונה הצעדים מופעל ומד התאוצה לא מופעל, רק צעדים צריכים להפעיל הפסקות (ולא נתוני מד התאוצה).
גלאי הטיה
החיישן הפיזי הבסיסי: מד תאוצה (וגם יכול להיות חיישנים אחרים, כל עוד הם צורכים מעט אנרגיה)
Reporting-mode: Special
צריכת אנרגיה נמוכה
מטמיעים רק את גרסת ההתעוררות של החיישן הזה.
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)
מחזירה חיישן ללא התעוררות
וקטור סיבוב גיאו-מגנטי דומה לחיישן וקטור סיבוב, אבל הוא משתמש במגנטומטר ולא בג'ירוסקופ.
החיישן הזה חייב להיות מבוסס על מגנטומטר. אי אפשר להטמיע אותו באמצעות גירוסקופ, והחיישן הזה לא יכול להשתמש בקלט של גירוסקופ.
במאמר בנושא החיישן וקטור סיבוב מוסבר איך מגדירים את הערך של 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
. למידע נוסף על הערכים האפשריים בשדה הזה, אפשר לעיין במאמר בנושא הקבועים
SENSOR_STATUS_*
של
SensorManager
.
חיישנים לא מכוילים
חיישנים לא מכוילים מספקים תוצאות גולמיות יותר ועשויים לכלול הטיה מסוימת, אבל הם מכילים גם פחות 'קפיצות' מתיקונים שהוחלו במהלך הכיול. יכול להיות שחלק מהאפליקציות יעדיפו את התוצאות הלא מתואמות האלה כי הן חלקות ואמינות יותר. לדוגמה, אם אפליקציה מנסה לבצע שילוב נתונים של חיישנים בעצמה, הוספת כיול עלולה למעשה לעוות את התוצאות.
מד התאוצה לא מכוונן
החיישן הפיזי הבסיסי: מד תאוצה
סטטוס הדיווח: מתמשך
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 עם צירים מוגבלים
חיישני IMU עם צירים מוגבלים זמינים החל מ-Android 13. הם חיישנים שתומכים בתרחישי שימוש שבהם לא כל שלושת הצירים (x, y, z) זמינים. סוגי 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 | אירוע SensorEvent מורכב מסוג SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES |
---|---|---|
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, ומדד את הכיוון שאליו המכשיר מכוון ביחס לצפון האמיתי, במדידה ב-degrees. חיישן הכיוון כולל שני ערכים של SensorEvent
.
אחד עבור כיוון המכשיר שנמדד, ואחד עבור הדיוק של ערך הכיוון שסופק.
ערכי הכיוון שמדווחים על ידי החיישן הזה חייבים להיות בין 0.0
(כולל) ל-360.0
(לא כולל), כאשר 0
מציין צפון, 90
מזרח, 180
דרום ו-270
מערב.
רמת הדיוק של החיישן הזה מוגדרת ברמת סמך של 68%. במקרה שבו ההתפלגות הבסיסית היא נורמלית גאוסיאנית, הדיוק הוא סטיית תקן אחת. לדוגמה, אם חיישן הכיוון מחזיר ערך כיוון של 60 מעלות וערך דיוק של 10 מעלות, יש 68% סבירות שהכיוון האמיתי הוא בין 50 מעלות ל-70 מעלות.