Quadrotor20152014. 6. 10. 11:50

자이로센서를 사용해서 처음 각도를 출력해보면 이해가 안가는 부분이 있습니다. 


기체는 가만히 있는데 출력값은 처음 0도에서 시작해서 무한대로 점점 발산해 간다는 점입니다.


센서가 고장났나 싶어서 좀 더 비싼 센서를 사서 테스트해보면 발산해 가는 양이 조금 줄었을 뿐 시간이 지나면 똑같이 발산해 갑니다.


뭔가 문제가 있다고 판단하고 조사를 하다보면 자이로 센서에는 약간의 바이어스(Bias:치우침)값이 포함되어 있고 이걸 같이 누적하다보니 각도값이 발산해 간다는 점입니다.


이는 자이로 센서의 특징이라고 합니다. 센서가 공장에서 출하될 때 센서의 내부에 물리적인 오차가 생기는 것 같습니다.(음.. 밑에 P.S.에 이에 대한 궁금한 점 써놓았음..)


실제로 디지털 자이로센서가 움직이지 않을 시, 기체의 각속도는 0이므로 센서 출력값도 0이 나와야 정상입니다.


하지만 대부분의 센서의 출력값은 0이 나오질 않습니다. 0이 아닌 다른값이 나오기 마련입니다. (물론 항상 일정한 숫자가 나오지 않고 어떤 숫자 근처에서 미세하게 왔다 갔다 하고있겠죠)


이걸 자이로센서의 바이어스라고 하더라구요.. 


이 바이어스의 값이 몇인지 알고 있다면 매 샘플링마다 나온 값에 바이어스를 빼 주면 올바른 값이 나오겠죠.


그래서, 작년 제 쿼드같은 경우에는 호버링 전에 바닥에 가만히 있는 상태에서 1000개의 출력치를 모아 둔 다음 평균내서 바이어스를 측정했었습니다.


이 과정을 거치면 확실히 바이어스가 제거되는 효과가 있습니다. 제거 전 각도값 발산이 1분에 10도였다면 제거 후에는 1분에 0.2도 정도니까요.


하지만 1분에 0.2도 정도의 오차는 없어지질 않습니다. 1000개를 평균내더라도 10000개, 100000개보다는 부정확하니까요.


이를 더 보완하기 위해 HDR(Heuristic Drift Reduction)알고리즘이 있습니다.


어렵지 않고 아주 간단한데요, 작동 방식은 아래와 같습니다.



 

 



※ 블록다이어그램의 내용 중 w_set부분이 다소 부자연스럽지만(?) 그냥 넘어가도 될 듯 합니다.    



은 위에서 언급한 N개의 데이터 평균값을 이용한 바이어스의 정도입니다. 이를 제거한 다음 도 마저 제거 하는데, 를 구하는 방법은 이렇습니다.


센서의 현재 출력(t=n)과 바로 직전의 센서 값(t=n-1)의 차이에 따라 를 조정해 갑니다. 이미 를 구했다면 는 아주 조금씩 조정해 나가야 합니다. 참고 문헌에서는 를 0.001과 같이 미소한 값을 사용하라고 되어있네요.


누누히 말씀 드리지만 이런 필터류의 설계는 이렇다할 정답이 없습니다. 적용하고자하는 시스템이 맞게 필터 장단점의 트레이드오프 관계를 잘 절충해야 합니다.


직관적인 내용이니 위 그림을 자세히 들여다보시면 충분히 이해가 가실거라 생각합니다~!


P.S. 음.. 여러번 실험하다보니 궁금한 게 생겼는데.. 혹시 자이로센서가 온도같은거에 영향을 받는지 아시는분 있다면 댓글 부탁드릴게요~



출처 - http://blog.daum.net/pg365/227





Posted by 너를위한노래

댓글을 달아 주세요

  1. 안녕하세요 가끔 들러서 포스팅하신거 잘 보고있습니다
    저도 각도측정하는 센서를 사용하고있습니다 물론 저는 판매되는 자세센서를 쓰고있습니다만
    센서 스펙에 보면 9축에 온도센서까지 내장하고있습니다 온도하고 관계가 있어서 보상하고 있다고 합니다
    좀 더 공부해봐야 알것같네요 포스팅잘보고갑니다 수고하세요

    2014.06.10 13:54 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 음.. 자세센서라는게 따로 있나요? 9축이라하셨으니까 아마 추측컨대 가속도3축+자이로3축+지자계3축+온도 이거 같은데..
      온도하고 관계 있다는 내용의 링크나 자료를 알려주시면 포스팅에 추가하는데 많은 도움이 될 거 같습니다~

      2014.06.11 10:13 신고 [ ADDR : EDIT/ DEL ]
  2. ABRAXAS

    올려주신 자료 너무 유용하게 감사하게 보고 있습니다.
    말씀하신 내용, 자이로센서가 온도의 영향을 받는가에 대한 자료를 찾은거 같아서
    링크 올려드리겠습니다.

    http://www.epnc.co.kr/atl/view.asp?a_id=11932

    EPSON사의 자이로센서 XV4001 에 관한 내용입니다.

    2014.10.27 16:43 [ ADDR : EDIT/ DEL : REPLY ]
  3. gyro

    감사합니다 gyro관련하여 상보필터를 쓰고있었지만 오차가 너무 심해서
    고민을 하고 있었습니다 이런 좋은 글을 볼수 있어서 정말 감사합니다.!!

    2015.12.14 16:33 [ ADDR : EDIT/ DEL : REPLY ]
  4. Jun

    좋은글 잘봤습니다.^^ 감사합니다.
    한가지 질문이 있습니다. Ti(sampling time)과 타우(Filter Time constant)의 비로 LPF로 기존 각속도의 노이즈를 제거한후에 알고리즘을 진행하는 걸로 알고 있는데요. 여기서 Ti(sampling time)은 센서의 (sampling time)을 얘기하는 것 같습니다. 하지만 타우(Filter Time constant)는 어떻게 결정해야되는 궁금합니다. LPF관점에선 Sampling time보다 타우값이 더 적게 나와야 되는 걸로 알고 있습니다.
    답변주시면 감사하겠습니다.^^

    2017.03.21 20:26 [ ADDR : EDIT/ DEL : REPLY ]
  5. time constant(시정수)를 말씀하시는건가요? real world에서 센서의 자세가 변했을 때 출력되는 센서의 데이터가 얼마나 빠르게 실제와 같아지는지를 나타내는 수라고 이해해도 될까요?
    본 프로젝트 진행 시 센서의 raw출력값은 실제 데이터와 같다고 가정하고 진행했습니다~!
    다만 반응이 느려지는건 software적으로 lpf를 구현하여 통과시키게 되면 필터 전 후에 반응이 느려진다는(시정수가 늘어나는) 내용입니다.
    time constant얘기는 센서 내부에서 조정해야하는 이슈가 아닐까 하는데 센서 외부에서 프로그래밍 하는 우리가 조정할 수 있나요??

    2017.03.21 20:49 신고 [ ADDR : EDIT/ DEL : REPLY ]