Độ chính xác của gia tốc kế Android (Điều hướng quán tính)


109

Tôi đang xem xét triển khai Hệ thống điều hướng quán tính cho điện thoại Android, điều mà tôi nhận thấy là khó khăn do độ chính xác của gia tốc kế và sự dao động liên tục của các số đọc.

Để bắt đầu, tôi đặt điện thoại trên một bề mặt phẳng và lấy mẫu 1000 giá trị gia tốc kế theo hướng X và Y (song song với bàn, do đó không có trọng lực tác động theo các hướng này). Sau đó, tôi tính trung bình các lần đọc này và sử dụng giá trị này để hiệu chỉnh điện thoại (trừ giá trị này cho mỗi lần đọc tiếp theo).

Sau đó, tôi kiểm tra hệ thống bằng cách đặt nó lên bàn một lần nữa và lấy mẫu 5000 giá trị gia tốc kế theo hướng X và Y. Tôi mong đợi, với sự hiệu chuẩn, rằng những gia tốc này sẽ cộng lại bằng 0 (gần đúng) theo mỗi hướng. Tuy nhiên, đây không phải là trường hợp, và tổng gia tốc trên 5000 lần lặp không ở đâu gần bằng 0 (trung bình khoảng 10 trên mỗi trục).

Tôi nhận ra nếu không nhìn thấy mã của mình, điều này có thể khó trả lời nhưng theo nghĩa chung hơn ...

Đây chỉ đơn giản là một ví dụ về việc các kết quả đo gia tốc kế trên điện thoại di động (HTC Desire S) không chính xác như thế nào, hay có nhiều khả năng là tôi đã mắc một số lỗi trong quá trình mã hóa của mình?


1
webvr-polyfill là một nguồn cảm hứng tuyệt vời: github.com/borismus/webvr-polyfill/tree/master/src xem cách họ làm đầy cảm biến VR bằng dữ liệu gia tốc kế: github.com/borismus/webvr-polyfill/blob/master / src /…
SC

Câu trả lời:


128

Bạn có được vị trí bằng cách tích phân gia tốc tuyến tính hai lần nhưng sai số rất kinh khủng. Nó là vô ích trong thực tế.

Đây là lời giải thích tại sao (Google Tech Talk) lúc 23:20 . Tôi thực sự giới thiệu video này.

Không phải tiếng ồn của gia tốc kế gây ra sự cố mà là tiếng ồn trắng của con quay hồi chuyển , xem tiểu mục 6.2.3 Sự lan truyền lỗi. (Nhân tiện, bạn cũng sẽ cần con quay hồi chuyển.)

Đối với định vị trong nhà, tôi thấy những điều này hữu ích:

Theo dõi và bản địa hóa trong nhà dựa trên RSSI bằng máy làm mịn Sigma-Point Kalman

Theo dõi người đi bộ với cảm biến quán tính gắn trên giày

Nâng cao hiệu suất của máy đo bước chân bằng một máy đo gia tốc duy nhất

Tôi không biết các phương pháp này sẽ hoạt động như thế nào trong các ứng dụng đời thực hoặc cách biến chúng thành một ứng dụng Android đẹp.

Một câu hỏi tương tự là điều này .

CẬP NHẬT:

Rõ ràng có một phiên bản mới hơn Oliver J. Woodman ở trên, "Giới thiệu về điều hướng quán tính", luận án Tiến sĩ của ông:

Bản địa hóa cho người đi bộ cho môi trường trong nhà


2
Tôi nhận ra điều này đã lâu rồi, nhưng tôi có một câu hỏi tiếp theo. Máy ảnh trong Android JB có tính năng 'toàn cảnh', cho phép bạn chụp ảnh toàn cảnh bằng cách di chuyển điện thoại, xoay điện thoại hoặc di chuyển thẳng theo một trục. Để làm được điều này, nó phải theo dõi vị trí của điện thoại một cách tương đối chính xác - ít nhất là tốt hơn lỗi 20cm / s được đề cập trong video câu trả lời liên kết này. Nó làm điều đó như thế nào? Nó có một số cách để cải thiện chất lượng theo dõi quán tính không? Hay nó sử dụng xử lý hình ảnh thông minh để thực hiện điều đó chỉ bằng máy ảnh?
Tom

1
@Tom Tôi tin rằng sau này, điện thoại ghép các bức ảnh lại với nhau hoàn toàn bằng các thuật toán xử lý hình ảnh. Điều gì khiến bạn nghĩ rằng điện thoại phải theo dõi vị trí của nó để tạo ra một bức ảnh toàn cảnh? Điều đó hoàn toàn có thể làm được với những chiếc máy ảnh thông thường vào những năm 90 và rõ ràng, thời đó chúng ta không có máy đo gia tốc :) Tất nhiên, những bức ảnh được ghép trên một chiếc PC thông thường. Nhưng bạn không cần vị trí cho việc này, các thuật toán xử lý hình ảnh là đủ. Hi vọng điêu nay co ich.
Ali

Nó hoàn toàn khác với công việc cũ-tự-chụp-một số hình-ảnh-rồi-khâu-chúng-sau. Nó theo dõi vị trí của nó trong thời gian thực bằng cách nào đó. Có một chút khó khăn để giải thích nếu không chứng minh nó. Bạn không cần phải chụp ảnh theo cách thủ công - điện thoại quyết định thời điểm bạn đã di chuyển đủ xa để chụp một chiếc khác. Khi bạn đang chụp ảnh, nó sẽ hiển thị cho bạn một thanh nhỏ ở dưới cùng với bản xem trước của toàn cảnh. Nếu bạn hướng máy ảnh xuống quá xa (chẳng hạn), nó sẽ bắt đầu phát ra tiếng bíp và hiển thị mũi tên lên để cho bạn biết bạn cần di chuyển nó lên trên.
Tom

2
Trên thực tế, nó dường như sử dụng xử lý hình ảnh - bắt đầu chụp ảnh toàn cảnh và sau đó vẫy tay trước máy ảnh sẽ làm rối hệ thống theo dõi vị trí của nó khá tệ!
Tom

@Tom OK. Tôi nghĩ rằng nó chủ yếu sử dụng xử lý hình ảnh (như nhận xét cuối cùng của bạn cũng cho thấy nó) nhưng nó có khả năng được kết hợp với theo dõi hướng (nhưng không phải vị trí).
Ali

19

Tôi chỉ đang suy nghĩ lung tung và tôi chưa chơi với API gia tốc kế android, vì vậy hãy chịu khó.

Trước hết, theo truyền thống, để điều hướng từ gia tốc kế, bạn sẽ cần một gia tốc kế 6 trục. Bạn cần gia tốc theo X, Y và Z, nhưng cũng cần các phép quay Xr, Yr và Zr. Nếu không có dữ liệu xoay, bạn không có đủ dữ liệu để thiết lập một vector trừ khi bạn cho rằng thiết bị không bao giờ thay đổi thái độ của nó, điều này sẽ khá hạn chế. Không ai đọc TOS.

Ồ, và bạn biết rằng INS trôi theo chuyển động quay của trái đất, phải không? Vì vậy, có cả điều đó nữa. Một giờ sau và bạn đang leo một cách bí ẩn trên một con dốc 15 ° vào không gian. Đó là giả sử bạn có INS có khả năng duy trì vị trí lâu dài, điều mà điện thoại chưa thể làm được.

Cách tốt hơn để sử dụng gia tốc kế - ngay cả với gia tốc kế 3 trục - để điều hướng là kết hợp với GPS để hiệu chỉnh INS bất cứ khi nào có thể. Trong trường hợp GPS thiếu, INS khen ngợi độc đáo. GPS có thể bất ngờ bắn bạn cách xa 3 dãy nhà vì bạn đến quá gần một cái cây. INS không tuyệt vời, nhưng ít nhất nó biết bạn không bị sao băng đâm vào.

Những gì bạn có thể làm là ghi lại dữ liệu gia tốc kế của điện thoại và rất nhiều trong số đó. Giống như giá trị hàng tuần. So sánh nó với dữ liệu GPS tốt (ý tôi là thực sự tốt) và sử dụng dữ liệu để thiết lập mối tương quan về xu hướng giữa dữ liệu gia tốc kế và dữ liệu GPS đã biết. (Mẹo chuyên nghiệp: Bạn sẽ muốn kiểm tra nhật ký GPS trong những ngày có hình học tốt và nhiều vệ tinh. Một số ngày, bạn có thể chỉ có 4 vệ tinh và như vậy là chưa đủ) Những gì bạn có thể làm là tìm thấy điều đó khi một người đang đi bộ với điện thoại trong túi của họ, dữ liệu gia tốc kế ghi lại một mẫu rất cụ thể. Dựa trên kết nối dữ liệu, bạn thiết lập hồ sơ cho thiết bị đó, với người dùng đó và loại vận tốc mà mẫu đó biểu thị khi thiết bị có dữ liệu GPS đi cùng. Bạn sẽ có thể phát hiện các ngã rẽ, leo cầu thang, ngồi xuống (hiệu chỉnh thời gian vận tốc 0! ) và nhiều nhiệm vụ khác. Cách điện thoại đang được giữ sẽ cần phải được coi là đầu vào dữ liệu riêng biệt hoàn toàn. Tôi ngửi thấy một mạng thần kinh đang được sử dụng để khai thác dữ liệu. Nói cách khác, một cái gì đó mù mờ về ý nghĩa của đầu vào. Thuật toán sẽ chỉ tìm kiếm các xu hướng trong các mẫu và không thực sự chú ý đến các phép đo thực tế của INS. Tất cả những gì nó sẽ biết làhistorically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now.Và nó sẽ di chuyển mảnh về phía trước tương ứng. Điều quan trọng là nó hoàn toàn bị mù, bởi vì chỉ cần đặt điện thoại trong túi của bạn có thể được định hướng theo một trong 4 hướng khác nhau và 8 hướng nếu bạn chuyển túi. Và cũng có nhiều cách để giữ điện thoại của bạn. Chúng tôi đang nói nhiều dữ liệu ở đây.

Rõ ràng là bạn vẫn sẽ bị trôi rất nhiều, nhưng tôi nghĩ bạn sẽ may mắn hơn theo cách này vì thiết bị sẽ biết khi nào bạn dừng bước và sự trôi dạt về vị trí sẽ không kéo dài. Nó biết rằng bạn đang đứng yên dựa trên dữ liệu lịch sử. Các hệ thống INS truyền thống không có tính năng này. Sự trôi dạt kéo dài đối với tất cả các phép đo và hợp chất trong tương lai theo cấp số nhân. Độ chính xác không rõ ràng, hoặc có một điều hướng phụ để kiểm tra định kỳ, là điều hoàn toàn quan trọng với INS truyền thống.

Mỗi thiết bị và mỗi người sẽ phải có hồ sơ riêng của họ. Đó là rất nhiều dữ liệu và rất nhiều phép tính. Mọi người đều đi với tốc độ khác nhau, với các bước khác nhau và đặt điện thoại của họ vào các túi khác nhau, v.v. Chắc chắn để thực hiện điều này trong thế giới thực sẽ yêu cầu xử lý tính năng đánh số ở phía máy chủ.

Nếu bạn đã sử dụng GPS cho đường cơ sở ban đầu, một phần của vấn đề ở đây là GPS có xu hướng tự di chuyển theo thời gian, nhưng chúng là lỗi không kéo dài. Đặt máy thu ở một vị trí và ghi dữ liệu. Nếu không có chỉnh sửa WAAS, bạn có thể dễ dàng nhận được các sửa chữa vị trí trôi theo các hướng ngẫu nhiên xung quanh bạn 100 feet. Với WAAS, có thể xuống tới 6 feet. Bạn thực sự có thể gặp may mắn hơn với hệ thống RTK đo phụ trên ba lô để ít nhất là giải thuật ANN xuống.

Bạn vẫn sẽ có độ lệch góc với INS bằng phương pháp của tôi. Đây là một vấn đề. Nhưng, nếu bạn đã đi xa để xây dựng một ANN để đổ dữ liệu GPS và INS trị giá hàng tuần cho n người dùng và thực sự làm cho nó hoạt động cho đến thời điểm này, thì rõ ràng bạn không bận tâm đến dữ liệu lớn cho đến nay. Tiếp tục đi xuống con đường đó và sử dụng thêm dữ liệu để giúp giải quyết sự trôi dạt góc cạnh: Con người là sinh vật của thói quen. Chúng ta thường làm những việc tương tự như đi bộ trên vỉa hè, qua cửa, lên cầu thang, và không làm những việc điên rồ như đi bộ qua xa lộ, xuyên tường hoặc ra khỏi ban công.

Vì vậy, giả sử bạn đang lấy một trang từ Big Brother và bắt đầu lưu trữ dữ liệu về nơi mọi người sẽ đến. Bạn có thể bắt đầu lập bản đồ nơi mọi người sẽ đi bộ. Đặt cược khá chắc chắn rằng nếu người dùng bắt đầu bước lên cầu thang, cô ấy đang ở cùng chân cầu thang mà người trước khi cô ấy bước lên. Sau 1000 lần lặp và một số điều chỉnh bình phương nhỏ nhất, cơ sở dữ liệu của bạn khá nhiều biết những bậc thang đó ở đâu với độ chính xác cao. Bây giờ bạn có thể chỉnh sửa vị trí và độ lệch góc khi người đó bắt đầu đi bộ. Khi cô ấy chạm vào những cầu thang đó, hoặc rẽ xuống hành lang đó, hoặc đi xuống vỉa hè, mọi độ lệch đều có thể được điều chỉnh. Cơ sở dữ liệu của bạn sẽ chứa các khu vực được tính theo khả năng một người sẽ đi bộ đến đó hoặc người dùng này đã đi bộ đến đó trong quá khứ. Cơ sở dữ liệu không gian được tối ưu hóa cho việc này bằng cách sử dụngdivide and conquerđể chỉ phân bổ các lĩnh vực có ý nghĩa. Nó sẽ giống như những dự án MIT đó, nơi robot được trang bị laser bắt đầu với một hình ảnh màu đen và vẽ mê cung trong trí nhớ bằng cách thực hiện từng lượt, chiếu sáng tất cả các bức tường.

Các khu vực có lưu lượng truy cập cao sẽ có trọng số cao hơn và các khu vực chưa từng có ai được nhận trọng số 0. Các khu vực giao thông cao hơn có độ phân giải cao hơn. Về cơ bản, bạn sẽ kết thúc với một bản đồ của mọi nơi mọi người đã đến và sử dụng nó làm mô hình dự đoán.

Tôi sẽ không ngạc nhiên nếu bạn có thể xác định chỗ ngồi của một người trong rạp hát bằng phương pháp này. Với đủ người dùng đến rạp và đủ độ phân giải, bạn sẽ có dữ liệu ánh xạ từng hàng của rạp và độ rộng của mỗi hàng. Càng nhiều người ghé thăm một địa điểm, bạn có thể dự đoán vị trí của người đó có độ trung thực càng cao.

Ngoài ra, tôi thực sự khuyên bạn nên đăng ký (miễn phí) tạp chí GPS World nếu bạn quan tâm đến nghiên cứu hiện tại về loại nội dung này. Mỗi tháng tôi đều tìm hiểu nó.


"sẽ được gắn vào GPS để hiệu chỉnh INS bất cứ khi nào có thể. Khi GPS thiếu, INS khen đẹp." Đây là những gì lọc Kalman, theo tôi hiểu. Nó kết hợp thế mạnh của từng phương pháp để hủy bỏ ra những điểm yếu của người kia
endolith

8

Tôi không chắc phần bù của bạn lớn đến mức nào, vì bạn đã quên bao gồm các đơn vị. ("Khoảng 10 trên mỗi trục" không nói lên nhiều điều.: P) Điều đó nói rằng, nó vẫn có khả năng do phần cứng không chính xác.

Gia tốc kế phù hợp với những việc như xác định hướng của điện thoại so với trọng lực hoặc phát hiện các cử chỉ (rung hoặc va đập điện thoại, v.v.)

Tuy nhiên, cố gắng tính toán chết người bằng cách sử dụng gia tốc kế sẽ khiến bạn mắc phải rất nhiều lỗi phức hợp. Nếu không, gia tốc kế sẽ cần phải cực kỳ chính xác và đây không phải là trường hợp sử dụng phổ biến, vì vậy tôi nghi ngờ các nhà sản xuất phần cứng đang tối ưu hóa cho nó.


Cảm ơn vì câu trả lời. Gia tốc kế đọc khoảng -0,8 ms ^ -2 trên cả hai trục X và Y khi đứng yên, vì vậy tôi đã sử dụng giá trị này làm độ lệch của mình. Theo bit "Khoảng 10", tôi muốn nói rằng hơn 5000 lần lặp, cộng mỗi gia tốc trên một trục đơn từ cảm biến không có tổng giá trị khoảng 0 ms ^ -2 (vì nó sẽ dao động đều trên và dưới mức bù value), nhưng thay vào đó, có xu hướng đăng ký gia tốc nhiều hơn theo một hướng, mà sau khi tích hợp kép để tìm vị trí, đã hoạt động khi điện thoại di chuyển khoảng 3m trong một phút.
woodstock365

+1 cho việc sử dụng thuật ngữ điều hướng hàng không, "tính toán chết". Mặc dù tính toán chết chóc sẽ áp dụng cho việc điều hướng bằng camera hơn là INS.
RyanJMcGowan

7

Gia tốc kế của Android là kỹ thuật số, nó lấy mẫu gia tốc bằng cách sử dụng cùng một số lượng "nhóm", giả sử có 256 nhóm và gia tốc kế có khả năng cảm nhận từ -2g đến + 2g. Điều này có nghĩa là đầu ra của bạn sẽ được lượng tử hóa theo các "nhóm" này và sẽ nhảy xung quanh một số bộ giá trị.

Để hiệu chỉnh gia tốc kế android, bạn cần lấy mẫu hơn 1000 điểm và tìm "chế độ" mà gia tốc kế đang dao động. Sau đó, tìm số điểm kỹ thuật số theo mức độ dao động của đầu ra và sử dụng số đó cho bộ lọc của bạn.

Tôi khuyên bạn nên lọc Kalman khi bạn nhận được chế độ và dao động +/-.


1
Tôi đang tìm kiếm các phương pháp hiệu chỉnh. Có vẻ như gợi ý của bạn là những gì tôi cần. Tôi chỉ cần xác nhận. Khi tôi tìm thấy chế độ, hãy nói rằng nó là 0,5. Tôi không nhận được thông báo "Sau đó, tìm số điểm kỹ thuật số bằng mức độ dao động của đầu ra và sử dụng nó cho bộ lọc của bạn." Bạn có thể vui lòng giải thích thêm về nó.
Nazerke

1
Giả sử gia tốc kế của bạn có 256 điểm đầu ra và dao động 0,015m / s ^ 2 giữa các lần đọc. Khi bạn đặt thiết bị của mình trên bàn, đầu ra của bạn có thể dao động theo bội số chẵn của 0,015m / s ^ 2. Giả sử bạn nhận được số đọc là 0 +/- (X * 0,015). Bạn cần tìm X (sẽ là một số chẵn). Ví dụ X của tôi có thể 3. Trong trường hợp này, tôi sẽ bỏ qua những thay đổi về đọc gia tốc kế được ít hơn 0,045 m / s ^ 2
Alex Đá

vậy máy đo gia tốc điện thoại android vẫn chưa tốt..chính xác?
Techsin

4

Tôi nhận thấy điều này khá cũ, nhưng vấn đề đang bàn không được giải quyết trong BẤT KỲ câu trả lời nào được đưa ra.

Những gì bạn đang thấy là gia tốc tuyến tính của thiết bị bao gồm cả tác dụng của trọng lực. Nếu bạn đặt điện thoại trên một bề mặt phẳng, cảm biến sẽ báo cáo gia tốc do trọng lực xấp xỉ 9.80665 m/s2, do đó đưa ra con số 10 mà bạn đang thấy. Các cảm biến không chính xác, nhưng chúng không phải là không chính xác! Xem tại đây để biết một số liên kết hữu ích và thông tin về cảm biến mà bạn có thể đang theo dõi.


17
Không - Tôi nghĩ bạn đã đọc sai câu hỏi: "... các bài đọc theo hướng X và Y (song song với bảng, do đó không có trọng lực tác động theo các hướng này)". 9,8 / s2 sẽ nằm trên trục Z.
ấm trà 7

0

Bạn đang đưa ra giả định rằng các bài đọc gia tốc kế theo hướng X và Y, trong trường hợp này hoàn toàn là nhiễu phần cứng, sẽ tạo thành một phân phối chuẩn xung quanh mức trung bình của bạn. Rõ ràng đó không phải là trường hợp.

Một điều bạn có thể thử là vẽ các giá trị này trên biểu đồ và xem liệu có bất kỳ mẫu nào xuất hiện hay không. Nếu không, tiếng ồn là ngẫu nhiên về mặt thống kê và không thể được hiệu chỉnh - ít nhất là đối với phần cứng điện thoại cụ thể của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.