2012-02-10 36 views
6

Tôi đang cố gắng phát triển ứng dụng phát hiện chuyển động cho Android. Ứng dụng sẽ có thể theo dõi chuyển động của điện thoại trong không gian và ánh xạ nó lên chuyển động trên màn hình máy tính. Tôi đang sử dụng gia tốc 3 trục và vì dữ liệu rất ồn nên tôi đang sử dụng bộ lọc Kalman.Bộ lọc Kalman và chất lượng của các biến trạng thái nội bộ

Trạng thái bên trong là 6 vector thành phần [tốc độ-x, tốc độ-y, tốc độ-z, gia tốc-x, gia tốc, gia tốc z] và trạng thái được đo là vector thành phần [accel-x, accel-y , accel-z].

Bộ lọc hoạt động rất tốt trên các giá trị đo được, nhưng tốc độ vẫn rất ồn.

Plotted values

Bây giờ tôi tự hỏi nếu điều này là hành vi bình thường hay tôi làm điều gì sai, vì sự hiểu biết của tôi về Kalman filter là rất cơ bản. Tôi đang sử dụng thư viện JKalman và sau ma trận trạng thái phiên (dt là 1/15 đó là xấp xỉ cảm biến tốc độ làm tươi)

đôi [] [] A = { {1, 0, 0, dt, 0, 0}, {0, 1, 0, 0, dt, 0}, {0, 0, 1, 0, 0, dt}, {0, 0, 0, 1, 0, 0}, { 0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 1} };

Tôi cũng đã thiết lập ma trận hiệp phương sai của riêng mình với các hiệp phương sai được tính toán từ dữ liệu thử nghiệm. Tín hiệu tăng tốc được cải thiện này một chút, nhưng không ảnh hưởng đến tốc độ.

Hiện nay tôi có thể đạt được stdvar

[0,0632041857 0,0607274545 0,0886326602] cho tốc độ [x, y, z]

[0,0041689678 0,004423822 0, 0074808552] để tăng tốc [x, y, z].

Tôi khá hài lòng với tín hiệu tăng tốc và tôi đoán tôi không thể cải thiện nhiều hơn nữa, nhưng tôi rất muốn cải thiện chất lượng tín hiệu tốc độ.

Trả lời

3

Won't work.

Không có vấn đề gì bạn làm, vận tốc sẽ trở thành extemely không chính xác trong vài giây. Mặc dù câu trả lời ở liên kết ở trên là về vị trí, điều tương tự cũng giữ cho vận tốc. Đối với bộ lọc Kalman, hãy xem here.

Bạn nên thử GPS để có vận tốc hoặc (nếu có) chỉ cần sử dụng hướng của điện thoại trong ứng dụng và từ bỏ việc vận tốc.

+0

Thực ra nó hoạt động khá tốt, chỉ có vấn đề là chuyển động chậm và thực sự nhanh (như mong đợi). Tôi chỉ cần chuyển động tương đối (vì vậy tôi biết nó đã đi bên trái, phải, lên, xuống) và có thể tầm quan trọng của nó. Đối với vấn đề tốc độ tôi đang sử dụng tốc độ bán phá giá (nếu không có tăng tốc áp dụng, tốc độ được nhân với hệ số <1.0 tại mỗi dấu thời gian, vì vậy nó đi đến số không khá nhanh). Dù sao, cảm ơn cho các tài liệu, tôi sẽ xem xét nó càng sớm càng tốt, có vẻ thú vị. – Andraz

+0

@Andraz Thú vị. Vì vậy, bạn không cần vận tốc chính xác. Sau đó, những gì bạn mô tả có thể làm việc. Vâng, may mắn dù sao đi nữa! – Ali

2

Tôi không biết nhiều về bộ lọc Kalman ngoại trừ những gì tôi vừa đọc trên Wikipedia, nhưng tôi sẽ nói bạn đang cố gắng áp dụng bộ lọc Kalman theo cách không phù hợp.

Các stdvars phải đại diện cho chỉ có tiếng ồn, nhưng tôi nghi ngờ đó là những gì bạn đã tính toán. Nhưng về cơ bản hơn, tôi nghĩ bạn thiếu một số dữ liệu đầu vào: Bộ lọc Kalman được sử dụng khi bạn có nhiều đầu vào khác nhau khác nhau, ví dụ: gia tốc + GPS.

Có vẻ như không thể - với Kalman hoặc bất kỳ thứ gì khác-- bạn có thể đọc trong đầu vào gia tốc ồn và bằng cách nào đó có được quỹ đạo chính xác mượt mà. Bạn luôn có thể làm một số loại thời gian trung bình của dữ liệu gia tốc, mà sẽ cung cấp cho bạn một quỹ đạo trơn tru, nhưng quỹ đạo sẽ khác với thực tế. (Nếu bạn muốn thử tính trung bình theo thời gian: ví dụ: a_smooth {i} = 0,6 a {i} + 0,3 a {i-1} + 0,1 a {i-2}.)

Và có kích thước lớn hơn vấn đề là độ chính xác của gia tốc kế rất kém và có thể bạn không thể làm gì nhiều với nó, đặc biệt là theo dõi vị trí, như được trả lời bởi @Ali.

EDIT: Tôi tìm thấy một số tài liệu tham khảo trên web mà có phương trình tương tự như của bạn, tuy nhiên đó là những đối với một bộ lọc Kalman sử dụng trên một mô hình với liên tục tăng tốc, mà rõ ràng là không phải những gì bạn muốn.

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