Quadrotor20132013. 9. 29. 17:41

상보필터 센서 융합에 관한 글을 적다가 센서 설명하는 부분이 길어져서 아예 따로 포스팅하려고 합니다 ㅋ


쿼드콥터의 자세를 측정하기위해 센서가 필요한데, roll, pitch, yaw중 roll, pitch를 측정하기 위한 센서인 가속도, 자이로센서에 대해 포스팅하겠습니다. yaw는 지자기센서가 있어야 정확한 측정이 되므로 제외하구요 ㅋ


roll, pitch, yaw를 모르신다면 이전 포스팅을 참고하시구요. - 쿼드콥터 동역학 모델링_1(기본원리)




가속도 센서는, --------------------------------------------------------------------------------------


말그대로 가속도를 측정하는 센서입니다. 가만히 고정되어 움직이지 않는 상태라면 센서에 중력 가속도만 작용하는 상태겠죠. 그럼 그 중력 가속도를 x, y, z축 벡터 세개로 나누어서 수치로 크기를 표현해줍니다. MPU6050같은 경우는 각 축에대해 -16383~16383까지의 값이 있네요. 딱 부호있는 16비트네요

밑의 그림을 참고하시면 도움이 되실거 같습니다. (회색 상자가 센서입니다)

 



 


하지만 중력가속도 g뿐만이 아니라 다른 외력에도 너무 민감하다는게 단점입니다. 다른 글에는 병진 운동에 취약하다 라고 되어있는데 이해를 돕기위해 좀 극단적인 예를 하나 들어보면 위 그림의 센서가 자유낙하 하고 있는 경우(공기저항무시) g가 0이겠죠? 그럼 센서가 아무리 기울어져 있어도 측정이 안될겁니다. 이처럼 센서의 회전이 아니라 이동에 취약하고 더 나아가 진동에도 약한 단점이 있습니다. 진동을 변위가 작은 이동이라고 보면 되겠네요. 하지만 두번째 그림인 상태에서 아무리 센서를 흔들고 던지고 회전시킨다음에 다시 두번째 상태로 돌아오더라도 흔들기 전과 후의 값이 같다는 특징이 있습니다. 


출력값을 보시면, (가속도센서값을 roll로 변환한 후 출력)


제가 손으로 임의로 실험한거라 손노이즈(?)도 있는거 같은데 여기서 주의깊게 보실 점은 구불구불한 노이즈들(밑의 자이로출력과 비교해보세요)과 멈췄을 때 값이 일정하게 유지된다는 것입니다.


정리하면 가속도 센서는 노이즈가 심하고 움직임의 값이 왜곡될 수 있지만(=부정확하지만) 시간이 지나도 오차가 누적되지 않는다.


자이로센서는, --------------------------------------------------------------------------------------


가속도센서와는 다르게 각속도를 검출하는 센서입니다. 선속도와 각속도의 차이, 속도와 위치의 관계를 안다는 가정 하에 설명할게요~


 


그림그리기가 좀 힘드네요..;; 위 그림에서 빨간선과 파란선의 각도의 변화량을 x, y, z축 각각의 변화량으로 표현해줍니다. 즉, 아무 움직임도 없다면 x, y, z축 값이 모두 0이라는 거죠. 여기서 중요한 점은 각 속도이기 때문에 기울어진 각도(위치)를 구하려면 적분을 해줘야한다는겁니다. 


출력값을 보시면, (자이로센서값을 roll로 변환한 후 출력)


위의 가속도센서 출력값과 같은 구간입니다. 처음보시는 분들은 가속도센서값이 더 정확해 보이시겠지만 자이로센서값이 실제 제 손 움직임과 더 비슷합니다. 다만, 계속 밑으로(마이너스 쪽으로) 발산해 가는데 이것이 자이로센서가 가진 단점입니다. 계속 적분하는 과정에서 센서의 노이즈도 같이 적분되기 때문에 이렇게 드리프트가 생기더라구요. 


정리하면, 자이로 센서는 실제 값과 비슷하지만(=정확하지만) 누적오차가 발생한다.


자 여기서, 가속도 자이로 값으로 같은 현상(roll, pitch같은)을 측정할 수 있지만 서로 장단점이 있다는걸 알 수 있죠, 그리고 서로의 단점이 상대의 장점이 된다는것도요


이 두 센서의 장점을 합치면 아래 그림의 파란색처럼 됩니다.



이걸 합치는 상보 필터에 대해 다음에 포스팅 하겠습니다.





Posted by 너를위한노래

댓글을 달아 주세요

  1. 초보자

    안녕하세요.. 쿼드콥터 제작하고 있는 대학생입니다
    이 블로그가 너무 도움이 돼서 저희 조 전부다 이 블로그 내용을 참조하고 있어요...
    궁금한 점이 있어서 질문드릴게요 mpu6050 센서값을 그래프화 시킬때 어떤 프로그램을 이용하시는지요..??
    너무 궁금합니다....ㅜ,ㅜ;

    2014.03.19 21:41 [ ADDR : EDIT/ DEL : REPLY ]
    • 먼저.. 출력시킨 툴은 matlab입니다. 혹시나해서 말씀드리자면 실시간으로 출력한게 아니구요, 아두이노 시리얼모니터로 숫자 값을 출력한 후 실험 끝나고 드래그해서 txt파일로 저장한 다음 그걸 matlab으로 불러와서 그린겁니다.. matlab에서 아두이노 연동하는 방법도 있는거같던데 이건 안해봐서 모르겠네요~ 검색하시면 나옵니다~ 연동되면 정보좀 공유해주세요 ㅋㅋ

      2014.03.20 00:24 신고 [ ADDR : EDIT/ DEL ]
  2. 초보자

    감사합니다...도움이 많이 됐어요 !!

    2014.03.21 11:39 [ ADDR : EDIT/ DEL : REPLY ]
  3. 쿼드콥터만들자

    안녕하세요. 쿼드콥터 제작중인 학생인데요.
    쿼드콥터가 움직이게 되는 원리와 축과 서로 일치 해야 할것 같아서 궁금증이 생기게 되었는데요.
    기본적으로 오일러각으로 데이터를 받게 되면 한개의 축이 다른 축에 영향을 받게 되는데 쿼드콥터의 경우에는 어떤 식으로 작용하게 되는지 아시는지요? 이부분에 대해 검색하려면 어떻게 검색해야 할까요?

    2014.07.16 22:42 [ ADDR : EDIT/ DEL : REPLY ]
    • 어떤 좌표계에서의 오일러각인지 공부해나가시면 될거 같습니다. 기체좌표계에서의 오일러각인지 관성좌표계에서의 오일러각인지 알아보시고 짐벌락이라는 키워드도 같이 검색해보시면 도움이 될 거 같네요~

      2014.07.16 22:53 신고 [ ADDR : EDIT/ DEL ]
  4. MPU6050

    지금 하고 있는 프로젝트에 많은 도움이 되었습니다!!
    출처를 남기고 퍼갔는데, 혹시 문제가 되면 삭제하도록 하겠습니다.

    2015.07.22 10:16 [ ADDR : EDIT/ DEL : REPLY ]
  5. 초심자

    안녕하십니까? mpu6050 에 대해 공부하려는 학생입니다. 읽다보니 이해가 안가는 부분이 있어서 이렇게 댓글을 쓰게 되었습니다. 첫번째 사진 밑 부분 쯤에 다음과 같이 쓰셧는데

    "이해를 돕기위해 좀 극단적인 예를 하나 들어보면 위 그림의 센서가 자유낙하 하고 있는 경우(공기저항무시) g가 0이겠죠?"

    자유낙하 중 공기의 저항을 무시하면 g가 9.8m/s^2 되어야 하지 않나요?

    왜 0인지 잘 모르겠습니다.

    오늘 블로그에 처음 들어왔는데 mpu6050 에 관해 상세히 설명해주는 블로그가 있어 참으로 다행이다고 생각했습니다. 이런 글을 써주셔서 감사합니다.

    2015.07.29 23:03 [ ADDR : EDIT/ DEL : REPLY ]
    • 음.. 공기 저항 없이 자유낙하하는 센서는 무중력 상태를 경험하게 되겠죠. 즉, 중력가속도를 느낄 수 없기 때문에 0이 됩니다. 실세로 센서를 손으로 들고있다가 자유낙하 시켜보면 순간적으로 0을 출력하는걸 보실 수 있습니다.
      추가적으로, 공기 저항이 있다면 자유낙하 하는 센서는 종단 속도에 도달할 겁니다. 그럼 그 후부터는 등속으로 낙하하기 때문에 중력가속도를 감지할 수 있습니다. 이 경우와 바닥에 정지한 센서와 다른 점은 속도를 갖고 있다는 것밖에 없다고 보시면 될 것 같습니다.
      바닥에 정지한 센서는 정상적으로 중력가속도를 검출하기 때문에 종단속도로 등속운동하는 센서도 정상적으로 중력가속도를 검출할 겁니다.
      혹시 틀린 부분이 있다면 지적해주세요~!

      2015.07.31 20:12 신고 [ ADDR : EDIT/ DEL ]
  6. jjifa

    잘 정리된 자료 무지 감사합니다.
    중력가속도란게 뭔지도 몰라서 두 센서 값의 의미가 바뀐걸로 착각했었는데,이 글을 읽고 정확하게 의미를 파악하게 되었습니다.
    아 한가지.
    range는 딱 부호있는 16비트가 아니라 15비트라고 해야 맞게습니다.
    그런데 MPU9250은 데이터 시트상에 부호있는 16비트 값을 RAGNE로 갖고있네요.
    감사합니다.

    2020.01.26 04:41 [ ADDR : EDIT/ DEL : REPLY ]