Phần này mô tả các trục cảm biến, cảm biến cơ sở và cảm biến tổng hợp (hoạt động, thái độ, chưa hiệu chỉnh và tương tác).
Trục cảm biến
Giá trị sự kiện cảm biến từ nhiều cảm biến được thể hiện trong một khung cụ thể là tĩnh so với thiết bị.
Trục thiết bị di động
API cảm biến chỉ liên quan đến hướng tự nhiên của màn hình (các trục không được hoán đổi khi hướng màn hình của thiết bị thay đổi.

Hình 1. Hệ thống tọa độ (liên quan đến thiết bị di động) được sử dụng bởi API cảm biến
Trục ô tô
Trong triển khai Android Automotive, các trục được xác định liên quan đến khung thân xe. Gốc của hệ quy chiếu xe là trọng tâm của trục sau. Hệ quy chiếu của xe được định hướng sao cho:
- Trục X hướng sang phải và nằm trên mặt phẳng nằm ngang, vuông góc với mặt phẳng đối xứng của xe.
- Trục Y hướng về phía trước và nằm trên mặt phẳng nằm ngang.

Hình 2. Hệ thống tọa độ (liên quan đến thiết bị ô tô) được sử dụng bởi API cảm biến
Hệ quy chiếu của xe là một hệ tọa độ thuận tay phải. Do đó, trục Z hướng lên.
Trục Z của hệ quy chiếu thẳng hàng với trọng lực, có nghĩa là trục X và trục Y đều nằm ngang. Do đó, trục Y có thể không phải lúc nào cũng đi qua trục trước.
Cảm biến cơ sở
Các loại cảm biến cơ sở được đặt tên theo cảm biến vật lý mà chúng đại diện. Các cảm biến này chuyển tiếp dữ liệu từ một cảm biến vật lý duy nhất (trái ngược với các cảm biến tổng hợp tạo ra dữ liệu từ các cảm biến khác). Ví dụ về các loại cảm biến cơ sở bao gồm:
-
SENSOR_TYPE_ACCELEROMETER
-
SENSOR_TYPE_GYROSCOPE
-
SENSOR_TYPE_MAGNETOMETER
Tuy nhiên, cảm biến cơ sở không bằng và không nên nhầm lẫn với cảm biến vật lý bên dưới của chúng. Dữ liệu từ cảm biến cơ sở không phải là đầu ra thô của cảm biến vật lý vì các hiệu chỉnh (chẳng hạn như bù lệch và bù nhiệt độ) được áp dụng.
Ví dụ: các đặc tính của cảm biến cơ sở có thể khác với các đặc tính của cảm biến vật lý bên dưới trong các trường hợp sử dụng sau:
- Một chip con quay hồi chuyển được đánh giá là có phạm vi thiên vị là 1 độ / giây.
- Sau khi hiệu chuẩn tại nhà máy, bù nhiệt độ và bù thiên vị được áp dụng, độ chệch thực tế của cảm biến Android sẽ giảm xuống, có thể đến mức độ chệch được đảm bảo dưới 0,01 độ / giây.
- Trong tình huống này, chúng tôi nói rằng cảm biến Android có độ lệch dưới 0,01 độ / giây, mặc dù bảng dữ liệu của cảm biến bên dưới cho biết 1 độ / giây.
- Một khí áp kế có công suất tiêu thụ là 100 uW.
- Vì dữ liệu được tạo ra cần được vận chuyển từ chip đến SoC, chi phí điện năng thực tế để thu thập dữ liệu từ cảm biến Android phong vũ biểu có thể cao hơn nhiều, ví dụ như 1000 uW.
- Trong tình huống này, chúng tôi nói rằng cảm biến Android có mức tiêu thụ điện năng là 1000 uW, mặc dù mức tiêu thụ điện năng được đo tại các điểm dẫn của chip phong vũ biểu là 100uW.
- Một từ kế tiêu thụ 100uW khi hiệu chuẩn, nhưng tiêu thụ nhiều hơn khi hiệu chuẩn.
- Quy trình hiệu chuẩn của nó có thể yêu cầu kích hoạt con quay hồi chuyển, tiêu thụ 5000 uW và chạy một số thuật toán, tốn thêm 900 uW.
- Trong tình huống này, chúng tôi nói rằng mức tiêu thụ điện năng tối đa của cảm biến Android (từ kế) là 6000 uW.
- Trong trường hợp này, mức tiêu thụ điện năng trung bình là thước đo hữu ích hơn và đó là những gì được báo cáo trong các đặc tính tĩnh của cảm biến thông qua HAL.
Gia tốc kế
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)
trả về cảm biến không đánh thức
Một cảm biến gia tốc báo cáo gia tốc của thiết bị dọc theo ba trục cảm biến. Gia tốc đo được bao gồm cả gia tốc vật lý (sự thay đổi của vận tốc) và trọng lực. Phép đo được báo cáo trong các trường x, y và z của sensor_event_t.acceleration.
Tất cả các giá trị đều tính theo đơn vị SI (m / s ^ 2) và đo gia tốc của thiết bị trừ đi lực hấp dẫn dọc theo ba trục cảm biến.
Dưới đây là các ví dụ:
- Định mức của (x, y, z) phải gần bằng 0 khi rơi tự do.
- Khi thiết bị nằm phẳng trên bàn và bị đẩy nghiêng bên trái về phía bên phải thì gia tốc x là giá trị dương.
- Khi thiết bị nằm phẳng trên bàn, giá trị gia tốc dọc theo z là +9,81 alo, tương ứng với gia tốc của thiết bị (0 m / s ^ 2) trừ đi lực hấp dẫn (-9,81 m / s ^ 2).
- Khi thiết bị nằm phẳng trên bàn và được đẩy lên trời, giá trị gia tốc lớn hơn +9,81, tương ứng với gia tốc của thiết bị (+ A m / s ^ 2) trừ đi lực hấp dẫn (-9,81 m / s ^ 2).
Các bài đọc được hiệu chuẩn bằng cách sử dụng:
- Sự cân bằng nhiệt độ
- Hiệu chuẩn thiên vị trực tuyến
- Hiệu chuẩn quy mô trực tuyến
Chỉ được cập nhật thiên vị và hiệu chuẩn thang đo trong khi cảm biến được tắt, để tránh gây ra nhảy giá trị trong quá trình truyền trực tuyến.
Gia tốc kế cũng báo cáo độ chính xác mà nó mong đợi là các kết quả đọc của nó thông qua sensors_event_t.acceleration.status
. Xem hằng số SENSOR_STATUS_*
của SensorManager
để biết thêm thông tin về các giá trị có thể có cho trường này.
Nhiệt độ môi trường xung quanh
Chế độ báo cáo: Thay đổi
getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)
trả về cảm biến không đánh thức
Cảm biến này cung cấp nhiệt độ môi trường (phòng) tính bằng độ C.
Cảm biến từ trường
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)
trả về cảm biến không đánh thức
SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD
Một cảm biến từ trường (còn được gọi là từ kế) báo cáo từ trường xung quanh, được đo dọc theo ba trục cảm biến.
Phép đo được báo cáo trong các trường x, y và z của sensors_event_t.magnetic
và tất cả các giá trị đều ở dạng micro-Tesla (uT).
Từ kế cũng báo cáo độ chính xác mà nó mong đợi là các số đọc của nó thông qua sensors_event_t.magnetic.status
. Xem hằng số SENSOR_STATUS_*
của SensorManager
để biết thêm thông tin về các giá trị có thể có cho trường này.
Các bài đọc được hiệu chuẩn bằng cách sử dụng:
- Sự cân bằng nhiệt độ
- Hiệu chuẩn sắt mềm tại nhà máy (hoặc trực tuyến)
- Hiệu chuẩn sắt cứng trực tuyến
Con quay hồi chuyển
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
trả về cảm biến không đánh thức
Một cảm biến con quay hồi chuyển báo cáo tốc độ quay của thiết bị xung quanh ba trục cảm biến.
Quay là chiều dương theo chiều ngược chiều kim đồng hồ (quy tắc bàn tay phải). Có nghĩa là, một người quan sát nhìn từ một số vị trí tích cực trên trục x, y hoặc z tại một thiết bị được định vị trên điểm gốc sẽ báo cáo chuyển động quay dương nếu thiết bị dường như đang quay ngược chiều kim đồng hồ. Lưu ý rằng đây là định nghĩa toán học tiêu chuẩn của chuyển động quay dương và không đồng ý với định nghĩa không gian vũ trụ về cuộn.
Phép đo được báo cáo trong các trường x, y và z của sensors_event_t.gyro
và tất cả các giá trị đều tính bằng radian trên giây (rad / s).
Các bài đọc được hiệu chuẩn bằng cách sử dụng:
- Sự cân bằng nhiệt độ
- Bồi thường quy mô nhà máy (hoặc trực tuyến)
- Hiệu chuẩn thiên vị trực tuyến (để loại bỏ sự trôi dạt)
Con quay hồi chuyển cũng báo cáo mức độ chính xác mà nó mong đợi là các kết quả đọc của nó thông qua sensors_event_t.gyro.status
. Xem hằng số SENSOR_STATUS_*
của SensorManager
để biết thêm thông tin về các giá trị có thể có cho trường này.
Con quay hồi chuyển không thể được mô phỏng dựa trên từ kế và gia tốc kế, vì điều này sẽ khiến nó giảm tính nhất quán và khả năng phản hồi cục bộ. Nó phải dựa trên một chip con quay hồi chuyển thông thường.
Nhịp tim
Chế độ báo cáo: Thay đổi
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
trả về cảm biến không đánh thức
Cảm biến nhịp tim báo nhịp tim hiện tại của người chạm vào thiết bị.
Nhịp tim hiện tại tính theo nhịp mỗi phút (BPM) được báo cáo trong sensors_event_t.heart_rate.bpm
và trạng thái của cảm biến được báo cáo trong sensors_event_t.heart_rate.status
. Xem hằng số SENSOR_STATUS_*
của SensorManager
để biết thêm thông tin về các giá trị có thể có cho trường này. Đặc biệt, trong lần kích hoạt đầu tiên, trừ khi thiết bị được biết là không ở trên thân, trường trạng thái của sự kiện đầu tiên phải được đặt thành SENSOR_STATUS_UNRELIABLE
. Vì cảm biến này luôn thay đổi, các sự kiện được tạo khi và chỉ khi heart_rate.bpm
hoặc heart_rate.status
đã thay đổi kể từ sự kiện cuối cùng. Các sự kiện được tạo không nhanh hơn mọi lần sampling_period
.
sensor_t.requiredPermission
luôn là SENSOR_PERMISSION_BODY_SENSORS
.
Nhẹ
Chế độ báo cáo: Thay đổi
getDefaultSensor(SENSOR_TYPE_LIGHT)
trả về cảm biến không đánh thức
Cảm biến ánh sáng báo cáo độ chiếu sáng hiện tại theo đơn vị SI lux.
Phép đo được báo cáo trong sensors_event_t.light
.
Sự gần gũi
Chế độ báo cáo: Thay đổi
Thường được định nghĩa là cảm biến đánh thức
getDefaultSensor(SENSOR_TYPE_PROXIMITY)
trả về cảm biến đánh thức
Cảm biến tiệm cận báo cáo khoảng cách từ cảm biến đến bề mặt có thể nhìn thấy gần nhất.
Lên đến Android 4.4, các cảm biến tiệm cận luôn là cảm biến đánh thức, đánh thức SoC khi phát hiện sự thay đổi về độ gần. Sau Android 4.4, chúng tôi khuyên bạn nên triển khai phiên bản đánh thức của cảm biến này trước tiên, vì nó là phiên bản được sử dụng để bật và tắt màn hình trong khi thực hiện cuộc gọi điện thoại.
Phép đo được báo cáo bằng cm trong sensors_event_t.distance
. Lưu ý rằng một số cảm biến độ gần chỉ hỗ trợ phép đo "gần" hoặc "xa" nhị phân. Trong trường hợp này, cảm biến báo cáo giá trị sensor_t.maxRange
của nó ở trạng thái "xa" và giá trị nhỏ hơn sensor_t.maxRange
ở trạng thái "gần".
Sức ép
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_PRESSURE)
trả về cảm biến không đánh thức
Một cảm biến áp suất (còn được gọi là phong vũ biểu) báo cáo áp suất khí quyển tính bằng hectopascal (hPa).
Các bài đọc được hiệu chuẩn bằng cách sử dụng
- Sự cân bằng nhiệt độ
- Hiệu chuẩn thiên vị nhà máy
- Hiệu chuẩn quy mô nhà máy
Phong vũ biểu thường được sử dụng để ước tính sự thay đổi độ cao. Để ước tính độ cao tuyệt đối, áp suất mực nước biển (thay đổi tùy thuộc vào thời tiết) phải được sử dụng làm tham chiếu.
Độ ẩm tương đối
Chế độ báo cáo: Thay đổi
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)
trả về cảm biến không đánh thức
Cảm biến độ ẩm tương đối đo độ ẩm không khí xung quanh tương đối và trả về giá trị tính bằng phần trăm.
Các loại cảm biến tổng hợp
Cảm biến tổng hợp tạo ra dữ liệu bằng cách xử lý và / hoặc kết hợp dữ liệu từ một hoặc một số cảm biến vật lý. (Bất kỳ cảm biến nào không phải là cảm biến cơ sở đều được gọi là cảm biến hỗn hợp.) Ví dụ về cảm biến hỗn hợp bao gồm:
- Máy dò bước và chuyển động quan trọng , thường dựa trên gia tốc kế, nhưng cũng có thể dựa trên các cảm biến khác, nếu mức tiêu thụ điện năng và độ chính xác là chấp nhận được.
- Véc tơ quay trò chơi , dựa trên gia tốc kế và con quay hồi chuyển.
- Con quay hồi chuyển chưa được hiệu chỉnh, tương tự như cảm biến cơ bản của con quay hồi chuyển, nhưng với hiệu chuẩn thiên vị được báo cáo riêng thay vì được hiệu chỉnh trong phép đo.
Như với cảm biến cơ sở, các đặc điểm của cảm biến tổng hợp đến từ các đặc điểm của dữ liệu cuối cùng của chúng. Ví dụ: mức tiêu thụ điện năng của một vectơ quay trò chơi có thể bằng tổng mức tiêu thụ điện năng của chip gia tốc kế, chip con quay hồi chuyển, chip xử lý dữ liệu và các xe buýt vận chuyển dữ liệu. Một ví dụ khác, độ lệch của vectơ xoay trò chơi phụ thuộc nhiều vào chất lượng của thuật toán hiệu chỉnh cũng như vào các đặc tính của cảm biến vật lý.
Bảng sau liệt kê các loại cảm biến hỗn hợp có sẵn. Mỗi cảm biến tổng hợp dựa trên dữ liệu từ một hoặc một số cảm biến vật lý. Tránh chọn các cảm biến vật lý bên dưới khác để có kết quả gần đúng vì chúng cung cấp trải nghiệm người dùng kém.
Loại cảm biến | Loại | Cảm biến vật lý bên dưới | Chế độ báo cáo |
---|---|---|---|
Thái độ | Gia tốc kế, con quay hồi chuyển, KHÔNG ĐƯỢC SỬ DỤNG từ kế | Tiếp diễn | |
Thái độ | Gia tốc kế, từ kế, KHÔNG ĐƯỢC SỬ DỤNG con quay hồi chuyển | Tiếp diễn | |
Cử chỉ liếc nhìn ![]() | Sự tương tác | Chưa xác định | Một Châu |
Thái độ | Gia tốc kế, con quay hồi chuyển | Tiếp diễn | |
Chưa được hiệu chỉnh | Con quay hồi chuyển | Tiếp diễn | |
Hoạt động | Gia tốc kế, con quay hồi chuyển (nếu có) hoặc từ kế (nếu không có con quay) | Tiếp diễn | |
Chưa được hiệu chỉnh | Từ kế | Tiếp diễn | |
Định hướng (không được dùng nữa) | Thái độ | Gia tốc kế, từ kế, con quay hồi chuyển (nếu có) | Tiếp diễn |
Sự tương tác | Chưa xác định | Một Châu | |
Thái độ | Gia tốc kế, từ kế, con quay hồi chuyển | Tiếp diễn | |
Hoạt động | Gia tốc kế (hoặc cái khác miễn là công suất rất thấp) | Một Châu | |
Hoạt động | Gia tốc kế | Thay đổi | |
Hoạt động | Gia tốc kế | Đặc biệt | |
Hoạt động | Gia tốc kế | Đặc biệt | |
Sự tương tác | Chưa xác định | Một Châu |
= Cảm biến năng lượng thấp
Cảm biến tổng hợp hoạt động
Gia tốc tuyến tính
Cảm biến vật lý bên dưới: Gia tốc kế và (nếu có) con quay hồi chuyển (hoặc từ kế nếu không có con quay hồi chuyển)
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)
trả về cảm biến không đánh thức
Cảm biến gia tốc tuyến tính báo cáo gia tốc tuyến tính của thiết bị trong khung cảm biến, không bao gồm trọng lực.
Về mặt khái niệm, đầu ra là: đầu ra của gia tốc kế trừ đầu ra của cảm biến trọng lực . Nó được báo cáo bằng m / s ^ 2 trong các trường x, y và z của sensors_event_t.acceleration
.
Số đọc trên tất cả các trục phải gần bằng 0 khi thiết bị bất động.
Nếu thiết bị sở hữu con quay hồi chuyển, cảm biến gia tốc tuyến tính phải sử dụng con quay hồi chuyển và gia tốc kế làm đầu vào.
Nếu thiết bị không có con quay hồi chuyển, cảm biến gia tốc tuyến tính phải sử dụng gia tốc kế và từ kế làm đầu vào.
Chuyển động đáng kể
Cảm biến vật lý bên dưới: Gia tốc kế (hoặc cái khác miễn là công suất thấp)
Chế độ báo cáo: Một lần chụp
Năng lượng thấp
Chỉ triển khai phiên bản đánh thức của cảm biến này.
getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)
trả về cảm biến đánh thức
Một bộ phát hiện chuyển động quan trọng sẽ kích hoạt khi phát hiện một chuyển động quan trọng : một chuyển động có thể dẫn đến thay đổi vị trí của người dùng.
Ví dụ về các chuyển động quan trọng như vậy là:
- Đi bộ hoặc đi xe đạp
- Ngồi trên ô tô, xe khách hoặc xe lửa đang di chuyển
Ví dụ về các tình huống không kích hoạt chuyển động quan trọng:
- Điện thoại trong túi và người không di chuyển
- Điện thoại để trên bàn và bàn hơi rung do giao thông gần đó hoặc máy giặt
Ở cấp độ cao, máy dò chuyển động đáng kể được sử dụng để giảm tiêu thụ điện năng của việc xác định vị trí. Khi các thuật toán bản địa hóa phát hiện thấy thiết bị tĩnh, chúng có thể chuyển sang chế độ năng lượng thấp, nơi chúng dựa vào chuyển động đáng kể để đánh thức thiết bị khi người dùng đang thay đổi vị trí.
Cảm biến này phải có công suất thấp. Nó tạo ra sự cân bằng cho việc tiêu thụ điện năng có thể dẫn đến một lượng nhỏ âm tính giả. Điều này được thực hiện vì một số lý do:
- Mục tiêu của cảm biến này là tiết kiệm điện năng.
- Việc kích hoạt một sự kiện khi người dùng không di chuyển (dương tính giả) gây tốn kém về mặt điện năng, vì vậy cần tránh.
- Việc không kích hoạt sự kiện khi người dùng đang di chuyển (âm tính giả) có thể chấp nhận được miễn là nó không được thực hiện lặp đi lặp lại. Nếu người dùng đã đi bộ trong 10 giây, thì việc không kích hoạt sự kiện trong 10 giây đó là không thể chấp nhận được.
Mỗi sự kiện cảm biến báo cáo 1
trong sensors_event_t.data[0]
.
Máy dò bước
Cảm biến vật lý bên dưới: Gia tốc kế (+ có thể là những thứ khác miễn là công suất thấp)
Chế độ báo cáo: Đặc biệt (một sự kiện mỗi bước được thực hiện)
Năng lượng thấp
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)
trả về cảm biến không đánh thức
Bộ dò bước tạo ra một sự kiện mỗi khi người dùng thực hiện một bước.
Dấu thời gian của sự kiện sensors_event_t.timestamp
tương ứng với thời điểm chân chạm đất, tạo ra sự thay đổi lớn trong gia tốc.
So với bộ đếm bước, bộ dò bước phải có độ trễ thấp hơn (ít hơn hai giây). Cả bộ dò bước và bộ đếm bước đều phát hiện khi người dùng đang đi bộ, chạy và đi lên cầu thang. Chúng không nên kích hoạt khi người dùng đang đi xe đạp, lái xe hoặc trên các phương tiện khác.
Cảm biến này phải có công suất thấp. Có nghĩa là, nếu không thể thực hiện phát hiện bước trong phần cứng, thì cảm biến này sẽ không được xác định. Đặc biệt, khi bộ dò bước được kích hoạt và không có gia tốc kế, thì chỉ có các bước mới kích hoạt ngắt (không phải mọi lần đọc gia tốc kế).
sampling_period_ns
không có tác động đến trình phát hiện bước.
Mỗi sự kiện cảm biến báo cáo 1
trong sensors_event_t.data[0]
.
Bộ đếm bước
Cảm biến vật lý bên dưới: Gia tốc kế (+ có thể là những thứ khác miễn là công suất thấp)
Chế độ báo cáo: Thay đổi
Năng lượng thấp
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
trả về cảm biến không đánh thức
Bộ đếm bước báo cáo số bước người dùng đã thực hiện kể từ lần khởi động lại cuối cùng trong khi được kích hoạt.
Phép đo được báo cáo dưới dạng uint64_t
trong sensors_event_t.step_counter
và chỉ được đặt lại về 0 khi khởi động lại hệ thống.
Dấu thời gian của sự kiện được đặt thành thời gian khi bước cuối cùng cho sự kiện đó được thực hiện.
Xem loại cảm biến dò bước để biết ý nghĩa của thời gian của một bước.
So với bộ dò bước, bộ đếm bước có thể có độ trễ cao hơn (lên đến 10 giây). Nhờ độ trễ này, cảm biến này có độ chính xác cao; số bước sau cả ngày đo lường phải nằm trong 10% số bước thực tế. Cả bộ dò bước và bộ đếm bước đều phát hiện khi người dùng đang đi bộ, chạy và đi lên cầu thang. Chúng không nên kích hoạt khi người dùng đang đi xe đạp, lái xe hoặc trên các phương tiện khác.
Phần cứng phải đảm bảo số bước bên trong không bao giờ bị tràn. Kích thước tối thiểu của bộ đếm bên trong của phần cứng phải là 16 bit. Trong trường hợp sắp xảy ra sự cố tràn (nhiều nhất là sau mỗi ~ 2 ^ 16 bước), SoC có thể được đánh thức để người lái xe có thể thực hiện bảo trì bộ đếm.
Như đã nêu trong Tương tác , trong khi cảm biến này hoạt động, nó sẽ không làm gián đoạn bất kỳ cảm biến nào khác, đặc biệt là gia tốc kế, rất có thể đang được sử dụng.
Nếu một thiết bị cụ thể không thể hỗ trợ các chế độ hoạt động này, thì loại cảm biến này sẽ không được HAL báo cáo. Có nghĩa là, không thể chấp nhận "mô phỏng" cảm biến này trong HAL.
Cảm biến này phải có công suất thấp. Có nghĩa là, nếu không thể thực hiện phát hiện bước trong phần cứng, thì cảm biến này sẽ không được xác định. Đặc biệt, khi bộ đếm bước được kích hoạt và không có gia tốc kế, thì chỉ có các bước mới kích hoạt ngắt (không phải dữ liệu gia tốc kế).
Máy dò độ nghiêng
Cảm biến vật lý bên dưới: Gia tốc kế (+ có thể là những thứ khác miễn là công suất thấp)
Chế độ báo cáo: Đặc biệt
Năng lượng thấp
Chỉ triển khai phiên bản đánh thức của cảm biến này.
getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)
trả về cảm biến đánh thức
Máy dò độ nghiêng tạo ra một sự kiện mỗi khi một sự kiện nghiêng được phát hiện.
Sự kiện nghiêng được xác định bằng hướng của trọng lực trung bình của cửa sổ trong 2 giây thay đổi ít nhất 35 độ kể từ khi kích hoạt hoặc sự kiện cuối cùng do cảm biến tạo ra. Đây là thuật toán:
-
reference_estimated_gravity
= trung bình của các phép đo gia tốc kế trong giây đầu tiên sau khi kích hoạt hoặc trọng lực ước tính khi sự kiện nghiêng cuối cùng được tạo ra. -
current_estimated_gravity
= trung bình của các phép đo gia tốc kế trong 2 giây qua. - Kích hoạt khi
angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees
Gia tốc lớn mà không thay đổi hướng điện thoại sẽ không gây ra sự kiện nghiêng. Ví dụ: một khúc cua gấp hoặc tăng tốc mạnh khi đang lái xe ô tô sẽ không gây ra hiện tượng nghiêng, mặc dù góc của gia tốc trung bình có thể thay đổi hơn 35 độ. Thông thường, cảm biến này được thực hiện chỉ với sự trợ giúp của một gia tốc kế. Các cảm biến khác cũng có thể được sử dụng nếu chúng không làm tăng mức tiêu thụ điện năng đáng kể. Đây là một cảm biến năng lượng thấp sẽ cho phép SoC chuyển sang chế độ tạm ngừng. Không mô phỏng cảm biến này trong HAL. Mỗi sự kiện cảm biến báo cáo 1
trong sensors_event_t.data[0]
.
Cảm biến tổng hợp thái độ
Vectơ xoay
Cảm biến vật lý bên dưới: Gia tốc kế, từ kế và con quay hồi chuyển
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR)
trả về cảm biến không đánh thức
Một cảm biến vectơ quay báo cáo hướng của thiết bị so với khung tọa độ Đông-Bắc-Lên. Nó thường thu được bằng cách tích hợp các chỉ số gia tốc kế, con quay hồi chuyển và từ kế. Hệ tọa độ Đông-Bắc-Lên được xác định là cơ sở trực chuẩn trực tiếp trong đó:
- X hướng về phía đông và là phương tiếp tuyến với mặt đất.
- Y hướng về phía bắc và là phương tiếp tuyến với mặt đất.
- Z hướng lên trời và vuông góc với mặt đất.
Hướng của điện thoại được thể hiện bằng cách xoay cần thiết để căn chỉnh tọa độ Đông-Bắc-Lên với tọa độ của điện thoại. Tức là, việc áp dụng phép xoay cho khung hình thế giới (X, Y, Z) sẽ căn chỉnh chúng với tọa độ điện thoại (x, y, z).
Việc xoay có thể được coi là xoay điện thoại một góc xung quanh trục quay trục rot_axis
để đi từ hướng thiết bị tham chiếu (căn thẳng theo hướng Đông-Bắc-Lên) sang hướng thiết bị hiện tại. Vòng quay được mã hóa dưới dạng bốn thành phần x, y, z, w ít hơn một đơn vị của một quaternion đơn vị:
-
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)
Ở đâu:
- Các trường x, y và z của
rot_axis
là tọa độ Đông-Bắc-Lên của một vectơ độ dài đơn vị biểu thị trục quay -
theta
là góc quay
Quaternion là một quaternion đơn vị: Nó phải có chuẩn 1
. Nếu không đảm bảo điều này sẽ gây ra hành vi thất thường của khách hàng.
Ngoài ra, cảm biến này báo cáo độ chính xác tiêu đề ước tính:
sensors_event_t.data[4] = estimated_accuracy
(tính bằng radian)
Lỗi tiêu đề phải nhỏ hơn 95% độ chính estimated_accuracy
. Cảm biến này phải sử dụng con quay hồi chuyển làm đầu vào thay đổi hướng chính.
Cảm biến này cũng sử dụng đầu vào gia tốc kế và từ kế để bù cho hiện tượng trôi của con quay hồi chuyển và không thể thực hiện chỉ sử dụng gia tốc kế và từ kế.
Vectơ xoay trò chơi
Cảm biến vật lý bên dưới: Gia tốc kế và con quay hồi chuyển (không có từ kế)
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)
trả về cảm biến không đánh thức
Cảm biến vectơ quay trong trò chơi tương tự như cảm biến vectơ quay nhưng không sử dụng trường địa từ. Do đó, trục Y không hướng về phía bắc mà thay vào đó là một số tham chiếu khác. Tham chiếu đó được phép trôi theo cùng một thứ tự độ lớn khi con quay hồi chuyển quay quanh trục Z.
Xem Cảm biến vectơ xoay để biết chi tiết về cách đặt sensors_event_t.data[0-3]
. Cảm biến này không báo cáo độ chính xác tiêu đề ước tính: sensors_event_t.data[4]
được đặt trước và phải được đặt thành 0
.
Trong trường hợp lý tưởng, điện thoại được xoay và quay trở lại cùng một hướng trong thế giới thực sẽ báo cáo cùng một vectơ xoay trò chơi.
Cảm biến này phải dựa trên con quay hồi chuyển và gia tốc kế. Nó không thể sử dụng từ kế làm đầu vào, ngoài ra, gián tiếp, thông qua ước tính độ lệch của con quay hồi chuyển.
Trọng lực
Cảm biến vật lý bên dưới: Gia tốc kế và (nếu có) con quay hồi chuyển (hoặc từ kế nếu không có con quay hồi chuyển)
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_GRAVITY)
trả về cảm biến không đánh thức
Một cảm biến trọng lực báo cáo hướng và độ lớn của trọng lực trong tọa độ của thiết bị.
Các thành phần vectơ trọng lực được báo cáo bằng m / s ^ 2 trong các trường x, y và z của sensors_event_t.acceleration
.
Khi thiết bị ở trạng thái nghỉ, đầu ra của cảm biến trọng lực phải giống với đầu ra của gia tốc kế. Trên Trái đất, cường độ là khoảng 9,8 m / s ^ 2.
Nếu thiết bị sở hữu con quay hồi chuyển, cảm biến trọng lực phải sử dụng con quay hồi chuyển và gia tốc kế làm đầu vào.
Nếu thiết bị không có con quay hồi chuyển, cảm biến trọng lực phải sử dụng gia tốc kế và từ kế làm đầu vào.
Vectơ quay địa từ
Cảm biến vật lý bên dưới: Gia tốc kế và từ kế (không có con quay hồi chuyển)
Chế độ báo cáo: Liên tục
Năng lượng thấp
getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR)
trả về cảm biến không đánh thức
Vectơ quay địa từ tương tự như cảm biến vectơ quay nhưng sử dụng từ kế và không có con quay hồi chuyển.
Cảm biến này phải dựa trên một từ kế. Nó không thể được thực hiện bằng cách sử dụng con quay hồi chuyển và đầu vào con quay hồi chuyển không thể được sử dụng bởi cảm biến này.
Xem Cảm biến vectơ xoay để biết chi tiết về cách đặt sensors_event_t.data[0-4]
.
Cũng giống như đối với cảm biến vectơ quay, lỗi tiêu đề phải nhỏ hơn độ chính xác ước tính ( sensors_event_t.data[4]
) 95% thời gian.
Cảm biến này phải có công suất thấp, vì vậy nó phải được thực hiện trong phần cứng.
Định hướng (không được dùng nữa)
Cảm biến vật lý bên dưới: Gia tốc kế, từ kế và con quay hồi chuyển (nếu có)
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_ORIENTATION)
trả về cảm biến không đánh thức
Lưu ý: Đây là loại cảm biến cũ hơn đã không còn được dùng trong Android SDK. Nó đã được thay thế bằng cảm biến vectơ quay, được xác định rõ ràng hơn. Sử dụng cảm biến vectơ quay trên cảm biến định hướng bất cứ khi nào có thể.
Một cảm biến định hướng báo cáo thái độ của thiết bị. Các phép đo được báo cáo theo độ trong các trường x, y và z của sensors_event_t.orientation
:
-
sensors_event_t.orientation.x
: góc phương vị, góc giữa hướng bắc của từ trường và trục Y, xung quanh trục Z (0<=azimuth<360
). 0 = Bắc, 90 = Đông, 180 = Nam, 270 = Tây. -
sensors_event_t.orientation.y
: cao độ, quay quanh trục X (-180<=pitch<=180
), với các giá trị dương khi trục Z di chuyển về phía trục Y. -
sensors_event_t.orientation.z
: cuộn, quay quanh trục Y (-90<=roll<=90
), với giá trị dương khi trục X di chuyển về phía trục Z.
Xin lưu ý, vì lý do lịch sử, góc cuộn là dương theo chiều kim đồng hồ. (Về mặt toán học, nó phải là số dương theo chiều ngược chiều kim đồng hồ):

Hình 3. Định hướng liên quan đến thiết bị
Định nghĩa này khác với yaw, pitch và roll được sử dụng trong ngành hàng không khi trục X nằm dọc theo cạnh dài của máy bay (từ đuôi đến mũi).
Cảm biến định hướng cũng báo cáo mức độ chính xác mà nó mong đợi là các kết quả đọc của nó thông qua sensors_event_t.orientation.status
. Xem hằng số SENSOR_STATUS_*
của SensorManager
để biết thêm thông tin về các giá trị có thể có cho trường này.
Cảm biến chưa hiệu chỉnh
Cảm biến chưa được hiệu chuẩn cung cấp nhiều kết quả thô hơn và có thể bao gồm một số sai lệch nhưng cũng chứa ít "bước nhảy" hơn từ các hiệu chỉnh được áp dụng thông qua hiệu chuẩn. Một số ứng dụng có thể thích các kết quả chưa được hiệu chỉnh này mượt mà hơn và đáng tin cậy hơn. Ví dụ: nếu một ứng dụng đang cố gắng tiến hành hợp nhất cảm biến của riêng mình, thì việc áp dụng các hiệu chuẩn thực sự có thể làm sai lệch kết quả.
Gia tốc kế chưa được hiệu chuẩn
Cảm biến vật lý bên dưới: Gia tốc kế
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
trả về cảm biến không đánh thức
Cảm biến gia tốc kế chưa hiệu chỉnh báo cáo gia tốc của thiết bị dọc theo ba trục cảm biến mà không có bất kỳ hiệu chỉnh sai lệch nào (độ lệch của nhà máy và bù nhiệt độ được áp dụng cho các phép đo chưa hiệu chỉnh), cùng với ước tính độ chệch. Tất cả các giá trị được tính bằng đơn vị SI (m / s ^ 2) và được báo cáo trong các trường của sensors_event_t.uncalibrated_accelerometer
:
-
x_uncalib
: gia tốc (không bù lệch) dọc theo trục X. -
y_uncalib
: gia tốc (không bù lệch) dọc theo trục Y -
z_uncalib
: gia tốc (không bù lệch) dọc theo trục Z -
x_bias
: độ chệch ước tính dọc theo trục X -
y_bias
: độ chệch ước tính dọc theo trục Y -
z_bias
: độ chệch ước tính dọc theo trục Z
Con quay hồi chuyển chưa được hiệu chỉnh
Cảm biến vật lý bên dưới: Con quay hồi chuyển
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)
trả về cảm biến không đánh thức
Một con quay hồi chuyển chưa hiệu chỉnh báo cáo tốc độ quay xung quanh các trục cảm biến mà không áp dụng bù lệch cho chúng, cùng với ước tính chệch. Tất cả các giá trị tính bằng radian / giây và được báo cáo trong các trường của sensors_event_t.uncalibrated_gyro
:
-
x_uncalib
: tốc độ góc (không có bù lệch) quanh trục X. -
y_uncalib
: tốc độ góc (không bù trôi) quanh trục Y -
z_uncalib
: tốc độ góc (không bù trôi) quanh trục Z -
x_bias
: ước tính độ lệch xung quanh trục X -
y_bias
: ước tính độ lệch xung quanh trục Y -
z_bias
: ước tính độ lệch xung quanh trục Z
Về mặt khái niệm, phép đo chưa hiệu chuẩn là tổng của phép đo đã hiệu chuẩn và ước tính độ chệch: _uncalibrated = _calibrated + _bias
.
Các giá trị x_bias
, y_bias
và z_bias
dự kiến sẽ nhảy ngay khi ước tính độ lệch thay đổi và chúng sẽ ổn định trong thời gian còn lại.
Xem định nghĩa của cảm biến con quay hồi chuyển để biết chi tiết về hệ tọa độ được sử dụng.
Hiệu chuẩn nhà máy và bù nhiệt độ phải được áp dụng cho các phép đo. Ngoài ra, ước tính độ lệch con quay hồi chuyển phải được thực hiện để các ước tính hợp lý có thể được báo cáo trong x_bias
, y_bias
và z_bias
. Nếu quá trình triển khai không thể ước tính độ lệch, thì cảm biến này không được triển khai.
Nếu có cảm biến này, thì cảm biến Con quay hồi chuyển tương ứng cũng phải có mặt và cả hai cảm biến phải chia sẻ cùng các giá trị sensor_t.name
và sensor_t.vendor
.
Từ trường chưa được hiệu chỉnh
Cảm biến vật lý bên dưới: Từ kế
Chế độ báo cáo: Liên tục
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)
trả về cảm biến không đánh thức
Cảm biến từ trường chưa hiệu chỉnh báo cáo từ trường xung quanh cùng với ước tính hiệu chuẩn sắt cứng. Tất cả các giá trị đều ở dạng micro-Tesla (uT) và được báo cáo trong các trường của sensors_event_t.uncalibrated_magnetic
:
-
x_uncalib
: từ trường (không có bù sắt cứng) dọc theo trục X. -
y_uncalib
: từ trường (không bù sắt cứng) dọc theo trục Y -
z_uncalib
: từ trường (không bù sắt cứng) dọc theo trục Z -
x_bias
: độ chệch sắt cứng ước tính dọc theo trục X -
y_bias
: độ chệch sắt cứng ước tính dọc theo trục Y -
z_bias
: độ chệch sắt cứng ước tính dọc theo trục Z
Về mặt khái niệm, phép đo chưa hiệu chuẩn là tổng của phép đo đã hiệu chuẩn và ước tính độ chệch: _uncalibrated = _calibrated + _bias
.
Từ kế chưa hiệu chỉnh cho phép các thuật toán cấp cao hơn xử lý ước tính sắt cứng không tốt. Các giá trị x_bias
, y_bias
và z_bias
dự kiến sẽ nhảy ngay sau khi ước tính của hard-iron thay đổi và chúng sẽ ổn định trong thời gian còn lại.
Hiệu chuẩn sắt mềm và bù nhiệt độ phải được áp dụng cho các phép đo. Ngoài ra, ước tính sắt cứng phải được thực hiện để các ước tính hợp lý có thể được báo cáo trong x_bias
, y_bias
và z_bias
. Nếu quá trình triển khai không thể ước tính độ chệch, thì cảm biến này không được triển khai.
Nếu có cảm biến này, thì cảm biến từ trường tương ứng phải có mặt và cả hai cảm biến phải có cùng giá trị sensor_t.name
và sensor_t.vendor
.
Góc bản lề
Chế độ báo cáo: Thay đổi
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)
trả về cảm biến đánh thức
Cảm biến góc bản lề đo góc, tính bằng độ, giữa hai phần không thể tách rời của thiết bị. Chuyển động của bản lề được đo bằng loại cảm biến này dự kiến sẽ thay đổi cách thức mà người dùng có thể tương tác với thiết bị, chẳng hạn như bằng cách mở hoặc để lộ màn hình.
Cảm biến tổng hợp tương tác
Một số cảm biến chủ yếu được sử dụng để phát hiện các tương tác với người dùng. We don't define how those sensors must be implemented, but they must be low power and it's the responsibility of the device manufacturer to verify their quality in terms of user experience.
Wake up gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
returns a wake-up sensor
A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7.
Each sensor event reports 1
in sensors_event_t.data[0]
.
Pick up gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
returns a wake-up sensor
A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).
Each sensor event reports 1
in sensors_event_t.data[0]
.
Glance gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
returns a wake-up sensor
A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1
in sensors_event_t.data[0]
.
Limited axes IMU sensors
Available from Android 13, limited axes IMU sensors are sensors that support use cases where not all three axes (x, y, z) are available. Standard IMU types in Android (such as SENSOR_TYPE_ACCELEROMETER
and SENSOR_TYPE_GYROSCOPE
) assume that all three axes are supported. However, not all form factors and devices support 3-axis accelerometers and 3-axis gyroscopes.
Accelerometer limited axes
Underlying physical sensors: Accelerometer
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
returns a non-wake-up sensor
An accelerometer limited axes sensor is equivalent to TYPE_ACCELEROMETER
but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the acceleration value for the x, y, and z axes are supported. A value of 1.0
indicates that the axis is supported, and a value of 0
indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the acceleration values for unused axes to 0
, instead of having undefined values.
Gyroscope limited axes
Underlying physical sensors: Gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
returns a non-wake-up sensor
A gyroscope limited axes sensor is equivalent to TYPE_GYROSCOPE
but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the angular speed value for the x, y, and z axes are supported. A value of 1.0
indicates that the axis is supported, and a value of 0
indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the angular speed values for unused axes to 0
.
Accelerometer limited axes uncalibrated
Underlying physical sensors: Accelerometer
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
returns a non-wake-up sensor
An accelerometer limited axes uncalibrated sensor is equivalent to TYPE_ACCELEROMETER_UNCALIBRATED
but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the acceleration and bias values for the x, y, and z axes are supported. A value of 1.0
indicates that the axis is supported, and a value of 0
indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the acceleration and bias values for unused axes to 0
.
Gyroscope limited axes uncalibrated
Underlying physical sensors: Gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
returns a non-wake-up sensor
A gyroscope limited axes uncalibrated sensor is equivalent to TYPE_GYROSCOPE_UNCALIBRATED
but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the angular speed and drift values for the x, y, and z axes are supported. A value of 1.0
indicates that the axis is supported, and a value of 0
indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the angular speed and drift values for unused axes to 0
.
Composite limited axes IMU
Underlying physical sensors: Any combination of 3-axis accelerometer, 3-axis gyroscope, 3-axis accelerometer uncalibrated, and 3-axis gyroscope uncalibrated sensors.
Reporting-mode: Continuous
A composite limited axes IMU sensor is equivalent to a limited axes IMU sensor but instead of being supported at the HAL, it converts the 3-axis sensor data into the equivalent limited axes variants. These composite sensors are only enabled for automotive devices.
The following table shows an example conversion from a standard 3-axis accelerometer to a composite limited axes accelerometer.
SensorEvent Values for SENSOR_TYPE_ACCELEROMETER | Example SENSOR_TYPE_ACCELEROMETER SensorEvent | Composite SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent |
---|---|---|
values[0] | -0.065 | -0.065 |
values[1] | 0.078 | 0.078 |
values[2] | 9.808 | 9.808 |
values[3] | N/A | 1.0 |
values[4] | N/A | 1.0 |
values[5] | N/A | 1.0 |
Automotive sensors
Sensors to support automotive use cases.
Heading
Underlying physical sensors: Any combination of GPS, magnetometer, accelerometer, and gyroscope.
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_HEADING)
returns a non-wake-up sensor
Available from Android 13, a heading sensor measures the direction in which the device is pointing relative to true north in degrees. The heading sensor includes two SensorEvent
values. One for the measured device heading and one for the accuracy of the provided heading value.
Heading values reported by this sensor must be between 0.0
(inclusive) and 360.0
(exclusive), with 0
indicating north, 90
east, 180
south, and 270
west.
Accuracy for this sensor is defined at 68 percent confidence. In the case where the underlying distribution is Gaussian normal, the accuracy is one standard deviation. For example, if the heading sensor returns a heading value of 60 degrees and an accuracy value of 10 degrees, there's a 68 percent probability of the true heading being between 50 degrees and 70 degrees.