2011-12-19 37 views
6

Tôi muốn nhận được véc tơ tăng tốc của điện thoại Android. Vấn đề là, các tọa độ gia tốc tương đối so với xoay vòng của điện thoại. Điều tôi muốn là khả năng tăng tốc "tuyệt đối", tức là, nó sẽ trả lại cùng một giá trị cho dù điện thoại đang đối mặt. (Tôi muốn phát hiện nếu người dùng trượt tuyết trượt xuống dốc mà không sử dụng GPS. Tôi cũng cần có khả năng phân biệt trượt và đi lên ghế nâng.)Android nhận được tăng tốc chuẩn hóa

Tôi có thể có được các giá trị đó bằng cách kết hợp gia tốc kế với con quay hồi chuyển, nhưng tôi không biết làm thế nào tôi có thể bù đắp giá trị của gia tốc bằng con quay hồi chuyển.

Điều này có thể thực hiện được không và nếu có thì làm cách nào?

Trả lời

10

Những gì bạn mô tả không thể thực hiện được, trừ khi bạn xác định lại vấn đề một chút. Để giúp bạn xác định lại vấn đề, tôi sẽ phác thảo các vấn đề chính:

Trước tiên, tôi đoán rằng ý của bạn là "tăng tốc tuyệt đối" là gia tốc đối với tham chiếu địa lý. Không thể thực hiện chỉ với gia tốc kế vì nó không có ý tưởng về tham chiếu địa lý. Nếu bạn di chuyển đủ xa cho gps, hoặc sử dụng la bàn, bạn có thể có được xung quanh này, nhưng mỗi trong số này có vấn đề riêng của mình (mặc dù ít nhất là vấn đề hòa tan).

Vấn đề thứ hai là trọng lực và gia tốc hoàn toàn không thể phân biệt được bằng cách sử dụng gia tốc kế đơn thuần (điều này được gọi là "nguyên tắc tương đương"). Do đó, bất kỳ gia tốc đo nào sẽ luôn là tổng vector của lực hấp dẫn và gia tốc, nhưng luôn luôn có nhiều giải pháp cho các phương trình này, và trong các trường hợp thông thường là gia tốc nhỏ hơn trọng lực, bạn thực sự không thể xác định được . Do lực hấp dẫn có phần không đổi, nên có một số cách dùng con quay hồi chuyển, hoặc có thể người dùng của bạn có thể giữ điện thoại theo hướng cố định (ví dụ, bằng cách nhìn vào các dấu hiệu bên ngoài như đường chân trời) phương pháp tiếp cận có thể cho phép bạn trừ ảnh hưởng của lực hấp dẫn, nhưng nó thường là một vấn đề không tầm thường.

Điểm cuối cùng không phải là bạn dường như đang suy nghĩ trong một hệ tọa độ cố định trái đất và gia tốc kế của điện thoại chỉ được cố định bằng điện thoại. Đó là trục z của gia tốc nhiều người không có liên quan gì đến lên và xuống trên trái đất - và mối quan hệ sẽ phụ thuộc vào hướng của điện thoại. Thực sự, nhiều người thích hệ thống cố định trái đất hơn, nhưng điện thoại không biết điều đó. Bạn có thể sử dụng tín hiệu bên ngoài (GPS, từ trường, con quay hồi chuyển, trọng lực, đường chân trời, v.v.) để cố gắng căn chỉnh chúng, nhưng chỉ cho một dạng đọc tùy ý là gia tốc kế, thông tin không có ở đó.

Định nghĩa:
tăng tốc vector: đây là x, y, z đọc từ gia tốc kế (và từng đọc sẽ phụ thuộc vào định hướng điện thoại), đôi khi viết là A = (a x, a y, a z).
tăng tốc độ richter: đây là a = sqrt (một x + a y + a z), và điều này không nên phụ thuộc vào định hướng điện thoại (nếu các trục khác nhau được hiệu chuẩn giống nhau). Nếu điện thoại là văn phòng phẩm, điều này về cơ bản sẽ chỉ là một đọc của lực hấp dẫn. Cũng lưu ý rằng rất nhiều thông tin trong vector tăng tốc bị mất khi sử dụng biện pháp này.
tăng tốc bình thường: Hướng tăng tốc, có magniture 1, tức, A/A tăng tốc
trong lòng đất tọa độ: Tôi nghĩ rằng đây là những gì bạn thực sự muốn, có chỉ là không có cách nào dễ dàng để có được nó, và thực sự ngay cả khi bạn có thể, tôi không nghĩ nó sẽ hữu dụng như lúc đầu.

Trượt tuyết:
Tôi nghĩ rằng bạn có một shot tốt tại xác định khi nào ai đó đang trượt tuyết dựa trên các số đo từ các gia tốc kế. Những thứ như va đập và biến tất cả nên được khá đặc biệt bằng cách sử dụng gia tốc. Đối với những tôi muốn sử dụng vector tăng tốc đầy đủ. Ví dụ, đến lượt nó, cường độ gia tốc sẽ giữ nguyên không đổi và hướng sẽ quét. Cũng lưu ý rằng rơi tự do (tức là, về cơ bản bất cứ khi nào người trượt tuyết không có bầu trời/chân/mông/v.v ... trên mặt đất, cho dù họ đang đi lên khi tung ra một va chạm/nhảy, hoặc rơi ra khỏi ghế nâng) , cường độ gia tốc sẽ bằng không trong tự do. Đối với ghế cáp, có vẻ như nó sẽ có khả năng có một chấn động nhịp nhàng đặc biệt chủ yếu trong một mặt phẳng duy nhất.

Tất cả những điều này có thể được tìm ra. Tôi khuyên bạn nên, nếu bạn thực sự muốn giải quyết vấn đề này, là ghi lại dữ liệu từ gia tốc của bạn trong khi trượt tuyết và xem liệu bạn có thể xác định thời điểm bạn trượt tuyết dựa trên đặc điểm của dữ liệu hay không. (Đoán của tôi là, khối cản trở chính của bạn với điều này sẽ là toán học, bởi vì nó có thể là một chút khó khăn để tìm ra một thuật toán có thể phân biệt chữ ký của trượt tuyết, vì vậy nó có vẻ là một ý tưởng tốt để xem xét vector Tôi cũng nghi ngờ rằng một chút về một chủ đề khác được gọi là FFT hoặc biến đổi Fourier có thể hữu ích trong việc phân loại thời gian và tần số chữ ký của trượt tuyết vs đong đưa trong ghế nâng .)

Bạn cũng có thể gấp số đo GPS, không đáng tin cậy hoặc có độ phân giải thời gian tốt, nhưng ít nhất có thể được sử dụng để kiểm tra kỹ thuật toán của bạn.

+0

Tôi muốn phát hiện nếu người dùng trượt tuyết trượt xuống dốc mà không cần sử dụng GPS. Hãy nghĩ rằng nó có thể làm được? –

+0

Thực ra, có thể. Tôi sẽ suy nghĩ về nó và làm một vài tính toán. Có vẻ như bạn có hai thứ cho bạn ở đây: 1) nó thường gập ghềnh vì vậy gia tốc kế sẽ chọn cái này; 2) ít nhất trong tự do là tình huống duy nhất trên trái đất khi tổng gia tốc (g + a) bằng không vì vậy khi trượt là hơi giống như tự do, có thể người ta có thể phát hiện gia tốc ít hơn trọng lực, ít nhất là lúc bắt đầu. Có một số khía cạnh của vấn đề của bạn mà sẽ loại trừ bằng cách sử dụng một trong những? – tom10

+0

Tôi không nghĩ vậy nhưng tôi có thể sai. Chúng ta cũng cần có khả năng phân biệt trượt và đi lên ghế nâng ... –

3

Bạn có thể tính toán khả năng tăng tốc bất kể hướng của điện thoại sử dụng:

a = sqrt(x*x + y*y + z*z) 

đâu a là khả năng tăng tốc tuyệt đối và x, yz là những giá trị gia tốc cho mỗi 3 trục của điện thoại.

+0

Tôi cần trục tăng tốc khác nhau riêng lẻ (thực ra tôi chỉ cần 'z' nhưng chúng có thể tương tự như cách bạn có được chúng). –

0

Cân nhắc sử dụng GPS. Trong một ứng dụng khai thác gỗ chuyến bay tôi sử dụng gia tốc (mặc dù giá trị tuyệt đối, không phải là vector) để lọc dữ liệu ồn ào GPS (tôi loại bỏ những nơi gia tốc cần thiết cho sự thay đổi về tốc độ là không chính đáng):

/** 
* Remove noise from the measurement of the location. 
* @param loc a location 
* @return Answer <code>false</code> iff the location should not be used. 
*/ 
private boolean filterNoise(final Location loc) { 
    if(! loc.hasSpeed()) 
     return true; 
    if(this.recentSpeeds.isEmpty()) { // rescentSpeeds is a queue of locations 
     this.recentSpeeds.add(loc); 
     return true; 
    } 
    final Location lastFix = this.recentSpeeds.getHead(); 
    final long delta_t = (loc.getTime() - lastFix.getTime())/1000; 
    if(delta_t == 0) 
     return false; 
    final float delta_v = loc.getSpeed() - lastFix.getSpeed(); 
    final float a = delta_v/delta_t; 
    if(Math.abs(a) <= AccelThreshold) { 
     this.recentSpeeds.add(loc); 
     return true; 
    } 
    return false; 
} 

Nếu bạn tính toán tốc độ bằng cách sử dụng các tọa độ từ lần sửa cuối cùng và sửa lỗi hiện tại bạn nhận được gia tốc là vectơ.

1

Một số điện thoại có cảm biến áp suất không khí. Trên thiên hà s4 và 5 tôi nhận được độ phân giải đủ tốt để xác định xem thiết bị có di chuyển từ bàn, xuống sàn hay không.

Lưu ý, thay đổi dần dần về thời tiết sẽ ảnh hưởng đến số đọc của bạn, vì vậy bạn phải xem xét Delta trong một khoảng thời gian hợp lý và bỏ qua các thay đổi xung quanh một số ngưỡng.

+0

Điều này rất thú vị! Tôi không biết điện thoại mới hơn đã có điều này. Tôi không nhưng tôi sẽ chắc chắn xem lại nếu tôi đã bao giờ nhận được một chiếc điện thoại mới với một. Cảm ơn bạn đã tham gia với kết quả của bạn! –