ส่วนนี้อธิบายเกี่ยวกับแกนเซนเซอร์ เซนเซอร์ฐาน และเซนเซอร์แบบผสม (กิจกรรม ทัศนคติ ไม่ได้ปรับเทียบ และปฏิสัมพันธ์)
แกนเซนเซอร์
ค่าเหตุการณ์ของเซ็นเซอร์จากเซ็นเซอร์จำนวนมากจะแสดงในเฟรมเฉพาะที่คงที่เมื่อเทียบกับอุปกรณ์
แกนอุปกรณ์เคลื่อนที่
Sensor API สัมพันธ์กับการวางแนวตามธรรมชาติของหน้าจอเท่านั้น (แกนจะไม่ถูกสลับเมื่อการวางแนวหน้าจอของอุปกรณ์เปลี่ยนไป

รูปที่ 1 ระบบพิกัด (เทียบกับอุปกรณ์เคลื่อนที่) ที่ใช้โดย Sensor API
แกนยานยนต์
ในการใช้งาน Android Automotive แกนถูกกำหนดให้สัมพันธ์กับโครงตัวรถ ที่มาของกรอบอ้างอิงรถยนต์คือศูนย์กลางของเพลาล้อหลัง กรอบอ้างอิงยานพาหนะถูกจัดวางเพื่อให้:
- แกน X ชี้ไปทางขวาและอยู่บนระนาบแนวนอน ตั้งฉากกับระนาบของยานพาหนะสมมาตร
- แกน Y ชี้ไปข้างหน้าและอยู่บนระนาบแนวนอน

รูปที่ 2 ระบบพิกัด (สัมพันธ์กับอุปกรณ์ยานยนต์) ที่ใช้โดย Sensor API
กรอบอ้างอิงยานพาหนะเป็นระบบพิกัดที่ถนัดขวา ดังนั้นแกน 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 uW แม้ว่าการใช้พลังงานที่วัดที่ตัวนำชิปบารอมิเตอร์จะเป็น 100uW
- เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็กที่กินไฟ 100uW เมื่อสอบเทียบ แต่จะสิ้นเปลืองมากขึ้นเมื่อทำการปรับเทียบ
- ขั้นตอนการสอบเทียบอาจต้องเปิดใช้งานไจโรสโคป กินไฟ 5,000 uW และใช้อัลกอริธึมบางอย่าง ซึ่งมีค่าใช้จ่ายอีก 900 uW
- ในสถานการณ์นี้ เราบอกว่าการใช้พลังงานสูงสุดของเซ็นเซอร์ Android (เครื่องวัดแม่เหล็ก) คือ 6000 uW
- ในกรณีนี้ การใช้พลังงานโดยเฉลี่ยเป็นการวัดที่มีประโยชน์มากกว่า และเป็นสิ่งที่รายงานในลักษณะสถิตของเซ็นเซอร์ผ่าน HAL
มาตรความเร่ง
โหมดการรายงาน: ต่อเนื่อง
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)
ส่งคืนเซ็นเซอร์ที่ไม่ปลุก
เซ็นเซอร์มาตรความเร่งรายงานความเร่งของอุปกรณ์ตามแกนเซ็นเซอร์ทั้งสาม ความเร่งที่วัดได้นั้นมีทั้งความเร่งทางกายภาพ (การเปลี่ยนแปลงของความเร็ว) และความโน้มถ่วง มีการรายงานการวัดในฟิลด์ x, y และ z ของ sensors_event_t.acceleration
ค่าทั้งหมดอยู่ในหน่วย SI (m/s^2) และวัดความเร่งของอุปกรณ์ลบแรงโน้มถ่วงตามแกนเซ็นเซอร์ทั้งสาม
นี่คือตัวอย่าง:
- บรรทัดฐานของ (x, y, z) ควรใกล้เคียงกับ 0 เมื่อตกอย่างอิสระ
- เมื่ออุปกรณ์วางราบบนโต๊ะและผลักไปทางด้านซ้ายไปทางขวา ค่าความเร่ง x จะเป็นค่าบวก
- เมื่ออุปกรณ์วางราบบนโต๊ะ ค่าความเร่งตาม z คือ +9.81 alo ซึ่งสอดคล้องกับความเร่งของอุปกรณ์ (0 m/s^2) ลบแรงโน้มถ่วง (-9.81 m/s^2)
- เมื่ออุปกรณ์วางราบบนโต๊ะและผลักขึ้นไปบนฟ้า ค่าความเร่งจะมากกว่า +9.81 ซึ่งสอดคล้องกับความเร่งของอุปกรณ์ (+A m/s^2) ลบแรงโน้มถ่วง (-9.81 ม. /s^2).
การอ่านจะถูกปรับเทียบโดยใช้:
- การชดเชยอุณหภูมิ
- การสอบเทียบอคติออนไลน์
- การสอบเทียบมาตราส่วนออนไลน์
การสอบเทียบอคติและมาตราส่วนต้องได้รับการอัปเดตในขณะที่ปิดใช้งานเซ็นเซอร์เท่านั้น เพื่อหลีกเลี่ยงไม่ให้ค่าเพิ่มขึ้นระหว่างการสตรีม
มาตรความเร่งยังรายงานความแม่นยำที่คาดว่าจะอ่านได้ผ่าน sensors_event_t.acceleration.status
ดูค่าคงที่ SensorManager
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
และค่าทั้งหมดอยู่ใน micro-Tesla (uT)
เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็กยังรายงานด้วยว่าคาดว่าการอ่านค่าจะแม่นยำเพียงใดผ่าน sensors_event_t.magnetic.status
ดูค่าคงที่ SensorManager
SENSOR_STATUS_*
ของ SensorManager สำหรับข้อมูลเพิ่มเติมเกี่ยวกับค่าที่เป็นไปได้สำหรับฟิลด์นี้
การอ่านจะถูกปรับเทียบโดยใช้:
- การชดเชยอุณหภูมิ
- การสอบเทียบเหล็กอ่อนจากโรงงาน (หรือออนไลน์)
- การสอบเทียบเหล็กแข็งออนไลน์
ไจโรสโคป
โหมดการรายงาน: ต่อเนื่อง
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
ส่งคืนเซ็นเซอร์ที่ไม่ปลุก
เซ็นเซอร์ไจโรสโคปรายงานอัตราการหมุนของอุปกรณ์รอบแกนเซ็นเซอร์ทั้งสาม
การหมุนเป็นบวกในทิศทางทวนเข็มนาฬิกา (กฎมือขวา) กล่าวคือ ผู้สังเกตมองจากตำแหน่งที่เป็นบวกบนแกน x, y หรือ z ที่อุปกรณ์ที่วางตำแหน่งที่จุดเริ่มต้นจะรายงานการหมุนในเชิงบวกหากอุปกรณ์ดูเหมือนหมุนทวนเข็มนาฬิกา โปรดทราบว่านี่เป็นคำจำกัดความทางคณิตศาสตร์มาตรฐานของการหมุนเป็นบวก และไม่เห็นด้วยกับคำจำกัดความของการหมุนในอวกาศ
การวัดถูกรายงานในฟิลด์ x, y และ z ของ sensors_event_t.gyro
และค่าทั้งหมดอยู่ในหน่วยเรเดียนต่อวินาที (rad/s)
การอ่านจะถูกปรับเทียบโดยใช้:
- การชดเชยอุณหภูมิ
- การชดเชยมาตราส่วนโรงงาน (หรือออนไลน์)
- การสอบเทียบอคติออนไลน์ (เพื่อลบดริฟท์)
ไจโรสโคปยังรายงานความแม่นยำที่คาดว่าจะอ่านได้จาก sensors_event_t.gyro.status
ดูค่าคงที่ SensorManager
SENSOR_STATUS_*
ของ SensorManager สำหรับข้อมูลเพิ่มเติมเกี่ยวกับค่าที่เป็นไปได้สำหรับฟิลด์นี้
ไม่สามารถจำลองไจโรสโคปโดยอาศัยสนามแม่เหล็กและมาตรความเร่งได้ เนื่องจากจะทำให้ความสอดคล้องและการตอบสนองในพื้นที่ลดลง จะต้องใช้ชิปไจโรสโคปปกติ
อัตราการเต้นของหัวใจ
โหมดการรายงาน: On-change
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
ส่งคืนเซ็นเซอร์ที่ไม่ปลุก
เซ็นเซอร์วัดอัตราการเต้นของหัวใจจะรายงานอัตราการเต้นของหัวใจในปัจจุบันของผู้สัมผัสอุปกรณ์
อัตราการเต้นของหัวใจปัจจุบันเป็นอัตราการเต้นของหัวใจต่อนาที (BPM) จะรายงานใน sensors_event_t.heart_rate.bpm
และสถานะของเซ็นเซอร์จะรายงานใน sensors_event_t.heart_rate.status
ดูค่าคงที่ SensorManager
SENSOR_STATUS_*
ของ SensorManager สำหรับข้อมูลเพิ่มเติมเกี่ยวกับค่าที่เป็นไปได้สำหรับฟิลด์นี้ โดยเฉพาะอย่างยิ่ง เมื่อเปิดใช้งานครั้งแรก เว้นแต่ทราบว่าอุปกรณ์ไม่อยู่ในร่างกาย ฟิลด์สถานะของเหตุการณ์แรกจะต้องตั้งค่าเป็น SENSOR_STATUS_UNRELIABLE
เนื่องจากเซ็นเซอร์นี้มีการเปลี่ยนแปลง เหตุการณ์จะถูกสร้างขึ้นก็ต่อเมื่อ heart_rate.bpm
หรือ heart_rate.status
มีการเปลี่ยนแปลงตั้งแต่เหตุการณ์ล่าสุด เหตุการณ์ถูกสร้างขึ้นไม่เร็วไปกว่าทุกๆ sampling_period
ช่วงเวลา
sensor_t.requiredPermission
เป็น SENSOR_PERMISSION_BODY_SENSORS
เสมอ
แสงสว่าง
โหมดการรายงาน: On-change
getDefaultSensor(SENSOR_TYPE_LIGHT)
ส่งคืนเซ็นเซอร์ที่ไม่ปลุก
เซ็นเซอร์วัดแสงรายงานการส่องสว่างในปัจจุบันในหน่วย SI ลักซ์
รายงานการวัดค่าใน sensors_event_t.light
ความใกล้ชิด
โหมดการรายงาน: On-change
มักจะกำหนดเป็นเซ็นเซอร์ปลุก
getDefaultSensor(SENSOR_TYPE_PROXIMITY)
ส่งคืนเซ็นเซอร์ปลุก
พรอกซิมิตี้เซนเซอร์จะรายงานระยะห่างจากเซนเซอร์ไปยังพื้นผิวที่มองเห็นได้ใกล้เคียงที่สุด
Proximity Sensor ของ 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)
ส่งคืนเซ็นเซอร์ที่ไม่ปลุก
เซ็นเซอร์ความชื้นสัมพัทธ์จะวัดความชื้นสัมพัทธ์ของอากาศแวดล้อมและส่งกลับค่าเป็นเปอร์เซ็นต์
ประเภทเซ็นเซอร์คอมโพสิต
เซ็นเซอร์คอมโพสิตสร้างข้อมูลโดยการประมวลผลและ/หรือการรวมข้อมูลจากเซ็นเซอร์ทางกายภาพหนึ่งตัวหรือหลายตัว (เซ็นเซอร์ใดๆ ที่ไม่ใช่เซ็นเซอร์ฐานจะเรียกว่าเซ็นเซอร์คอมโพสิต) ตัวอย่างของเซ็นเซอร์คอมโพสิต ได้แก่
- ตัว ตรวจจับขั้นตอน และ การเคลื่อนไหว ที่สำคัญ ซึ่งมักจะใช้มาตรความเร่ง แต่อาจอิงจากเซ็นเซอร์อื่นๆ ด้วย หากการใช้พลังงานและความแม่นยำเป็นที่ยอมรับ
- เวกเตอร์การหมุนของเกม ตามมาตรความเร่งและไจโรสโคป
- ไจโรสโคป ที่ไม่ได้ปรับเทียบ ซึ่งคล้ายกับเซ็นเซอร์ฐานไจโรสโคป แต่มีการรายงานการสอบเทียบอคติแยกกันแทนที่จะได้รับการแก้ไขในการวัด
เช่นเดียวกับเซนเซอร์ฐาน ลักษณะของเซนเซอร์แบบผสมจะมาจากคุณลักษณะของข้อมูลขั้นสุดท้าย ตัวอย่างเช่น การใช้พลังงานของเวกเตอร์การหมุนของเกมน่าจะเท่ากับผลรวมของการใช้พลังงานของชิปมาตรความเร่ง ชิปไจโรสโคป ชิปที่ประมวลผลข้อมูล และบัสที่ส่งข้อมูล อีกตัวอย่างหนึ่ง การดริฟท์ของเวกเตอร์การหมุนของเกมขึ้นอยู่กับคุณภาพของอัลกอริธึมการสอบเทียบมากพอๆ กับลักษณะเซ็นเซอร์ทางกายภาพ
ตารางต่อไปนี้แสดงรายการประเภทเซ็นเซอร์คอมโพสิตที่มีจำหน่าย เซ็นเซอร์คอมโพสิตแต่ละตัวอาศัยข้อมูลจากเซ็นเซอร์ทางกายภาพหนึ่งตัวหรือหลายตัว หลีกเลี่ยงการเลือกเซ็นเซอร์ทางกายภาพที่อยู่ด้านล่างอื่นๆ เพื่อประมาณผลลัพธ์ เนื่องจากจะทำให้ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี
ประเภทเซนเซอร์ | หมวดหมู่ | เซ็นเซอร์ทางกายภาพพื้นฐาน | โหมดการรายงาน |
---|---|---|---|
ทัศนคติ | มาตรความเร่ง ไจโรสโคป ไม่ต้องใช้เครื่องวัดสนามแม่เหล็ก | ต่อเนื่อง | |
ทัศนคติ | มาตรความเร่ง แมกนีโตมิเตอร์ ไม่ต้องใช้ไจโรสโคป | ต่อเนื่อง | |
ท่าทางเย่อหยิ่ง ![]() | ปฏิสัมพันธ์ | ไม่ได้กำหนด | นัดเดียว |
ทัศนคติ | มาตรความเร่ง ไจโรสโคป | ต่อเนื่อง | |
ไม่สอบเทียบ | ไจโรสโคป | ต่อเนื่อง | |
กิจกรรม | มาตรความเร่ง ไจโรสโคป (ถ้ามี) หรือเครื่องวัดความเข้มข้นของสนามแม่เหล็ก (หากไม่มีไจโร) | ต่อเนื่อง | |
ไม่สอบเทียบ | เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก | ต่อเนื่อง | |
การวางแนว (เลิกใช้แล้ว) | ทัศนคติ | มาตรความเร่ง แมกนีโตมิเตอร์ ไจโรสโคป (ถ้ามี) | ต่อเนื่อง |
ปฏิสัมพันธ์ | ไม่ได้กำหนด | นัดเดียว | |
ทัศนคติ | มาตรความเร่ง แมกนีโตมิเตอร์ ไจโรสโคป | ต่อเนื่อง | |
กิจกรรม | มาตรความเร่ง (หรืออย่างอื่นที่ใช้พลังงานต่ำมาก) | นัดเดียว | |
กิจกรรม | มาตรความเร่ง | เมื่อเปลี่ยน | |
กิจกรรม | มาตรความเร่ง | พิเศษ | |
กิจกรรม | มาตรความเร่ง | พิเศษ | |
ปฏิสัมพันธ์ | ไม่ได้กำหนด | นัดเดียว |
= เซ็นเซอร์กำลังต่ำ
เซ็นเซอร์ประกอบกิจกรรม
การเร่งความเร็วเชิงเส้น
เซ็นเซอร์ทางกายภาพพื้นฐาน: มาตรความเร่งและ (ถ้ามี) ไจโรสโคป (หรือแมกนีโตมิเตอร์หากไม่มีไจโรสโคป)
โหมดการรายงาน: ต่อเนื่อง
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
และถูกรีเซ็ตเป็นศูนย์เมื่อรีบูตระบบเท่านั้น
การประทับเวลาของกิจกรรมถูกตั้งค่าเป็นเวลาที่มีการดำเนินการขั้นตอนสุดท้ายสำหรับกิจกรรมนั้น
ดูประเภทเซ็นเซอร์ ตรวจจับขั้นตอน สำหรับความหมายของเวลาของขั้นตอน
เมื่อเทียบกับตัวตรวจจับขั้นตอน ตัวนับขั้นตอนสามารถมีเวลาแฝงที่สูงกว่า (สูงสุด 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 ถูกกำหนดให้เป็นพื้นฐาน orthonormal โดยตรงโดยที่:
- X ชี้ไปทางทิศตะวันออกและสัมผัสกับพื้น
- Y ชี้ไปทางทิศเหนือและสัมผัสกับพื้น
- Z ชี้ไปที่ท้องฟ้าและตั้งฉากกับพื้น
การวางแนวของโทรศัพท์จะแสดงด้วยการหมุนที่จำเป็นในการจัดแนวพิกัด East-North-Up กับพิกัดของโทรศัพท์ กล่าวคือ การใช้การหมุนกับกรอบโลก (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
คือพิกัด East-North-Up ของเวกเตอร์ความยาวหน่วยที่แทนแกนการหมุน - ที
theta
คือมุมการหมุน
quaternion เป็นหน่วย quaternion: ต้องเป็นบรรทัดฐาน 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)
ส่งคืนเซ็นเซอร์ที่ไม่ปลุก
เวกเตอร์การหมุนของ geomagnetic นั้นคล้ายกับเซ็นเซอร์เวกเตอร์การหมุน แต่ใช้เครื่องวัดสนามแม่เหล็กและไม่มีไจโรสโคป
เซ็นเซอร์นี้ต้องอาศัยเครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก ไม่สามารถใช้งานได้โดยใช้ไจโรสโคป และเซ็นเซอร์นี้ไม่สามารถใช้อินพุตไจโรสโคปได้
ดูเซ็นเซอร์ เวกเตอร์การหมุน สำหรับรายละเอียดเกี่ยวกับการตั้งค่า 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
: pitch, หมุนรอบแกน X (-180<=pitch<=180
) โดยมีค่าบวกเมื่อแกน Z เคลื่อนที่เข้าหาแกน Y -
sensors_event_t.orientation.z
: หมุน หมุนรอบแกน Y (-90<=roll<=90
) โดยมีค่าบวกเมื่อแกน X เคลื่อนเข้าหาแกน Z
ด้วยเหตุผลทางประวัติศาสตร์ มุมการหมุนจะเป็นบวกในทิศทางตามเข็มนาฬิกา (ในทางคณิตศาสตร์ มันควรจะเป็นบวกในทิศทางทวนเข็มนาฬิกา):

รูปที่ 3 การวางแนวที่สัมพันธ์กับอุปกรณ์
คำจำกัดความนี้แตกต่างจากการหันเห เอียง และม้วนตัวที่ใช้ในการบินโดยที่แกน X อยู่ตามด้านยาวของระนาบ (หางถึงจมูก)
เซ็นเซอร์การวางแนวยังรายงานความแม่นยำที่คาดว่าจะอ่านผ่าน sensors_event_t.orientation.status
ดูค่าคงที่ SensorManager
SENSOR_STATUS_*
ของ SensorManager สำหรับข้อมูลเพิ่มเติมเกี่ยวกับค่าที่เป็นไปได้สำหรับฟิลด์นี้
เซ็นเซอร์ที่ไม่ได้ปรับเทียบ
เซ็นเซอร์ที่ไม่ผ่านการปรับเทียบจะให้ผลลัพธ์ที่เป็นธรรมชาติมากกว่าและอาจรวมถึงอคติบางอย่าง แต่ยังมีการ "กระโดด" จากการแก้ไขที่ใช้ผ่านการสอบเทียบน้อยลง แอพบางตัวอาจชอบผลลัพธ์ที่ไม่ได้ปรับเทียบเหล่านี้ให้ราบรื่นและเชื่อถือได้มากกว่า ตัวอย่างเช่น หากแอปพยายามทำการฟิวชั่นเซ็นเซอร์ของตัวเอง การแนะนำการปรับเทียบอาจทำให้ผลลัพธ์บิดเบือนได้
มาตรความเร่งไม่ได้ปรับเทียบ
เซ็นเซอร์ทางกายภาพพื้นฐาน: มาตรความเร่ง
โหมดการรายงาน: ต่อเนื่อง
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
ส่งคืนเซ็นเซอร์ที่ไม่ปลุก
เซ็นเซอร์มาตรความเร่งที่ไม่ได้สอบเทียบจะรายงานการเร่งความเร็วของอุปกรณ์ตามแกนเซ็นเซอร์ทั้งสามโดยไม่มีการแก้ไขอคติใดๆ (ค่าอคติจากโรงงานและการชดเชยอุณหภูมิจะนำไปใช้กับการวัดที่ไม่ได้ปรับเทียบ) พร้อมกับค่าประมาณอคติ ค่าทั้งหมดอยู่ในหน่วย SI (m/s^2) และรายงานในฟิลด์ของ sensors_event_t.uncalibrated_accelerometer
:
-
x_uncalib
: การเร่งความเร็ว (ไม่มีการชดเชยอคติ) ตามแนวแกน X -
y_uncalib
: การเร่งความเร็ว (ไม่มีการชดเชยอคติ) ตามแนวแกน Y -
z_uncalib
: การเร่งความเร็ว (ไม่มีการชดเชยอคติ) ตามแนวแกน Z -
x_bias
: อคติโดยประมาณตามแกน X -
y_bias
: อคติโดยประมาณตามแกน Y -
z_bias
: อคติโดยประมาณตามแกน Z
ไจโรสโคปไม่ได้ปรับเทียบ
เซ็นเซอร์ตรวจจับทางกายภาพ: Gyroscope
โหมดการรายงาน: ต่อเนื่อง
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
หากการใช้งานไม่สามารถประมาณการดริฟท์ได้ ก็จะต้องไม่ใช้เซ็นเซอร์นี้
หากมีเซ็นเซอร์นี้ แสดงว่าต้องมีเซ็นเซอร์ Gyroscope ที่เกี่ยวข้องด้วย และเซ็นเซอร์ทั้งสองจะต้องใช้ค่า sensor_t.name
และ sensor_t.vendor
เดียวกัน
สนามแม่เหล็กไม่ได้ปรับเทียบ
เซ็นเซอร์ทางกายภาพพื้นฐาน: Magnetometer
โหมดการรายงาน: ต่อเนื่อง
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)
ส่งคืนเซ็นเซอร์ที่ไม่ปลุก
เซ็นเซอร์สนามแม่เหล็กที่ไม่ได้ปรับเทียบจะรายงานสนามแม่เหล็กโดยรอบพร้อมกับค่าประมาณการปรับเทียบเหล็กแข็ง ค่าทั้งหมดอยู่ใน micro-Tesla (uT) และถูกรายงานในฟิลด์ของ sensors_event_t.uncalibrated_magnetic
:
-
x_uncalib
: สนามแม่เหล็ก (ไม่มีการชดเชยเหล็กแข็ง) ตามแนวแกน X -
y_uncalib
: สนามแม่เหล็ก (ไม่มีการชดเชยเหล็กแข็ง) ตามแนวแกน Y -
z_uncalib
: สนามแม่เหล็ก (ไม่มีการชดเชยเหล็กแข็ง) ตามแนวแกน Z -
x_bias
: อคติเหล็กแข็งโดยประมาณตามแกน X -
y_bias
: อคติเหล็กแข็งโดยประมาณตามแกน Y -
z_bias
: อคติเหล็กแข็งโดยประมาณตามแกน Z
ตามแนวคิด การวัดที่ไม่ได้สอบเทียบคือผลรวมของการวัดที่ปรับเทียบแล้วและการประมาณการอคติ: _uncalibrated = _calibrated + _bias
เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็กที่ไม่ผ่านการปรับเทียบช่วยให้อัลกอริธึมระดับสูงขึ้นสามารถจัดการกับการประมาณค่าเหล็กแข็งที่ไม่ดีได้ ค่า x_bias
, y_bias
และ z_bias
คาดว่าจะเพิ่มขึ้นทันทีที่ค่าประมาณของเหล็กแข็งเปลี่ยนแปลง และค่าเหล่านี้ควรจะคงที่ตลอดเวลาที่เหลือ
ต้องใช้การสอบเทียบเหล็กอ่อนและการชดเชยอุณหภูมิกับการวัด นอกจากนี้ ต้องใช้การประมาณค่าแบบเหล็กแข็งเพื่อให้สามารถรายงานค่าประมาณที่สมเหตุสมผลใน x_bias
, y_bias
และ z_bias
หากการใช้งานไม่สามารถประมาณความเอนเอียงได้ ก็จะต้องไม่ใช้เซ็นเซอร์นี้
หากมีเซ็นเซอร์นี้ จะต้องมีเซ็นเซอร์สนามแม่เหล็กที่สอดคล้องกัน และเซ็นเซอร์ทั้งสองต้องใช้ค่า sensor_t.name
และ sensor_t.vendor
เดียวกัน
มุมบานพับ
โหมดการรายงาน: On-change
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)
ส่งคืนเซ็นเซอร์ปลุก
เซ็นเซอร์มุมบานพับจะวัดมุมเป็นองศาระหว่างส่วนสำคัญของอุปกรณ์สองส่วน การเคลื่อนไหวของบานพับที่วัดโดยเซ็นเซอร์ประเภทนี้คาดว่าจะเปลี่ยนวิธีที่ผู้ใช้สามารถโต้ตอบกับอุปกรณ์ได้ เช่น โดยการกางออกหรือเปิดเผยจอแสดงผล
เซ็นเซอร์คอมโพสิตเชิงโต้ตอบ
เซ็นเซอร์บางตัวส่วนใหญ่จะใช้เพื่อตรวจจับการโต้ตอบกับผู้ใช้ We don't define how those sensors must be implemented, but they must be low power and it's the responsibility of the device manufacturer to verify their quality in terms of user experience.
Wake up gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
returns a wake-up sensor
A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7.
Each sensor event reports 1
in sensors_event_t.data[0]
.
Pick up gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
returns a wake-up sensor
A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).
Each sensor event reports 1
in sensors_event_t.data[0]
.
Glance gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
returns a wake-up sensor
A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1
in sensors_event_t.data[0]
.
Limited axes IMU sensors
Available from Android 13, limited axes IMU sensors are sensors that support use cases where not all three axes (x, y, z) are available. Standard IMU types in Android (such as SENSOR_TYPE_ACCELEROMETER
and SENSOR_TYPE_GYROSCOPE
) assume that all three axes are supported. However, not all form factors and devices support 3-axis accelerometers and 3-axis gyroscopes.
Accelerometer limited axes
Underlying physical sensors: Accelerometer
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
returns a non-wake-up sensor
An accelerometer limited axes sensor is equivalent to TYPE_ACCELEROMETER
but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the acceleration value for the x, y, and z axes are supported. A value of 1.0
indicates that the axis is supported, and a value of 0
indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the acceleration values for unused axes to 0
, instead of having undefined values.
Gyroscope limited axes
Underlying physical sensors: Gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
returns a non-wake-up sensor
A gyroscope limited axes sensor is equivalent to TYPE_GYROSCOPE
but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the angular speed value for the x, y, and z axes are supported. A value of 1.0
indicates that the axis is supported, and a value of 0
indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the angular speed values for unused axes to 0
.
Accelerometer limited axes uncalibrated
Underlying physical sensors: Accelerometer
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
returns a non-wake-up sensor
An accelerometer limited axes uncalibrated sensor is equivalent to TYPE_ACCELEROMETER_UNCALIBRATED
but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the acceleration and bias values for the x, y, and z axes are supported. A value of 1.0
indicates that the axis is supported, and a value of 0
indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the acceleration and bias values for unused axes to 0
.
Gyroscope limited axes uncalibrated
Underlying physical sensors: Gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
returns a non-wake-up sensor
A gyroscope limited axes uncalibrated sensor is equivalent to TYPE_GYROSCOPE_UNCALIBRATED
but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the angular speed and drift values for the x, y, and z axes are supported. A value of 1.0
indicates that the axis is supported, and a value of 0
indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the angular speed and drift values for unused axes to 0
.
Composite limited axes IMU
Underlying physical sensors: Any combination of 3-axis accelerometer, 3-axis gyroscope, 3-axis accelerometer uncalibrated, and 3-axis gyroscope uncalibrated sensors.
Reporting-mode: Continuous
A composite limited axes IMU sensor is equivalent to a limited axes IMU sensor but instead of being supported at the HAL, it converts the 3-axis sensor data into the equivalent limited axes variants. These composite sensors are only enabled for automotive devices.
The following table shows an example conversion from a standard 3-axis accelerometer to a composite limited axes accelerometer.
SensorEvent Values for SENSOR_TYPE_ACCELEROMETER | Example SENSOR_TYPE_ACCELEROMETER SensorEvent | Composite SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent |
---|---|---|
values[0] | -0.065 | -0.065 |
values[1] | 0.078 | 0.078 |
values[2] | 9.808 | 9.808 |
values[3] | N/A | 1.0 |
values[4] | N/A | 1.0 |
values[5] | N/A | 1.0 |
Automotive sensors
Sensors to support automotive use cases.
Heading
Underlying physical sensors: Any combination of GPS, magnetometer, accelerometer, and gyroscope.
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_HEADING)
returns a non-wake-up sensor
Available from Android 13, a heading sensor measures the direction in which the device is pointing relative to true north in degrees. The heading sensor includes two SensorEvent
values. One for the measured device heading and one for the accuracy of the provided heading value.
Heading values reported by this sensor must be between 0.0
(inclusive) and 360.0
(exclusive), with 0
indicating north, 90
east, 180
south, and 270
west.
Accuracy for this sensor is defined at 68 percent confidence. In the case where the underlying distribution is Gaussian normal, the accuracy is one standard deviation. For example, if the heading sensor returns a heading value of 60 degrees and an accuracy value of 10 degrees, there's a 68 percent probability of the true heading being between 50 degrees and 70 degrees.