이번에 태국학회에 다녀 왔습니다. 이번에 다녀온 학회에서 발표한 내용을 잠시 소개할까합니다. 주제는 가속도센서와 자이로센서를 이용한 각도추정인데요. 이미 이전에 [[프로젝트/HardwarePart] - 자이로센서를 이용한 각도 측정시 가속도센서로 보정하기]에서 말씀드린적이 있습니다. 그 내용에서 보정용 필터의 계수들을 최소자승법(least-square)[[공학기초/Theory] - [공업수학] 최소자승법 Least Square]로 도출하는 방법에 대해 이야기하는 것입니다. 




   가속도센서와 자이로센서를 이용한 기존의 각도 추정에 대한 정리 !  
 



위 그림은 자이로센서의 적분을 통해 각도를 추정할때 보정용으로 가속도센서에서 측정된 각도를 사용할때 많이 사용하는 보정방법중 하나입니다. 위 블럭을 식으로 꾸며보면,


인데요. 그 의미를 좀 명확히 알기 위해 식을 풀어보면

 
이 됩니다. 즉, 말로 이야기하면, 자이로를 적분한 각도에는 하이패스필터를 가속도센서에서 도출된 각도에는 로우패스필터가 장착된것입니다. 이 보정법이 정확하고도 아름답게 작동되는 환경은 좌우로 마구 흔들리는 환경이라도 그 평균은 거의 가속도센서의 값이 참값일때 가장 잘 작동됩니다.^^ (보통의 경우 대부분 그렇다고 할 수 있나요?^^)
 
그런데 위 필터의 계수인 Kp, Ki를 선정하는 것이 그리 쉽지는 않습니다. 무작정선정하면 또 안될거구요. 그래서 생각한것이 최소자승법입니다.



   필터계수를 구하는 체계적인 방법에 대한 고찰 !  
 


먼저 위 실험기구를 구성하구요. 자이로와 가속도센서를 장착하고, 센서의 성능을 확인하기 위해 엔코더를 설치했습니다. 자이로와 가속도센서만으로 각도를 검출하는데 문제가 있도록 하기위해([프로젝트/HardwarePart] - 가속도센서를 이용한 각도 측정과 그 한계[프로젝트/HardwarePart] - 자이로센서를 이용한 각도검출과 그 한계 참조) Arm부분과 Pole부분은 모두 회전을 허용하고 있습니다.

처음 필터 수식에서

 
엔코더에서 도출된 각도를 theta_e라고 두고 자이로 출력을 theta_g, 가속도센서에서의 출력을 theta_c라고 합니다.

 
그러면 위와 같이 미지수행렬(Kp, Ki)을 구성하고 나머지로 묶어낼수가 있게 됩니다.


그러면 위에서처럼 최소자승법을 사용할 수 있게 되는 것이지요이 때, A, B는


입니다. 
실험을 수행하고 얻은 계수는


입니다. 이를 다시 대입하여 성능을 확인해보니


참값과의 비교결과가 정말 잘 나오는 군요. 대략 한시간 이상을 실험해도 드리프트는 없습니다. 응답속도는 엔코더의 값을 해석하는 속도보다 대략 10ms정도 느립니다. 당연히 저희가 잡은 한 스테이트, 즉 샘플링타임이 10ms라 아마 한 스테이트정도의 응답이 늦게 나오는것 같네요^^ 

이 논문덕분에 즐거운 태국학회를 하고 왔네요^^



본 논문은 WASET (World Academy of Science, Engineering and Technology) 에 Volume 60, December 2009, ISSN: 2070-3724에 수록되었습니다.




   NT-ARSv1 (각도 측정, 자이로 센서 가속도 센서 이용, ARS, IMU) 
 
자이로 센서와 가속도 센서를 이용한 각도 측정의 어려움을 해결할 수 있는 ARS모듈로 낮은 가격과 작은 크기를 가지며, 금속 케이스가 있어 활용도가 높음. NT-ARSv1 : 관련페이지

 


http://pinkwink.kr/trackback/242 관련글 쓰기
  • 자이로와 가속도센서를 이용한 각도추정 필터를 C로 구현하기 Trackback from PinkWink's Blog 2010/02/10 12:37 [ DELETE ]

    예전에 자이로센서와 가속도센서를 이용한 각도추정 필터를 소개한 적이 있는데요. 그후 각도추정필터의 계수를 최소좌승법으로 구하는 방법을 다시 소개했었습니다. 그런데 방문하신 몇몇 분들께서 C-code로 다시 표현해달라는 이야기를 하셨는데요. 사실 포스팅을 해야겠다고 생각만 하고 미뤄두고 있었네요. 근데 결과를 보시면 정말 간단하다는 사실에 아마 경악을 금치 못하실 겁니다.^^. 일단 다시 그 보정 필터의 개념도를 보도록 하지요. 위에 있네요. 저 그림..

  • 일일신 2010/01/07 17:34

    제가 수학엔 잼병이라~~~~ ㅠ.ㅠ;
    간단한 C 코드라도 볼 수 있으면 정말 좋겠는데요...
    올려 주실 수 있나요??

    • PinkWink 2010/01/09 06:48

      필터부분을 말씀하시는건가요?
      실제 적용된 코드는 언제 제가 포스팅을 할려고 합니다..^^
      잠시 기둘려주세용^^

  • sens 2010/02/05 17:07

    필터부분정말 궁금합니다 ^ ^
    코드 올려 주신다니 목 빠지게 기다리고 있겠습니다 ^ ^

    • PinkWink 2010/02/06 06:26

      저런... 꼭 올려야겠네요...^^
      이렇게 기다리는 분이 계실지는 몰랐습니다..ㅜ.ㅜ

  • 2010/04/11 23:38

    비밀댓글입니다

    • PinkWink 2010/04/12 00:20

      자이로와 가속도센서 혹은 자이로와 기울기센서를 이용한 각도검출에서 제가 사용한 필터는 블로그에 올라와 있는것이 전부입니다. 그리고, 자이로만 테스트한 결과를 공개하였지만, 저도 드리프트가 있었습니다. 그래서 자이로만 사용하는 것을 일찍이 포기하고 다른방법을 찾았던 것인데요^^

      일단 자이로+가속도센서, 자이로+기울기센서 두 가지 방법을 모두 테스트를 해보시는 것이 좋을것 같습니다. snow님의 구현환경에서 무엇이 더 나을지 선택해야할테니까요^^

      그리고 제가 테스트했던 그 방법은 자이로의 출력인 각속도를 약간씩 조절해서 드리프트를 막겠다는 것입니다. (블럭의 흐름만 가지고 이야기한다면 말이지요....^^)

      좋은성과있기를 바랍니다.^^

  • 박재완 2010/04/17 01:04

    안녕하세요 매번 질문만 하는 부산대 박재완입니다.

    보통 실험후 x값과 y값을 알게되면 그 규칙성을 찾기위해
    최소자승법이나 칼만필터를 이용하는 것으로 알고 있습니다.
    최소자승법은 데이터값사이에서 오차를 고려해서 선형적으로 식을 추정해 내는것으로 이해가 되는데
    칼만필터는 아무리 검색해봐도 선형적인 또는 규칙성을 찾아내는 식을 표현한다기보다는
    미래에 나타날 오차를 추정한다 로만 나와 있어서
    이게 x값과 y값 사이에 규칙성을 찾는데 어떤 역할을 해내는지 도저히 이해가 안가네요

    무지의 늪에서 허우적대는 저를 구원해 주세요

    • PinkWink 2010/04/17 01:40

      ㅎㅎ 당연하지요. 제 블로그에 오시는 분들은 당연히 그냥 아는 사람이라서.. 질문할게 있어서... 가.. 가장 많지 않겠습니까...^^

      그러나 이번 질문에는 제가 답을 드리기가 어렵겠는데요^^ 다른 포스팅에도 비슷한 질문이 있는데, 제가 동일하게 답을 드렸거든요^^

      저는 칼만필터를 공부한 적이 없답니다. 물론 공부해야겠다고 생각은 하고 있는데.. 역시 생각만...ㅜ.ㅜ

  • 박재완 2010/04/17 15:57

    답변 감사합니다.

    하는 김에 자이로, 가속도, 기울기 세개를 동시에 써서

    즉, 자이로센서에 가속도센서와 속도가 느린 기울기센서를 2개다 보정을 해서 실험해보려 하는데요

    왜 이제껏 이런 실험이 없었는지궁금해서요..

    각도를 검출하는데 자이로와 가속도 센서만으로도 충분해서 그런걸까요??

    자이로 가속도 기울기 센서 이3개를 보정해서 쓰면 미련한 시도가 될까요??

    • PinkWink 2010/04/18 09:52

      글쎄요.. 왜 자료로 없는지는 모르겠지만
      해본 사람이 있었을 거라는건 확실하겠지요^^

      그리고 실제로 시도해보시면... 알겠지만...
      ^^;;;

      한번 해 보시는것도 나쁘지는 않을거라 생각합니다..^^

  • 박재완 2010/05/12 14:27

    제 문제가 A행렬에서 1/S 를 계산할수 없는건데

    라플라스 S값을 수식으로 계산하셨는지, 아니면 실험을 통해서

    1/S(쎄타인코더-쎄타가속도) 값을 계산하셨는지 궁금합니다.

    도움 부탁드립니다.

    • PinkWink 2010/05/12 14:32

      라플라스 표현법에서 1/s가 시간영역에서는 적분을 의미하니, 전 실험치를 적분해서 사용했지요^^

  • 박재완 2010/05/12 14:45

    천재이십니다!!!
    존경을 표합니다. 'ㅁ'

    • PinkWink 2010/05/12 14:49

      서..설마요... 저희 교수님게서는 제가 머리가 나쁘다고 항상 말씀하시는데요...ㅠㅠ

  • 돼지돌이 2010/06/03 19:35

    안녕하세요 ^^

    태국에서 논문을 발표하신 내용이, 이 테마와 밀접한 관련이 있는것 처럼 말씀하시는데요

    괜찮으시다면, pinkwink님의 논문 제목을 알고싶습니다.

    한번 읽어 보고 싶다는... 괜찮으시다면 좀 가르쳐 주세요 ^^a

    • PinkWink 2010/06/03 23:45

      글 하단에 첨부시켰습니다만....ㅜㅜ
      관광(^^)차 작성한 허덥한 내용입니다.
      그리고 본문과 논문은 큰 차이가 없습니다.

  • 재오리 2010/06/07 20:12

    안녕하세요 자이로 보정 필터를 다음과 같이 구성을 했습니다.

    FilterAngle = Kh*(FilterAngle + Gyrodata*ts) + Kl*AccAngle;

    여기서 FilterAngle은 보정된 각도, Gyrodata는 자이로의 출력데이터, ts는 샘플링 타임, AccAngle는 가속도 센서로 계산된 각도입니다.

    그리고 여기서 최소 자승법을 이용해서 Kh와 Kl값을 구하려고 합니다.

    그래서 식을 [EncAngle+Gyrodata*ts AccAngle]*[Kh Kl]' = [EncAngle]로 두고 최소 자승법을 이용했는데요 생각만큼 좋은 성능이 나오지가 않았습니다. 여기서 EncAngle은 엔코더로 계산된 각도값입니다.

    제가 최소자승법을 적용하는 방법이 잘못된 것인가요?

    • PinkWink 2010/06/07 23:11

      죄송합니다. 제가 처음 보는 형태의 필터인데요. 어떻게 구성되는 필터인가요??

  • 재오리 2010/06/08 16:05

    자이로 데이터는 하이패스 시키고 가속도 데이터는 로우패스 시키는 필터입니다. 단지 코드상으로 간략하게 표현이 된 상태입니다.

    실험해 봤을때 Kh=0.99, Kl=0.01로 주면 대체로 값이 잘나오는데 이를 최소제곱법으로 적용해 얻은 게인을 적용하면 좋은 결과가 나오지 않네요.

    위쪽에서 보는 FilterAngle(i) = Kh*[FilterAngle(i-1)+Gyrodata*ts] + Kl*AccAngle(i) 이부분에서 FilterAngle의 이전값을 사용하기 때문에 최소제곱법을 바로 적용하기 힘든 것인가요? 상관없을 것 같은데 어떻게 생각하세요? 참고한 자료 링크도 함께 올립니다. http://web.mit.edu/scolton/www/filter.pdf

    • PinkWink 2010/06/09 12:43

      네.. 일차필터였군요. 바로이해하질 못하고 연필로 좀 쓰면서 이했습니다. (머리가 원체 나빠놔서...ㅠㅠ)
      제가 최소좌승법을 말씀하신 1차필터에 적용한 결과 잘 적용이 되는것을 확인하였습니다.
      관련글을 포스팅해야겠다는 생각이 불현듯 드는군요^^
      하여간 결론은 이상이 없는데요...^^

  • 재오리 2010/06/09 13:27

    그렇습니까? 헉 역시 능력자이시군요 ㅎㅎ
    저도 어찌어찌 최소자승법을 적용해봤는데 맞는지 모르겠네요ㅋ
    염치 없지만 한가하실 때 관련글 포스팅 한 번 부탁드립니다. ㅋ;

    • PinkWink 2010/06/09 15:11

      다시 읽어보니 저의 댓글이 좀 건방졌습니다. 죄송합니다. ㅠㅠ. 그저 "재오리"님의 말씀을 확인을 했을 뿐입니다. "재오리"님 덕분에 논문 주제하나를 잡았습니다. 그래서 논문으로 한번 써볼까 생각중입니다. 필터의 차수별 장단점 비교 정도??? 뭐 실험을 좀 더 해봐야겠습니다만...ㅠㅠ
      그래서 논문이 완료될때까지는 포스팅을 살짝 미룰려고 합니다. 그래도 포스팅 하겠습니다. ^^

  • 조현우 2010/07/28 20:20

    아...좋은 정보인데 중간중간 사진이 안나와서 이해가 어렵네요
    저만 그럴까요? 흑 ㅠ

    • PinkWink 2010/07/29 08:26

      제 주위의 다른 PC들 몇대에서 점검해본결과 이상없이 사진이 잘 나오고 있는데요...ㅠㅠ

  • 조현우 2010/08/03 16:59

    안녕하세요~ 다른 컴퓨터로는 잘 나오던군요 >,<
    포스팅된걸 보면서 시뮬레이션을 하고 있는데요

    일단 3축 가속도 센서와 2축 자이로 센서를 이용하구 있구요
    최종적으로 3축에 작용하는 중력을 빼려고 각도를 먼저 구하고 있습니다.

    근데.. 이 필터를 사용하기 전에
    적분된 자이로 각도와 가속도(Z축을 기준으로 회전) 된 모습이 많이 다른데..
    원래 초기 값이 이렇게 이용되는건지 궁금합니다.

    그리고 위의 필터의 계수를 구하기 위해서 Encoder를 이용한
    참값을 통해 추정을 하셨는데..

    그런 이상적인 모델이 없는 상태에서는 계수를 구할수가 없는건가요?ㅠ

    정말 하면할수록 어려운 작업이네요 ㅋ

    점점 바보 같다는 생각이 듭니다. ㅠㅠ

    밑에는 참고하시라고 초기 각도 추정 시뮬레이션 결과를 첨부합니다.
    (메일이라서 주소가 좀 길어요 ㅠ)

    http://wwl319.hanmail.net/Mail-bin/view_submsg3.cgi?TM=jOi5o%2BGuQw1q4J6fZnrdsC7jtCRMdxSgrplW5kHY4Pf3b8wBPVvJPlbm1DZg7%2FvX0xQG70qur5i1qdHQqNRJiriO18UkLO00WmY0kSw%2BJhJ1zeUXGMWXSMCZ0Ovu5bsIKMDo1QynWrDSdsO%2B0kjD%2BHfwpf0uzYYNkFgcnzYvcHx%2FBbFai%2BqiyJWPFsrX5U9XJWQWVriX9eAOGTzFQZJcxgSie72YJmQ6Is8wSTSVjcz3SfNlRtky30LloTfBHfUDUiZO5FXxG18myTPsBmame4zSCg6sfMAskIgFZTE7eXOk6EiB%2FgK8wwQjt7RGp6qyvaDgQYD0sau6MKqgHRKDczSEe1KrpztP4bRv65i8E3IaJcCMK0171Aon645TrINhbeho0WfpzpGWnRfCHFDUxyJsF5gwsXydRcgaq4OOy7P91ukbPqzOjnUhMP8nFfLuTyD00%2BOsBMzAY4Gp1dKWQHNCcu5TAmNJH8tEiCApN5ss6vtNYV77ByGg4Ls%2FWzyanLkRyMagAxP01xkxT%2BizPn0O2x6uU%2BkVyG6lz%2F5GT5d%2ByswP0uHo0uX5dkLYSwES08HmFqXrS4p01xQvkwtsVw%3D%3D&MSGID=0000000000000NQ&pos=1014&bodylen=48184&realname=ex.jpg&downtype=&contenttype=image/jpeg&attnum=1&attid=0.1

    자이로의 결과 값을 한번 더 적분하면
    가속도를 이용한 각도와 비슷할것 같았는데

    전혀 엉뚱한 결과가 나오더군요 ㅠㅠ

    ////참고로
    Gyro는 Angle+=(Gyro_Y-Offset)*ScaleFacter*ts
    로 구해진거구요
    Acc_angle은 Atan(Acc_Y-center /Acc_Z)로 구해진 것입니다.
    라디안은 Degree로 바꿔줬구요 ^^

    • PinkWink 2010/08/04 06:10

      참값과 비교하지 않고 어떻게
      "저희의 각도 추정은 참 잘되고 있습니다..."
      라고 말할 수 있나요...??^^

      위의 내용이 좀 어려우시다면

      1차필터를 가지고 해보세요..

      http://pinkwink.kr/338

      미지수가 한개뿐이라... 테스트하기엔 괜찮으실겁니다.^^

  • 돼지돌이 2010/09/03 11:47

    안녕하세요 ^^
    오랫동안 손을 놓고 있다가; 다시 필터에 대해서 필요하게 되어서 위크님의 논문을 읽고 시도 했습니다. 음... 최소좌승법으로 하니... 추정속도가 많이 느리더군요...

    여기서 질문하나 있습니다. 추정은 아주 잘되는데요, 역시... 양날검과 같이 어려운점도 있습니다. 추정이 잘되면, 병진운동에 대한 센서 튀는 값 까지 따라간다... 그리고, 병진운동에 대해서 센서 튀는 값까지 잡으면, 추정하는 각이 많이 약하다 입니다.... 쩝;;;

    제가 설계를 잘못해서 그런가... 아니면, 이 부분에 대한것은 역시 풀어야 할 숙제로 남아 있으신 겁니까?! 궁금하네요;;;

    • PinkWink 2010/09/03 15:59

      전.. 제 블로그에 있는 방식과 같은 각도 추정 방법과 관련해서는 더이상 무언가를 진행할 생각이 없답니다. 현재 제가 사용하는 범위에서는 아주 만족스러운 결과가 나오거든요...^^

  • 죄임쓰 2010/11/11 10:42

    안녕하세요~ 열심히 관련글을 정독하고선 약간의 희망을 갖고 질문하나 올립니다.(아! 그 전에 멋진 글 감사합니다~^^*) 최소자승법으로 필터계수를 추정하기 전글(자이로센서를 이용한 각도 측정시 가속도센서로 보정하기)에서는 테스트할 때 진자를 손으로 잡은 부분과 다시 진자를 민 부분이 있던데 혹시 이 테스트에서도 그렇게 해 보셨나요? 손으로 잡고 있을때 결과가 전글보다 좋은지 궁금합니다. 제가 적용하고자 생각하는 곳은 차량 주행중 피치와 롤각을 얻어보고자 하거든요... 위와 같이 구현하면 가능하겠죠?ㅋ

    • PinkWink 2010/11/11 15:37

      네.. 여기서는 보이지 않았지만.. 그렇게 해보았습니다.
      좋은 성능을 가집니다.
      그러나 진동이 심한 경우 오차가 아주 심해질 수도 있습니다.
      일반적으로 논문을 검색해보면
      진동이 심해지는지 아닌지에 따라 필터계수를 능동적으로 변경하는 연구들이 많이 있습니다.^^

  • 죄임쓰 2010/11/11 17:37

    네.. 진동이 있을경우 오차가 심하다고 하니 조금 불안해지네요.. 진동이 심하다고 함은 병진운동 성분이 아니라 상하(연직방향)운동 성분을 의미하겠죠? 진동에 대해 필터계수를 능동적으로 바꾸는 논문을 검색해 봐야겠네요.. 혹시 아시는 논문 있으면 추천도 좀 부탁할게요.. 이쪽 프로젝트는 처음이라 맨땅에 해딩하고 있습니다!^^;;

    • PinkWink 2010/11/11 18:03

      글쎄요.. 예전에 대충보고 지나간거라 기억이 잘 나지 않습니다.
      위 글과 비슷한 필터를 찾으신다면
      complementary filter로 검색하셔서 최근것은 대다수 제가 말씀드린 기법을 사용한 것일 겁니다.

  • KCC 2010/11/15 01:32

    이곳에서 많은정보 얻어갑니다.. 감사합니다

    정말 궁굼한게 핑크윙크님 학부생 이신가요..?
    전공은 무엇이신지,,

    • PinkWink 2010/11/15 02:37

      네 감사합니다.
      작은 지방대학에서 이번에 박사학위를 취득할 예정입니다.
      많이 창피하지만, 이제야 졸업을 하게 되었네요..
      지금 졸업 논문을 준비중이라 아주 바쁘게 지내고 있어서 블로그 업데이트가 상당히 늦답니다..ㅠㅠ
      조금 더 기다려 주시면 좀 더 많은 내용으로 업데이트를 할 예정입니다.^^

  • mijong 2011/03/10 11:25

    도트 theta _e는 뭔가요??

    • PinkWink 2011/03/10 11:32

      본문에 분명 "엔코더에서 도출된 각도를 theta_e"이라고 했으니 dot이 붙었다면 그것을 미분(실제로는 차분)한 것이겠죠

  • mijong 2011/03/10 12:33

    이제 저두 자이로의 각속도 출력과 가속도 센서로 각도 출력 해보고 ..

    자이로 각속도를 타이머를 이용해서 각속도를 누적해서 각도를 출력하고

    엔코더는 아직 못구햇어요 ㅠㅠ;;;;

    아무튼 ki와 kp의 값을 구하는게 문제인데..

    일단 간단하게 출력된 값들중에 최소 10가지 데이터를 뽑아서

    각각 의 theta값에 대입한뒤 평균을 내서 윙크님이

    • PinkWink 2011/03/10 14:07

      이 글의 내용으로 각도값을 알려면.. MATLAB이나 혹은 엑셀을 사용하셔야할지도 모릅니다.

  • mijong 2011/03/10 12:33

    쓰신 값이랑 비교해 보려고 하거든요..
    이렇게 해도 되나요???

    그리고 만약에 이렇게 하면 1/s 는 어떻게 처리해 줘야하는지??

    • PinkWink 2011/03/10 14:08

      10개정도가 아니라.. 저는 전체 데이터를 가지고 작업했기때문에 대용량 데이터를 행렬로 저장해서 행렬연산을 한 것입니다. 그리고 1/s/는 적분을 의미합니다.

  • mijong 2011/03/10 12:39

    그리고 도트theta_e의 경우 차분이면 뭔가요?? 그러니까 원래식의 1/s가 없어지면서 미분하는건 알겟는데 실제 적으로 무슨 뜻인지 모르겟네요.. dot_theta
    g는 각속도라는 값이 있지만 도트 e는 뭔지?? 모르겟네요 ㅠㅠ

    • PinkWink 2011/03/10 14:09

      차분은 (현재값-이전값)/샘플시간 입니다.

  • mijong 2011/05/05 20:08

    ㅎㅎ 질문이있는데요
    혹시 자이로의 누적 되어 생기는 오차가 점점많아져 나중에 엔코더의 값이 0이나왓을때 자이로가 누적되서 약20도정도를 가르킨다면 이거는 값을 구하기 어려운가요?? 이 필터가 자이로의 누적도 보상해준거 아닌가요??

    • PinkWink 2011/05/06 08:22

      필터의 결과는 드리프트가 없어집니다. (잘 설계된경우^^)
      자이로만 적분했을때 발생하는 에러를
      가속도 센서를 이용해서 없애주는 거지요...
      그렇게 하라고 엔코더신호를 가지고
      파라미터 추정을 한 것이구요^^

  • BK 2011/07/31 14:14

    포스팅 해주신 것들이 많은 도움이 됐습니다 감사합니다!
    맡고 있는 프로젝트 보고서 쓸 시에 참고문헌에 넣고 싶은데
    혹시 위에 언급하신 직접 작성하신 논문 제목 좀 알 수 있을까요??

    • PinkWink 2011/07/31 14:44

      Proceedings of the IASTED International Conference
      November 24 - 26, 2010 Phuket, Thailand
      Modelling, Identification, and Control (AsiaMIC 2010)

      DESIGN OF FIRST ORDER COMPLEMENTARY FILTER
      USING THE LEAST SQUARE METHOD

      과 같은 학회의

      WHEELED MOBILE ROBOT CONTROL USING INERTIAL SENSOR

      입니다. 이건 뭐 내용은 그리 훌륭하게 잘 편집된 것이 아니라... 몹시 창피합니다만.... 실제 최소자승법을 설계한 것을 투고한 논문은

      Journal of Institute of Control, Robotics and Systems (2011) 17(2):1-6
      DOI:10.5302/J.ICROS.2011.17.2.1 ISSN:1976-5622 eISSN:2233-4335

      최소자승법을 이용한 상보필터의 설계
      Design of Complementary Filter using Least Square Method

      입니다.

    • BK 2011/08/01 12:30

      훌륭한 논문, 감사합니다!

    • PinkWink 2011/08/01 13:07

      반어법이시죠?.. 논문자체의 퀄리티가 그리 훌륭하지 않습니다.ㅠㅠ
      너~무~ 태국을 가고싶었다는... ㅋㅋㅋㅋ
      좋은 연구 되시길 바랍니다.^^

  • MinHo 2011/09/07 17:16

    궁금한게 있습니다. 여기서 보면 dot theta g는 gyro의 각속도값을 나타내나요? 각도로 만들어서 표현하나요? 논문자료에서도 보면 dot theta e가 있는데 이것은 encoder의 값을 미분해서 각속도 성분으로 만들어서 계산을 하는건가요? dot의 개념을 잘 모르겠네요 dot는 미분아닌가요? 각속도값 그대로 사용하라는 얘기인게 맞는가요?

    • PinkWink 2011/09/08 17:17

      dot의 의미는 단순히 시간에 대해 미분했다는 의미입니다.
      자이로센서는 원래 그 출력이 각속도니까.. 출력자체가 각도의 미분으로 표현을 한 것입니다. dot_theta_e는 엔코더에서 구한 각도를 미분했다는 의미입니다.

  • MinHo 2011/09/09 10:26

    그렇군요~저는 또 각속도를 미분했다는말인줄알고ㅎㅎ저는 어쩔수 없는 상황때문에 기울기센서로 각속도를 보정하는데 생각처럼 잘 안돼네요..기울기센서의 응답성이 너~~무 느려서... bandwidth가 1Hz....아주 죽을맛입니다..
    Rate의 응답성도 그리 빠르지가 못해서.. 뭔가 헤쳐나갈 방법이 없을까요?

    • PinkWink 2011/09/09 10:53

      칼만필터와 기울기센서로 검색을 하시면, 꽤 좋은 성능을 얻었다고 주장하는 논문을 볼 수 있더군요. (예전이라 제목은 기억이 가물거리네요...ㅠㅠ)
      그래도.. 시스템의 진동이 크지 않다면, 가속도센서가 나을텐데요.

  • MinHo 2011/09/09 12:59

    하드웨어는 변경이 불가능해서요..어쩔수없이 울며겨자먹기로 해야죠... 칼만필터 말만들어도 덜덜 되는데요ㅎㅎ

    • PinkWink 2011/09/10 15:00

      ㅎㅎ 저도 잘 모른답니다.^^ 아직도 학습단계라....^^

  • MinHo 2011/09/19 18:02

    지금 열심히 이것저것 하면서 테스트를 진행중입니다. 칼만필터는 제가 너무 몰라서 배열에 데이터넣고 반복적인 실험으로 최상의 값을 찾아서 넣을려고하고있습니다.. ^^;; 여기서 질문하나 보상필터가 온도에 따른 bias error도 보상가능합니까? 야외에서 실험하는도중 Kp,Ki값이 틀어진거같아서요 기본적인 rate의 에러만 보상하는 회로인가요? 온도보상은 안되는거같은데..그게 궁금합니다.

    • PinkWink 2011/09/19 18:24

      이 글에서는 온도보정을 하지 않습니다.
      당시 학교 연구실에서는 온도챔버를 가지고 있지 않았습니다.
      그래서 온도에 대한 보정 실험을 수행할 수가 없었습니다.ㅠㅠ

  • MinHo 2011/09/19 19:49

    아하 그렇군요...ㅠㅠ.. 요새같이 갑자기 날씨가 아침저녁으로 온도차가 크니까 값이 이상하게 나오더라고요 전 제가 코딩상 뭐가 문제가 있었나했죠...24시간을 기준으로 한번 데이터를 뽑아봐야겠네요 어차피 온도는 롱텀이니까 쭈~욱 받아봐야겠네요

    • PinkWink 2011/09/20 08:30

      네.. 온도차이가 급심한 환경이라면 온도에 대한 보정이 필요할 겁니다.^^

  • 샤인^hermit 2012/02/06 11:19

    안녕하세요 핑크윙크님...
    위에 있는 ki kp를 구하는 식을 매트랩으로 코딩하는 데 있어서
    제가 매트랩을 잘 못다루는 관계로 위의 식을 매트랩소스로 코딩을 하는데 한계에 부딪치고 있습니다.
    가능하다면 매트랩으로 코딩한 소스를 좀 얻을 수 있으면 감사드리겠습니다.
    레퍼런스로 사용하고 싶어서 그렇담니다.
    항상 좋은 자료 올려주셔서 감사드립니다.. _(_ _)_ 꾸벅

    • PinkWink 2012/02/07 08:29

      사실 알려드리는건 문제가 없는데 행렬식을 그대로 수식으로 꾸민거라 뭐 간단하답니다.
      function y = complementary2ndLS(theta_e, theta_c, dot_theta_e, gyro, ts)

      temp = (theta_e-theta_c);
      int_temp = cumsum(temp)*ts;

      A = [temp, int_temp];
      B = gyro - dot_theta_e;

      y = inv(A'*A)*A'*B;

      입니다
      여기서 theta_e는 엔코더에서 얻은 각도이고, theta_c는 가속도센서에서 얻은 각도입니다. ts는 샘플링타임이구요

      한번실험하고 전체를 행렬로 사용하고 있습니다.
      MATLAB 유저들이 전형적으로 사용하는 방법이지요^^

  • ljsSSS 2012/07/25 17:29

    안녕하세요.. 자이로 가속도 공부하고있는 대학생입니다.
    저위의 식대로 kp ki를 추정해보려고합니다.
    일단 자이로센서와 가속도 센서 모두 값은 제대로 출력이 되는것을 확인하였습니다
    저같은경우 NTC사의 자이로, 가속도를 사용하였구요. 가속도는 수평일때 z-y 각도를 atan 해서 45도가 정확히 나오고 기울이는대로 그 각도값이 매우 잘 나오고있습니다.(진동에 매우 민감하더군요 ㅠ)

    자이로 같은경우 수평일때0 이고 기울이면 -1 -2 -3 이런식으로 떨어지고 반대방향으로 기울이면 1 2 3 이런식으로 증가하지만 30초? 40초정도 작동하고있으면 오차값이 쌓이게 되어 값이 몇백으로 마구마구 증가하게 되어 기울여지는 정도를 보기 어려워집니다.


    이러한 상태.. 즉 가속도 , 자이로를 작동하는데까지 성공한상황에서 보상필터를 만들어보려고하는데
    kp ki를 추정하는 과정에서 굉장히 애를 먹고있습니다.
    저같은경우 엔코더 없이 자이로 따로 가속도 따로 켜서 값을 추정해내었는데
    위와 같은 방식으로 구하려고보니 theta_e 즉 엔코더가 없는 상황인데 그렇다면 어떤식으로
    kp ki를 추정해야 할지 막막합니다. 사실 엔코더가 뭔지도잘모르겠구요

    일단 수평값이 가속도는 45도 자이로는0 으로 시작하는데 kp ki를 추정하기 위해선
    두값이 비슷하게 나오도록 맞춰줘야 하는건가요?
    그리고 이런상황에서 보상필터를 짜기 위해 무엇을 참고하여 따라가면 좋을까요? ㅠ
    MCU는 아트메가128 , 프로그램은 코드비전을 사용하고있습니다.
    좋은 정보 감사합니다. ^^

    • PinkWink 2012/07/26 08:03

      상보필터에 대해서는 http://pinkwink.kr/254 에서 C로 구현하는 것에 대해 언급했습니다.
      각 센서의 사용은 아날로그타입을 사용하신다면 ADC정도면 될 것이고, 참값과 비교하는 실험을 수행하셔서 필터설계를 완료하셔야할 듯합니다. 엔코더나 여타 센서의 사용법은 인터넷에서 쉽게 얻을 수 있더군요.
      좋은 결과가 있으시길 바랍니다.

1 ... 13 14 15 16 17 18 19 20 21 ... 37