본문으로 바로가기

 이미 가속도센서를 이용한 각도 측정과 그 한계에서 가속도센서에 병진운동 성분이 있다면 그 기울어진 각도는 가속도센서만으로는 추정할 수 없음을 이야기 했습니다. 또한, 자이로센서를 이용한 각도검출과 그 한계에서 자이로센서는 그 적분시 적분오차를 계속 누적해서 가져가기 때문에 또한 자이로센서만으로는 역시 기울기의 추정이 어렵다고 이야기했습니다. 물론, 자이로센서의 출력에 온도를 고려하기에서 온도보정을 잘 하면 그 적분오차에 의한 드리프트 현상을 상당히 막을 수 있다는 것을 실험해보았습니다. 그러나, 온도보정은 오차를 내지 않겠다, 즉 오차를 최소한으로 막아보겠다는것이지, 혹시 모르게 발생한 오차를 막아내지는 못합니다. 그래서 인터넷을 조금만 서치해보면 나오는 가속도 센서를 이용한 보정을 저도 한번 수행할려고 합니다. 원래 이 글은 2007년 말에 실험이 완료된 것이지만, 당시에 저는 작업지시와 지도만 했고 실제 실험은 후배들이 수행을 했었는데, 이번에 제가 Cortex M3도 공부할겸해서 직접 실험까지 수행했습니다...(헉헉... 생각보다 힘들더라는...켁)



이전 글에서 수행한 실험으로 위 두 센서의 용도를 잡았습니다. 상대적으로 응답속도가 빠른 NT-Gyro300을 가속도센서로 보정해서 Pitch와 Roll를 잡고, myGyro300SPI만을 이용해서 Yaw를 잡기로 했습니다. 그래서 기구부는


이렇게 myAccel3LV02와 myGyro300SPI를 나란히... 이쁘게 두고



그 위에 다시 NT-Gyro300을 위치시키기 위해 기판을 붙이고,


저렇게 달았습니다. 원래는 NT-Gyro300이 저렇게 수직으로 달리는게 아니라 수평하게 연결되어야하지만, 실험기구부에 연결하기 위해 임시로 저렇게 했습니다.




이렇게 위와같이 Cortex와 통신할 겁니다. 가속도센서는 I2C통신으로 자이로는 SPI로 마지막으로 NT-Gyro300은 '길'님의 댓글처럼 myGyro300SPI의 여분의 ADC두채널에 연결했습니다. 이유는 디지털통신이 가지는 장점인 노이즈에 강하다는 것을 이용할 목적과 CPU의 리소스를 조금이라도 절약(음...뭐 딱이 절약할정도로 많이 사용하지도 않지만...ㅜ.ㅜ)하기 위해서라고 그냥 해두겠습니다...^^


저렇게 병진운동성분에 대한 결과를 보기 위해 회전하는 중심이 아니라 회전하는 진자의 끝에 연결하고 흔들어볼것입니다.


온도에 대한 보정은 위와 같습니다. 두 자이로센서의 온도보정상수는 실험을 통해 측정했습니다. 그게 확실한지는 알 수 없으니 그저 지나가시는 고수님이 있다면 저렇게 해도 되는지 확인부탁드립니다. 이게 왜 이렇게 된거냐면... NT-Gyro300은 본래 온도를 출력하는 기능이 없습니다. 그런데 같은 환경에서 다른 센서가 온도를 출력하니까... 보정상수만 좀 다르게 하면 어떻게 잘 되지 않을까하고 그냥 생각한겁니다...크...


위 그림은 엔코더의 미분(차분)치와 온도를 고려한 두 자이로의 각속도값을 비교한것입니다. 하실 각도값은 엔코더가 정확할진 몰라도 저속에서는 엔코더의 미분치는 오히려 오차가 많을 수 있습니다. 비록 그 값을 한 바퀴에 2000펄스를 사용한다고해도 말이지요. 저 결과는 적분을 해 봐야 알 듯 합니다.^^


보정필터없이 결국 온도에 대해서만 적분한 결과입니다. 희한하게 NT-Gyro300이 좀더 좋은 성능을 보이는건 또 뭐라 할 말이 없습니다. ㅎㅎ.. 그리고, 80초와 90초사이에서 또 90초와 100초 사이에서는 움직이던 애를 제가 어느각도에서 잡고 멈춘겁니다. 음 그래프로보니 제 손이 그리 정확하진 않네요^^



72초 부근을 확대했습니다. 확실히 myGyro300SPI는 시간 딜레이가 100ms가 넘어갑니다. 그러나 ADC를 수행한 NT-Gyro의 경우는 저정도 가로축에서는 시간지연이 확인되지 않을 정도입니다. 실제론 대략 10-20ms정도입니다.



이건 뭐 당연한 이야기지만 가속도센서만으로 각도를 잡은겁니다. 손으로 천천히 움직인 70초부근에서 90초지역까지는 기가막히게 잘 따라가지만, 나머지 병진운동이 좀 빨라지면 역시 신뢰할 수 없습니다.





위는 보상필터의 개념입니다. 저 블럭을 수식으로 바꿔보면



위와 같이 전개됩니다. 정말 우연히 보상필터의 각도와 자이로의 적분 각도가 모두 참이라면 저 마지막 결론식의 우변은 그냥 theta가 됩니다. 여기서 사용한 개념은 자이로를 적분한 결과에서 드리프트되는 결과는 극 저주파 영역이라고 보고 Highpass 필터를 설계하고 보상신호의 각도 값에서 병진성분 및 ADC결과 나타나는 노이즈는 고주파 영역이라고 보고 Lowpass 필터를 설계한 겁니다. 당연히 방금 이야기했지만, 둘 다 참값이 나오면 결과식을 보시면 분자와 분모가 일치해서 약분되어버립니다.


위 보상필터의 개념은 세종대학교 홍성경교수님의

Fuzzy logic based closed-loop strapdown attitude system for unmanned aerial vehicle (UAV) - Sung Hyung Hong. Sensors and Actuators A 107 (2003) 109-118

에 개제된 내용을 제가 조금 풀어서 설명한 것입니다.



위 보정필터를 적용한 결과는


위와 같습니다. 보정필터를 myGyro300SPI(빨강색)에 적용할 필요는 없지만, 그냥 결과가 궁금해서 같이 수행했습니다.^^ 50초가 넘어갈때까지 드리프트가 보이지 않음을 알 수 있습니다. 물론 손으로 멈춘 82초대와 92초대역에서 오차가 좀 심하다는 것을 알 수 있지만, 자이로만 적분했을때와 비교한다면 상당히 개선되었음을 또한 알 수 있습니다.



위는 72초대를 확대한 것인데, 보상필터의 영향으로 NT-Gyro300의 결과가 살짝 앞서서 나타나는 현상이 있습니다.

일단, 요기까지...^^
이번엔 센서부를 구성했습니다. 틈틈히 계속 테스트를 해서 동일조건에서 같은 결과가 나타나는지를 계속 확인해야하겠습니다.^^. 그래도 이제 어느정도 좋은 결과를 얻고 있다는 생각입니다. 남은 과제는 평면상에서의 회전은 그렇다 치고, 공간상에서의 회전을 측정해야하는데, 물론 지금의 결과로 그냥 확장하면 되겠지만, 항상 제가 궁금하게 생각하는것은 참값과의 비교입니다. 당연히 참값과 비교해서 오차는 얼만지 응답속도는 얼만지 알아야겠지요. 그런데 공간상에서는 엔코더를 사용하기가 좀 난감하네요... 어떻게 실험기구를 구상해야할지.ㅋ 난감~



댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. mcu 2010.11.02 13:37 신고

    질문이 있습니다.
    위 본문에서 yaw각의 경우는 자이로센서만으로 측정하신다고 하셨는데
    그럼 yaw각에 대한 보정은 어떻게 해야하는걸까요?

    • BlogIcon PinkWink 2010.11.02 15:42 신고

      가속도센서만 가지고 yaw까지 보정하는 것은 어렵습니다.
      일반적으로는 지자기센서등을 사용해서 yaw를 보정하는 것으로 알고 있습니다.

  3. soon 2010.12.20 13:54 신고

    안녕하세요.
    여기에서 많이 배워가고 있습니다.^^
    질문이 있어서 글 남기는데요,
    센서들이 이론적으로는 한 점에 장착되었다는 전제로 계산이 진행되는데요
    실제적으로는 센서들이 한 점에 장착될 수 없는데..
    이것에 대한 오차는 어떤식으로 보상하는건가요?
    오차가 너무 적어서 보상할 필요가 없는건가요?

    • BlogIcon PinkWink 2010.12.20 16:26 신고

      평행한 두 선에 직선하나를 비스듬히 그어서 만든 후, 같은 방향을 보는 두 각은 같다는 성질이 있죠?? (이름은 기억이 안나네요^^)
      두 센서가 각기 다른 곳에 있어도 큰 영향은 없습니다. 단지, 두 센서가 바라보는 방향에 대한 초기각을 좀.. 잘 설정해야겠지만 말이죠^^

  4. mijong 2011.03.06 15:56 신고

    ㅎㅎ 안녕하세요 저기 질문 이있는데요 자이로센서의 드리프트를 저주파영역으로 보고

    가속도 센서의 병진운동및 adc 노이즈를 고주파영역이라 나누는 기준이 뭐인가요??

    그리고 로우페스 필터랑 하이페스 필터를 따로 설계한뒤 다시 합쳐준게 보정 필터인가요???

    또 혹시 죄송한데 하이패스 필터 로우페스 필터 포스팅하신거 있으신가요??

    • BlogIcon PinkWink 2011.03.07 08:54 신고

      음.. 초창기엔 저도 그렇게 설명했는데, 요즘은 다르게 표현한답니다. 고주파영역에서 자이로센서가 응답특성이 좋기 때문에 하이패스필터를 사용하고, 저주파영역에서는 가속도센서가 응답특성이 좋기 때문에 로우패스필터를 사용하는 것입니다. 그 둘을 합쳐서 사용하겠다는 개념이 이 글에서 소개한 상보필터(complementary filter)로 이를 C로 구현하는 것은 제가 블로그에서 소개를 했습니다.

  5. BlogIcon 나의별 2011.03.24 11:59 신고

    안드로이드 갤탭내의 자이로 값 Y(heading), X(pitch), Z(yaw)를 읽어와서 누적하면서 값의 변화량을 보면, Pitch값이 0이나 90도에 가까이 있는 상태에서 좌우 회전 시킬 경우, heading값이 좌/우 90도로 회전 합니다. Z값의 변화는 거의 없고요.
    당연히 이는 각속도가 roll 값인 heading에만 발생해서 그런것 같은데,...

    X축 pitch를 30도 정도 기울인상태에서 90도로 회전 시킬경우,
    X축 Pich는 30도 Y축 heading에는 -63도 Z축 yaw에는 -60도의 변화가 발생합니다.

    X축을 tilt각으로 고정이라 가정할경우, Y-Z 축 상에서의 변화량인 Y와 Z의 크기인 norm을 구할 경우,
    sqrt(Y^2 + Z^2) = 약 90도가 계산 됩니다.

    흐음 이게 자이로의 특성일까요?

    궁금하네요. ^ㅁ^;

    • BlogIcon PinkWink 2011.03.24 13:36 신고

      제가 볼때는 회전행렬의 개념을 적용해야하지 않을까합니다.
      pitch 30도로 기울이고, 난 후 roll 30도를 기울일때
      사람이 바라보는(절대좌표계)입장에서 roll변화와
      그 물체입장에서(상대좌표계)입장에서 바라보는 roll변화는 값이 다릅니다.
      정확하게는 잘 모르겠습니다만, 주신 질문으로는 일단 그렇게 생각이 듭니다만...

  6. mijong 2011.06.16 21:09 신고

    허억 이런 메트랩으로 돌렷는데 왜 따라가질 못할까요??
    저번엔 잘나왓엇는데...

  7. BlogIcon 샤인hermit 2011.07.12 20:42 신고

    질문 있는데요~ 실례가 되지 않는다면 제품 만드실때 혹시 센서들의 측정값에 대한 인증은 받으셨는지 물어봐도 될까요..ㅋ
    인증 받으셨다면 인증기관은 어디로 하셔서 인증받았는지도 궁금합니다.
    아니면 걍 자체적으로 테스트하셨다면 테스트용 장비로는 무엇을 쓰셨나요?
    블로그에 나와있는 엔코더만 사용하셨는지 궁금합니다.

    • BlogIcon PinkWink 2011.07.12 08:10 신고

      외부기관을 통해 인증받은 적은 없습니다. 그리고 모든 센서의 성능을 (전자파, 전기안전, 녹색기반. 등등이 아니라 성능 자체) 인증받는 기관이 있다는 것도 이상합니다.^^. 다양항 환경에서 자체 테스트를 수행한 것입니다.^^

    • BlogIcon 샤인hermit 2011.07.12 20:42 신고

      ^ㅆ^ 답변 갑사드립니다~
      잇힝...자작해서 엔코더를 쓰는수밖에 없겠군요

    • BlogIcon PinkWink 2011.07.13 07:50 신고

      네.... 하여간 역시 참값과의 비교가 필요하니 말이죠...^^

  8. sigrece 2011.08.11 11:07 신고

    위의 보상필터를 사용한 결과를 보면 Gyro_ADC는 차이가 없는데 Gyro_SPI의 경우 보상 필터 사용전과 후의 진폭이 다른 것을 발견할 수 있습니다. 보상필터 사용 후의 진폭이 더 커지는 것을 발견할 수 있는데요 저도 똑같이 구현해서 동작을 시켜보니 진폭이 더 커지는 것을 발견할 수 있었습니다. 왜 그런지 잘 모르겠습니다. 별 문제가 아닌것 같으면서도 밸런싱로봇이 잘 안서는거 보면 문제인거 같기도 한데요...

    • BlogIcon PinkWink 2011.08.11 11:34 신고

      제가 당시 밸런싱로봇에 사용했던것은 아날로그타입의 출력을 가지는 NT-Gyro300이었을 겁니다. (해당글에서 확인하시면 됩니다.) 그리고, 저는 자이로 사용전 참값이라고 믿을 수 있는 엔코더의 차분치와 비교하여 자이로의 결과값을 엔코더 차분치와 맞추는 작업을 수행한 후에 밸런싱로봇에 적용했습니다. 물론 가속도센서에서 얻은 각도도, 가속도센서가 에러가 나지 않는 상황에서 엔코더와 비교하여 일치시키는 작업을 수행했습니다. 이 포스팅은 단지 상보필터의 결과를 보여주는 것이어서 차이가 좀 발생했지만, 그냥 그대로 두고 포스팅을 했습니다.

    • sigrece 2011.08.11 14:50 신고

      답변 감사합니다~
      먼저 엔코더와 크기를 맞추는 작업을 해야겠네요 ㅎㅎ
      답변이 너무 빨라서 놀랐네요 ㅎㅎ;;

    • BlogIcon PinkWink 2011.08.12 09:31 신고

      네... 성공하시길 빕니다.^^

  9. aquinasv 2011.10.05 06:54 신고

    안녕하세요. 전 이쪽계통에서는 아무것도 모르는 문외한입니다.
    단지 자이로 센서(내지는 IMU) 보드를 가지고 자이로 카메라 마운트를 만들고 싶은데요.
    어디에서도 이건 팔지를 않더군요.
    귀사에 제품중에서 어떤 부품들을 조합해야 만들수 있는지 좀 알고 싶어서 문의드립니다.
    참고로 제가 이것저것 조합해서 만들어봤는데요. Youtube에 동영상을 올려봤습니다.

    문제는 제가 이쪽은 전혀 문외한이기떄문에 GS-1 (dunehaven.com/gs1_std.htm)
    이라는 자이로센서비슷한것이 내장된 서보모터를 달았습니다.
    (실제 자이로센서가 들어있지는않고 분해를 해보니 서보모터 안에 중심을잡는 스위치비슷한게 들어있더라구요)
    근데 문제는 이게 기울어지고 시간이 약 1초지나면 자꾸 가운데로 다시 움직이는게 문제거든요.
    계속 기울어진 각도를 유지하지 못하는거죠. 제대로 된 걸 만들고 싶어서 연락드립니다.
    참고로 전 미국에 살고 있습니다. 오토바이에 장착해서 쓰려고 합니다.
    여기저기 이걸 만들고 싶어하는 친구가 많아서 제가 한번 만들어보구 싶은 욕심에 이렇게 글을 올립니다.
    대충 여기저기 살펴보니까 myGyro300spi 도 필요하고 서보모터 제어모듈도 필요한거 같은데.
    어떻게 연결해야 하는지 잘 모르거든요.

    어떤 부품을 구매해야 하는지 좀 자세하게 알려주시면 좋겠습니다.

    그리고 컴퓨터에서 프로그래밍을 해야하는건지 어떤것을 공부해야 하는지도 좀 알구 싶구요.
    일자무식이 밑도 끝도 없이 질문을 해서 죄송하구요.
    아무튼 답변 부탁드리겠습니다.

    • BlogIcon PinkWink 2011.10.05 08:25 신고

      일단 자이로센서만 내장되어있군요.
      순전히 제 생각이지만, 이 모터는 순간적인 속도변화를 잡아주는 역활을 하는 것이 아닐까 생각합니다.
      현실적으로 소형 MEMS 자이로만 가지고, motion을 모두 잡을 수 없습니다. 그러니까 속도변화가 갑자기 일어나면 정해진 방향으로 회전하도록 되어있지 않나 하는 생각을 합니다.

      나머지 질문은 상당히 광범위한 질문입니다.

      통상 제대로 된 각도 추정은 자이로센서+가속도센서를 가지고 두 센서를 융합해서 사용합니다. 그렇게 각도를 추출하고 나면, 다시 구동하는 모터(DC 든 BLDC 든)의 위치제어가 필요합니다. 당연히 여기서, 모터 드라이버 뿐만 아니라, 위치 제어기도 필요하게 됩니다. 물론 아주 저속이고 환경변수가 그리 어렵지 않다면, 위치 제어기는 간단히 P 혹은 PI 제어기만으로도 구현될 수 있으며, 그 제어기를 구하는것도 단순히 try-and-again으로 쉽게 구할 수도... 혹은 아닐 수도 있습니다.

      제가 드린 답변처럼 질문하신 내용은 아주 광범위한 질문으로 저역시 이렇게 밖에는 답변을 드릴 수가 없습니다.

  10. Odometry 2012.05.06 17:41 신고

    안녕하세요 덕분에 많은걸 배우고 갑니다
    지금 제가 구해야하는건 오도메트리 인데...
    3축 가속도 성분과 3축 각도(roll pitch yaw)를 알고 있는 상태에서 이를 이용해
    3축 방향 속도-> 3축 방향 위치를 어떻게 표현할 수 있을까요?
    단순히 로테이션 메트릭스로 글로벌한 좌표계로 바꿔 가속도를 적분, 또 적분하면
    바이어스 때문에 도저히 원하는 결과가 나오질 않습니다.

    가속도 데이터에 잡음이 있는데 왠만히 큰 가속도를 주지 않는 이상 그 잡음에 섞여버리는것 같네요
    또한 계속 적분을 해야하는데 당연히 누적오차가 발생하니... 대책이..

    혹시 가속도와 각속도로 각도를 구한것 처럼
    현재 속도라도.. 속도를 어느정도 오차없이 구할 수 있는 방법이 있을까요 ㅠㅠ??

    • BlogIcon PinkWink 2012.05.07 09:16 신고

      결국 거리를 담당하는건 가속도센서뿐이라는 것인데요.
      물론 각종 논문들을 보면 다양한 방법으로 가속도센서만 가지고 거리를 잡는 경우를 보여주고 있습니다. 그러나 대다수는 온도라는 변수를 사용해서 결국은 가속도+온도센서를 융합하고 있고, 그렇지 않다고 하더라도 에러가 많이 줄었다 혹은 특정한 환경에서 좋아졌다는 내용일 뿐입니다.
      저가의 MEMS형 가속도센서만 가지고 한번 적분하는 속도도 정확하지 않습니다. 결국 실외라면 GPS를 실내라면 LPS등의 센서를 사용해서 보정하셔야하지 않을까합니다.

  11. 김성훈 2012.09.11 14:34 신고

    roll, pitch 각 tilt 측정 범위가 -90 ~ 90 도로 나오는데 -180 ~ 180도로 나오게는 할 수 없나요?

    • BlogIcon PinkWink 2012.09.12 09:05 신고

      물론 가능합니다. 자이로쪽은 상관없고, 가속도센서에서 각도를 만드는 부분을 잘 만들면 됩니다.
      일반적인 상용화제품중에 180도까지 되는 아이들이 있습니다.
      제가 만들때는, 용도가 180도까지 가지 않을거라고 보았고,
      또, 90도 경계를 지나갈때 오차가 다른 구간보다 컸기때문이었습니다.

  12. dowdow 2013.11.03 21:37 신고

    제가 3축 가속도센서와 3축 자이로 센서를 이용해서 Roll Pitch Yaw를 구하려고 하는데요.
    Yaw 값을 구할 때 가속도 센서의 z축 값으로 구해도 되는거죠?
    실험 하신거보니 자이로센서 2개를 이용해서 Yaw값을 구하신거 같아서요.

    • BlogIcon PinkWink 2013.11.03 22:58 신고

      3축 자이로와 3축 가속도를 가지고는 Yaw-Pitch-Roll을 검출 하기 아주 어렵습니다. Yaw를 검출하기 위해서는 별도의 센서(일반적으로는 지자기센서)를 하나 더 사용하셔야 합니다.

  13. dowdow 2013.11.04 14:44 신고

    3축 가속도 지자기 통합센서에 3축 자이로 센서를 사용하고 있습니다.
    pitch와 roll은 가속도와 자이로센서로 보상필터 이용해서 쉽게 구해지는데
    Yaw값은 지자계 센서의 데이터를 atan(Y/X) 만 해주면 되는건가요? 필터 사용이 필요가 없나요?

    • BlogIcon PinkWink 2013.11.04 17:42 신고

      x축 중심으로 회전하는 각도인 Roll을 알기위해 자이로에서 x축 중심회전 각속도와 가속도센서의 z축과 x축을 일반적으로 사용하죠.
      그런데 yaw를 알기 위해서는 가속도센서를 사용하는것은(pitch와 roll이 0도라면)의미가 없어집니다. 이때 지자기센서의 출력값을 자이로와 함께 사용하게 됩니다.
      그런데 일반적이라면 지자기 센서만 해도 각도가 잘 나오니까 마치 필터가 필요없는듯 보일수도 있는데요.
      사실 지자기센서는 주변의 자기성분에 엄청 영향을 많이 받습니다. 그래서 역시 필터가 필요합니다.

    • dowdow 2013.11.05 16:29 신고

      필터가 필요하다면 혹시 보상필터로도 적용이 가능한가요?
      가속도데이터 대신에 지자기센서의 각도를 넣어서 측정하면 되는 건가요?? 어제 한번 자이로값과 지자기값 엔코더각도 데이터 얻어서
      파라미터 추정하고 프로세서에 적용해봤는데 드리프트가 발생해서요.
      제가 잘 못한건지 궁금합니다. ㅜ

    • BlogIcon PinkWink 2013.11.05 18:07 신고

      글쎄요. 상보필터는 주파수 특성이 다른 두 결과를 융합하는거라 실제 가속도센서와는 다른 설계값을 찾아야할겁니다.
      아니면 아예 칼만을 적용해보는것도 괜찮다고들 하더군요.

    • dowdow 2013.11.06 21:03 신고

      그렇다면 칼만을 찾아봐야겠네요.
      그래도 블로그에 와서 많은 것을 배워갑니다.
      모르는게 너무 많아서 질문이 잦을 듯 하네요 ㅎㅎ;;
      감사드립니다~!!

    • BlogIcon PinkWink 2013.11.07 08:54 신고

      네.. 저도 칼만은 사용해보지 않았답니다.^^

  14. CKJ 2014.02.26 23:20 신고

    안녕하세요. 센서 공부하면서 들어왔는데 정말 많은 자료를 오픈해두셔서 잘 보았습니다.
    질문이 하나 있는데요, 저는 자이로와 인클리노미터로 각속도를 구하고자 합니다.
    인클리노미터에서 나오는 각도가 1차 low pass filtering을 하고, 자이로에서는 1차 high pass filtering을 합니다.
    그리고 각도가 LPF를 지나고 나온 후 미분해서 나온 각속도와 자이로가 HPF를 지나고 나온 각속도를 더해줘서 각속도를 받아봤는데 자이로에서 그냥 바로 받은 신호보다 잡음이 심해졌는데 이게 왜 이런지 모르겠네요.. LPF와 HPF의 time constant는 cutoff freq.를 0.1Hz로 해서 계산한겁니다. cutoff를 바꿔보아도 잡음 범위같은게 변하긴 하지만 도저히 잡히지가 않아서 질문드립니다. 어디가 잘못됬는지 궁금합니다.


    inclinometer -- LPF ------------------------- ∑ ------ 각도
    └----- 미분 ----- ↑ --┐
    ┌~~~~적분~~~~~ ┘ ↓
    gyro -- HPF ------------------------------- ∑ 각속도 ; 여기 각속도에서 신호가 잡음이 심하게 보여서요..

    그림이 이해되셨으면 좋겠습니다. 부탁드릴게요.

    • BlogIcon PinkWink 2014.02.27 09:02 신고

      상보필터는 센서의 특성에 따라 정해지게 됩니다.
      일단 각속도를 측정하고자 하셨다는데, 그러면 자이로 하나만 가지고 측정이 가능한데.. 왜 구지 필터를 쓸려고 하시나요?
      그리고 혹시 각도를 측정할려고 한다면 인클리노메타 하나면 될텐데, 왜 자이로랑 융합할려고 하셨나요? 혹시 인클리노메타가 응답속도가 늦어서 그러셨나요??

  15. 보상필터라는게 2014.05.29 14:42 신고

    보상필터라는게 정확히 어떤 역활을 하는 것인가요?
    그 오차값을 줄여나가도록 피드백 하는 역활을 하는 건가요?ㅠㅠ

    • BlogIcon PinkWink 2014.05.29 19:06 신고

      보상이 아니라 상보입니다. 상보필터라고 하고 영문으로는 complementary filter라고 합니다. 주파수 특성이 다른 두 센서를 서로 보완한다는 의미이지요.

  16. 임동준 2014.05.31 17:59 신고

    안녕하세요
    자이로센서와 가속도센서를 이용해서 인체 모션캡쳐를 하려고 합니다.
    말씀하신데로 상보필터를 사용하면
    동적인 상황에서도 각도를 구할 수 있게되는지 궁금합니다.
    시간이 되신다면 자세히 알려주시면 큰도움이 될 것 같습니다.
    ehdwns0817@daum.net 으로 답변 부탁드리겠습니다.

  17. 임동준 2014.06.01 15:55 신고

    동적인 상황에서 각도를 구할 수 있다는 건가요..??

    • BlogIcon PinkWink 2014.06.01 19:44 신고

      그렇습니다만.. 방금 댓글에서 이야기했듯이 가속도성분이 얼마나 큰가에 따라 성능의 차이가 좀 나겠지요. 그리고 정확한것은 확답하기 쉽지 않습니다. 동적인 상황이라는 것도 얼마나 열악한 상황인가에 따라 다르니까요...

  18. 임동준 2014.06.01 22:50 신고

    질문 답변에 감사합니다.
    조언 덕분에 자이로 센서를 이용하여 각도를 알아내는 것 까진 성공했습니다.
    앞으로 헤쳐나가야할 길이 멀기때문에 많은 도움 부탁 드리겠습니다.^^
    감사합니다.

    • BlogIcon PinkWink 2014.06.02 11:50 신고

      제가 도움을 드린건 없어 보이는데요.
      아마 본 문의 글과 여러 자료를 공부하시면서 성공하신듯합니다.
      의외로 성공하고 나면 그다음부터는 일사천리로 또 진행되지요..
      화이팅입니다.^^

  19. 임동준 2014.06.02 18:55 신고

    상보 필터를 구현할때 세타값을 구하는 식이 이해가 잘안갑니다 ㅠㅠ
    1/s는 적분을 하는것을 말하는 건가요??

  20. 임동준 2014.06.02 19:40 신고

    자이로센서는 센서의 기울어짐을 유지할 때의 각을 보여주지만 각도가 조금씩 더해지거나 작아지고,
    가속도 센서는 센서의 기울어질때는 각을 구하지만 기울어짐을 유지하면 각을 알 수 가 없는데
    이 두 데이터를 합치면 동적인 상황에서 혹은 정적인 상황에서의 각을 구할 수 있는 것이 맞나요??

    • BlogIcon PinkWink 2014.06.02 23:51 신고

      솔직히 말씀드리자면.. 저는 계속 사용하시는 동적인? 정적인?의 의미를 모르겠습니다. (단어뜻말구요.) 그리고 질문의 의미도 ....

      아무튼 다시 표현하면
      자이로센서는 각속도를 출력하는 센서이고 이를 적분해서 각도를 얻어야하는데, 적분의 오차가 누적되어 제대로된 각도를 얻기가 어렵습니다.
      가속도센서는 가속도성분으로 각도를 구할 수 있지만, 병진운동 성분이 인가되는 순간 구한 각도가 틀렸을 확률이 높습니다.
      상보필터(혹은 많은 필터들이)는 이 둘을 융합해서 각도를 구하는 것입니다. 상보필터는 여기서 약간의 단점이 가속도성분이 크면 각도를 구하는데 조금 어렵지만, 제가 포스팅한 글 어디에서 이야기했듯이 밸런싱 로봇 정도 제어하는데는 문제가 없었습니다.

  21. PEACE 2017.01.30 20:11 신고

    안녕하세요 안드로이드에서
    자이로 센서와 가속 센서를 통해
    상보필터 적용 후 각도 측정을 하고있습니다.
    자이로의 오차 누적과 가속의 큰 변화에 대한 보정을 하려고 본 글의 상보필터를 공부하고 적용해봤습니다.

    일단 본 글을 읽으며
    s는 자이로센서를 적분할 시간으로 이해하여 0.02로 설정해주었고
    Kp와 Ki의 의미는 자이로와 가속도 센서의 측정 각의 성비로 쓰인다 이해하여 합은 1
    Kp=0.95, Ki=0.05로 설정해주었습니다.
    (의문점이 있었는데 각속도에 1/s을 왜 곱해주는지 모르겠습니다. 적분이라면 s를 곱하는것 아닌가요?.. 이해가 덜되었나봅니다 .. 구원 해주세효..)

    제 실험에서 발견한 문제는
    위 상보필터의 공식을 사용하여 자이로 센서의 오차 누적은 보정이되었는데,
    적은 각도 범위에서 빠르게 회전시킬때 각이 커지는.. 가속도 센서의 본래의 한계점이 보정이 안됩니다. Kp와 Ki값을 조정해 보았지만 그대로입니다.

    이 부분을 어찌 해결해야할지 모르겠습니다.
    도와주십시오!!

    • BlogIcon PinkWink 2017.01.31 05:52 신고

      음.. c로 구현하는 부분은 약간 설명이 간결하지는 않지만...
      http://pinkwink.kr/254
      에서 한 번 다루었었습니다.
      코드 전체를 제가 볼 수는 없으니 이 글을 참조로 다시 한 번 시도해보시는 것이 어떨까요....
      아 그리고...
      혹시나 하고... 1/s는 적분, s는 미분을 의미합니다. 단순히 시간간격을 의미하는 것이 아니구요^^ 단, 디지털이다보니... 적분대신에 누적합에 시간 Ts를 곱하는 거고, 미분대신 차분을 사용하는 것입니다.

    • BlogIcon PEACE- 2017.02.01 14:45 신고

      감사합니다. 처음 공부하다보니 급하니만큼 제대로 이해를 못하고 실험의 반복 중 입니다. 조금 더 핑크윙크님의 포스팅들을 열심히 보다보니 미지수 k에 대한 값들은 인코더를 통해 구해야하는 것을 알게됐지만, 아직도 s에 관해 정확히 이해가안됩니다.
      적분이 1/s을 곱한다는 것을 의미하여 공식 중 '닷_자이로_세타'에 '1/s'을 곱한 것이라면
      프로그램상에서는 1/s대신에
      현재.timestamp-이전.timestamp를 곱해도 된다는 말씀이신건가요~?

      그동안 적분할때엔 간단하게 이전 면적+(시간차*높이)의 개념으로 이해하고있었는데
      블록선도와 공식화한 공식을 보니 인테그랄(적분)을 하는데 왜 1/s를 곱하는 것인지 헷갈립니다.

    • BlogIcon PinkWink 2017.02.01 17:59 신고

      말씀하신 대로 하셔야 합니다. 단지 제가 설명을 1/s로 적분을 표현했을 뿐입니다. 위 답글에 단 링크를 유심히 봐주세요^^