2012-02-27 24 views
10

Tôi đang làm việc với dữ liệu cảm biến android. Ứng dụng của tôi sử dụngLa bàn cung cấp cho tôi dữ liệu điên rồ, hiệu chỉnh cần thiết hay cảm biến bị hỏng?

SensorManager.getRotationMatrixFromVector(
      mRotationMatrix , event.values); 

và nó đã hoạt động tốt cho đến sáng nay, khi ma trận xoay bắt đầu gửi nhiều dữ liệu tiếng ồn (Thay đổi N thành W trong giây).

Nó không phải là một vấn đề với mã của tôi, bởi vì vào thứ sáu đã làm việc và không có thay đổi đã được thực hiện. Tôi đã sử dụng ứng dụng la bàn từ thị trường và la bàn đang cung cấp dữ liệu ngẫu nhiên.

Tôi đã thử nghiệm ứng dụng của mình trên một máy tính bảng khác và nó hoạt động tốt.

Có ai đó biết tại sao điều này xảy ra không? Một vấn đề với cảm biến? Liệu nó cần hiệu chuẩn?

Trả lời

18

Tôi đã làm việc khá nhiều với các la bàn điện tử này trên điện thoại di động và hoàn toàn có thể là không có gì sai với mã hoặc cảm biến của bạn.

Thay vào đó, điều này rất có thể là vấn đề với môi trường của bạn. Có từ trường can thiệp vào từ trường của trái đất mọi lúc. Từ thiết bị điện can thiệp vào cấu trúc kim loại đang cầm lên một tòa nhà. Vào cuối ngày, la bàn chỉ là nam châm. Nếu bạn đứng bên cạnh một cục kim loại lớn, la bàn sẽ bị thu hút bởi nó và chỉ vào nó chứ không phải là cực bắc từ tính.

Hãy thử cách này: Cài đặt GPS status rồi tắt tất cả lọc (cài đặt ... gps & cảm biến ... lọc cảm biến ...không lọc). Thực hiện hiệu chuẩn (hình 8 công cụ lượn sóng) và sau đó di chuyển điện thoại xung quanh bàn của bạn .. gần màn hình, dây cáp, vv Bạn sẽ thấy nó phát điên. Thông tin hoàn toàn không đáng tin cậy. Tôi tìm thấy trong quá khứ mà di chuyển điện thoại một vài inch bên phải hoàn toàn thay đổi đọc của nó. Điều tương tự cũng xảy ra với một la bàn thực sự. Nói đúng ra không có "vấn đề". La bàn của thiết bị được gán cho chính nó với từ trường mạnh nhất. Ngay cả nội dung từ tính của đá gần đó cũng có thể can thiệp vào la bàn.

Khi thử nghiệm thêm, tôi vừa mới đặt một la bàn thực (định hướng) trên điện thoại đã cài đặt ứng dụng la bàn. La bàn thật hiện đang trỏ tới mọi nơi nhưng từ Bắc. Hai thiết bị đang can thiệp vào nhau. Vì vậy, lời khuyên của tôi là .. đi một nơi nào đó trong mở, như một công viên hoặc lĩnh vực, tránh xa bất kỳ can thiệp tiềm năng và đường dây điện, (nếu bạn có một mang lại một la bàn thực sự để kiểm tra rằng các ứng dụng GPS status là chỉ bên phải) và xem liệu la bàn của bạn có hoạt động như bạn mong đợi hay không.

Thêm: Câu trả lời từ @resus cũng rất quan trọng khi hiệu chỉnh. Xoay điện thoại vài lần trên mỗi trục. Trông ngớ ngẩn nhưng nó hiệu chỉnh nó đúng cách.

Thêm 2: Bạn có thể sử dụng compass bearing GPS của mình không? Nó sẽ yêu cầu thiết bị phải di chuyển (tốc độ đi bộ sẽ tốt) nhưng bạn sẽ không cần phải lo lắng về bất kỳ sự can thiệp nào. Nó sẽ cung cấp cho một đọc chính xác cung cấp tín hiệu GPS của bạn là tốt.

Thêm 3: Một ý nghĩ khác chỉ xảy ra với tôi .. Bạn có thể thử áp dụng bộ lọc thông thấp cho cảm biến. Điều này có nghĩa là những thay đổi đột ngột trong việc đọc cảm biến được lọc ra .. có một cái nhìn tại đây answer. Và nếu điều đó không làm tốt công việc thì có rất nhiều thuật toán trên web để bạn lựa chọn.

+0

Cảm ơn, tôi đã kiểm tra trạng thái GPS và hoạt động tốt cho đến khi máy tính bảng ở lại cả đêm trong từ trường mạnh, có thể là, tôi sẽ gọi hỗ trợ – vgonisanz

+0

Chỉ cần thử nút xoay "3 trục". Xoay nó khoảng 3 lần trước mặt sau, sau đó lật nó về phía nó và qua một lần nữa 3 lần, sau đó xoay nó (giống như quay nó trên bàn làm việc) 3 lần. Tôi không nghĩ rằng hỗ trợ sẽ giúp đỡ vì nó có thể không bị lỗi. Chỉ cần cố gắng tránh xa mọi nguồn can thiệp có thể có - Tốt nhất của may mắn – Tim

+0

Tôi đã cố gắng áp dụng một bộ lọc thông thấp đơn giản, với alpha rất thấp (thay đổi nhỏ) nhưng nó không hoạt động, cảm biến không kết hợp dữ liệu, vì vậy nó hoàn toàn bị hỏng. Vì vậy, mọi người, cẩn thận với từ trường cao. – vgonisanz

6

Nếu bạn chắc chắn không thay đổi bất kỳ thứ gì trong mã của mình và nó vẫn hoạt động tốt trên các thiết bị khác, nó sẽ gợi ý sự cố với thiết bị cụ thể đó.

Trong khi ứng dụng của bạn đang chạy (tức là la bàn đang được sử dụng), bạn sẽ có thể lướt nó trong hình 8 để tự động xác định lại la bàn. Bạn cũng nên chắc chắn rằng bạn không đứng bên cạnh bất kỳ khối kim loại lớn vv mà có thể can thiệp với các bài đọc.

Bạn có thể ghi đè phương pháp của SensorEventListener để bật thông báo cho người dùng khi la bàn yêu cầu hiệu chỉnh lại (có thể khi độ chính xác giảm xuống SENSOR_STATUS_ACCURACY_LOW).

Theo kinh nghiệm của tôi về chơi với la bàn trên điện thoại android, họ có thể được khá đáng tin cậy ...

4

Nếu việc ứng dụng của bạn trên một máy tính bảng và ứng dụng la bàn khác không làm việc trên thiết bị của bạn, điều này có lẽ do để hiệu chỉnh kém.

Như đã nói trong bài đăng ở trên, để hiệu chỉnh, hãy lắc thiết bị của bạn trong hình 8. Tôi chỉ muốn thêm rằng bạn nên làm điều đó cho M EI trục. Điều này sẽ khắc phục vấn đề của bạn.

3

Nếu nó không phải là lỗi hiệu chuẩn, vì một số người đã trả lời, có thể la bàn đã đi qua từ trường và giờ nó được khử từ, do đó nó không hoạt động đúng cách.

Bạn thường giữ máy tính bảng ở đâu? Nó có thể được rằng nó đã được gần máy chủ lớn hoặc nam châm? Bạn nên kiểm tra la bàn trong trường hợp, nói chuyện với hỗ trợ kỹ thuật của Android.

Hy vọng điều đó sẽ hữu ích.

1

Tôi nghĩ câu hỏi là nếu hiệu chuẩn có thể được thực hiện mà không gửi bất kỳ dữ liệu nào đến la bàn. Vì không phải ai cũng nói rằng la bàn được hiệu chỉnh như trong video này: https://support.google.com/maps/answer/6145351?hl=en và rõ ràng là bạn không thể làm gì khác ngoài việc khuyên người dùng hiệu chỉnh trước khi sử dụng chương trình hoặc khi bạn nhận được quá nhiều thay đổi. Ví dụ, đi sang trái và phải 90 độ trong khoảng 25 ms.

Dù sao tôi nghĩ sẽ tốt hơn khi đưa vài giây vào ứng dụng trước khi bắt đầu lấy dữ liệu, vì nó cung cấp một số giá trị không ổn định (quá cao và thấp trong thời gian ngắn mà không có chuyển động) tại thời điểm tải ứng dụng. Chỉ cần để trình xử lý onSensorChanged() được mã hóa với điều kiện và bắt đầu một chuỗi trên trình xử lý onCreate(), điều này sẽ đặt boolean thành true, sau một vài giây. Sau đó, bạn bắt đầu ghi lại dữ liệu trên trình xử lý onSensorChanged().

Ngoài ra chủ đề này có thể giúp phát hiện chính xác cảm biến, và sau đó bạn có thể bật lên: In Android can I programmatically detect that the compass is not yet calibrated?

Tôi biết vì tôi đang xây dựng một robot bằng cách sử dụng la bàn của điện thoại thông minh, và tôi có kinh nghiệm này. Vì vậy, nếu bạn tạo robot, hãy đảm bảo đặt một khoảng cách giữa điện tử và phần cứng với điện thoại thông minh, nhưng hãy nhớ rằng nó nằm trên bất kỳ la bàn nào: các trường điện từ có thể bị thay đổi bởi kim loại rất nhiều.

1

Ngày nay tôi có may mắn khi phát triển rô-bốt với số HMC-5983MPU-6050, có thể được hiệu chỉnh bằng cách sử dụng thư viện với Arduino.

Mã đó tương thích/di động với các bộ điều khiển khác nhưng cũng không dễ dàng cho điện thoại thông minh, tôi đoán rằng cần thiết để hiệu chỉnh la bàn, con quay hồi chuyển và gia tốc bên trong một số nội bộ của Android, không có sẵn trong SDK .

Tôi trả lời trước khi nghĩ rằng có thể hiệu chỉnh chỉ dành cho một số thiết bị, nhưng nhận ra rằng phải như tôi đã nói trước đây. Vì vậy, nếu chơi với rô bốt, có nghĩa là nó cũng dễ, nhưng khi sử dụng điện thoại thông minh có thể một số phần mềm tùy chỉnh như CyanogenMod sẽ mang lại khả năng điều tra cách thiết lập bù trừ, nhưng quan trọng hơn để chạy một số chương trình được chuyển từ bản phác thảo (chỉ theo khái niệm của nó) để có được chúng đầu tiên ...

Vì vậy, chúc may mắn! Điều gì cũng đúng, là trong cả hai thiết bị (điện thoại thông minh và robot của tôi) nó cần phải di chuyển chúng để làm việc tốt, như tôi đã cho bạn thấy trong video của câu trả lời mới nhất, cũng hữu ích trên robot.

Chúc may mắn và rất nhiều niềm vui với những điều đó, rất mạnh mẽ.

Các vấn đề liên quan