본문으로 바로가기

 최근에 가속도센서를 이용한 각도 측정과 그 한계에 대해 이야기 했었습니다. 그래서 회전각도 혹은 기울어진 각도를 검출하기 위해 대표적인 각속도센서인 자이로 센서를 테스트해보았습니다. (참고로 극도로 초보적인 테스트니까 혹시 자이로에 대해서 잘 아시는 분들은 안읽고 지나가셔도 된다는...^^) 먼저 대상으로 삼은 센서는 요즘 제가 부쩍 자주 들어가보는 Withrobot의 myGyro300SPI와 인터렉트의 NT-Gyro300이라는 두 제품입니다. 먼저 myGyro300SPI는 Analog Devices사의 ADIS16100을 모듈화한것이구요. NT-Gyro300은 InvenSense사의 IDG-300을 모듈화한 것입니다.


I. myGyro300SPI


 위에 보이는 myGyro300SPI는


제품사양에도 나와있듯이 칩의 윗쪽 방향 중심의 회전... 즉 칩입장에서 yaw 각속도 검출만 가능하며 +-300도/s의 측정범위를 가집니다. 그 출력값은 SPI통신으로 전송되고 필터를 내장하고 있습니다. 필터대역은 0.87Hz입니다. 이 대역을 모듈의 R,C를 바꾸어 변경가능하긴 한데, 만만치 않은 가격(10만원이 약간 안되는)의 제품을 간크게 뜯기엔 좀 어려워보입니다.^^


저부분도 약간은 아쉬움이 남는 부분인데, 3번핀에 5V를 인가해야하고, 3.3V대상 프로세서라면 동작전원을 4번핀에 별도로 3.3V를 인가해야합니다. 약간은 불편..(ㅜ.ㅜ).. 11,10,9번핀은 뭐 별도 내장되어있는 2개의 ADC를 위한것으로 일단은 사용하지 않을꺼니까 1번부터 8번만 연결하시면 됩니다.


위 계산처럼 만약 도/s의 단위라면 출력값에 0.3275를 rad/s라면 0.0057을 곱해서 사용하시면 됩니다. 아참 위의 3/5부분에서 3을 3.3으로 바꿔서 다시 계산하세요...ㅋㅋ^^


이전 가속도센서 테스트때도 사용한 그 기구부의 회전중심축에 자이로를 연결하고 엔코더의 출력에서 계산 각도를 샘플링타임 0.01초에 맞춰 미분(차분)해서 자이로와 비교했습니다. 위에 계산된 스케일펙터가 정확함을 알 수 있네요. 그러나~~ 참값인 파랑색을 뒤따라 나오는듯한 인상을 받습니다. 당연히 어떤 필터가 설계된 상태이니 시간지연은 어쩔 수 없는것일겁니다.

II. NT Gyro300


위의 NT-Gyro300은


핀배치도만 봐도 알 수 있듯이 아날로그출력을 가집니다. 일단 칩입장에서 피치와 롤각속도 두개를 검출할 수 있습니다. 뭐 아날로그 출력이니 전원, 그라운드 빼면 한축당 하나씩만 물려주면 되겠습니다.^^



위에 스케일펙터를 계산해 두었습니다. 그게 맞는지 엔코더의 미분치와 비교해보겠습니다.


뭐 대략 일치한다고 볼 수 있습니다. 그러나. myGyro300SPI에 비하면 어마어마한 노이즈를 가지고 있다는 사실을 알 수 있습니다. 저 노이즈를 가급적 시간지연없는 범위안에서 5개의 샘플링구간을 평균하는 것으로 다시 잡았습니다.


myGyro300SPI만큼은 아니지만 어느정도 노이즈가 잡힌듯 보입니다. 그러나 장점도 있습니다. 바로 시간지연이 얼마 없다는 것입니다. 두개의 각속도그래프와 엔코더의 미분치를 같이 놓고 보겠습니다.



III. 두 센서의 적분을 이용한 각도 검출

이제 적분해서 두 센서를 같이 비교해보겠습니다.


적분은 많이 사용하는 ZOH(Zero-Order Hold)로 보통 사각형의 넓이 구하기 입니다. 출력값에다가 샘플링타임(0.01초)을 곱해주면 됩니다. 파랑색 참값(엔코더)에 비하면 NT-Gyro300은 드리프트현상이 myGyro300SPI에 비하면 심하다는 사실을 확인할 수 있습니다. 그러나 시간지연측면에서는 당연한 이야기지만 그 반대입니다. 시간지연 정도는 참값(엔코더)에 비해 NT-Gyro300이 0.02초, myGyro300SPI가 0.13초입니다. 사실 100ms가 넘는 시간지연은 아무리 노이즈가 작다하더라도 좀 우울하다는 생각이듭니다. 물론 2족보행로봇과 같은 느린응답도 괜찮은 시스템의 경우는 괜찮겠지만, 저처럼 무인항공을 목표로하고 있다면 좀 난감하다고 말해야겠습니다. 그러나, 아직은 어떻게 될지 몰라서 둘다 계속 테스트를 해야겠습니다.

마지막으로 정지시 드리프트 정도를 보겠습니다.


역시 myGyro300SPI가 내장된 필터의 역활때문인지 훨씬 우수한 성능을 보여줍니다. 물론 온도센서에 대한 보상은 하지 않았습니다. 일단은 자이로 모듈자체의 성능이나 특성을 비교하고 싶었기 때문입니다. 그리고 온도센서를 이용한 보정이라 하더라도 충격에 대해 자이로의 측정범위를 넘어선다면 그걸 자이로만으로 해결하기는 어려워보입니다. 즉, 어차피 외부의 다른 센서를 이용해서 보정할 생각이기 때문에 그냥 ... 테스트했습니다. (절대 온도센서결과값을 SPI로 받는 부분이 이상하게 잘 안되서 말하는 핑계는 아닙니다... 흑흑)


댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 커피향기 2012.03.17 20:22

    근데 머하시는분이세용? 박사?너무똑똑하네여~~

  3. 광분한버팔로 2012.04.15 14:17

    안녕하세요 자이로센서에 대해 검색하다가 우연히 들어오게 되었습니다.
    제가 4학년인데요. 종합설계라는 명목하에 '센서테스트베드'제작을 하게 되었습니다.
    아직은 초반이라 많이 모르지만 많은 도움 받고 가요^^
    자주 올께요 ㅎㅎ

  4. LimDJ 2012.06.26 22:51

    안녕하세요~
    지금 쿼드콥터를 졸업작품으로 만들고 있는 한밭대학교 4학년 학생입니다. 2학년때부터 세그웨이며... 이것저것 제어에 관련된 글을 많이 보면서 공부했는데요... 4학년이 되니 이제야 이해가 조금씩 가네요 -.-;; 하하하

    일단 궁금한점 이렇게 질문 올립니다. 혹시나 싶어 댓글에 저랑 비슷한 상황이 있나 싶어서 읽어봤는데요...
    음... 비슷한게 없어서 질문드려요..

    일단 제가 쓰는 프로세서는 ATmega128 입니다. ATmega128의 경우 5V 동작에 ADC가 10bit 라서 1bit가 감지할수 있는 전압이 5000mV / 1024bit = 4.8828125mV/bit 가 됩니다.
    그런데 여기서 쓰는 NT-Gyro300의 감도 자체가 2mV/도/sec 인데요.. 이렇게 되면

    약 5mV로 감지하는 AVR이 2mV로 센서값을 주는 센서랑 만나는 경우 각도 추출이 제대로 될지 의문입니다...
    지금 실제로 가속도 센서의 각도값과 각속도에서 나온 것을 적분해서 하니.. 오차가 너무 심하네요 ㅠㅠ
    드리프트 현상을 줄이기 위해서 일종에 필터를 거쳤습니다. 가만히 있어도 진동하는 값을 임의로 뺐습니다.
    (포스팅한것에서 이동평균법을 해서 다시 해 볼 생각입니다!! 일단은 질문 봐주세요 ^-^;;)

    그렇게 해서 짜여진 프로그램이 다음과 같은데요(while문 안에서 ADC가 일어납니다.)
    #define gyro_x_filter 1 // 자이로 필터 값
    {
    temp = 302 - read_adc(0); // 302는 reference 값이고 - read_adc(0)은 ADC0번 이용한겂니다.
    if( gyro_x_filter+1 >= temp && temp >= -gyro_x_filter ) temp = 0; // 값이 진동을해서 이렇게 거쳐서 했구요
    gyro_roll_x = temp; // 각속도 값을 넣고
    gyro_x = gyro_roll_x * 0.00244140625; // 위 줄은 각속도 bit값을 각도 바꾸는 값입니다.
    }
    gyro_val[bit] * ( 5000[mV] / 1024[bit]) * (1[도/sec] / 2[mV]) * 0.001[sec,샘플링타임] = 0.00244140625
    이렇게 해서 나왔습니다.

    이렇게 해서 1ms 타이머를 가지는 TIM0 카운터에 프로그램은
    {
    theta_gyro += gyro_x;
    }
    여기서 적분형태로 되어서 더해 집니다.

    질문1. 각도가 가속도 센서에서 얻은값이 30도면 자이로에서 얻은값은 50도, 60도->100도, 90도->150도 이렇게 나오는데요... 이 문제의 가장 큰 원인이 무엇일까요?ㅠㅠ 스케일 펙터가 잘못된건가요?;;

    질문2. 개선을 하려면 어떻게 하는게 좋을까요?( 프로세서를 바꾸기는 힘들어서요... 센서중에 P0-GMD-20-01)이 있는데요 3축 각속도 출력을 SPI로 하는데 이걸로 해야할까요?)

    질문이 엄청 길어졌네요 ^-^;
    으 바쁘신 와중이라도 도와주시면 정말 감사하겠습니당!!

    • BlogIcon PinkWink 2012.06.27 09:27 신고

      먼저 스케일팩터가 이상하네요. 너무 작아요.ㅠㅠ.
      제 생각에는 4.XX 정도의 값이 나오지 않을까 하는데요.
      만약 도/sec로 단위를 보신다면 말이죠.
      그리고, 자이로의 ADC 센터값을 302로 보셨는데, 여기도 다시 실햄해 보실 필요가 있습니다. 1024의 센터는 512인데, 302까지 내려갔다면 실험을 통해 얻으신건가요?
      일단,
      MEMS 자이로센서의 BIAS값과, SCALE-FACTOR를 구하는 것은 가장중요합니다.
      그런데 한가지... 그냥 적분해서 각도만 볼려고 하지 마시고, 자이로의 출력을 도/sec 든 rad/sec든, 자신의 출력값인 각속도 그대로를 참값과 가까운지 확인하셔야합니다.
      저도 위에 참값인증 그래프를 올려두었습니다만,
      각속도(센서의 출력)가 참에 가까운지 아닌지를 확인하며 검증하는 동안,
      스케일팩터도, 센서의 바이어스 수치도 모두 잡힐 겁니다. 제가 실험해본결과 스케일팩터마저 조금씩 바뀌더군요ㅠㅠ
      그럼 좋은 결과 있으시길 빕니다.^^

  5. DY 2012.07.23 20:14

    안녕하세요. 초보적인 질문 하나 올려도 될까요 ?ㅠ
    제가 마이크로마우스를 하면서 마우스에 자이로를 쓸려고 합니다. 회전각을 구하기위해 쓸려고 합니다. 자이로센서를 회전을 할때에만 동작하도록 설계를 해 놓으면 오차는 생겨도 그 오차가 계속 누적되진 않겠지요 ?? 물론 회전의 유무를 판별하는 정보는 다른 곳에서 받습니다.
    아 그리고 하나더 질문이있습니다ㅠ가속도 센서로 물체가 이동한거리를 계산하도록 만들고 싶은데 아무리 인터넷을 뒤져봐도 확실히 나오는게 없습니다...혹시 아시는것이 있으면 조언좀 부탁드립니다 !!

    • BlogIcon PinkWink 2012.07.24 10:15 신고

      Yaw각 회전을 자이로만으로 측정하시면 자이로의 각속도를 적분해야할텐데요. 그러면 비싼 자이로가 아니면 오차누적현상은 생깁니다. 저렴한 MEMS형을 사용하실거라면, 보정용 센서가 하나더 필요하실겁니다. 물론 필터도 설계되어야하구요.
      그리고, 가속도센서로 이동거리를 잡는것도 역시 아주 어렵습니다.
      가속도센서의 출력인 가속도를 한번적분 속도, 다시한번적분 위치.. 즉 두 번이나 적분하셔야하는데요.
      한번만 적분해서 각도를 얻는 자이로도 오차누적으로 고생하는데, 두번이나 적분하는 건 아주 어렵다고 보셔야합니다.
      마이크로마우스라면, 어차피 슬립이 거의 없다면, 차라리 바퀴의 이동각도를 거리로 환산하시는게 더 정확할겁니다.

  6. mslayer 2012.08.21 13:39

    안녕하세요. 혹시 기억하실지 모르겠습니다만 병원에서 연구용으로 자이로센서를 사용한다고 말씀드렸던 사람입니다. 또 막히는 부분이 있어 이렇게 질문드립니다. ^^;

    이전 질문에서 '그래도 기준이 되는 참값이 필요하다'라고 답을 주셨었는데요, 뒤늦게 optical analysis와 저희 자이로 센서 사이에 비교를 해보았습니다.

    그랬더니 자이로센서로 얻은 결과가 터무니없이 크게 나왔었습니다. 그래서 제작사에 문의를 하니 3축의 자이로센서와 가속도 센서의 값을 fusion해야 비슷하게 나올 거라는 답을 주었습니다. 그리고 검색을 해보니 핑크윙크 님께서 상보 필터로 논문을 쓰신 것도 나오고, 칼만 필터 이야기도 나오고 그러더군요.

    제가 궁금한 점은, 좀 엉뚱합니다만, 상보 필터를 적용하는 것이 이렇게 논문을 쓸 정도로 복잡한 과정이 필요한지... 입니다. 즉 정형화된 코드가 없는지에 대해서 여쭈고 싶습니다.

    • BlogIcon PinkWink 2012.08.21 16:21 신고

      상보필터 자체에 대한 내용으로 적은 논문이 아니라 어떻게 하면 상보필터를 잘 설계할 것인가에 관한 논문입니다.
      제 블로그에서 1차, 2차 필터에 대해 C로 구현하는 방법이 소개되어있는데, 그것을 사용하시면, 구현에는 큰 무리가 없습니다. 또한, 간단히 차단주파수를 설정하면, 아주 쉽게 필터 계수를 확립할 수 있습니다.

  7. mslayer 2012.08.21 19:20

    감사합니다. 제가 문외한인지라, 저희가 모방하려는 논문의 세팅을 기준으로 좀 더 여쭤보려고 합니다.

    이 사람들은 2nd order band pass filter를 사용했습니다. (0.5~5Hz) 논문 본문에는 complementary filter를 사용했다는 말이 없는데, 저자에게 문의를 하니 accelerometer 결과와 gyrosensor 결과를 fusion했다고 하고, 자기는 칼만 필터는 써보지 않았다고 대답해서 아마도 상보 필터를 사용한 것 같습니다. (게다가 저에게 읽어보라고 보내준 논문도 상보 필터였습니다. 나름 성의를 보여준 셈인데 저에겐 읽을 수 없는 암호문이었습니다;)

    1. 핑크 윙크 님께서 말씀하신 차단 주파수라는 말이 무엇인지 잘 모르겠는데요, 혹시 위의 세팅에서 0.5~5Hz에 해당하는 뜻인지요.

    2. 제가 무식하나마 이해한 걸로는 상보 필터에서 얻어지는 각도는 'high pass filter를 적용한 gyrosensor 각도 + low pass filter를 적용한 accelerometer 각도'인 것 같습니다. 그런데 저희 결과는 모두 3축인데요, 그럼

    '3축 gyrosensor 결과를 하나의 값으로 바꿈 --> high pass filter 적용
    3축 accelerometer 결과를 하나의 값으로 바꿈 --> low pass filter 적용' 이런 것인가요, 아니면

    '(x축 gyro 결과' x high pass filter 적용) + (x 축 accelero결과' x low pass filter 적용) 이렇게 한 축 마다 값을 구해서 하나로 합치는 것인지 궁금합니다.

    • BlogIcon PinkWink 2012.08.22 09:38 신고

      http://pinkwink.kr/78 에서 보시면, 중간쯤 high/low pass 필터가 있습니다. 이 둘을 더했을때 '1'이 되어야만 합니다. 상보필터에서 가장 중요한 부분이며 필터의 안정성을 확보하는 부분입니다. 이 조건만 맞으면, 됩니다.
      그러나 각 축별로 모두 상보필터를 걸어야합니다. yaw, pitch, roll 각각 필터가 설계되어야합니다. 문제는 그렇게 되면, 각도가 일그러지게 되는데, 이를 오일러변환을 통해 3차원에서 잡아야합니다.
      그러나, 칼만의 경우는 바로 한번에 나타나도록 설계가 가능합니다. 물론 상보필터의 경우도 수식으로 표현하면 가능합니다만, ㅠㅠ.

  8. 2012.08.21 22:06

    비밀댓글입니다

    • BlogIcon PinkWink 2012.08.22 09:44 신고

      정말 쉽게, 칼만이든 상보든 아무것도 모르는 상태에서 쉽게 접근할 수 있는 교재가 http://pinkwink.kr/451 에서 제가 소개한 적이 있습니다. 이 책을 보시면, 아주 쉽게 잘 설명되어있어서, 바로 적용이 가능하실 겁니다. 칼만필터 책입니다만, 상보필터도 다루고 있습니다.
      그리고, http://devicemart.co.kr/goods/view.php?seq=31082 제가 만들거나, 제가 일하는 회사에서 만든건 아닙니다만, 위 제품을 구매하면, 소스코드를 CD에 담아서 줍니다. 그 소스코드를 열람하면, 많은 정보를 얻으실수있을겁니다.
      마지막으로, 아직도 말씀하신것만 들었을때는 약간 개념을 잘못 잡고 계신것이 아닌가 하는 생각이 듭니다.
      기본적으로는 자이로센서를 적분하면 각도를 얻을 수 있습니다.
      3축의 회전각도를 얻고 싶으시다면, 당연히 3축자이로센서를 사용하면 됩니다. 그러나, MEMS형 값싼 자이로들은 오차가 심합니다. 결국 보정해야하는데요.
      x,y축 중심의 회전각도를 측정하기 위해서 보정용 센서로는 3축 가속도센서가 딱입니다.
      그러나, z축 중심, 즉 yaw각은 안됩니다. 가속도센서로 yaw변화량을 읽을 수 없기 때문입니다.
      그래서 하나의 센서가 더 필요합니다. 통상 지자기센서를 사용합니다. 그런데 이 지자기센서는 오차가 너무 크고, 오류가 많습니다. 사용상 주의를 좀 하셔야할겁니다.

  9. mslayer 2012.08.22 10:47

    어떻게 보면 한심한 부탁이었는데도 자세한 답변 감사드립니다. 책과 기계를 사서 공부를 좀 더 해보는 것이 좋겠군요.

    사실 제가 얻고 싶은 것은 엄밀히 3축의 회전각도는 아닙니다. 손가락에 센서를 걸고 움직이면 3축에 대한 데이터가 다 나올텐데요, 저희가 관심이 있는 것은 손가락 관절이 얼마나 움직이냐 하는 것입니다. 3축 회전각도 세 가지를 통해서 이런 각도를 구할 수 있는 방법이 있는지는 모르겠습니다만, 이 주제를 시작했을 때는 찾지 못했고, 결국 x 축에 대한 회전각도만 얻었던 것입니다. x축 회전 각도로만 계산한 논문이 있기도 했구요. 이 무시무시한 오차를 발견하기 전까지는 논문을 쓰려고 준비 중이었습니다. 지금은 x축에 대한 자이로 센서 값 + 가속도 센서 보정으로 이 오차를 수정해보려고 하고 있습니다.

    • BlogIcon PinkWink 2012.08.23 09:26 신고

      몇 천원에서 몇 만원짜리는 일반적으로 필터를 설계해도 1-2도 정도 오차가 납니다.
      이것이 본 주제가 아니라면, 상용으로 판매되는 제품을 사용하는 것이 무리가 없어보이는데요. 그렇진 않은 모양이네요.
      그래도 상보필터의 경우는 기존의 필터들 중에서는 상당히 쉬운편이기 때문에 좋은 성과가 있으실것 같습니다.
      화이팅입니다.

  10. mslayer 2012.08.22 20:41

    아; 한 가지만 더 여쭤보려고 합니다. 제가 병원에서 일하고 있는 것은 이미 말씀드렸고, 센서를 환자 분들 손가락에 묶어서 x 축 각속도를 얻어보고 있습니다. 그런데, 이걸 적분해보면, 어떤 사람은 -40~20도 사이에서 왔다 갔다하고, 어떤 경우에는 20도~80도 사이를 움직입니다. 사실 가장 낮은 값에서 가장 큰 값의 간격은 둘 다 똑같은데 말이죠. 지금까지는 둘 다 간격은 똑같으니까.. 하면서 넘어갔는데요, 생각해보니 좀 이상한 느낌이라 질문드립니다. 센서가 이상한 걸까요?

    • BlogIcon PinkWink 2012.08.23 09:33 신고

      어떤 자이로를 사용하셨는지 모르겠습니다만,
      MEMS형 자이로의 경우 유명한 오류가 몇개 있습니다. 그 중에서, 원래 각속도가 0인 기준점을 잠아야하는데, 이 기준점이 전원을 인가할때마다 조금씩 다르다는 것과, 온도에 따라, 측정되는 각속도 값이 조금씩 변한다는 것이 문제인데요. 정확한 원인은 저도 잘 모르겠네요.
      만약 몇 백만원 이상의 가격을 가진 센서라면 꽤 괜찮은 필터가 이미 내장되어 있을겁니다.
      혹은 자이로의 값을 신뢰할 수 있을 수준의 성능이던지요.
      간단히 실험을 한번 해보시죠.
      각도기 바로 앞에 두시고, 몇 십번 정도 0도에서 45도사이를 움직이며 각도 변화량을 한 번 체크해보시는게 어떨지요.(간단하니까요)

  11. ballbot 2013.05.15 02:15

    안녕하세요, 항상 블로그 잘 보고 있습니다.
    여쭤볼게 있는데요, 제가 쓰는 자이로 센서가 값이 x축은 -2.xx에서 (xx의 진폭이 조금 큽니다.) y, z축은 0.xx에서 진폭을 하는데요. 원래 이렇게 떨림이 있나요?? 이경우에 상보필터를 적용하려면 자이로의 offset값을 찾기위해 이동평균필터를 써야하나요?? pink님이 이곳에 추천해주신 책을 보고 상보필터를 적용해봤는데요, 가만히 있어도 각도값이 아주 조금씩 증가합니다. 그리고 혹시 그 책을 보셨는지 모르겠지만, 흠 최종 각이 각 X 0.001해서 나오네요. 이건 크게 상관없는건가요? 1000곱하면 각도니.. 이것도 왜그런지 모르겠네요.
    가장 궁금한점이 자이로 값이 원래 가만히 있어도 떨리는지와 이 경우에 칼만 또는 상보필터를 적용하려면 자이로값의 떨림을 제거한 후에 적용해야 하는건지가 궁금합니다.

    • BlogIcon PinkWink 2013.05.16 09:00 신고

      offset 즉 bias된 수치를 조금 더 정확히 아실려면 한 몇 초간 센서를 정지시키고, 그때 들어온 수치들을 평균을 내보면 됩니다. 그러면 bias정도는 알 수 있습니다. 그리고 저가의 MEMS들은 원래 노이즈가 극심합니다. 특히 정지했을때는요. 움직이면 좀 괜찮아지구요.
      샘플주기가 1ms라면 5ms정도 구간을 이동평균을 사용하시거나 혹은 저역통과필터를 사용하시면 괜찮을 겁니다. 그 후 신호를 가지고 상보필터를 적용해보시면 또한 괜찮을 겁니다.

  12. nalma 2014.02.10 20:11

    안녕하세요. 블로그 정말 잘보고있습니다 ㅎ
    다름이 아니라 제가 P0-GMD-20-01 디지털 3축 자이로 센서를 사용하고 있는데요
    이 데이터시트에 ADC의 분해능이 나오질않아서 질문을 드립니다.
    스케일 펙터를 구할때
    스케일펙터 = 출력전압/ADC분해능/센세티비티
    이렇게 알고있는데요
    ADC분해능을 알수 없다면 어떻게 계산을 해주어야하죠??
    디지털로 출력되는 센서에서의 각속도 구하는 공식도
    아날로그 일때랑 동일한건가요??

    • BlogIcon PinkWink 2014.02.11 14:41 신고

      ADC 분해능은 센서가 아니라 ADC 분해를 하는 쪽 ... 그러니까 MCU쪽을 보셔야합니다. 10비트로 분해한다면 1024가 분해능이 되는거죠. 그건 사용자가 알아야하는 것입니다.

  13. nalma 2014.02.11 16:21

    흠 센서자체가 디지털 값을 출력하는데도 ADC를 봐줘야하는건가요???
    센서 자체가 디지털값을 출력하는데 이 디지털값이 각속도값인지 뭔지 잘 모르겠네요 ㅠㅠ
    제가 영어를 못해서 그러는지 데이터 시트를 찾아봤을때 16bit의 디지털값이 출력된다는데 이 출력되는 값이
    각속도인지 뭔지 나와있질 않아서요...
    그래서 그냥 적분을 해주어 봤는데 이 적분해준 값도 이상하게 나오네요...
    계산값 = 이전계산값 + (측정값 * dt) 이렇게 해서 각도로 만들어주는거 아닌가요??

    • BlogIcon PinkWink 2014.02.11 18:46 신고

      댓글을 달았다가 변경했습니다. 다시 말씀드려야겠네요.
      데이터시트에 Sensitivity가 나타나 있네요.
      250으로 스케일을 정하면
      8.75 mdps/digit 로 나타나 있네요...
      한 비트당 0.00875 degree/second 라고 합니다.

  14. 김기욤 2014.04.11 12:54

    안녕하세요 자이로 센서 공부하는 학생인데요ㅠㅠㅠ
    LPY530AL MEMS motion sensor를 사용하고있고 자이로 센서를 이용해서 각도를 실시간으로 어떻게 변하는지 보고싶은데 아무리 위에글을 읽어도 각도 추출하는 계산방법을 잘모르겠어서요ㅠㅠ
    공식으로 좀 알려주실수 있을까요..?ㅠㅠㅠㅠ

    • BlogIcon PinkWink 2014.04.14 10:23 신고

      자이로에서 각도는 단순 적분입니다 단 여러가지 필터를 적용하겠다면 상황은 달라집니다만 단순하게는 적분입니ㅏ

  15. opkicc 2014.05.13 03:57

    안녕하세요 컴퓨터전공하는 학생인데요 혹시 자이로센서 pitch각 값을 출력할수 있는 방법이 있을까요?

    • BlogIcon PinkWink 2014.05.14 12:31 신고

      피치든 롤이든 하나의 각도라면 제가 상보필터로 올려논 글이 있습니다. 블로그 상단 오른쪽 검색창에서 상보필터라고 검색해 보시면 됩니다.

  16. BlogIcon 김찬섭 2014.07.21 00:28

    안녕하세요 ? 저는 이번에 센서의 값 출력에 대해 공부하고있는 학생입니다.
    사실 이번에 처음하는 공부이다보니 아무것도 몰라서 질문드립니다 ㅠㅠ
    제가 사용하는 보드는 msp430f5529 이구요. 여기에 I2C통신 방식이 있고,
    자이로센서는 ITG-3200을 사용하고 있습니다.

    I2C통신을 이용하여 x,y,z 에 해당하는 값을 센서에서 msp로 전송하게 했는데요

    104 , -25 , 100 이런식으로 해당하는 변수에 어떤 값이 나왔는데

    이 값이 의미하는 것이 무엇인지 모르겠습니다. 어떤게 잘나온 값인지 오차의 의미는 무엇인지
    오차가 있으려면 원래 기준값이 있어야 할텐데요..
    매우 기초적인 지식이 부족해서 어떻게 알 수 있을까요?..

    • BlogIcon PinkWink 2014.07.21 08:49 신고

      데이터 시트를 가지고 살짝 계산을 해야합니다.
      출력된 값이 가지는 의미는 데이터 시트에 나와 있으니까요.
      제가 본문에서 계산하듯이
      전압으로 출력된 값(혹은 아닐 수도 있습니다)을 rad/sec로 환산해야하는 거죠.

  17. BlogIcon 김찬섭 2014.07.21 20:48

    답변 너무 감사드립니다.
    제가 쓰는 센서가 10 dof IMU sensor에 부착되있는 자이로 센서 ITG-3200을 사용하고 있는데 데이터 시트지에 보면 ADC로 변환이 된 값이 출력이 됩니다. 2진수의 디지털 숫자로 나왔는데 이것을 10진수로 변환한 것이지요. 제가 문외한에 언어실력도 부족한지라 ㅠㅠ
    제가 드리고 싶은 질문은 처음 각도를 구할 때, 온도의 영향도 고려해야 한다고 해서 이 센서에 온도센서도 내장되어있는 것을 가지고 앞 강좌에 작성하신 '자이로센서에 온도값 고려하기' 편에 나온 공식
    현재 각속도 = 자이로 출력 + (2048 - 현재 자이로 온도) *0.8 을 이용해 각속도를 구하고 이 값을 계속 누적해서 적분해나가면 그 면적이 각도가 되는 것인지 궁급합니다.
    또한 적분을 계속하면 시간이 지나면 값이 계속 커지는데 90도라하면 어떻게 90도를 유지 하는 것인가요?.
    그렇게 각도를 구하고 나서는 자이로 센서만 이용하여 구하면 시간이 갈수록 오차가 커져서 가속도 센서로 보완을 해줘야하는데 가속도 센서는 진자운동에 대해 오차가 심해서 자이로 센서로 서로 보완을 해야한다고 알고있고, 이때 상보 필터가 필요한 것으로 알고 있습니다.
    여기서 상보 필터를 설계한다는 것이 수식으로 계산된 결과를 속도 출력에 집어 넣어서 측정값을 다시 얻게 하는 것인지요??..
    물고기를 잡는 방법을 알고 싶습니다 ㅠ.ㅠ 어떻게든 가능하다면 혼자 해보고 싶은데 엄두가 안나네요..
    제어계측 책도 보고, 구글링도 여러 번 해서 봐도 결국 비슷한 내용인거 같은데 머릿속은 하얗네요...
    제가 이번 방학 목표가 쿼드콥터를 날려보는 것이라서.. 우선..조립이랑 I2C통신정도만 할줄 아는 단계이구요. 남은 한달 밤새 불태울 의지는 있습니다!. 현재는 자이로 센서에서만 일주일째 아무것도 못하고 있고.. 앞으로 PID 제어라던지 그런부분도 해야하는 걸로 알고있는데 참고 서적 추천해줄 만한 것이 있는지 궁금합니다.

    모르는 것을 적다보니 질문이 너무 길어진것 같네요 ㅠㅠ 읽어주셔서 감사합니다.

    • BlogIcon PinkWink 2014.07.21 23:51 신고

      http://pinkwink.kr/451
      에서 소개한 책을 한 번 보시길 바랍니다.
      그리고 제가 온도 이야기를 했던 글은 잘못된 글인듯 하다고 초반에 적어두었습니다.
      일단 자이로 신호가 정확한지 참값(이라고 믿을만한)과 비교가 필요합니다.
      거기서 시작되지요.

  18. BlogIcon 김찬섭 2014.07.22 13:56

    하하 감사합니다.
    위에 언급해놓은 공식은 잘못된 것이지만 과정은 맞는 것인지요?
    저렇게 센서의 값을 도출한 후에 칼만필터를 공부헤서 적용해야되는 건가요???

    • BlogIcon PinkWink 2014.07.23 09:20 신고

      아니요 온도 신경쓰지마시고

      일단 출력된 자이로신호를 쓸만한 속도신호로 먼저 바꿔보세요
      그 다음 상보필터든 칼만필터든 쓸수있습니다

  19. 이진혁 2014.09.12 19:08

    안녕하십니까. 이런 부탁드리기 죄송하지만
    자이로센서 adc데이터부터 적분된 degree 까지
    c code좀 답글에 올려주실수 있나요?
    사용중인 자이로센서는 위와 같습니다.
    몇개월째 해매고있네요,, 부탁드립니다.

    gyro=(ADC-495)*1.6113;
    degree += gyro*dt;
    dt=0.01, 분해능은 1024 이고요,
    이렇게 했는데 값이 계속 증가하네요,,

    • BlogIcon PinkWink 2014.09.12 19:30 신고

      네... 본 글에서의 주제가 자이로센서의 출력을 단순히 적분하는 걸로는 각도 추정이 어렵다입니다. 코드는 큰 문제는 없어보이지만 원래 자이로는 그렇습니다. 그것을 보상하기 위해 칼만필터나 상보필터등을 사용합니다.

  20. 이경헌 2015.01.24 20:53

    안녕하세요. 윙크님~
    현재 자이로센서 각속도값을 받아 각도로 추출하려고 합니다. ① ②
    g_iq17_angle_gyro_x += _IQmpy(_IQmpy(_IQ(g_iq17_Volt_gyro_x) , _IQ(0.244140625)), _IQ(0.00080566));
    근데 여기서 ①: 스케일벡터 ②:샘플링주기인데...
    ①② .... 왜 곱해주고.. 어떻게 구하는거죠;;...

    • BlogIcon PinkWink 2015.01.25 09:58 신고

      아주 죄송스러운 말씀이지만... 제가 적은 본문의 글을 읽지 않으신듯합니다.ㅠㅠ.
      분몬에도 있지만... AD된 결과인 자이로의 출력을 각속도로 바꿔주기 위해 bit->rad/sec로 변환하는 것이 스케일팩터입니다. 그러니 곱해줘야죠.
      그리고 샘플링주기를 곱해주는 것은 적분하기 위해서입니다.

  21. 졸프 2020.04.17 01:49

    핑크윙크님 안녕하세요. 질문 있습니다.
    발사이의 각도를 측정해서 각도가 일정크기 이상 벌어지면 팔자걸음으로 인식하는 제품을 하나 만들려고하는데
    Imu센서로 가능하다고 보시나요? Imu센서 찾아보니까, 수평이 유지되지않으면 양 발의 각도를 측정하기가 현실적으로 불가능하다는데 이건 무슨말인지요 ..

    컴공을 하나도 몰라서 질문드립니당 ㅠㅠ