ส่วนนี้อธิบายแกนเซ็นเซอร์ เซ็นเซอร์ฐาน และเซ็นเซอร์คอมโพสิต (กิจกรรม ทัศนคติ ที่ไม่ได้ปรับเทียบ และการโต้ตอบ)
แกนเซนเซอร์
ค่าเหตุการณ์เซ็นเซอร์จากเซ็นเซอร์หลายตัวจะแสดงในเฟรมเฉพาะที่คงที่โดยสัมพันธ์กับอุปกรณ์
แกนอุปกรณ์เคลื่อนที่
Sensor API จะสัมพันธ์กับการวางแนวตามธรรมชาติของหน้าจอเท่านั้น (แกนจะไม่สลับเมื่อการวางแนวหน้าจอของอุปกรณ์เปลี่ยนไป
แกนยานยนต์
ในการใช้งาน Android Automotive แกนจะถูกกำหนดโดยคำนึงถึงโครงตัวถังรถ ต้นกำเนิดของกรอบอ้างอิงของรถยนต์อยู่ที่ศูนย์กลางของเพลาล้อหลัง กรอบอ้างอิงของยานพาหนะถูกจัดวางในลักษณะที่:
- แกน X ชี้ไปทางขวาและอยู่บนระนาบแนวนอน ซึ่งตั้งฉากกับระนาบสมมาตรของยานพาหนะ
- แกน Y ชี้ไปข้างหน้าและอยู่บนระนาบแนวนอน
กรอบอ้างอิงของยานพาหนะเป็นระบบพิกัดทางขวา ดังนั้นแกน Z จึงชี้ขึ้น
แกน Z ของหน้าต่างอ้างอิงอยู่ในแนวเดียวกับแรงโน้มถ่วง ซึ่งหมายความว่าแกน X และแกน Y อยู่ในแนวนอนทั้งคู่ ส่งผลให้แกน Y อาจไม่ผ่านเพลาหน้าเสมอไป
เซ็นเซอร์ฐาน
ประเภทเซนเซอร์ฐานตั้งชื่อตามเซนเซอร์ทางกายภาพที่ใช้แทน เซ็นเซอร์เหล่านี้จะถ่ายทอดข้อมูลจากเซ็นเซอร์ทางกายภาพตัวเดียว (ซึ่งตรงข้ามกับเซ็นเซอร์คอมโพสิตที่สร้างข้อมูลจากเซ็นเซอร์อื่นๆ) ตัวอย่างของประเภทเซนเซอร์ฐาน ได้แก่:
-
SENSOR_TYPE_ACCELEROMETER
-
SENSOR_TYPE_GYROSCOPE
-
SENSOR_TYPE_MAGNETOMETER
อย่างไรก็ตาม เซนเซอร์ฐานไม่เท่ากันและไม่ควรสับสนกับเซนเซอร์ทางกายภาพที่อยู่ด้านล่าง ข้อมูลจากเซนเซอร์ฐาน ไม่ใช่ เอาต์พุตดิบของเซนเซอร์ทางกายภาพ เนื่องจากมีการนำการแก้ไข (เช่น การชดเชยอคติ และการชดเชยอุณหภูมิ) มาใช้
ตัวอย่างเช่น คุณลักษณะของเซนเซอร์ฐานอาจแตกต่างจากคุณลักษณะของเซนเซอร์ทางกายภาพที่อยู่ด้านล่างในกรณีการใช้งานต่อไปนี้:
- ชิปไจโรสโคปมีช่วงไบแอส 1 องศา/วินาที
- หลังจากการสอบเทียบจากโรงงาน มีการใช้การชดเชยอุณหภูมิและการชดเชยอคติ ค่าอคติที่แท้จริงของเซ็นเซอร์ Android จะลดลง อาจเป็นจุดที่รับประกันว่าค่าอคติจะต่ำกว่า 0.01 องศา/วินาที
- ในสถานการณ์นี้ เราบอกว่าเซ็นเซอร์ Android มีความเบี่ยงเบนต่ำกว่า 0.01 องศา/วินาที แม้ว่าแผ่นข้อมูลของเซ็นเซอร์พื้นฐานจะบอกว่า 1 องศา/วินาทีก็ตาม
- บารอมิเตอร์ที่มีการใช้พลังงาน 100 uW
- เนื่องจากข้อมูลที่สร้างขึ้นจำเป็นต้องขนส่งจากชิปไปยัง SoC ต้นทุนพลังงานจริงในการรวบรวมข้อมูลจากเซ็นเซอร์บารอมิเตอร์ Android อาจสูงกว่ามาก เช่น 1,000 uW
- ในสถานการณ์นี้ เราบอกว่าเซ็นเซอร์ Android มีการใช้พลังงาน 1,000 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
โปรดทราบว่าด้วยเหตุผลทางประวัติศาสตร์ มุมการหมุนจะเป็นบวกในทิศทางตามเข็มนาฬิกา (ในทางคณิตศาสตร์ ควรจะเป็นบวกในทิศทางทวนเข็มนาฬิกา):
คำจำกัดความนี้แตกต่างจากการหันเห เอียง และม้วนที่ใช้ในการบินโดยที่แกน 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 องศา