이번에 태국학회에 다녀 왔습니다. 이번에 다녀온 학회에서 발표한 내용을 잠시 소개할까합니다. 주제는 가속도센서와 자이로센서를 이용한 각도추정인데요. 이미 이전에 [[프로젝트/HardwarePart] - 자이로센서를 이용한 각도 측정시 가속도센서로 보정하기]에서 말씀드린적이 있습니다. 그 내용에서 보정용 필터의 계수들을 최소자승법(least-square)[[공학기초/Theory] - [공업수학] 최소자승법 Least Square]로 도출하는 방법에 대해 이야기하는 것입니다.
| 가속도센서와 자이로센서를 이용한 기존의 각도 추정에 대한 정리 ! |
위 그림은 자이로센서의 적분을 통해 각도를 추정할때 보정용으로 가속도센서에서 측정된 각도를 사용할때 많이 사용하는 보정방법중 하나입니다. 위 블럭을 식으로 꾸며보면,
이 됩니다. 즉, 말로 이야기하면, 자이로를 적분한 각도에는 하이패스필터를 가속도센서에서 도출된 각도에는 로우패스필터가 장착된것입니다. 이 보정법이 정확하고도 아름답게 작동되는 환경은 좌우로 마구 흔들리는 환경이라도 그 평균은 거의 가속도센서의 값이 참값일때 가장 잘 작동됩니다.^^ (보통의 경우 대부분 그렇다고 할 수 있나요?^^)
그런데 위 필터의 계수인 Kp, Ki를 선정하는 것이 그리 쉽지는 않습니다. 무작정선정하면 또 안될거구요. 그래서 생각한것이 최소자승법입니다.
| 필터계수를 구하는 체계적인 방법에 대한 고찰 ! |
먼저 위 실험기구를 구성하구요. 자이로와 가속도센서를 장착하고, 센서의 성능을 확인하기 위해 엔코더를 설치했습니다. 자이로와 가속도센서만으로 각도를 검출하는데 문제가 있도록 하기위해([프로젝트/HardwarePart] - 가속도센서를 이용한 각도 측정과 그 한계, [프로젝트/HardwarePart] - 자이로센서를 이용한 각도검출과 그 한계 참조) Arm부분과 Pole부분은 모두 회전을 허용하고 있습니다.
처음 필터 수식에서
그러면 위에서처럼 최소자승법을 사용할 수 있게 되는 것이지요이 때, A, B는
입니다.
실험을 수행하고 얻은 계수는
실험을 수행하고 얻은 계수는
입니다. 이를 다시 대입하여 성능을 확인해보니
참값과의 비교결과가 정말 잘 나오는 군요. 대략 한시간 이상을 실험해도 드리프트는 없습니다. 응답속도는 엔코더의 값을 해석하는 속도보다 대략 10ms정도 느립니다. 당연히 저희가 잡은 한 스테이트, 즉 샘플링타임이 10ms라 아마 한 스테이트정도의 응답이 늦게 나오는것 같네요^^
이 논문덕분에 즐거운 태국학회를 하고 왔네요^^
본 논문은 WASET (World Academy of Science, Engineering and Technology) 에 Volume 60, December 2009, ISSN: 2070-3724에 수록되었습니다. |
'프로젝트 > HardwarePart' 카테고리의 다른 글
| 자이로센서와 가속도센서를 이용한 각도추정 1차필터 (20) | 2010/07/03 |
|---|---|
| 자이로와 가속도센서를 이용한 각도추정 필터를 C로 구현하기 (70) | 2010/02/10 |
| 최소자승법을 이용한 각도추정 보정필터의 설계 (28) | 2010/01/01 |
| 자이로센서의 보정용으로서 가속도센서와 기울기센서의 성능비교 (0) | 2009/08/02 |
| 기울기센서 SA1 테스트 (8) | 2009/07/28 |
| 자이로 센서 Identification 선형특성 파악 (0) | 2009/07/23 |
| 쿼드콥터 장난감 하나를 구입하다... (8) | 2009/07/15 |
| 자이로 myGyro300SPI 통신문제 (보완질문) (2) | 2009/06/22 |
http://pinkwink.kr/trackback/242
-
자이로와 가속도센서를 이용한 각도추정 필터를 C로 구현하기
2010/02/10 12:37 Tracked from PinkWink's Blog 삭제예전에 자이로센서와 가속도센서를 이용한 각도추정 필터를 소개한 적이 있는데요. 그후 각도추정필터의 계수를 최소좌승법으로 구하는 방법을 다시 소개했었습니다. 그런데 방문하신 몇몇 분들께서 C-code로 다시 표현해달라는 이야기를 하셨는데요. 사실 포스팅을 해야겠다고 생각만 하고 미뤄두고 있었네요. 근데 결과를 보시면 정말 간단하다는 사실에 아마 경악을 금치 못하실 겁니다.^^. 일단 다시 그 보정 필터의 개념도를 보도록 하지요. 위에 있네요. 저 그림..




Design of angular estimator of inertial sensor using the le.pdf
댓글을 달아 주세요
제가 수학엔 잼병이라~~~~ ㅠ.ㅠ;
간단한 C 코드라도 볼 수 있으면 정말 좋겠는데요...
올려 주실 수 있나요??
필터부분을 말씀하시는건가요?
실제 적용된 코드는 언제 제가 포스팅을 할려고 합니다..^^
잠시 기둘려주세용^^
필터부분정말 궁금합니다 ^ ^
코드 올려 주신다니 목 빠지게 기다리고 있겠습니다 ^ ^
저런... 꼭 올려야겠네요...^^
이렇게 기다리는 분이 계실지는 몰랐습니다..ㅜ.ㅜ
비밀댓글 입니다
자이로와 가속도센서 혹은 자이로와 기울기센서를 이용한 각도검출에서 제가 사용한 필터는 블로그에 올라와 있는것이 전부입니다. 그리고, 자이로만 테스트한 결과를 공개하였지만, 저도 드리프트가 있었습니다. 그래서 자이로만 사용하는 것을 일찍이 포기하고 다른방법을 찾았던 것인데요^^
일단 자이로+가속도센서, 자이로+기울기센서 두 가지 방법을 모두 테스트를 해보시는 것이 좋을것 같습니다. snow님의 구현환경에서 무엇이 더 나을지 선택해야할테니까요^^
그리고 제가 테스트했던 그 방법은 자이로의 출력인 각속도를 약간씩 조절해서 드리프트를 막겠다는 것입니다. (블럭의 흐름만 가지고 이야기한다면 말이지요....^^)
좋은성과있기를 바랍니다.^^
안녕하세요 매번 질문만 하는 부산대 박재완입니다.
보통 실험후 x값과 y값을 알게되면 그 규칙성을 찾기위해
최소자승법이나 칼만필터를 이용하는 것으로 알고 있습니다.
최소자승법은 데이터값사이에서 오차를 고려해서 선형적으로 식을 추정해 내는것으로 이해가 되는데
칼만필터는 아무리 검색해봐도 선형적인 또는 규칙성을 찾아내는 식을 표현한다기보다는
미래에 나타날 오차를 추정한다 로만 나와 있어서
이게 x값과 y값 사이에 규칙성을 찾는데 어떤 역할을 해내는지 도저히 이해가 안가네요
무지의 늪에서 허우적대는 저를 구원해 주세요
ㅎㅎ 당연하지요. 제 블로그에 오시는 분들은 당연히 그냥 아는 사람이라서.. 질문할게 있어서... 가.. 가장 많지 않겠습니까...^^
그러나 이번 질문에는 제가 답을 드리기가 어렵겠는데요^^ 다른 포스팅에도 비슷한 질문이 있는데, 제가 동일하게 답을 드렸거든요^^
저는 칼만필터를 공부한 적이 없답니다. 물론 공부해야겠다고 생각은 하고 있는데.. 역시 생각만...ㅜ.ㅜ
답변 감사합니다.
하는 김에 자이로, 가속도, 기울기 세개를 동시에 써서
즉, 자이로센서에 가속도센서와 속도가 느린 기울기센서를 2개다 보정을 해서 실험해보려 하는데요
왜 이제껏 이런 실험이 없었는지궁금해서요..
각도를 검출하는데 자이로와 가속도 센서만으로도 충분해서 그런걸까요??
자이로 가속도 기울기 센서 이3개를 보정해서 쓰면 미련한 시도가 될까요??
글쎄요.. 왜 자료로 없는지는 모르겠지만
해본 사람이 있었을 거라는건 확실하겠지요^^
그리고 실제로 시도해보시면... 알겠지만...
^^;;;
한번 해 보시는것도 나쁘지는 않을거라 생각합니다..^^
제 문제가 A행렬에서 1/S 를 계산할수 없는건데
라플라스 S값을 수식으로 계산하셨는지, 아니면 실험을 통해서
1/S(쎄타인코더-쎄타가속도) 값을 계산하셨는지 궁금합니다.
도움 부탁드립니다.
라플라스 표현법에서 1/s가 시간영역에서는 적분을 의미하니, 전 실험치를 적분해서 사용했지요^^
천재이십니다!!!
존경을 표합니다. 'ㅁ'
서..설마요... 저희 교수님게서는 제가 머리가 나쁘다고 항상 말씀하시는데요...ㅠㅠ
안녕하세요 ^^
태국에서 논문을 발표하신 내용이, 이 테마와 밀접한 관련이 있는것 처럼 말씀하시는데요
괜찮으시다면, pinkwink님의 논문 제목을 알고싶습니다.
한번 읽어 보고 싶다는... 괜찮으시다면 좀 가르쳐 주세요 ^^a
글 하단에 첨부시켰습니다만....ㅜㅜ
관광(^^)차 작성한 허덥한 내용입니다.
그리고 본문과 논문은 큰 차이가 없습니다.
안녕하세요 자이로 보정 필터를 다음과 같이 구성을 했습니다.
FilterAngle = Kh*(FilterAngle + Gyrodata*ts) + Kl*AccAngle;
여기서 FilterAngle은 보정된 각도, Gyrodata는 자이로의 출력데이터, ts는 샘플링 타임, AccAngle는 가속도 센서로 계산된 각도입니다.
그리고 여기서 최소 자승법을 이용해서 Kh와 Kl값을 구하려고 합니다.
그래서 식을 [EncAngle+Gyrodata*ts AccAngle]*[Kh Kl]' = [EncAngle]로 두고 최소 자승법을 이용했는데요 생각만큼 좋은 성능이 나오지가 않았습니다. 여기서 EncAngle은 엔코더로 계산된 각도값입니다.
제가 최소자승법을 적용하는 방법이 잘못된 것인가요?
죄송합니다. 제가 처음 보는 형태의 필터인데요. 어떻게 구성되는 필터인가요??
자이로 데이터는 하이패스 시키고 가속도 데이터는 로우패스 시키는 필터입니다. 단지 코드상으로 간략하게 표현이 된 상태입니다.
실험해 봤을때 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
네.. 일차필터였군요. 바로이해하질 못하고 연필로 좀 쓰면서 이했습니다. (머리가 원체 나빠놔서...ㅠㅠ)
제가 최소좌승법을 말씀하신 1차필터에 적용한 결과 잘 적용이 되는것을 확인하였습니다.
관련글을 포스팅해야겠다는 생각이 불현듯 드는군요^^
하여간 결론은 이상이 없는데요...^^
그렇습니까? 헉 역시 능력자이시군요 ㅎㅎ
저도 어찌어찌 최소자승법을 적용해봤는데 맞는지 모르겠네요ㅋ
염치 없지만 한가하실 때 관련글 포스팅 한 번 부탁드립니다. ㅋ;
다시 읽어보니 저의 댓글이 좀 건방졌습니다. 죄송합니다. ㅠㅠ. 그저 "재오리"님의 말씀을 확인을 했을 뿐입니다. "재오리"님 덕분에 논문 주제하나를 잡았습니다. 그래서 논문으로 한번 써볼까 생각중입니다. 필터의 차수별 장단점 비교 정도??? 뭐 실험을 좀 더 해봐야겠습니다만...ㅠㅠ
그래서 논문이 완료될때까지는 포스팅을 살짝 미룰려고 합니다. 그래도 포스팅 하겠습니다. ^^
아...좋은 정보인데 중간중간 사진이 안나와서 이해가 어렵네요
저만 그럴까요? 흑 ㅠ
제 주위의 다른 PC들 몇대에서 점검해본결과 이상없이 사진이 잘 나오고 있는데요...ㅠㅠ
안녕하세요~ 다른 컴퓨터로는 잘 나오던군요 >,<
포스팅된걸 보면서 시뮬레이션을 하고 있는데요
일단 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로 바꿔줬구요 ^^
참값과 비교하지 않고 어떻게
"저희의 각도 추정은 참 잘되고 있습니다..."
라고 말할 수 있나요...??^^
위의 내용이 좀 어려우시다면
1차필터를 가지고 해보세요..
http://pinkwink.kr/338
미지수가 한개뿐이라... 테스트하기엔 괜찮으실겁니다.^^
안녕하세요 ^^
오랫동안 손을 놓고 있다가; 다시 필터에 대해서 필요하게 되어서 위크님의 논문을 읽고 시도 했습니다. 음... 최소좌승법으로 하니... 추정속도가 많이 느리더군요...
여기서 질문하나 있습니다. 추정은 아주 잘되는데요, 역시... 양날검과 같이 어려운점도 있습니다. 추정이 잘되면, 병진운동에 대한 센서 튀는 값 까지 따라간다... 그리고, 병진운동에 대해서 센서 튀는 값까지 잡으면, 추정하는 각이 많이 약하다 입니다.... 쩝;;;
제가 설계를 잘못해서 그런가... 아니면, 이 부분에 대한것은 역시 풀어야 할 숙제로 남아 있으신 겁니까?! 궁금하네요;;;
전.. 제 블로그에 있는 방식과 같은 각도 추정 방법과 관련해서는 더이상 무언가를 진행할 생각이 없답니다. 현재 제가 사용하는 범위에서는 아주 만족스러운 결과가 나오거든요...^^