Điều này thực sự là muộn nhưng nó có thể giúp những người như tôi đến với câu hỏi này.
Sử dụng loại Cảm biến vector xoay vòng. Không cần sử dụng bộ lọc thông thấp hoặc tính giá trị trung bình của các giá trị cảm biến x cuối cùng.
Dưới đây là một số mã:
private float[] mMatrixR = new float[9];
private float[] mMatrixValues = new float[3];
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ROTATION_VECTOR:
// Get rotation matrix
SensorManager.getRotationMatrixFromVector(mMatrixR, event.values);
SensorManager.getOrientation(mMatrixR, mMatrixValues);
// Use this value in degrees
mAzimuth = Math.toDegrees(mMatrixValues[0]);
}
tôi tìm thấy những giá trị rất nhanh và trơn tru và sử dụng chúng trong ứng dụng của tôi. Tôi đã sử dụng gia tốc kế và từ kế làm sao lưu trong trường hợp vector loại xoay không có trong thiết bị, nó là cảm biến dựa trên phần mềm (Sensor fusion) sử dụng từ kế, gia tốc kế và con quay hồi chuyển (nếu có).
Nguồn
2016-09-01 16:46:52
Xem bài đăng trên blog tuyệt vời của Thom Nichols để biết ví dụ về cách triển khai bộ lọc thông thấp - Phần 1 (http://blog.thomnichols.org/2011/08/smoothing-sensor-data-with-a-low -pass-filter) và phần 2 (http://blog.thomnichols.org/2012/06/smoothing-sensor-data-part-2) –
@JimJeffers Triển khai này rất đơn giản và rực rỡ. Trợ giúp rất nhiều. Cảm ơn ! – Shlublu