ประเภทเซนเซอร์

ส่วนนี้อธิบายแกนเซ็นเซอร์ เซ็นเซอร์ฐาน และเซ็นเซอร์คอมโพสิต (กิจกรรม ทัศนคติ ที่ไม่ได้ปรับเทียบ และการโต้ตอบ)

แกนเซนเซอร์

ค่าเหตุการณ์เซ็นเซอร์จากเซ็นเซอร์หลายตัวจะแสดงในเฟรมเฉพาะที่คงที่โดยสัมพันธ์กับอุปกรณ์

แกนอุปกรณ์เคลื่อนที่

Sensor API จะสัมพันธ์กับการวางแนวตามธรรมชาติของหน้าจอเท่านั้น (แกนจะไม่สลับเมื่อการวางแนวหน้าจอของอุปกรณ์เปลี่ยนไป

ระบบพิกัดเซ็นเซอร์ API สำหรับอุปกรณ์มือถือ

รูปที่ 1 ระบบพิกัด (สัมพันธ์กับอุปกรณ์เคลื่อนที่) ที่ใช้โดย Sensor API

แกนยานยนต์

ในการใช้งาน Android Automotive แกนจะถูกกำหนดโดยคำนึงถึงโครงตัวถังรถ ต้นกำเนิดของกรอบอ้างอิงของรถยนต์อยู่ที่ศูนย์กลางของเพลาล้อหลัง กรอบอ้างอิงของยานพาหนะถูกจัดวางในลักษณะที่:

  • แกน X ชี้ไปทางขวาและอยู่บนระนาบแนวนอน ซึ่งตั้งฉากกับระนาบสมมาตรของยานพาหนะ
  • แกน Y ชี้ไปข้างหน้าและอยู่บนระนาบแนวนอน
ระบบพิกัดเซ็นเซอร์ API สำหรับอุปกรณ์ยานยนต์

รูปที่ 2 ระบบพิกัด (สัมพันธ์กับอุปกรณ์ยานยนต์) ที่ใช้โดย Sensor API

กรอบอ้างอิงของยานพาหนะเป็นระบบพิกัดทางขวา ดังนั้นแกน Z จึงชี้ขึ้น

แกน Z ของหน้าต่างอ้างอิงอยู่ในแนวเดียวกับแรงโน้มถ่วง ซึ่งหมายความว่าแกน X และแกน Y อยู่ในแนวนอนทั้งคู่ ส่งผลให้แกน Y อาจไม่ผ่านเพลาหน้าเสมอไป

เซ็นเซอร์ฐาน

ประเภทเซนเซอร์ฐานตั้งชื่อตามเซนเซอร์ทางกายภาพที่ใช้แทน เซ็นเซอร์เหล่านี้จะถ่ายทอดข้อมูลจากเซ็นเซอร์ทางกายภาพตัวเดียว (ซึ่งตรงข้ามกับเซ็นเซอร์คอมโพสิตที่สร้างข้อมูลจากเซ็นเซอร์อื่นๆ) ตัวอย่างของประเภทเซนเซอร์ฐาน ได้แก่:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

อย่างไรก็ตาม เซนเซอร์ฐานไม่เท่ากันและไม่ควรสับสนกับเซนเซอร์ทางกายภาพที่อยู่ด้านล่าง ข้อมูลจากเซนเซอร์ฐาน ไม่ใช่ เอาต์พุตดิบของเซนเซอร์ทางกายภาพ เนื่องจากมีการนำการแก้ไข (เช่น การชดเชยอคติ และการชดเชยอุณหภูมิ) มาใช้

ตัวอย่างเช่น คุณลักษณะของเซนเซอร์ฐานอาจแตกต่างจากคุณลักษณะของเซนเซอร์ทางกายภาพที่อยู่ด้านล่างในกรณีการใช้งานต่อไปนี้:

  • ชิปไจโรสโคปมีช่วงไบแอส 1 องศา/วินาที
    • หลังจากการสอบเทียบจากโรงงาน มีการใช้การชดเชยอุณหภูมิและการชดเชยอคติ ค่าอคติที่แท้จริงของเซ็นเซอร์ 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 ม. /ส^2)

การอ่านจะถูกปรับเทียบโดยใช้:

  • การชดเชยอุณหภูมิ
  • การสอบเทียบอคติออนไลน์
  • การสอบเทียบมาตราส่วนออนไลน์

การสอบเทียบไบแอสและสเกลจะต้องอัปเดตในขณะที่เซ็นเซอร์ปิดใช้งานอยู่เท่านั้น เพื่อหลีกเลี่ยงไม่ให้ค่ากระโดดข้ามระหว่างการสตรีม

มาตรความเร่งยังรายงานความแม่นยำที่คาดว่าจะอ่านได้ผ่าน sensors_event_t.acceleration.status ดูค่าคงที่ SENSOR_STATUS_* ของ SensorManager สำหรับข้อมูลเพิ่มเติมเกี่ยวกับค่าที่เป็นไปได้สำหรับฟิลด์นี้

อุณหภูมิโดยรอบ

โหมดการรายงาน: เมื่อมีการเปลี่ยนแปลง

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 ดูค่าคงที่ 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 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับค่าที่เป็นไปได้สำหรับฟิลด์นี้

ไม่สามารถจำลองไจโรสโคปโดยใช้แมกนิโตมิเตอร์และมาตรความเร่งได้ เนื่องจากจะทำให้ความสอดคล้องและการตอบสนองในท้องถิ่นลดลง จะต้องเป็นไปตามชิปไจโรสโคปปกติ

อัตราการเต้นของหัวใจ

โหมดการรายงาน: เมื่อมีการเปลี่ยนแปลง

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) ส่งคืนเซ็นเซอร์ที่ไม่ปลุก

เซ็นเซอร์วัดแสงรายงานการส่องสว่างในปัจจุบันในหน่วย SI lux

รายงานการวัดใน 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) ส่งคืนเซ็นเซอร์ที่ไม่ปลุก

เซ็นเซอร์ความชื้นสัมพัทธ์จะวัดความชื้นในอากาศโดยรอบและส่งกลับค่าเป็นเปอร์เซ็นต์

ประเภทเซ็นเซอร์คอมโพสิต

เซ็นเซอร์คอมโพสิตสร้างข้อมูลโดยการประมวลผลและ/หรือหลอมรวมข้อมูลจากเซ็นเซอร์กายภาพหนึ่งตัวหรือหลายตัว (เซ็นเซอร์ใดๆ ที่ไม่ใช่เซ็นเซอร์ฐานจะเรียกว่าเซ็นเซอร์คอมโพสิต) ตัวอย่างของเซ็นเซอร์คอมโพสิต ได้แก่:

เช่นเดียวกับเซนเซอร์ฐาน ลักษณะของเซนเซอร์คอมโพสิตจะมาจากคุณลักษณะของข้อมูลขั้นสุดท้าย ตัวอย่างเช่น การใช้พลังงานของเวกเตอร์การหมุนเกมอาจเท่ากับผลรวมของการใช้พลังงานของชิปมาตรความเร่ง ชิปไจโรสโคป ชิปที่ประมวลผลข้อมูล และบัสที่ขนส่งข้อมูล อีกตัวอย่างหนึ่ง การเบี่ยงเบนของเวกเตอร์การหมุนเกมนั้นขึ้นอยู่กับคุณภาพของอัลกอริธึมการปรับเทียบมากพอๆ กับคุณลักษณะของเซนเซอร์ทางกายภาพ

ตารางต่อไปนี้แสดงประเภทเซนเซอร์คอมโพสิตที่มีจำหน่าย เซ็นเซอร์คอมโพสิตแต่ละตัวอาศัยข้อมูลจากเซ็นเซอร์กายภาพหนึ่งตัวหรือหลายตัว หลีกเลี่ยงการเลือกเซ็นเซอร์กายภาพอื่นๆ ที่ซ่อนอยู่เพื่อประมาณผลลัพธ์ เนื่องจากเซ็นเซอร์เหล่านี้ให้ประสบการณ์ผู้ใช้ที่ไม่ดี

ประเภทเซนเซอร์ หมวดหมู่ เซ็นเซอร์ทางกายภาพพื้นฐาน โหมดการรายงาน

เวกเตอร์การหมุนเกม

ทัศนคติ

เครื่องวัดความเร่ง ไจโรสโคป ต้องไม่ใช้เครื่องวัดสนามแม่เหล็ก

ต่อเนื่อง

เวกเตอร์การหมุนทางภูมิศาสตร์ เซ็นเซอร์พลังงานต่ำ

ทัศนคติ

เครื่องวัดความเร่ง เครื่องวัดสนามแม่เหล็ก ต้องไม่ใช้ไจโรสโคป

ต่อเนื่อง

ท่าทางการมองดู เซ็นเซอร์พลังงานต่ำ

ปฏิสัมพันธ์

ไม่ได้กำหนด

นัดเดียว

แรงโน้มถ่วง

ทัศนคติ

มาตรความเร่ง, ไจโรสโคป

ต่อเนื่อง

ไจโรสโคปไม่ได้ปรับเทียบ

ไม่ได้ปรับเทียบ

ไจโรสโคป

ต่อเนื่อง

ความเร่งเชิงเส้น

กิจกรรม

มาตรความเร่ง ไจโรสโคป (ถ้ามี) หรือแมกนีโตมิเตอร์ (หากไม่มีไจโร)

ต่อเนื่อง

สนามแม่เหล็กไม่ได้ปรับเทียบ

ไม่ได้ปรับเทียบ

แมกนีโตมิเตอร์

ต่อเนื่อง

การวางแนว (เลิกใช้แล้ว)

ทัศนคติ

มาตรความเร่ง, แมกนีโตมิเตอร์, ไจโรสโคป (ถ้ามี)

ต่อเนื่อง

หยิบท่าทางขึ้นมา เซ็นเซอร์พลังงานต่ำ

ปฏิสัมพันธ์

ไม่ได้กำหนด

นัดเดียว

เวกเตอร์การหมุน

ทัศนคติ

มาตรความเร่ง, แมกนีโตมิเตอร์, ไจโรสโคป

ต่อเนื่อง

การเคลื่อนไหวที่สำคัญ เซ็นเซอร์พลังงานต่ำ

กิจกรรม

มาตรความเร่ง (หรืออย่างอื่นที่มีพลังงานต่ำมาก)

นัดเดียว

เครื่องนับก้าว เซ็นเซอร์พลังงานต่ำ

กิจกรรม

มาตรความเร่ง

เมื่อมีการเปลี่ยนแปลง

เครื่องตรวจจับขั้นตอน เซ็นเซอร์พลังงานต่ำ

กิจกรรม

มาตรความเร่ง

พิเศษ

เครื่องตรวจจับความเอียง เซ็นเซอร์พลังงานต่ำ

กิจกรรม

มาตรความเร่ง

พิเศษ

ท่าทางตื่นขึ้นมา เซ็นเซอร์พลังงานต่ำ

ปฏิสัมพันธ์

ไม่ได้กำหนด

นัดเดียว

เซ็นเซอร์พลังงานต่ำ = เซ็นเซอร์พลังงานต่ำ

เซ็นเซอร์คอมโพสิตกิจกรรม

ความเร่งเชิงเส้น

เซ็นเซอร์กายภาพพื้นฐาน: มาตรความเร่งและ (ถ้ามี) ไจโรสโคป (หรือแมกนีโตมิเตอร์ หากไม่มีไจโรสโคป)

โหมดการรายงาน: ต่อเนื่อง

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]

เครื่องนับก้าว

เซ็นเซอร์กายภาพพื้นฐาน: มาตรความเร่ง (+ อาจเป็นเซ็นเซอร์อื่นตราบใดที่ใช้พลังงานต่ำ)

โหมดการรายงาน: เมื่อมีการเปลี่ยนแปลง

พลังงานต่ำ

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 เข้าสู่โหมด Suspend อย่าจำลองเซ็นเซอร์นี้ใน 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 : 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 ดูค่าคงที่ 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

ไจโรสโคปไม่ได้ปรับเทียบ

เซ็นเซอร์กายภาพพื้นฐาน: ไจโรสโคป

โหมดการรายงาน: ต่อเนื่อง

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) ส่งคืนเซ็นเซอร์ที่ไม่ปลุก

ไจโรสโคปที่ไม่ได้ปรับเทียบจะรายงานอัตราการหมุนรอบแกนเซ็นเซอร์โดยไม่ต้องใช้การชดเชยอคติ พร้อมกับการประมาณค่าอคติ ค่าทั้งหมดอยู่ในหน่วยเรเดียน/วินาที และรายงานในช่องของ sensors_event_t.uncalibrated_gyro :

  • x_uncalib : ความเร็วเชิงมุม (ไม่มีการชดเชยการดริฟท์) รอบแกน X
  • y_uncalib : ความเร็วเชิงมุม (ไม่มีการชดเชยการดริฟท์) รอบแกน Y
  • z_uncalib : ความเร็วเชิงมุม (ไม่มีการชดเชยการดริฟท์) รอบแกน Z
  • x_bias : ค่าดริฟท์โดยประมาณรอบแกน X
  • y_bias : ค่าดริฟท์โดยประมาณรอบแกน Y
  • z_bias : ค่าดริฟท์โดยประมาณรอบแกน Z

ตามหลักการแล้ว การวัดที่ไม่ได้สอบเทียบคือผลรวมของการวัดที่สอบเทียบและการประมาณค่าอคติ: _uncalibrated = _calibrated + _bias

ค่า x_bias , y_bias และ z_bias คาดว่าจะเพิ่มขึ้นทันทีที่ค่าประมาณของอคติเปลี่ยนแปลง และค่าเหล่านี้ควรจะคงที่ตลอดเวลาที่เหลือ

ดูคำจำกัดความของเซ็นเซอร์ ไจโรสโคป สำหรับรายละเอียดเกี่ยวกับระบบพิกัดที่ใช้

ต้องใช้การสอบเทียบจากโรงงานและการชดเชยอุณหภูมิในการวัด นอกจากนี้ ต้องใช้การประมาณค่าดริฟท์ของไจโรสโคป เพื่อให้สามารถรายงานการประมาณการที่สมเหตุสมผลใน x_bias , y_bias และ z_bias หากการใช้งานไม่สามารถประมาณค่าความคลาดเคลื่อนได้ ก็จะต้องไม่ติดตั้งเซ็นเซอร์นี้

หากมีเซ็นเซอร์นี้ จะต้องมีเซ็นเซอร์ไจโรสโคปที่สอดคล้องกันด้วย และเซ็นเซอร์ทั้งสองต้องใช้ค่า sensor_t.name และ sensor_t.vendor เดียวกัน

สนามแม่เหล็กไม่ได้ปรับเทียบ

เซ็นเซอร์กายภาพพื้นฐาน: แมกนีโตมิเตอร์

โหมดการรายงาน: ต่อเนื่อง

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) ส่งคืนเซ็นเซอร์ที่ไม่ปลุก

เซ็นเซอร์สนามแม่เหล็กที่ไม่ได้รับการสอบเทียบจะรายงานสนามแม่เหล็กโดยรอบพร้อมกับค่าประมาณการสอบเทียบเหล็กแข็ง ค่าทั้งหมดอยู่ในรูปแบบไมโครเทสลา (uT) และรายงานในฟิลด์ของ sensors_event_t.uncalibrated_magnetic :

  • x_uncalib : สนามแม่เหล็ก (ไม่มีการชดเชยเหล็กแข็ง) ตามแนวแกน X
  • y_uncalib : สนามแม่เหล็ก (ไม่มีการชดเชยเหล็กแข็ง) ตามแนวแกน Y
  • z_uncalib : สนามแม่เหล็ก (ไม่มีการชดเชยเหล็กแข็ง) ตามแนวแกน Z
  • x_bias : อคติของเหล็กแข็งโดยประมาณตามแกน X
  • y_bias : อคติของเหล็กแข็งโดยประมาณตามแกน Y
  • z_bias : อคติของเหล็กแข็งโดยประมาณตามแกน Z

ตามหลักการแล้ว การวัดที่ไม่ได้สอบเทียบคือผลรวมของการวัดที่สอบเทียบและการประมาณค่าอคติ: _uncalibrated = _calibrated + _bias

แมกนีโตมิเตอร์ที่ไม่ได้รับการสอบเทียบช่วยให้อัลกอริธึมระดับสูงกว่าสามารถจัดการกับการประมาณค่าเหล็กแข็งที่ไม่ดีได้ ค่า x_bias , y_bias และ z_bias คาดว่าจะเพิ่มขึ้นทันทีที่การประมาณค่าของเหล็กแข็งเปลี่ยนแปลง และค่าเหล่านี้ควรจะคงที่ตลอดเวลาที่เหลือ

ต้องใช้การสอบเทียบเหล็กอ่อนและการชดเชยอุณหภูมิกับการวัด นอกจากนี้ การประมาณค่าแบบเหล็กจะต้องดำเนินการเพื่อให้สามารถรายงานการประมาณการที่สมเหตุสมผลใน x_bias , y_bias และ z_bias หากการใช้งานไม่สามารถประมาณค่าอคติได้ ก็จะต้องไม่ติดตั้งเซ็นเซอร์นี้

หากมีเซ็นเซอร์นี้ จะต้องมีเซ็นเซอร์สนามแม่เหล็กที่สอดคล้องกันและเซ็นเซอร์ทั้งสองต้องใช้ค่า sensor_t.name และ sensor_t.vendor เดียวกัน

มุมบานพับ

โหมดการรายงาน: เมื่อมีการเปลี่ยนแปลง

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) ส่งคืนเซ็นเซอร์ปลุก

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

เซ็นเซอร์คอมโพสิตเชิงโต้ตอบ

เซ็นเซอร์บางตัวส่วนใหญ่จะใช้เพื่อตรวจจับการโต้ตอบกับผู้ใช้ เราไม่ได้กำหนดวิธีการนำเซ็นเซอร์เหล่านั้นไปใช้ แต่เซ็นเซอร์เหล่านั้นจะต้องใช้พลังงานต่ำ และเป็นความรับผิดชอบของผู้ผลิตอุปกรณ์ในการตรวจสอบคุณภาพในแง่ของประสบการณ์ผู้ใช้

ท่าทางตื่นขึ้นมา

เซ็นเซอร์กายภาพพื้นฐาน: ไม่ได้กำหนด (อะไรก็ได้ที่ใช้พลังงานต่ำ)

โหมดการรายงาน: One-shot

พลังงานต่ำ

ใช้เฉพาะเซ็นเซอร์เวอร์ชันปลุกเท่านั้น

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) ส่งคืนเซ็นเซอร์ปลุก

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

เซ็นเซอร์นี้จะต้องมีพลังงานต่ำเนื่องจากมีแนวโน้มที่จะเปิดใช้งาน 24/7

แต่ละเหตุการณ์เซ็นเซอร์รายงาน 1 ใน sensors_event_t.data[0]

รับท่าทาง

เซ็นเซอร์ทางกายภาพพื้นฐาน: ไม่ได้กำหนด (อะไรก็ตามที่มีกำลังต่ำ)

โหมดรายงาน: One-shot

พลังงานต่ำ

ใช้งานเฉพาะเวอร์ชันปลุกของเซ็นเซอร์นี้

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) ส่งคืนเซ็นเซอร์ปลุก

เซ็นเซอร์ท่าทางกระบะกระตุ้นเมื่ออุปกรณ์ถูกหยิบขึ้นมาโดยไม่คำนึงถึงทุกที่ที่เคยเป็นมาก่อน (โต๊ะ, กระเป๋า, กระเป๋า)

แต่ละเหตุการณ์เซ็นเซอร์รายงาน 1 ใน sensors_event_t.data[0]

เหลือบ

เซ็นเซอร์ทางกายภาพพื้นฐาน: ไม่ได้กำหนด (อะไรก็ตามที่มีกำลังต่ำ)

โหมดรายงาน: One-shot

พลังงานต่ำ

ใช้งานเฉพาะเวอร์ชันปลุกของเซ็นเซอร์นี้

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) ส่งคืนเซ็นเซอร์ปลุก

เซ็นเซอร์ท่าทางท่าทางอย่างรวดเร็วช่วยให้เปิดหน้าจอสั้น ๆ เพื่อให้ผู้ใช้สามารถมองเห็นเนื้อหาบนหน้าจอตามการเคลื่อนไหวที่เฉพาะเจาะจง เมื่อเซ็นเซอร์นี้ทริกเกอร์อุปกรณ์จะเปิดหน้าจอในไม่ช้าเพื่อให้ผู้ใช้สามารถมองเห็นการแจ้งเตือนหรือเนื้อหาอื่น ๆ ในขณะที่อุปกรณ์ยังคงล็อคอยู่ในสถานะที่ไม่โต้ตอบ (dozing) จากนั้นหน้าจอจะปิดอีกครั้ง พฤติกรรมนี้ (เปิดสั้น ๆ บนหน้าจอเมื่อเซ็นเซอร์นี้ทริกเกอร์) อาจถูกปิดการใช้งานโดยผู้ใช้ในการตั้งค่าอุปกรณ์ การเปลี่ยนแปลงการตั้งค่าไม่ส่งผลกระทบต่อพฤติกรรมของเซ็นเซอร์: เฉพาะเฟรมเวิร์กจะเปิดหน้าจอสั้น ๆ เมื่อมันทริกเกอร์ ไม่ได้ระบุท่าทางจริงที่จะตรวจพบและสามารถเลือกได้โดยผู้ผลิตอุปกรณ์

เซ็นเซอร์นี้จะต้องมีพลังงานต่ำเนื่องจากมีแนวโน้มที่จะเปิดใช้งาน 24/7 แต่ละเหตุการณ์เซ็นเซอร์รายงาน 1 ใน sensors_event_t.data[0]

เซ็นเซอร์แกน จำกัด IMU

มีให้จาก Android 13 เซ็นเซอร์ IMU แกน จำกัด คือเซ็นเซอร์ที่รองรับกรณีการใช้งานที่ไม่มีแกนทั้งสาม (x, y, z) ประเภท IMU มาตรฐานใน Android (เช่น SENSOR_TYPE_ACCELEROMETER และ SENSOR_TYPE_GYROSCOPE ) สมมติว่าทั้งสามแกนได้รับการสนับสนุน อย่างไรก็ตามไม่ใช่ทุกรูปแบบปัจจัยและอุปกรณ์ที่รองรับตัวเร่งความเร็ว 3 แกนและไจโรสโคป 3 แกน

Accelerometer Limited Axes

เซ็นเซอร์ทางกายภาพพื้นฐาน: accelerometer

โหมดการรายงาน: ต่อเนื่อง

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) ส่งคืนเซ็นเซอร์ที่ไม่ตื่นขึ้นมา

เซ็นเซอร์ Accelerometer Limited Axes นั้นเทียบเท่ากับ TYPE_ACCELEROMETER แต่รองรับกรณีที่หนึ่งหรือสองแกนไม่รองรับ

ค่าเซ็นเซอร์สามตัวสุดท้ายที่รายงานโดยเซ็นเซอร์แสดงว่ารองรับค่าความเร่งสำหรับแกน X, Y และ Z หรือไม่ ค่า 1.0 ระบุว่าแกนได้รับการสนับสนุนและค่า 0 ระบุว่าไม่รองรับ ผู้ผลิตอุปกรณ์ระบุแกนที่รองรับในเวลาที่สร้างและค่าจะไม่เปลี่ยนแปลงในระหว่างการรันไทม์

ผู้ผลิตอุปกรณ์จะต้องตั้งค่าการเร่งความเร็วสำหรับแกนที่ไม่ได้ใช้เป็น 0 แทนที่จะมีค่าที่ไม่ได้กำหนด

แกน Gyroscope Limited

เซ็นเซอร์ทางกายภาพพื้นฐาน: ไจโรสโคป

โหมดการรายงาน: ต่อเนื่อง

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) ส่งคืนเซ็นเซอร์ที่ไม่ตื่นขึ้นมา

เซ็นเซอร์ Axes Limited Gyroscope นั้นเทียบเท่ากับ TYPE_GYROSCOPE แต่รองรับกรณีที่หนึ่งหรือสองแกนไม่รองรับ

ค่าเซ็นเซอร์สามตัวสุดท้ายที่รายงานโดยเซ็นเซอร์แสดงว่ารองรับค่าความเร็วเชิงมุมสำหรับแกน X, Y และ Z หรือไม่ ค่า 1.0 ระบุว่าแกนได้รับการสนับสนุนและค่า 0 ระบุว่าไม่รองรับ ผู้ผลิตอุปกรณ์ระบุแกนที่รองรับในเวลาที่สร้างและค่าจะไม่เปลี่ยนแปลงในระหว่างการรันไทม์

ผู้ผลิตอุปกรณ์จะต้องตั้งค่าความเร็วเชิงมุมสำหรับแกนที่ไม่ได้ใช้เป็น 0

Accelerometer Limited Axes Uncalibrated

เซ็นเซอร์ทางกายภาพพื้นฐาน: accelerometer

โหมดการรายงาน: ต่อเนื่อง

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) ส่งคืนเซ็นเซอร์ที่ไม่ตื่นขึ้นมา

เซ็นเซอร์ที่ไม่ได้รับการปรับเทียบ accelerometer นั้นเทียบเท่ากับ TYPE_ACCELEROMETER_UNCALIBRATED แต่รองรับกรณีที่ไม่รองรับแกนหนึ่งหรือสองแกน

ค่าเซ็นเซอร์สามค่าสุดท้ายที่รายงานโดยเซ็นเซอร์แสดงว่ารองรับค่าความเร่งและค่าอคติสำหรับแกน X, Y และ Z หรือไม่ ค่า 1.0 ระบุว่าแกนได้รับการสนับสนุนและค่า 0 ระบุว่าไม่รองรับ ผู้ผลิตอุปกรณ์ระบุแกนที่รองรับในเวลาที่สร้างและค่าจะไม่เปลี่ยนแปลงในระหว่างการรันไทม์

ผู้ผลิตอุปกรณ์จะต้องตั้งค่าการเร่งความเร็วและค่าอคติสำหรับแกนที่ไม่ได้ใช้เป็น 0

Gyroscope Limited Axes ไม่เทียบเท่า

เซ็นเซอร์ทางกายภาพพื้นฐาน: ไจโรสโคป

โหมดการรายงาน: ต่อเนื่อง

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) ส่งคืนเซ็นเซอร์ที่ไม่ตื่นขึ้นมา

เซ็นเซอร์ที่ไม่มีการปรับเทียบ Gyroscope นั้นเทียบเท่ากับ TYPE_GYROSCOPE_UNCALIBRATED แต่รองรับกรณีที่ไม่รองรับแกนหนึ่งหรือสองแกน

ค่าเซ็นเซอร์สามค่าสุดท้ายที่รายงานโดยเซ็นเซอร์แสดงว่ามีการรองรับความเร็วเชิงมุมและค่าดริฟท์สำหรับแกน X, Y และ Z หรือไม่ ค่า 1.0 ระบุว่าแกนได้รับการสนับสนุนและค่า 0 ระบุว่าไม่รองรับ ผู้ผลิตอุปกรณ์ระบุแกนที่รองรับในเวลาที่สร้างและค่าจะไม่เปลี่ยนแปลงในระหว่างการรันไทม์

ผู้ผลิตอุปกรณ์จะต้องตั้งค่าความเร็วเชิงมุมและค่าดริฟท์สำหรับแกนที่ไม่ได้ใช้เป็น 0

แกนคอมโพสิต จำกัด imu

เซ็นเซอร์ทางกายภาพพื้นฐาน: การรวมกันของ accelerometer 3 แกน, ไจโรสโคป 3 แกน, 3 แกน accelerometer ที่ไม่ได้รับการปรับเทียบและเซ็นเซอร์ที่ไม่มีการปรับเทียบ 3 แกน

โหมดการรายงาน: ต่อเนื่อง

เซ็นเซอร์แกนคอมโพสิต จำกัด IMU นั้นเทียบเท่ากับเซ็นเซอร์ IMU แกน จำกัด แต่แทนที่จะได้รับการสนับสนุนที่ HAL มันจะแปลงข้อมูลเซ็นเซอร์ 3 แกนให้เป็นตัวแปรแกน จำกัด เทียบเท่า เซ็นเซอร์คอมโพสิตเหล่านี้เปิดใช้งานเฉพาะสำหรับอุปกรณ์ยานยนต์

ตารางต่อไปนี้แสดงการแปลงตัวอย่างจาก accelerometer 3 แกนมาตรฐานเป็น accelerometer แกน จำกัด

ค่า sensoreVent สำหรับ sensor_type_accelerometer ตัวอย่าง sensor_type_accelerometer sensorevent Composite sensor_type_accelerometer_limited_axes sensorevent
ค่า [0]

-0.065

-0.065

ค่า [1]

0.078

0.078

ค่า [2]

9.808

9.808

ค่า [3]

ไม่มี

1.0

ค่า [4]

ไม่มี

1.0

ค่า [5]

ไม่มี

1.0

เซ็นเซอร์ยานยนต์

เซ็นเซอร์เพื่อรองรับกรณีการใช้ยานยนต์

หัวเรื่อง

เซ็นเซอร์ทางกายภาพพื้นฐาน: การรวมกันของ GPS, Magnetometer, accelerometer และ Gyroscope

โหมดการรายงาน: ต่อเนื่อง

getDefaultSensor(SENSOR_TYPE_HEADING) ส่งคืนเซ็นเซอร์ที่ไม่ตื่นขึ้นมา

มีให้จาก Android 13 เซ็นเซอร์หัวเรื่องวัดทิศทางที่อุปกรณ์กำลังชี้เมื่อเทียบกับ True North ในองศา เซ็นเซอร์หัวเรื่องประกอบด้วยค่า SensorEvent สองค่า หนึ่งสำหรับส่วนหัวของอุปกรณ์ที่วัดได้และอีกหนึ่งความถูกต้องของค่าส่วนหัวที่ให้ไว้

ค่าหัวเรื่องที่รายงานโดยเซ็นเซอร์นี้จะต้องอยู่ระหว่าง 0.0 (รวม) และ 360.0 (พิเศษ) โดยมี 0 ระบุทิศเหนือ, 90 ตะวันออก, 180 ใต้และ 270 เวสต์

ความแม่นยำสำหรับเซ็นเซอร์นี้ถูกกำหนดไว้ที่ความเชื่อมั่น 68 เปอร์เซ็นต์ ในกรณีที่การแจกแจงพื้นฐานเป็นแบบเกาส์เซียนความแม่นยำคือค่าเบี่ยงเบนมาตรฐานหนึ่ง ตัวอย่างเช่นหากเซ็นเซอร์หัวเรื่องส่งคืนค่าส่วนหัวของ 60 องศาและค่าความแม่นยำ 10 องศามีความน่าจะเป็น 68 เปอร์เซ็นต์ของหัวข้อที่แท้จริงอยู่ระหว่าง 50 องศาและ 70 องศา