- 가속도, 중력 가속도, 각속도, 자이로센서, 지자계센서 목차
가속도
가속도(加速度, 영어: acceleration)는 시간에 따라 속도가 변하는 정도를 나타내는 물리량이다.
a= Δv / Δt
일반적으로 물체는 속력이나 운동방향이 바뀌면서 속도가 변하는데, 이와 같이 속도가 시간에 따라 변할 때 가속도가 있다고 한다. 속도와 마찬가지로, 가속도는 크기와 방향을 갖는 벡터량으로 나타낸다. SI 단위로는 m/s2를 사용하며, 주로 a라는 문자를 사용하여 가속도를 표기한다.
중력가속도
중력 가속도(重力加速度)는 물리학에서 중력에 의해 운동하는 물체가 지니는 가속도이다. 좁은 의미로는 지구의 중력으로 얻어지는 가속도를 의미한다. 갈릴레오 갈릴레이에 의해 지구 중력 가속도는 물체의 질량과 관계없이 대략 일정하다는 것이 밝혀졌다. 기호로는 흔히 g 로 나타낸다.
지구의 반지름이 일정하지 않기 때문에 정확한 값은 위치마다 다르다. 지오이드를 기준으로 한 표준 중력가속도 값은 9.80665 m/s²이다.
무게는 어떤 물체의 질량에 중력가속도(g)를 곱한 값이다.(무게)= m . g
중력가속도 g는
g = (G* M)/R^2
(R : 지구의 반지름, M : 지구의 질량,m : 물체의 질량, G : 중력상수)
가장 많이 활용하는 분야는 역시나 화면 회전이다. 가로모드 세로모드.
화면 회전은 중력가속도가 항상 작용하기 때문에 측정이 가능하다.
가속도센서
<가속도 센서 >
먼저 움직이는 물체와 견고하게 센서가 장착되어 있는 상태에서 시작합니다. 센서의 초기 출력은 모두 0이라고 합시다. 이 상태에서 물체를 y축 방향으로 45도 기울여 보면, 기울어진 상태에서 z축 방향과 x축 방향으로 동일한 값의 가속도가 측정됩니다. 아래 그림 보시면 쉽게 이해가 되실텐데 중력방향으로 g 가 측정되어야 하므로 0.707g 만큼 z축과 x축 방향으로 값이 출력됩니다. 결과적으로는 z축과 x축 값의 비율을 atan 에 넣으면 그 결과값이 45도, 즉 기울어진 값을 알수 있습니다.
하지만 간단한 만큼 문제점이 있습니다. 정지된 상태에서 물체가 움직이기 시작하면 그때 측정되는 값은 기울기를 나타내지 않을 수 있습니다. 예를 들어 45도 기울어진 위와 같은 상태에서 오른쪽으로 가속을 해본다고 가정해 보죠. 그러면 x축과 z축에서 측정되는 가속도는 변하게 됩니다. 한쪽값이 더 커지겠죠? 그러면 이 상태에서 atan 에 대입한다고 하더라도 45도 값은 나오지 않게 됩니다. 즉 움직임이 생겨서 어느 한쪽 방향으로 가속도가 생기게 되면 결과적으로 이 값이 중력에 의해 측정되는 가속도값과 구분이 안되게 됩니다.
* 정지하지 않은 움직임 상태에서는 가속도 센서만으로 기울기 값을 측정할 수가 없습니다.
출처: https://mechaworld.tistory.com/11 [메카 월드]
각속도(角速度, angular velocity) 또는 회전속도(廻轉速度, rotational velocity)란 특정 축을 기준으로 각이 돌아가는 속력을 나타내는 벡터(엄밀히 말하면, 유사벡터)이다. 이 벡터의 크기를 각속력(angular speed) 또는 회전속력(rotational speed)이라 한다.
ω= Δv / Δt
< 각속도 측정 센서는 자이로 센서 >
자이로 센서는 회전하는 물체의 각속도를 측정하는 센서 입니다. 여기서의 각속도는 degrees per second. 즉 단위 시간 (여기서는 초) 당 각도의 변화량을 측정하는 것 입니다. 단위는 DPS 를 사용합니다. 예를 들어 자동차의 바퀴가 1초에 2바퀴를 돈다고 하면 자동차 바퀴의 각속도는 720 DPS 입니다. (360도를 1초에 두번 돌았으니까요) 그리고 회전이 멈췄다.. 그러면 각속도는 0 DPS 가 됩니다. 물체의 위치가 바뀌고 순간이동 하고 그런것은 각속도에 영향을 주지 않습니다
각속도만 측정하는 자이로로 어떻게 이런 기능을 구현했는지 가볍게 알아보자.
수학시간에 적분이라는 개념을 배웠을 것입니다. 가속도를 적분하면 속도가 나오고, 속도를 적분하면 거리가 나온다 는 기본 개념입니다.
이 개념을 각속도에서 사용하시면 됩니다. 즉 각속도를 단위 시간으로 적분하면 단위시간의 각도가 나옵니다!
공식으로 간단하게 표현하자면.
여기서의 w 는 각속도 입니다.
그럼 디지털 환경에서는 어떻게 적분을 하느냐... 구분구적법!! (이거 고등학교 수학 처음에 적분할때 나오는겁니다.)
상황을 만들어 보겠다. 자이로 센서로부터 20ms 단위로 각속도를 받아오고 있다고 하겠다. 이때의 각속도를 720 DPS 라고 한다고 2초 동안의 각도 변화량을 계산 하는 방법은 아래와 같다.
Degrees = 720 * 0.02 + 720 * 0.02 + ~ + 720 * 0.02 (200 번 더하기~~)(0.02 = 0.02s) = 720
즉 해당 시간에 나오는 각속도에 계속 0.02 를 곱하고 이 값들을 누적하면 된다.
Angle = SUM(DPS * 0.02)
요렇게 계산된다.. 자이로센서 쓰시는 분들은 익히 알겠지만 심심하시면 안드로이드로 앱 간단하게 만들어보세요 각도 나옵니다.
Yaw 값 측정에 대해서는 간단히만 알아보죠. Yaw 의 회전축은 z축방향, 즉 중력방향과 같습니다. 따라서 가속도센서보다는 자이로 센서의 z축 값을 측정해서 이 값을 이용해 yaw 값을 계산하고 드리프트되는 오차를 보상하는 다른 센서를 추가적으로 사용합니다. 바로 마그네토미터, 즉 지자기센서입니다. 3축 지자기 센서를 적용해서 yaw 방향을 측정하는 것입니다.
가속도 센서 vs 자이로센서
< 가속도 센서 VS 자이로 센서 >
많은 분들이 햇갈려 하는 부분이 이 둘이 뭐가 다르냐. 입니다.
차이점은 설명했듯 가속도 센서는 센서에 발생하는 가속도를 측정하고 자이로 센서는 센서에 발생한 회전 속도를 측정합니다.
간단한 예로 센서가 회전하지 않은 상태로 등가속도 운동을 한다면 가속도 센서는 움직이는 방향으로 값이 나오지만 자이로 센서의 출력값은 0, 0, 0 입니다 (약간의 오차는 뺐습니다.)
반대로 센서가 고정된 위치에 있거나 혹은 등속도 운동을 하는 상태에서 회전을 하고 있다면 가속도 센서의 출력값은 0,0,9.8 (중력가속도) 이지만 자이로 센서는 회전축에서 측정되는 각속도를 출력합니다.
그리고 또다른 차이점 (가속도와 자이로를 같이 쓰는 이유!) 는 중력이라는 녀석과 회전이라는 녀석 때문입니다.
뭔소리냐 하면.. 가속도 센서는 중력가속도라는 아름다운 기준점이 있습니다. 즉 가속도 센서는 LCD 가 하늘로 향하도록 놨을경우 측정되는 값은 0,0,0 이 아니라 0,0,9.8 입니다. 폰을 다른 방향으로 바꾼다면 3, 4, 8.5 (루트 X^2 + Y^2 + Z^2 = 9.8 ) 과 같은 식으로 바뀝니다. 이때의 기준 값은 모두 중력 입니다. 즉 가속도 센서를 이용하면 디바이스의 지평면 기준 포지션을 정확하게 알 수 있습니다.(얼마나 기울었는지 뉘여 있는지 등등)
문제는 가속도 센서만 가지고는 LCD 가 하늘을 향하거나 땅을 향하는 상태에서 Z 축 방향으로 폰을 회전 시키면 (LCD 는 계속 하늘 혹은 땅) 가속도 값은 0,0,9.8 (혹은 0.0,-9.8) 을 나타냅니다. 즉 회전하고 있는지 알 방법이 없습니다. (이 회전을 Yaw 라고 합니다.) 이걸 알기 위해서는 자이로 센서가 필요합니다. 편히 말하면 디바이스의 회전 축이 중력방향과 일치하면 가속도 센서는 이게 회전인건지 가만히 있는것인지 모릅니다.
그리고 자이로 센서는 아쉽게도 기준이라는것 자체가 없습니다. 가만히 있는 상태에서 센서 값을 출력시키면 디바이스가 어떤 상태로 있던 0,0,0 을 찍습니다.
이러한 이유로 많이 들어보셨을 6축 센서 퓨전 (가속도 3축 + 자이로 3축 - 혹은 가속도 3축 + 지자계 3축) 혹은 9축 퓨전 (가속도 3축 + 자이로 3축 + 지자계 3축) 을 사용하게 됩니다.
조만간 센서 퓨전에서 자세한 부분을 설명하겠습니다.
출처: https://ibmhdd.tistory.com/3 [잉여롭게 잉여잉여]
지자계 센서
우선 지자계 센서에 대한 이야기를 하기 전에 지구 자기장 (Geomagnetic field -> Earth's magnetic field) 에 대한 이야기를 해보려고 합니다.
지구 내핵에 있는 물질이 회전해서 생긴것이라고 추측되고(?) 있는 지구 자기장은 고맙게도(?) 우주 방사선으로 부터 지구를 보호해 준다고 합니다. 이 자기장은 지구 표면에서 대략 25 ~ 65 uT(Micro tesla) (0.25 ~ 0.65 Gauss) 정도로 측정되고 있습니다. 나침반이 북쪽을 가리키는 이유는 이러한 지구 자기장에 의한것입니다. 그런데 아쉽게도 이 지구 자기장에 의한 북쪽 즉, 자북은 실제 지구 북쪽보다 약 10도 정도 기울어져 있습니다.
지자계 센서는 위에서 언급한 지구자기장을 측정하고 측정된 값에 의하여 자북을 찾아내는 (잠시 뒤 진북 찾는법도 나옵니다.) MEMS 센서이다.
Calibration, Accuracy
지자계 센서를 활용한 나침반을 사용하려고 하면 아래와 같은 그림을 보시게 됩니다.
이러한 동작을 해야 되는 이유는 지자계 센서에서 측정되고 있는 자기장값이 기준치 (위에 언급한 25uT ~ 65uT) 를 많이 벗어나서 그렇습니다. 더 정확하게 이야기 하자면 X, Y, Z 축의 지자계 값의 nomalized 된 값이 범위를 벗어나서 입니다. 자기장 값이 벗어나기 때문에 이를 보정하기 위한 동작이 필요하고 이 동작중에 가장 많이 활용되는것이 figure 8 motion 입니다. 즉 폰을 숫자 8이 뉘여진 모양으로 돌리는거죠. 아래 동영상에 나오는 것 처럼 손목 스냅도 포함해서 폰을 회전시켜 주셔야 합니다. 그냥 붕붕 돌리기만 하는게 아닙니다.
(그림처럼 LCD 부분이 이곳저곳을 가리켜야 한다)
그러면 왜 calibration 을 해야 되는지 그리고 왜 MEMS 가 자기장을 측정하는데 잘못된 값이 나오는지 알아보겠습니다.
지자계 센서를 사용하는 디바이스는 전자기기 입니다(익숙한것은 핸드폰) 핸드폰 속에는 전류가 흐르고 있고 전류의 흐름으로 인하여 자화되는 철부분에 의해 자기장이 발생됩니다. 이러한 자기장 역시 MEMS 센서에 의해 측정이 됩니다. 정확히 말하면 지자계 센서가 알고 싶어하는 지구 자기장을 방해하는 녀석이지요. 또한 사무실 같은 곳에서 지자계 값을 측정한다면 각종 전자기기들(컴퓨터, 가전 등등) 에 의해 나오는 전기장이 또 지구자기장 측정을 방해합니다. 이런 방해 들을 Hard Iron, Soft iron 자기 간섭이라고 합니다.
(이런 공식 보기 싫은거 저도 알고 있습니다.)
이 자기 간섭에 대해서는 따로 이쁘게 설명하겠습니다.
이러한 자기 간섭을 제거하는 과정이 calibration 이고 calibration 의 원리는 아래와 같습니다.
1. 한 축에서 측정되는 최대값과 최소 값을 측정합니다.
2. 만약 측정된 값의 최소값이 -100 이고 최대값이 -20이라면 중간 값은 -60 입니다.
3. 여기서 중간 값인 -60을 Bias 라고 표현하고 이 값이 고정된 자기 간섭입니다.
4. 다른 두축도 최대값 최소값을 계산하여 Bias 를 구합니다.
5. Bias 가 모두 구해지면 Calibration 이 잘 된 상태 이고 이때의 Accuracy 는 3이 됩니다 (폰 기준)
(물론!! 실제 알고리즘은 요것보다 쪼매 더 까다롭습니다 ~~~, 게다가 자이로 센서를 활용해서 더 빠르게 calibration 하는 방법도 있습니다. 더 넘어가는건 영업 비밀~)
(그리고 Calibration 때문에!! 그리고 다음에 나올 Azimuth때문에 지자계 센서 업체들은 기본적으로 calibration 및 모션 라이브러리를 제공합니다. 하지만 애플은 이마저도 자기들이 만들어 쓴다는거~)
Calibration 과정에서 가장 중요한것은 각 축의 최대값 최소값을 찾는것입니다. 이를 하기 위해 가장 좋은 방법은 각 축 별로 3~5번씩 회전 시켜서 최대 최소 값을 찾는것입니다. 다만 그 과정이 좀 귀찮기 때문에 figure 8 motion 을 활용하는 것 입니다.
Azimuth vs Yaw
< Azimuth VS Yaw >
복잡한것 다 빼고 간단한 부분만 설명하겠습니다.
Azimuth, pitch, roll 혹은 Yaw, pitch, roll 이라는 것을 보셨을 것입니다. 근데 여기서 Azimuth 와 yaw 의 차이가 뭔지 모르시는 분들이 좀 많습니다.
간단하게 설명하면
Azimuth : 자북 기준의 각도 (방위각)
Yaw : 첫 시작점 기준으로 움직인 각도
Azimuth 는 지자계 센서가 있어야지만 계산할 수 있고, Yaw 는 자이로 센서가 있어야지만 계산할 수 있습니다.
출처: https://ibmhdd.tistory.com/2?category=629843 [잉여롭게 잉여잉여]
'nrf52' 카테고리의 다른 글
[DFU]OTA를 이용한 다운로드 후에 응용 프로그램(Application Program)으로 넘어가지 않는 경우 (0) | 2020.11.26 |
---|---|
ASTRO 앱을 이용하여 만든 앱을 안드로이드 핸드폰에 설치하는 방법 (0) | 2020.10.16 |
[nRF52] Bootloader를 위한 key & Firmware Update Package 생성 (0) | 2020.10.05 |
nRF52 dfu를 위한 key 생성 (0) | 2020.09.29 |
secure bootloader를 위한 micro-ecc 설치 (0) | 2020.09.28 |