Bộ lọc Kalman cho vị trí và vận tốc: giới thiệu ước tính tốc độ


24

Cảm ơn tất cả mọi người đã đăng bình luận / câu trả lời cho truy vấn của tôi ngày hôm qua ( Thực hiện bộ lọc Kalman cho vị trí, vận tốc, gia tốc ). Tôi đã xem xét những gì được khuyến nghị, và đặc biệt ở cả (a) ví dụ wikipedia về vị trí và vận tốc một chiều và cũng là một trang web khác xem xét một điều tương tự .

Cập nhật ngày 26 tháng 4 năm 2013 : câu hỏi ban đầu ở đây có một số lỗi, liên quan đến thực tế là tôi đã không hiểu đúng về ví dụ wikipedia về vị trí và vận tốc một chiều . Với sự hiểu biết được cải thiện của tôi về những gì đang diễn ra, giờ đây tôi đã phác thảo lại câu hỏi và tập trung vào nó chặt chẽ hơn.

Cả hai ví dụ mà tôi đề cập đến trong đoạn giới thiệu ở trên đều cho rằng đó chỉ là vị trí được đo. Tuy nhiên, không ví dụ nào có bất kỳ loại tính toán nào cho tốc độ. Ví dụ: ví dụ Wikipedia chỉ định ma trận là , có nghĩa là chỉ có vị trí là đầu vào. Tập trung vào ví dụ Wikipedia, vectơ trạng thái của bộ lọc Kalman chứa vị trí và tốc độ , tức làH H = [ 1 0 ] x k x k ˙ x k(xkxk1)/dtHH=[1   0]xkxkx˙k

xk=(xkx˙k)

Giả sử phép đo vị trí tại thời điểm là . Sau đó, nếu vị trí và tốc độ tại thời điểm là và và nếu là gia tốc không đổi áp dụng trong khoảng thời gian đến , từ đo nó có thể suy ra giá trị cho sử dụng công thứcx k k - 1 x k - 1 ˙ x k - 1 một k - 1 k x mộtkx^kk1xk1x˙k1ak1kx^a

x^k=xk1+x˙k1dt+12adt2

Điều này ngụ ý rằng tại thời điểm , phép đo của tốc độ được đưa ra bởi˙ x kkx˙^k

x˙^k=x˙k1+adt=2x^kxk1dtx˙k1

Tất cả các đại lượng ở phía bên phải của phương trình đó (nghĩa là , và ) thường được phân phối các biến ngẫu nhiên với các phương tiện đã biết và độ lệch chuẩn , do đó, ma trận cho vectơ đoxk-1 ˙ x k-1Rx^kxk1x˙k1R

x^k=(x^kx˙^k)

có thể được tính toán Đây có phải là một cách hợp lệ để đưa các ước tính tốc độ vào quy trình?


2
Tôi đã không xem qua tất cả các tính toán của bạn. Tuy nhiên, nói về ví dụ Wikipedia, bạn có vẻ hơi bối rối về cấu trúc của nó. Bạn đúng ở vị trí duy nhất được đo. Tuy nhiên, một mô hình được gọi là "vận tốc không đổi" được sử dụng. Điều này có nghĩa là vận tốc được coi là không đổi trong ma trận chuyển trạng thái.
Jason R

3
Những thay đổi trong vận tốc được mô hình hóa bằng ma trận nhiễu quá trình. Do đó, bạn vốn đã giả định rằng vận tốc sẽ thay đổi ngẫu nhiên với một số hiệp phương sai được chỉ định. Đáng ngạc nhiên là đủ, điều này thường hoạt động tốt. Thông thường sử dụng tiếng ồn quá trình một đạo hàm trên đạo hàm biến trạng thái cao nhất của bạn theo cách này. Chẳng hạn, nếu bạn bao gồm khả năng tăng tốc trong mô hình của mình, thì bạn có thể có một thành phần giật ngẫu nhiên có trong tiếng ồn quá trình của bạn.
Jason R

@JasonR với mô hình wikipedia (giả sử hiệp phương sai ban đầu bằng không giữa vị trí và tốc độ), ước tính tốc độ luôn luôn là giá trị ban đầu (như bạn nói, mô hình "vận tốc không đổi"). Tuy nhiên, phương sai của tốc độ tăng đơn điệu thông qua tiếng ồn quá trình và không có phép đo nào có thể làm giảm nó. Lợi thế của điều này so với một mô hình chỉ mô hình vị trí và giả định tốc độ không đổi là gì?
Stochastically

2
Phương sai của ước tính vận tốc không nên tăng đơn điệu. Quá trình nhiễu chỉ đơn giản là đưa một thành phần ngẫu nhiên vào phương trình chuyển trạng thái, cho phép bạn thể hiện một số sự không chắc chắn ở chính xác cách thức trạng thái hệ thống sẽ phát triển theo từng bước. Nếu bạn không bao gồm nhiễu quá trình, thì bộ lọc của bạn sẽ thực sự tạo ra vận tốc không đổi. Đó có lẽ không phải là những gì bạn muốn.
Jason R

Chà @JasonR, nếu bạn nhìn vào mô hình wikipedia, bạn sẽ thấy rằng phương sai vận tốc tăng dần về mặt đơn điệu là những gì nó mang lại cho bạn!
Stochastically

Câu trả lời:


24

Đây có phải là một cách hợp lệ để đưa các ước tính tốc độ vào quy trình?

Nếu bạn chọn trạng thái của mình một cách thích hợp, thì ước tính tốc độ sẽ "miễn phí". Xem đạo hàm của mô hình tín hiệu bên dưới (đối với trường hợp 1-D đơn giản mà chúng tôi đã xem xét).

Mô hình tín hiệu, mất 2

Vì vậy, chúng tôi thực sự cần phải đồng ý về một mô hình tín hiệu trước khi chúng tôi có thể tiến lên phía trước. Từ chỉnh sửa của bạn, có vẻ như mô hình vị trí của bạn, , là:xk

xk+1=xk+x˙kΔt+12a(Δt)2x˙k+1=x˙k+aΔt

Nếu trạng thái của chúng ta vẫn như trước: thì phương trình cập nhật trạng thái chỉ là: trong đó bây giờ của chúng tôi là gia tốc phân phối bình thường.

xk=(xkx˙k)
xk+1=(1  Δt0  1)xk+((Δt)22Δt)ak
ak

Điều đó mang lại ma trận với phiên bản trước, nhưng ma trận và phải giống nhau.GFH


Nếu tôi thực hiện điều này trong scilab(xin lỗi, không có quyền truy cập vào MATLAB), có vẻ như:

// Signal Model
DeltaT = 0.1;
F = [1 DeltaT; 0 1];
G = [DeltaT^2/2; DeltaT];
H = [1 0];

x0 = [0;0];
sigma_a = 0.1;

Q = sigma_a^2;
R = 0.1;

N = 1000;

a = rand(1,N,"normal")*sigma_a;

x_truth(:,1) = x0;
for t=1:N,
    x_truth(:,t+1) = F*x_truth(:,t) + G*a(t);
    y(t) = H*x_truth(:,t) + rand(1,1,"normal")*sqrt(R);
end

Sau đó, tôi có thể áp dụng các phương trình lọc Kalman cho này (các phép đo nhiễu).y

// Kalman Filter
p0 = 100*eye(2,2);

xx(:,1) = x0;
pp = p0;
pp_norm(1) = norm(pp);
for t=1:N,
    [x1,p1,x,p] = kalm(y(t),xx(:,t),pp,F,G,H,Q,R);
    xx(:,t+1) = x1;
    pp = p1;
    pp_norm(t+1) = norm(pp);
end

Vì vậy, chúng ta phải đo ồn ào của chúng tôi , và chúng tôi đã áp dụng bộ lọc Kalman với họ và sử dụng các mô hình tín hiệu tương tự để tạo ra như chúng ta làm gì để áp dụng bộ lọc Kalman (một giả định khá lớn, đôi khi!).yy

Sau đó các ô sau đây cho thấy kết quả.

Lô 1 : và so với thời gian.yxk

nhập mô tả hình ảnh ở đây

Lô 2 : Chế độ xem phóng to của một vài mẫu đầu tiên:

nhập mô tả hình ảnh ở đây

Cốt truyện 3 : Một cái gì đó bạn không bao giờ có được trong cuộc sống thực, vị trí thực sự so với ước tính trạng thái của vị trí.

nhập mô tả hình ảnh ở đây

Cốt truyện 4 : Một thứ bạn cũng không bao giờ có được trong cuộc sống thực, vận tốc thực so với ước tính trạng thái của vận tốc.

nhập mô tả hình ảnh ở đây

Cốt truyện 5 : Định mức của ma trận hiệp phương sai trạng thái (một thứ bạn nên luôn theo dõi trong cuộc sống thực!). Lưu ý rằng nó rất nhanh chóng chuyển từ giá trị rất lớn ban đầu của nó sang một thứ rất nhỏ, vì vậy tôi chỉ hiển thị một vài mẫu đầu tiên.

nhập mô tả hình ảnh ở đây

Lô 6 : Sơ đồ sai số giữa vị trí và vận tốc thực và ước tính của chúng.

nhập mô tả hình ảnh ở đây

Nếu bạn nghiên cứu trường hợp các phép đo vị trí là chính xác, thì bạn thấy rằng các phương trình udpate Kalman tạo ra kết quả chính xác cho vị trí và tốc độ BÓNG. Về mặt toán học, thật đơn giản để xem tại sao. Sử dụng cùng một ký hiệu như bài viết trên wikipedia , các phép đo chính xác có nghĩa là . Nếu bạn giả sử rằng vị trí và tốc độ ban đầu được biết để , thì và ma trận tăng Kalman được đưa ra bởizk+1=xk+1Pk=0Pk+1=QKk+1

Kk+1=(12/dt)

Điều này có nghĩa là quy trình cập nhật Kalman tạo ra

x^k+1=Fk+1xk+Kk+1(zk+1Hk+1Fk+1xk)=(xk+x˙kdtx˙k)+(12/dt)(xk+1(xk+x˙kdt))=(xk+12(xk+1xk)/dtx˙k)

Như bạn có thể thấy, giá trị của tốc độ được đưa ra bằng chính xác công thức bạn đề xuất sử dụng cho ước tính tốc độ. Vì vậy, mặc dù bạn không thể thấy bất kỳ loại tính toán nào cho tốc độ, nhưng thực tế nó được ẩn trong đó sau tất cả.(xkxk1)/dt


Cảm ơn tất cả sự giúp đỡ của bạn cho đến nay. Câu hỏi ban đầu của tôi có một số hiểu lầm, vì vậy tôi đã cố gắng tập trung lại nó và cố gắng trả lời câu hỏi của bạn về z_k.
Stochastically

1
cảm ơn vm vì tất cả những nỗ lực của bạn :-). Công việc của bạn thúc đẩy tôi thực hiện một số phép toán mà tôi đã giải quyết được câu trả lời của bạn, hy vọng bạn không phiền. Dù sao, bây giờ tôi tin chắc 100% rằng phương pháp tiêu chuẩn là tốt, bởi vì tôi có thể thấy các công thức trong đó cho tốc độ. Cảm ơn một lần nữa
Stochastically

Rât vui long khi giup đơ! Không có vấn đề với việc thêm vào câu trả lời.
Peter K.
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.