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

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

แกนเซนเซอร์

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

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

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

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

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

ดู Rotation vector sensor สำหรับรายละเอียดเกี่ยวกับการตั้งค่า 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) ส่งคืนเซ็นเซอร์ปลุก

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

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

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

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

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

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

พลังงานต่ำ

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

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] .