다양한 모빌리티에서 가속도/각속도계 등을 이용하여 자세를 추정하여 사용한다.
이때, 가속도계와 각속도계를 이용한 상보필터로 롤, 피치 각은 추정하기 쉬우나, 요 각(헤딩)은 정확히 알기가 어렵다.
이를 위해 지자기 센서를 이용하여 자북을 찾고, 진북으로 변환하는 방법을 주로 사용한다.
본 글은 지자기 센서(Magnetometer)로부터 진북 방향을 얻는 방법에 대해서 기술하고자 한다.
들어가며
지자기 센서는 지구의 자기장 방향을 계측하여 자북을 찾아낼 수 있다. 그러나 지자기 센서 주변의 자기장은 주변의 다양한 요소로 인해 왜곡된다.
자기장의 왜곡을 일으키는 요소는 다음과 같다.
- 주변의 자성체 (Hard/Soft Iron Distortion)
- 센서의 부착 자세 (Tilt)
또한 자북은 진북과 일치하지 않고 지구 상의 위치에 따라서 편각(Declination angle)이 존재한다. 이를 보정해주면 비로소 진북을 얻을 수 있다.
정리하면 지자기 센서를 통해서 진북을 얻는 과정은 다음과 같다.
- 지자기 센서의 보정(Hard/Soft Iron Calibration)
- 계측, 보정한 자기장 벡터를 이용하여 자북각 계산
- 위치를 이용하여 자북각에서 진북각 계산
이러한 과정을 다루기 위해, 지자기 센서에 오차를 유발하는 원인을 다루면서 글을 시작한다.
1. 지자기 센서의 오차 원인
지자기 센서는 주변의 자기장(Local magnetic field)을 계측한다. 이때 이 자기장을 교란하는 요소는 주변의 자석(Hard-Iron) 뿐만 아니라 자화될 수 있는 금속 물체(Soft-Iron)가 있다.
Hard Iron Case : Hard Iron은 자화(Magnetization)된 영구 자석에 의해서 만들어지며, Hard Iron은 한번 자화되면 쉽게 자화가 사라지지 않는다. 그래서 Hard Iron 은 영구 자석 등이 있다.
Soft Iron Case : Soft Iron은 작은 자기장의 변화에도 쉽게 자화 및 자기소거(De-magnetization, 내 생각엔 탈자화가 어울리는 것 같은데..)되는 금속이다. 또한 자기 영역이 가역성을 가진다. 그래서 Soft Iron은 전자 회로나 코일, 배터리 등이 이에 해당된다.
그렇다면 위의 원인들을 고려하여 지자기 센서를 모델링하고, 오차 원인을 보상할 방법을 찾아보자.
개인적인 비유를 들자면,
Hard Iron Distortion은 다른 정차한 차가 나한테 라이트(자성체)를 일정하게 비추고 있는 느낌이라면
Soft Iron Distortion은 라이트(자성체)을 비추고 있는데 주변에 이런 저런 거울(강자성체)이 많아서 보는거에 따라서 여기저기 반짝반짝 거리는 느낌이다.
정확히 들어맞는 비유는 아니라고 생각한다.
2. 지자기 센서 모델링 [8-10]
지자기 센서의 수학적 모델은 일반적으로 다음과 같다고 한다.
$$\tilde{m} = S_I^{-1} \left( m_E + m_{e(t)} \right) + b_{HI} + m_{i(t)}$$
정말 깔끔한 자기 환경이라면 계측된 벡터는 지구 자기장($m_E$, Earth's magnetic field)만을 계측한다. 그러나 실제 환경에 적용하면, 지구 자기장 뿐만 아니라 주변 사물들이 만들어내는 자기장의 합으로 계측 값이 나온다. 이를 자기 교란(Magnetic Disturbance)라 하며 자기 교란은 다음의 요소로 구성된다.
- $m_{e(t)}$ : 시스템 외부의 주변 환경의 사물들
- $m_{i(t)}$ : 센서와 같이 고정되어있는 사물들
- $b_{HI}$ : Hard Iron Distortions (Bias term)
- $S_{I} $ : Soft Iron Distortions
따라서 내부의 시불변 자기 교란을 포함한 국지적 자기장(Local magnetic field)이 존재하는 환경에서 지자기 센서 계측에 존재하는 오차 원인을 기술하기 위해 다음과 같이 보상 모델을 만들 수 있다. $m_c$는 보정한 자기 벡터이다.
$$m_c = S_I \left( \tilde{m} - b_{HI} \right) $$
$$\left[ \matrix{m_{cx} \\ m_{cy} \\ m_{cz} } \right] = \left[ \matrix{C_{00} & C_{01} & C_{02} \\ C_{10} & C_{11} & C_{12} \\ C_{20} & C_{21} & C_{22} } \right] \left[ \matrix{ {\tilde{m}}_x - b_{Hx} \\ {\tilde{m}}_y - b_{Hy} \\ {\tilde{m}}_z - b_{Hz}} \right] $$
그래서
$b_H$를 찾는 과정이 Hard Iron Calibration
$S_I$를 찾는 과정이 Soft Iron Calibration
이다.
지자기 센서 보정하기 - Hard Iron Calibration
Hard Iron Distortion은 센서 주변의 영구 자석과 Hard Iron에 의해 발생하는 자기장 왜곡 현상이다.
이때 센서를 자유롭게 회전시켜서 계측된 자기 성분을 3차원 공간 상에 도시하면 중심이 편향된 구 형태로 계측된다.
지자기 센서 보정하기 - Soft Iron Calibration
Soft Iron Distortion은 센서 주변의 Soft Iron에 의한 자기장 왜곡 현상이다. 철, 코발트, 니켈 등과 같은 강자성체는 자기장에 영향을 주지만 스스로 자기장을 형성하진 못하기 때문에, 주변 자기장에 의해 일시적으로 자화되면서 자기장을 왜곡하는 것이 Soft Iron Distortion이다.
지면에 평행하게 부착된 경우
주변에 자성체가 없고 지자기 센서가 지면에 평행하게 부착된 경우, 다음과 같이 계산할 수 있다.
지자기 센서에서 계측된 자기장 벡터를 $\vec{H}$라 할 때, 성분은 다음과 같이 표현하자.
$$\vec{H} = \left[ \matrix{ H_x \\ H_y \\ H_z } \right]$$
그렇다면 각 축의 자기 세기에 따라서 자기 방위각(Magnetic compass heading)은 다음과 같이 계산할 수 있다.
$$\zeta_{mag} = \text{tan}^{-1} \left(H_x / H_y \right)$$
일반적으로는 가속도/각속도계와 지자기 센서가 통합되어있으며 지면에 평행하지 않은 경우가 다수이다.
[1] Honeywell, "Compass Heading using Magnetometers", https://cdn-shop.adafruit.com/datasheets/AN203_Compass_Heading_Using_Magnetometers.pdf, AN-203
[2] Manne Henriksson, "Estimation of heading using magnetometer and GPS", https://www.diva-portal.org/smash/get/diva2:648760/FULLTEXT01.pdf, Sep. 2013.
[3] Shawn Hymel, "How to Calibrate a Magnetometer", https://www.digikey.com/en/maker/projects/how-to-calibrate-a-magnetometer/50f6bc8f36454a03b664dca30cf33a8b , Maker.IO
[4] 이동욱, 오종택, "스마트폰 실내 위치 추적을 위한 지자기 센서 보정에 관한 연구," 한국인터넷방송통신학회, Vol.18, No. 6, pp. 229-235, Dec. 2018, https://doi.org/10.7236/JIIBC.2018.18.6.229
[5] Papafotis, K.; Nikitas, D.; Sotiriadis, P.P. Magnetic Field Sensors’ Calibration: Algorithms’ Overview and Comparison. Sensors 2021, 21, 5288. https://doi.org/10.3390/s21165288
[6] Talat Ozyagcilar, "Calibrating an eCompass in the Presence of Hard- and Soft-Iron Interference", Application Note, Freescale Semiconductor, AN4246, Rev. 4.0, Nov. 2015. https://www.nxp.com/docs/en/application-note/AN4246.pdf
[7] Talat Ozyagcilar, "Layout Recommendations for PCBs Using a Manetometer Sensor", Application Note, Freescale Semiconductor, AN4247, Rev. 4.0, Nov. 2015. https://www.nxp.com/docs/en/application-note/AN4247.pdf
[8] VectorNav, "Educational Material - 3.5 Magnetic Error Sources," https://www.vectornav.com/resources/inertial-navigation-primer/specifications--and--error-budgets/specs-magerrorsources
[8] VectorNav, "Educational Material - 3.6 Magnetometer Hard & Soft Iron Calibration," https://www.vectornav.com/resources/inertial-navigation-primer/specifications--and--error-budgets/specs-hsicalibration
asdf
'개인공부 > 망원경' 카테고리의 다른 글
MPU 6050/9250 등 단종으로 인한 AHRS 센서 선정.. (0) | 2023.01.01 |
---|---|
자동 망원경을 위한 아두이노 디스플레이 메뉴 UI 설계 (0) | 2022.12.31 |
[작성중] IMU와 지자계를 이용한 자세 방위 측정 방법에 대한 조사 (0) | 2022.12.23 |
적도의 식 망원경 자동화를 위한 조사 (2) | 2022.12.20 |
[Arduino] NodeMCU v3 으로 기능 개발하기 (1) (0) | 2022.12.18 |