27.3.1.7. 기체 고정축 자기장(Body Magnetic Field) 왜곡 모델 변수 할당 (인덱스 19~21)

27.3.1.7. 기체 고정축 자기장(Body Magnetic Field) 왜곡 모델 변수 할당 (인덱스 19~21)

이전 절에서 다룬 지구 자기장(인덱스 16~18)이 드론 외부 환경의 절대적인 나침반 역할을 한다면, 현실 세계의 드론은 안타깝게도 자기 자신의 몸집 깊숙이 나침반을 교란시키는 치명적인 적들을 품고 있다. 배터리의 고전류 케이블, 모터의 영구 자석, 그리고 프레임에 섞인 철(Fe) 강성 부품들이다.

이러한 기체 내부 부품들에 의해 발생하여 지자기 센서의 측정값을 찌그러뜨리는 자기적 간섭을 기체 고정축 자기장 왜곡(Body Magnetic Field Anomaly) 이라고 부른다. EKF는 이 내부의 적마저도 상태 벡터로 끌어들여 실시간으로 추정해 낸다. 본 절에서는 StateSample 구조체의 인덱스 19~21번에 할당된 이 왜곡 벡터의 물리적 원리와 매핑 구조를 파헤친다.


1. 상태 변수 매핑: idx: 19~21

src/lib/ecl/EKF/common.h 파일 내 StateSample 구조체에서, 지구 자기장 벡터(mag_I) 바로 직후에 길이 3의 메모리 슬라이스가 mag_B (Magnetic Field In Body Frame) 라는 이름으로 할당되어 있다.

// src/lib/ecl/EKF/common.h 내부의 기체 자기장 왜곡 슬라이싱
struct StateSample {
    matrix::Vector<float, 24> states;

    // ... (16~18 인덱스는 mag_I, 지구 자기장)

    // 인덱스 19부터 시작하는 길이 3의 슬라이스를 기체 축 기준 자기장 왜곡 벡터로 선언
    const matrix::Vector3f& mag_B{states.slice<3, 1>(19, 0)}; 
};

mag_B 참조자가 가리키는 세 개의 실수 m_{b,X}, m_{b,Y}, m_{b,Z} 의 물리적 의미는 FRD(Forward-Right-Down) 기체 고정 프레임을 기준으로, 기체 자체가 뿜어내어 센서를 오염시키는 자기장의 세기(단위: 가우스(Gauss) 등)를 뜻한다.

  • states[19] (m_{b,X}): 기체 X축(Forward) 방향으로 생성되는 내부 자기장 왜곡
  • states[20] (m_{b,Y}): 기체 Y축(Right) 방향으로 생성되는 내부 자기장 왜곡
  • states[21] (m_{b,Z}): 기체 Z축(Down) 방향으로 생성되는 내부 자기장 왜곡

2. 하드 아이언(Hard Iron) 오프셋의 실시간 추정

드론 공학에서 자기장 왜곡은 크게 두 가지로 나뉜다. 첫째는 영구 자석처럼 항상 일정한 자기장을 뿜어내는 ‘하드 아이언(Hard Iron)’ 효과이고, 둘째는 주변 쇳덩어리에 의해 지구 자기장의 형태가 휘어지는 ‘소프트 아이언(Soft Iron)’ 효과다.

소프트 아이언 효과는 비행 전에 기체를 들고 춤을 추듯 돌려대는 이른바 ‘나침반 캘리브레이션(Compass Calibration)’ 비행 전 점검 단계를 통해 센서 드라이버단(혹은 센서 칩 내부)에서 3x3 변환 행렬로 상쇄된다.
하지만 그 반대인 하드 아이언 효과는 모터의 회전이나 고전류 인가에 따라 비행 중에도 극심하게 변동할 수 있다. 이 때문에 EKF의 mag_B 파라미터(19~21번 인덱스)는 비행 중 발생하는 이 동적인 하드 아이언 오프셋(Offset)을 실시간으로 추적하여 보상하는 역할을 맡는다.


3. 동역학 모델 융합 (16번과 19번의 분업)

그렇다면 칼만 필터는 어떻게 센서에 들어온 데이터 하나만 보고 이것이 지구에 의한 자기장(mag_I)인지, 기체에 의한 자기장(mag_B)인지 분간해 낼 수 있을까?
이 해답은 드론이 공중에서 ’회전(Rotation)’할 때 발생한다.

3.1 예측(Prediction) 단계: 상수의 유지

지구 자기장과 동일하게, 이 기체 내장 자기장 역시 f() 예측 방정식 내에서는 랜덤 워크 상수 모델로 유지된다 (변화량을 완전히 예측할 수 없기 때문).

// 기체 자기장 왜곡 예측 동역학 (예외적인 경우가 아니면 값 변화 없음)
mag_B(t) = mag_B(t-1);

3.2 관측식(Observation Equation)에서의 충돌과 자아 식별

지자기 센서 측정 모듈과 관측 업데이트 모델은 다음과 같은 거대한 수식을 기본 철학으로 구성한다. (자세 쿼터니언 변환 행렬을 R_{ned}^{body} 로 표기)

\text{센서 측정값}_{body} = R_{ned}^{body} \times \text{지구자기장}_{ned} (\text{mag\_I}) + \text{기체오왜곡}_{body} (\text{mag\_B})

  • 기체가 공중에서 빙글빙글 돈다(Yaw Rotation)고 가정해 보자.
  • 이때 R_{ned}^{body} 행렬이 계속 변하므로, 첫 번째 항(지구자기장의 회전 투영)인 센서값은 코사인/사인 곡선을 그리며 끊임없이 요동쳐야 정상이다.
  • 하지만 기체가 어떤 각도로 빙글빙글 돌던 간에, 센서 측정값에서 절대 변하지 않고 항상 똑같이 +0.1 가우스만큼 측정되는 상수 성분이 발견되었다고 치자.
  • EKF 공분산 연산자는 이 끈질긴 상수 성분을 정확히 캐치해 낸다. EKF는 “네가 돌든 말든 센서에 계속 박혀 있는 이 이상한 고정값은 지구가 아니라 기체 뱃속에 있는 자석 때문이구나!“라고 추론을 끝마친다.

이 수학적 깨달음의 순간에 칼만 게인 행렬의 폭포수 연산이 터지며, 이 상수 오차만큼을 19~21번 인덱스의 mag_B 에 채워 넣는다. 다음 스텝부터 EKF는 센서 원시 데이터에서 이 mag_B 만큼을 미리 깔끔하게 빼고 계산을 시작하여, 드론은 모터에서 뿜어져 나오는 극심한 자기장 폭풍 속에서도 오직 지구의 진북만을 온전히 바라볼 수 있게 된다.

지구의 장대한 자기장(mag_I)과 기체 내부의 교란 자기장(mag_B)까지, EKF의 상태 공간은 이제 단 2개의 빈자리(22~23번)만을 남겨두고 있다. 마지막 장에서는 허공을 떠다니는 기체를 정처 없이 흔들어 놓는 무형의 빌런, 2차원 풍속(Wind Velocity) 벡터의 상태 할당에 대해 분석한다.