Tôi có bộ lọc Kalman không tập trung (UKF) theo dõi trạng thái của robot. Vectơ trạng thái có 12 biến. Mỗi lần tôi thực hiện một bước dự đoán, chức năng chuyển của tôi (tự nhiên) sẽ hoạt động trên toàn bộ trạng thái. Tuy nhiên, các cảm biến của tôi cung cấp các phép đo của các phần khác nhau trong trạng thái của robot, vì vậy tôi có thể nhận được cuộn, cao độ, ngáp và vận tốc tương ứng của chúng trong một phép đo, và sau đó là vận tốc tuyến tính trong một phép đo khác.
Cách tiếp cận của tôi để xử lý vấn đề này cho đến nay chỉ đơn giản là tạo ma trận con cho hiệp phương sai, thực hiện các phương trình cập nhật UKF tiêu chuẩn của tôi và sau đó gắn các giá trị kết quả trở lại vào ma trận hiệp phương sai đầy đủ. Tuy nhiên, sau một vài cập nhật, UKF hét lên với tôi vì đã cố gắng truyền một ma trận không xác định dương vào hàm Cholesky Decysis. Rõ ràng hiệp phương sai đang mất các thuộc tính xác định dương của nó và tôi đoán nó phải làm với những nỗ lực của tôi để cập nhật các tập hợp con của ma trận hiệp phương sai đầy đủ.
Như một ví dụ được lấy từ một tệp nhật ký thực tế, ma trận sau (sau bước dự đoán UKF) là xác định dương:
1.1969 0 0 0 0 0 0.11567 0 0 0 0 0
0 1.9682 0 0 0 0 0 0.98395 0 0 0 0
0 0 1.9682 0 0 0 0 0 0.98395 0 0 0
0 0 0 1.9682 0 0 0 0 0 0.98395 0 0
0 0 0 0 1.9682 0 0 0 0 0 0.98395 0
0 0 0 0 0 1.9682 0 0 0 0 0 0.98395
0.11567 0 0 0 0 0 0.01468 0 0 0 0 0
0 0.98395 0 0 0 0 0 1 0 0 0 0
0 0 0.98395 0 0 0 0 0 1 0 0 0
0 0 0 0.98395 0 0 0 0 0 1 0 0
0 0 0 0 0.98395 0 0 0 0 0 1 0
0 0 0 0 0 0.98395 0 0 0 0 0 1
Tuy nhiên, sau khi xử lý hiệu chỉnh cho một biến (trong trường hợp này là vận tốc X tuyến tính), ma trận trở thành:
1.1969 0 0 0 0 0 0.11567 0 0 0 0 0
0 1.9682 0 0 0 0 0 0.98395 0 0 0 0
0 0 1.9682 0 0 0 0 0 0.98395 0 0 0
0 0 0 1.9682 0 0 0 0 0 0.98395 0 0
0 0 0 0 1.9682 0 0 0 0 0 0.98395 0
0 0 0 0 0 1.9682 0 0 0 0 0 0.98395
0.11567 0 0 0 0 0 0.01 0 0 0 0 0
0 0.98395 0 0 0 0 0 1 0 0 0 0
0 0 0.98395 0 0 0 0 0 1 0 0 0
0 0 0 0.98395 0 0 0 0 0 1 0 0
0 0 0 0 0.98395 0 0 0 0 0 1 0
0 0 0 0 0 0.98395 0 0 0 0 0 1
Sự khác biệt giữa hai ma trận trên là
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 -0.00468 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
Như bạn có thể thấy, sự khác biệt duy nhất giữa hai là giá trị ở vị trí phương sai của vận tốc X tuyến tính, đây là phép đo tôi vừa xử lý. Sự khác biệt này đủ để "phá vỡ" ma trận hiệp phương sai của tôi.
Tôi có hai câu hỏi:
Cập nhật một tập hợp con của bộ lọc dường như không phải là cách phù hợp. Có một giải pháp tốt hơn?
Ngoài ra, tôi có thiếu một bước sẽ giữ ma trận hiệp phương sai của tôi là xác định dương không?
Cảm ơn!
BIÊN TẬP:
Có vẻ như tôi không đặt các giá trị trở lại đúng vào ma trận hiệp phương sai ban đầu. Chỉ cần sao chép lại các giá trị là không đủ. Tôi cần theo dõi các hệ số tương quan cho ma trận hiệp phương sai và đảm bảo rằng khi tôi cập nhật giá trị phương sai, tôi cập nhật tất cả các giá trị trong hàng / cột của nó để duy trì giá trị hệ số tương quan. Tôi phải thực hiện thêm một số thử nghiệm để xác minh rằng đây là vấn đề của tôi, nhưng một số phân tích ban đầu trong Matlab cho thấy rằng đó là vấn đề. Nếu tôi đúng, tôi sẽ trả lời câu hỏi của riêng tôi.
EDIT 2:
Đưa ra phản hồi bên dưới và sau khi thử nó, tôi có thể thấy rằng ý tưởng chỉnh sửa ban đầu của tôi sẽ không bay được. Tuy nhiên, tôi có thêm một câu hỏi:
Vì đây là UKF, tôi thực sự không có ma trận Jacobian. Tôi nghĩ rằng tôi thấy làm thế nào tôi có thể làm cho nó hoạt động trong các phương trình cập nhật ukf, nhưng ngay cả trong một EKF - và tôi hỏi vì tôi có một trong những người là tốt - tôi nhà nước-to-đo chức năng sẽ kết thúc lên được bản sắc ma trận, như tôi đang đo trực tiếp các biến trạng thái của tôi. Trong trường hợp, tôi lấy nó là "Jacobian" của tôi sẽ chỉ là một ma trận với các ma trận ở vị trí , trong đó là chỉ số của các giá trị đo được trong vectơ đo lường?