Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

칼만 튜닝은 모션 모델과 관측값의 불확실성을 나타냅니다. 이 실험에서는 위치와 속도를 추정하고, 데이터 누락 시 예측, 이상치에 대한 반응, 과신으로 인한 거부 반응을 비교합니다. 모든 입력값은 합성 데이터이며, 제시된 수치는 하드웨어 정확도를 나타내는 것이 아닙니다.

모델 및 단위

상태 변수는 위치[m]와 속도[m/s]를 포함합니다. 위치만 0.1초 간격으로 관측됩니다.

x_k=F x_{k-1}+w_k,\qquad F=\begin{bmatrix}1&0.1\\0&1\end{bmatrix},\qquad z_k=H x_k+v_k,\quad H=\begin{bmatrix}1&0\end{bmatrix}

관측값의 표준 편차는 0.7m이며, R²=0.49m²입니다. 프로세스 공분산은 q = ggᵀ이며, g=(dt²/2, dt)는 단계당 독립적인 가속도 섭동을 나타냅니다. 여기서 q=0.4는 (m/s²)² 단위를 가지며, 연속적인 백색 잡음 스펙트럼 밀도가 아닙니다. 이 값을 다른 이산화 방식으로 변환할 때는 그 의미를 반드시 확인해야 합니다. 예측 및 업데이트 유도 과정은 칼만 필터 소개를 참조하십시오.

이론에 대해서는 Simo Särkkä(2013)의 베이지안 필터링 및 평활화, 4.3절을 참조하십시오. 여기에서 사용된 궤적, 게이트 및 비교 조건은 자체 실험 설계입니다.

네 가지 구성, 동일한 입력

실험 스크립트를 빈 출력 디렉토리에 저장하고 다음 명령을 실행하십시오.

python3 engineering_labs.py

실행은 Python 3.12.3, NumPy 1.26.4 및 Matplotlib 3.6.3 환경에서 확인되었습니다. 이 파일은 다른 연결된 엔지니어링 실험 결과도 생성합니다. 시드 값은 42이고 샘플 수는 300개입니다. 실제 속도는 12초에서 1m/s에서 1.4m/s로 변화합니다. 7.0초부터 9.9초까지의 관측값 30개가 누락되었고, 16초의 관측값에는 12m가 더해졌습니다. 초기 위치/속도는 0m와 1m/s이고, 초기 공분산은 대각선 요소가 1m²와 1(m/s)²입니다. 각 구성은 정확히 동일한 관측값을 받습니다.

잔차 정규화

보정 전 관측값 잔차를 e, 예측 분산을 S라고 합시다. 게이트는 다음 조건을 만족할 때 관측값을 거부합니다.

e=z-H\hat{x}^{-},\qquad S=HP^{-}H^T+R,\qquad e^2/S>9

이 임계값은 다차원 관측값에 임의로 적용되는 것이 아니라, 정규화된 스칼라 잔차에 적용됩니다. 누락되거나 거부된 측정값은 보정 없이 예측을 트리거합니다. 구현에서는 Joseph 공분산 업데이트를 사용하고 양의 준정치성을 검사합니다. 누락된 데이터가 있는 동안 불확실성이 증가하므로, 이는 미터 단위의 고정 거부 거리와는 다릅니다.

결과 과신을 보여줌

구성 위치 RMSE [m] 거부됨
q=0.4, R=0.49, 게이트 없음 0.262 0
q=0.4, R=0.49, 게이트 있음 0.178 2
q=0.002, R=0.49, 게이트 있음 0.393 4
q=0.4, R=0.0049, 게이트 있음 11.251 237
Diagram 1 · Use the button to switch views
합성 KF 위치 오차(미터/초), 누락된 관측값은 음영 처리됨.

비교를 위해 수직 범위는 -3m에서 4m로 제한되었습니다. 12m 이상치와 작은 R 값에서의 큰 오차는 이 범위를 벗어납니다. 게이트 처리된 CSV, small-R CSV 및 전체 요약에서 잘리지 않은 값을 검사하십시오. CSV에서 결측값은 NaN으로 표시되며 거부로 간주되지 않습니다.

게이트는 하나의 인위적 이상치만 삽입했음에도 불구하고 두 개의 관측값을 거부합니다. 임계값으로는 의도적으로 조작된 샘플만 식별할 수 없습니다. 관측값 분산을 100배 과소평가하면 237개의 관측값이 거부됩니다. 정상적인 산포가 필터의 신뢰도와 양립할 수 없게 됩니다. 보정값이 손실되면 속도 변화를 추적할 수 없게 되어 잔차가 더욱 커집니다. 게이트만 추가하는 것으로는 견고성을 확보할 수 없습니다.

사용자 로그로 이동

먼저 타임스탬프, 단위 및 프레임을 확인하십시오. 정지 구간에서 관측값 분산을 추정한 다음, 이동 중 모션 모델 오류와 잔차를 검사하십시오. 게이팅은 마지막에 도입하고, 결측 데이터 비율, 거부율, 불확실성 및 RMSE를 함께 보고합니다. 실제 하드웨어에서는 비교 가능한 오차를 계산하기 위해 독립적인 기준 데이터가 필요합니다.

Q 값이 작으면 지연이 증가하는 대신 곡선이 부드러워집니다. Q 값을 높이는 것이 항상 더 좋은 것은 아닙니다. 이러한 순위는 해당 궤적, 초기화, 노이즈 및 평가 기간에만 적용됩니다.

후속 점검

sigma_m 열은 추정 위치의 표준 편차입니다. 추정값에 시그마의 두 배를 더하거나 뺀 값을 플롯하고 결측 데이터 구간을 속도 변화와 비교합니다. 이렇게 하면 실제 오차와 추정기의 자체 평가를 구분할 수 있습니다. 공분산을 변경하기 전에 센서 융합 디버깅을 사용하여 타이밍 및 TF를 진단하십시오.

동일한 계산을 로컬에서 실행하기

실행 가능한 전체 소스 ZIP 파일을 압축 해제하거나, 실험 진입점, 생성된 커널, 원본 PID 소스을 하나의 폴더에 저장하세요. PID는 Python 표준 라이브러리를 사용하고, Kalman과 ICP는 NumPy를 필요로 합니다. 원본 그림 생성 명령어는 그대로 사용할 수 있습니다.

python3 -m pip install numpy==1.26.4
python3 experiment.py kalman --parameters '{"q":0.4,"r":0.49,"gate":false}' > result.json

게이트를 전환하여 이상치 반응을 비교한 다음, q 값을 0.002 또는 r 값을 0.0049로 설정하고 RMSE와 기각 횟수를 비교하세요. 관측값은 저장된 CSV 파일에서 가져와 실행 간에 고정됩니다.

Code, data and reproduction

The ZIP contains the same computation code as the browser, synthetic data and comparison cases. These are not physical measurements.

Download reproduction package · Instructions (EN/JA) · Files and experiment conditions (JSON)

Extract the ZIP into a new directory, then run:

python3 reproduce.py --experiment kalman

This Lab compares 4 cases. PID uses Python’s standard library; Kalman/ICP require NumPy. See the instructions for dependencies and tested versions.

Related reading

Check timing, TF and units before tuning.센서 융합이 실패하는 이유 — 타이밍, 프레임 및 외부 보정Explore another aspect of this fieldMPC 연구실 — 예측 범위와 조향 한계 내에서 곡률 수열을 다시 풀다Explore another aspect of this field경로 추종 비교 연구실 — 동일한 조건에서 PP, APP, RPP, Stanley, MPC 실행하기