검색결과 리스트
글
이미 가속도센서를 이용한 각도 측정과 그 한계에서 가속도센서에 병진운동 성분이 있다면 그 기울어진 각도는 가속도센서만으로는 추정할 수 없음을 이야기 했습니다. 또한, 자이로센서를 이용한 각도검출과 그 한계에서 자이로센서는 그 적분시 적분오차를 계속 누적해서 가져가기 때문에 또한 자이로센서만으로는 역시 기울기의 추정이 어렵다고 이야기했습니다. 물론, 자이로센서의 출력에 온도를 고려하기에서 온도보정을 잘 하면 그 적분오차에 의한 드리프트 현상을 상당히 막을 수 있다는 것을 실험해보았습니다. 그러나, 온도보정은 오차를 내지 않겠다, 즉 오차를 최소한으로 막아보겠다는것이지, 혹시 모르게 발생한 오차를 막아내지는 못합니다. 그래서 인터넷을 조금만 서치해보면 나오는 가속도 센서를 이용한 보정을 저도 한번 수행할려고 합니다. 원래 이 글은 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의 결과가 살짝 앞서서 나타나는 현상이 있습니다.
일단, 요기까지...^^
이번엔 센서부를 구성했습니다. 틈틈히 계속 테스트를 해서 동일조건에서 같은 결과가 나타나는지를 계속 확인해야하겠습니다.^^. 그래도 이제 어느정도 좋은 결과를 얻고 있다는 생각입니다. 남은 과제는 평면상에서의 회전은 그렇다 치고, 공간상에서의 회전을 측정해야하는데, 물론 지금의 결과로 그냥 확장하면 되겠지만, 항상 제가 궁금하게 생각하는것은 참값과의 비교입니다. 당연히 참값과 비교해서 오차는 얼만지 응답속도는 얼만지 알아야겠지요. 그런데 공간상에서는 엔코더를 사용하기가 좀 난감하네요... 어떻게 실험기구를 구상해야할지.ㅋ 난감~
NT-ARSv1 (각도 측정, 자이로 센서 가속도 센서 이용, ARS, IMU) |
'The Robot > HardwarePart' 카테고리의 다른 글
쿼드콥터 장난감 하나를 구입하다... (8) | 2009/07/15 |
---|---|
자이로 myGyro300SPI 통신문제 (보완질문) (2) | 2009/06/22 |
자이로센서 myGyro300SPI의 통신문제 해결 (3) | 2009/06/22 |
자이로센서를 이용한 각도 측정시 가속도센서로 보정하기 (108) | 2009/06/17 |
자이로센서의 출력에 온도를 고려하기 (21) | 2009/06/15 |
자이로센서를 이용한 각도검출과 그 한계 (112) | 2009/06/13 |
가속도센서를 이용한 각도 측정과 그 한계 (106) | 2009/06/09 |
[Cortex M3] 엔코더해석 결과를 일정시간간격으로 시리얼통신으로 전송하기 (40) | 2009/06/04 |
설정
트랙백
-
최소좌승법을 이용한 각도추정 보정필터의 설계
Trackback from PinkWink's Blog
2010/01/06 22:25
[ DELETE ]
이번에 태국학회에 다녀 왔습니다. 이번에 다녀온 학회에서 발표한 내용을 잠시 소개할까합니다. 주제는 가속도센서와 자이로센서를 이용한 각도추정인데요. 이미 이전에 [[프로젝트/HardwarePart] - 자이로센서를 이용한 각도 측정시 가속도센서로 보정하기]에서 말씀드린적이 있습니다. 그 내용에서 보정용 필터의 계수들을 최소좌승법(least-square)[[공학기초/Theory] - [공업수학] 최소좌승법 Least Square]로 도출하는 방법에 대..
-
자이로와 가속도센서를 이용한 각도추정 필터를 C로 구현하기
Trackback from PinkWink's Blog
2010/02/10 12:31
[ DELETE ]
예전에 자이로센서와 가속도센서를 이용한 각도추정 필터를 소개한 적이 있는데요. 그후 각도추정필터의 계수를 최소좌승법으로 구하는 방법을 다시 소개했었습니다. 그런데 방문하신 몇몇 분들께서 C-code로 다시 표현해달라는 이야기를 하셨는데요. 사실 포스팅을 해야겠다고 생각만 하고 미뤄두고 있었네요. 근데 결과를 보시면 정말 간단하다는 사실에 아마 경악을 금치 못하실 겁니다.^^. 일단 다시 그 보정 필터의 개념도를 보도록 하지요. 위에 있네요. 저 그림..
-
드디어 공들인 제품이 나옵니다. G.INS - ARS (관성항법장치)
Trackback from PinkWink's Blog
2011/04/08 13:26
[ DELETE ]
2011년 1월 17일... 이 날짜는 오랜기간 학교에서만 생활하던 제가 처음으로 입사한 날입니다. [관련글] 입사후 야심차게^^ ARS 모듈을 개발하고있었는데, 딱 2주쯤 후 설날연휴에 날짜도 깔끔하게 2011년 2월 1일에 오른쪽 다리가 그만 똑 하고 부러졌었죠...ㅠㅠ[관련글] 그럼에도불구하고, 설연휴를 꼬박 병원에 있고도 4일을 더 까먹고, 다시 출근을 감행한것이 2월11일이었습니다. 그리고, 회사 연구소의 많은 동료들과 함께 다시 개발에..
-
기울어진 각도 측정. 자이로 센서와 가속도 센서 (NT-ARSv1, ARS)
Trackback from PinkWink's Blog
2011/04/24 15:24
[ DELETE ]
최근 제가 입사하고 만든 첫 제품이 출시될 것이라고 말씀드렸는데요.[관련글] 드디어 공식 출시가 되었네요. 이번에 출시된 저의 첫 작품은 간단히 물체의 기울어진 각도, 기울기를 측정하는 센서 모듈입니다. 자이로 센서와 가속도 센서를 융합하였구요. 먼저 간단히 제품 포장 박스에 들어갈 이미지부터 포장이미지가 생각보다 이쁘게 나와서 기분이 좋아요^^ 판매처는 디바이스마트입니다. [제품 구매 페이지 가보기] 그리고, 판매페이지에도 링크가 걸려있지만, 먼..
밑에 글은 머리가 아파 모르겠구요 죄송 ㅠㅠ
상해만 친근함을 느꼈어요
히히~~ 저도 머리아픕니다..
아름답지 못해서...ㅋㅋ^^
안녕하세요?
제가 요즘 관심있어하는 부분인데 정확히 일치하는군요^^
혹시 실험 구성할 때 사용하신 엔코더는 광학식인가여?ㅋ
http://pinkwink.kr/70 에 나와있는 Autonics사의 제품입니다. 그냥 주위에 굴러댕기길래 주워다 테스트한건데... 인크리멘탈형이고 광학식이겠죠?ㅋㅋ 데이터시트를 한번 확인해야할텐데...ㅋㅋㅋ
테스트방법이 저도 딱히 떠오르지 않더군요;ㅠㅠ rate table인가란 장비로 테스트하는게 가장정확하다고 하던데..가격과 딱히 국내에서 팔지를 않터군요; 그래서 그건 아니라 생각이 들어서
로봇티즈에서 판매하는 서보모터로 3축으로 전부 돌아가겠음 구성을 해놓코 아직 사용은 안해봤습니다. 로보티즈사의 서보모터의 엔코더가 상당히 정확하다고 알려져 있더군요;
그런데 문제점은; 서보모터 특성상 360도가 돌아가지는 않는다는 점입니다^ ^;;
ㅎ... 그래도 같은 고민을 하는 분이 있어
다행이라는...^^
해법을 찾게 되시면 알려주세요...
트랙백으로...살짝...ㅋㅋㅋ^^
보상필터부분의 수식의 각 요소(s, k)에 대한 설명을 조금더 해주실 수 있나요?^ ^;
보상필터부분의 수식은
제일 첫 식은 그 블럭선도를 그대로 수식으로 옮긴것입니다. 제일 오른쪽의 적분이 수식 괄호 제일 바깥에 있구요. 블럭선도 흐름을 그대로 간거죠.
그걸 해석해 보니, 자이로의 적분값 즉 자이로에서 계산된 각도에는 하이패스필터스러운놈이 들어있고, 가속도센서에서 구한 각도쪽에는 로우패스필터스러운놈이 들어있더라...는 것입니다.^^
가속도센서와 자이로 센서를 통합할때는 칼만필터를 많이 쓰던데, 위에 쓰신 필터가 칼만필터인가요?
창피한 이야기지만
전 칼만필터를 공부한 적이 없습니다.
위 보상필터가 칼만필터와 흡사한가요?ㅜㅜ
저도 칼만필터 이름만 들어봤지 어디서도 자세한 설명을 못봐서요 --;
아무리 찾아봐도 어떤 원리인지도 모르겠더라구요
소스를 올린 사람도 있던데 그거봐선 감이 안오더군요 ^^
항상 공부해야지...하고 생각하긴했는데
잘 하질 않더군요...제가...ㅋㅋㅋ
하긴 그러고보니
칼만필터를 설계했다는 말은 들었어도
어떻게 설계했다는 자세한 설명은 본적이 없는듯한데요..^^
음 아직 학부 4학년 학생인데요.. 손과 손가락 동작을 센싱하고 싶은데 구성해야 할 부품이 NT-Gyro300, myGyro300SPI 2개로 x, y, z축의 손 움직임을 구하고 플렉스 센서로 손가락의 움직임을 얻을 수 있을까요? 손의 위치 정보를 얻기위해서 가속소 센서가 있어야 그나마 신뢰할 수 있는 움직임 정보를 얻을 수 있을까요? 위에서 말씀하신 2개의 자이로 센서과 3축 가속도 센서를 사용하면 중간에 adc 구성 없이 그 신호를 pc나 보드에서 바로 사용 할 수있는 것인지도 궁금하네요. 이렇게 하드웨어를 따로따로 사서 만들어 보려니까 쉽지가 않네요. 우선 사야할 것들 목록만이라도 확실히 알고 싶어서 이렇게 질문을 드립니다. 아.. 마지막으로 손바닥을 뒤집는 듯한 동작을 할때 위에서 말한 3가지 센서로 센싱이 가능할까요? 아니면 손목부분에 기울기 센서같은걸 따로 달아야할까요? 질문이 많지만 너무 막막해서 이렇게 남겨 봅니다. 답변 부탁해요!
만약.. 만약입니다만
손전체의 움직임에 대한 손가락의 움직임은 가속도센서만 구성해도 충분합니다. 손전체에서 병진운동 성분을 읽어서 손가락에서 그 부분을 고려하시면 손바닥에 대한 손가락의 기울어짐 각도는 충분히 가속도센서만으로 가능하리라 생각됩니다. 손바닥이 충분히 천천히 움직인다고 가정하면 손바닥을 기울이고 심지어 뒤집는것도 역시 가속도센서만으로도 측정이 가능합니다만, 제가 포스팅한 가속도센서의 한계라는 글을 읽어보시면 자이로가 필요할지도 모르겠네요.
작동환경을 잘 구성하신다면 가속도 센서들 만으로도 가능할듯한데요. 하지만 손바닥에는 어쩌면 자이로가 필요할듯 합니다.
제 생각에는 손바닥에 가속도 센서하나
손가락 한개의 끝에 가속도 센서하나..
이렇게 두개만 구성하시고 한 번 동작테스트를 먼저 수행해보시길 권장합니다.
빠른 답변 감사합니다. 우선 손가락 부분은 무시하고 손의 움직임이 어떻게 그려지는지 좀 정확히 얻고싶은데 그게 바닥에 3축 가속도 센서 1개 만으로 가능 할까요? 말그대로 x, y, z축 3D 상에서 손의 움직임을 입력으로 쓰고 싶은데... 예를 들어 손으로 모션을 그리면 pc내의 3D 공간에서 그 모션 그대로 움직이게요. myAccel3LV02나 myGyro300SPI 2 보드같은 것을 이용하면 출력 값을 중간에 myCortex-LM8962 보드 같은걸 통해서 pc와 통신하는 것 같은데... 지그비 같은 무선 통신을 하기 위해선 myCortex-LM8962 보드 말고 다른 보드가 필요할까요? 보드 전원 부분은 건전지 같은걸로 충당해서 무선 기기를 만들고 싶어서요. 염치 없지 만 또 답변 기다릴게요!
PC에서 데이터를 유선으로 받을 건지 무선으로 받을건지는 그냥 정하시면 됩니다. 무선이라도 여러가지가 있겠지만 요즘은 디바이스마트같은곳이 많아서 잘 찾아보시면 무선모듈을 손쉽게 구하실수있습니다. 데이터를 어떻게 가공할지는 데이터를 원하시는 구동환경에서 일단 테스트해서 그 결과를 보셔야합니다. 사람이 극단적으로 빠르게 움직이는게 아니라 천천히 움직인다 어떻게 움직인다 등등 행동을 정하면 자이로는 필요없이 가속도센서와 간단한 필터만으로도 가능할 수도 있습니다. 무선모듈을 찾아보셔서 그 모듈이 어떤 통신을 하는지 마이크로프로세서 모듈 AVR이든 CORTEX든 뭐든 어떻게 연결할수있는지 알아보셔야합니다.
근데 지그비는 뭔가요^?^
지그비는 근거리 무선통신이에요~ 그런데 위에 가속도 센서 하나만으로 5개 손가락의 움직임을 얻을수 있다고 하셨자나요? 그거에 대해 좀 더 자세하게 설명 해 주실수 있으신가요? 현재 최종적으로 3축 자이로 센서와 플렉스 센서 5개를 사용하려고 하는데 가속도 센서 하나로 처리 가능하면 굉장히 수월해질거 같아서 이렇게 글을 남겨봅니다. 답변 기다릴게요!
ㅎ.. 제가 드린말씀은
자이로 가속도를 꼭 한 셋으로 사용할 것없이
느린속도라면 어느정도의 필터로
가속도센서만으로도 원하는 결과를 얻으실것 같다고 드린 말씀입니다.
하지만.. 역시 여러 동작구간을 생각하면 자이로도 사용되어야하긴 하겠지요^^
에고 자꾸 질문만 드려서 죄송한데 ... 가속도 센서 1개로 손이 아닌 손가락 5개의 움직임(구부러짐)을알 수 있을거라고 하셨는데 그에 대해서 좀 알 수 있을까요?
ㅎㅎ... 전 그렇게 말하지 않았습니다.
손바닥에 가속도센서하나를 두고
손가락 끝에 가속도센서를 하나두면
전체 손바닥의 움직임에 대비한 손가락끝의 움직임을 알 수 있게되고.. 그러면 손가락이 손바닥에 대비해서 어떻게 움직였는지를 알게된다는 말을 한것이었습니다.
즉, 가속도센서 6개를 말씀드린것이었는데요^^
질문이요!!
부끄럽지만 용기 내어 질문 합니다.
위의 보상 필터 식을 어떻게 디지털로 표현을 할수 있을까요??
그리고 보상 필터에서 입력은 자이로계각도와 가속도계각도가 있는데 이두 입력으로 자이로 센서의 드리프트 현상을 막을 수 있나요??(아날로그로는 이해가 되는데.. 디지털로는 도저히 이해가 안되요..)
주기적으로 자이로계의 각도를 가속도계의 각도로 업데이트 해야 하지 않나요??
"1/s" 는 적분으로 그냥 "s"가 곱해져 있는것은 미분으로 생각하시면 됩니다. 위의 블럭을 일종의 순서도라고 생각해보시길 바랍니다. 블럭바로밑의 수식과 같이 생각해보시면 됩니다. 정 이해가 어려우시면... 혹시 MATLAB을 다룰줄 아신다면, 위 블럭은 MATLAB/Simulink로 꾸며져 있으니 그대로 구현하시고 MATLAB이 제공하는 C 코드 생성기를 이용해서 참조하셔도 될듯하긴 합니다. 현재 C 코드도 조만간 정리해서 포스팅할 예정입니다^^.
그리고 실험 결과 그래프를 보시면 아시겠지만 (현재 저의 작업진도상에서는) 드리프트는 +-2도에서 3도사이의 진동을 제외하면 없습니다. 위 알고리즘은 오차를 가지는 진동은 있을지 몰라도 드리프트는 없습니다.
그리고... 마지막으로.. 위 블럭은 두개의 입력단이 있는데 가속도센서와 자이로센서의 출력값이 계속 입력되는 것입니다. 즉.. 마지막 질문의 답변은 당연히 주기적으로 두센서의 값을 받고 있으며, "업데이트"라는 말은 좀 이상하긴 하지만, 가속도센서에서 계산된 각도를 이용해서 자이로센서의 출력을 보정하여 적분을 수행하고 있습니다.^^
(올바른 답변이 되었을지... 좀 걱정됩니다만... 현재 실험중인 결과를 업데이트할 예정입니다. 얼마나 걸릴진 확언해드릴순없지만...)
안녕하세요. 다름이아니라 현재 대학교 3학년 학부생으로 4학년 졸업작품과 연계하여 프로잭트를 진행하고 있는데요..
설계 주제로는 외줄 위에서 좌우로 안떨어지고 자세를 잡는 벨런싱 로봇을 만드려고 생각중입니다.
좌우로 떨어지는 정확한 각을 검출하기 위해서 각도를 검출하기위해서 자이로센서를 사용하기로햇는데요 자이로센서를알아보던중 자이로센서만으로는 정확한값을 알아낼수없기에 가속도센서를 사용하여 보정을 해준다는것을 알계되었고 자료조사중 이블로그까지 오게 되었습니다.
다름이아니라 자료준비는 계속하고있는데 내일모래 발표가 다가오고있는데 아직 해놓은건많이없구해서 이리저리 알아보다가 결국 이글을 올리게되는데요 혹시 도움좀 받을수 잇을까 해서 이렇게 글을 올립니다.
일단 다시 한번 말씀드리면 저희가 만들려고하는 벨런싱로봇은 바퀴(휠)을 와이어 줄위에 올려서 앞뒤로 움직이면서 좌우로 안뜰어지게 자세를 잡을 예정이고요 좌우자세제어는 회전관성을 이용하여 서보모터로 긴장대를 이용하여 좌우로 떨어지는것을 막을 예정입니다.
서커스나 옛날 부채들고 외줄타는 모습을 연상하시면 좋을 꺼같내요
약 3번의 중간발표를 거치면서 교수님께서 너희는 일단 창작품이니 기존 제품조사같은거는 많이 필요없고 알고리즘을 정확히 구사해오라고했거든요
일단 마음같아서는 동역학 방정식을 유도해서 Matlab으로 시물레이션해서 결과발표까지 이어지는 시나리오를 머리속으로 생각은 해보았지만 현실에서는 실력이부족하여 ㅠㅠ
일단 이글을 올린 저의 취지는 저희가 구상하고있는 로봇이 실제 만들어질수있느냐 하는겁니다...
교수님게서는 서보모터로 제어를하면 미세제어?라고해야하나 좌우로 툭툭 움직이기 때문에 로봇이 자세를 잡기전에 그힘에 밀려 쓰러질수도 있다고 하는겁니다.... 이부분은 저희도 처음 구상할때부터 부디쳤던 최대의 난관입니다... 일단 생각으로는 가능할꺼도 같은데 같은데... 이렇게 생각만하고있고 무었을 어떻게 해보아야 할지 막막해서... 이렇게 글을 올립니다....
혹시 여유가 있으시면 저의 이러한 문제점들을 해결하기위해 도움을 좀 주셨으면 좋겠습니다...
그럼 추운날씨에 수고하세요 ㅋ
구동부에 대한 고민을 하셔야겠네요...^^
먼저 진행방향으로 넘어질려고하는 것은 바퀴를 이용해서 로봇의 몸체자체를 앞뒤로 움직여서 제어를 하겠다는 것이고,
진행방향의 수직방향으로 움직이는것은 어떤 무게를 이용해서 역방향으로의 회전모멘트를 인가해서 제어하겠다는 것인가요?
그렇다면, 각 방향에서 따로 본다면, 모두 역진자 시스템이군요. http://pinkwink.kr/36 에서 소개한 역진자 시스템의 동역학을 각 방향에 대해서만 생각해도 되지 않을까하는 생각을 문득해봅니다. 즉, 전체 동역학을 생각하지 마시고, 쓰러지는 각 방향이 서로 수직이므로 간섭현상은 미미하다고 가정하고 따로 생각하는 것이죠. (물론 만들지 않고 시뮬레이션단계에서 검증할려면 역시 전체 동역학이 필요합니다만.....)
제어는 충분히 가능하다고 봅니다. 펜들럼 위에 펜들럼은 올려서 (2-linked pendulum) 위의 펜들럼을 흔들어서 아래의 펜들럼을 제어하는 시스템은 이미 오래전(대략10년도 더 전에)에 이슈화되어서 꽤 많은 논문들이 나와 있습니다. 아마 검색해보시면 놀라실거에요. 혹은 quanser라는 회사가 있는데 이와같은 제품을 판매하고 있으니 방문해서 보시면 가능하다는것은 여러사람에게 확인시켜주실수있을겁니다.
그리고, 말씀하신데로 작은 제어입력(이걸 미세제어? 라고 표현하셨는데 음... 처음들어보는 용어네요^^. 뭐 그래도 의미는 이해했으니...)을 인가할 수 있겠는가? 라고 의문을 가지신듯한데, 가능합니다. 펜들럼이 왼쪽으로 쓰러지면, 카트를 왼쪽으로 A만큼의 힘을, 오른쪽으로 쓰러지면, 카트를 오른쪽으로 A만큼의 힘을... 이런식의 On-Off 제어만 해도 펜들럼은 좀 진동이 있어서 그렇지 그렇저렇 제어됩니다.
어려운 작업을 하시는군요. 추가로 제가 가지는 한가지 의문을 보탠다면, 왜 외줄을 생각하시지요? 그냥 바닥의 외바퀴밸런싱로봇으로 하셔도 동일한데요. 왜 이렇게 생각하냐면, 기구부를 잘못설계하면 바퀴의 슬립현상이 있습니다. 역방향으로 갈려고할때 헛도는현상이지요. 문제가 좀 됩니다. 특히 외줄처럼 바퀴와의 마찰이 바닥일때보다 작을 것으로 예상되는 경우에 말이지요^^
어려운주제.. 꼭 아름다운 결과가 있기를 바랍니다.
더불어 큰 도움이 되지 못해 또한 죄송하네요^^
님 그거로 학부졸업작품하시려고 하면 졸업못하실수도 있습니다..ㅋ
어려운 문제일거 같아영 ㅋ
어려운 주제인듯합니다... 저도 그렇게 생각합니다..
그러나 못할것같지는 않아요...^^
그런데 확실히 어려운주제는 맞지요^^
답변 감사합니다... @.@ㅋ
일단 미처 말씀못드린것이 외줄위에서 진행하는것은 바퀴 2개를 이용할 예정입니다.
그래서 와이어줄이 늘어지기는 하겠지만 진행방향으로 쓰러지지는 않을꺼같습니다.
그리고 위에서 진행방향의 수직방향으로 쓰러지는것은
막대기를 진행방향에 수직으로 연결하여 이를 서보모터로 제어할 예정입니다.
회전관성을 살리기위해 막대기 길이와 양끝에 무게를 다는것을 고려해 봐야야 할꺼같내요 @.@
음... 펜들럼에대해서는 참고가 많이 될꺼같습니다 ㅋ
좀다 알아 보아야 하긴 할꺼같지만요 ㅋ
그리고 하다가 막히는 부분이있으면 다음에 질문좀 드릴께요 ㅋ
그럼 추운날씨에 고생하세요~ ㅋ
응? 바퀴가 두개라고요? 그럼 자전거같은 모양인가요?^^
하여간.. 이상한 답변이라고 고맙다고 표현해주셔서 감사합니다. 아름다운 성과를 기원합니다...^^
혹시 가속도계의 신호에 대해 푸리에 변환하고 스펙트럼을 관찰하신적이 있나요?
저도 같은 고민중인데..
가속도계에서 동적움직임에 대한 가속성분과 중력에 의한 가속성분은 같은 주파수 대역에
존재합니다.
일견, 동적움직임에 의한 가속성분이 고주파성분일 것 같지만, 실제는 그렇지 않습니다.
그래서 하이패스필터를 통해 그 성분을 제거해준다는 이야기는 잘 이해가 가지 않네여 ㅠㅠ
그리고 세종대 홍성경교수님의 저 참고논문은 여기저기 찾아봐도 찾을수가 없네여..
가속도신호에 로우패스필터가 달려있는것이 아닙니다. 가속도신호에서 나온 각도..(theta_c) 에 로우패스필터가 달려있습니다. 많은 분들이 저 필터를 보시고나면 그렇게 생각하시는데요.. 본문내용에도 그런 구절이 있으니 제 책임인듯하기도하고...ㅜ.ㅜ 필터그림을 자세히 보시면 가속도센서에서 만들어진 각도에다가 로우페스필터를 설정한 것입니다...^^
앞뒤로 움직이는 리니어 스테이지가 있다면 병진운동과 각운동을 하면서 각도 측정이 가능할거 같네요..
아 어렵네여 ㅠㅠ
요즘 프로젝트때문에 거의 신경을 못쓰고 있었는데 "혹시..."님께서 댓글을 달아주셔서 다시 신경을 쓰게 되는군요..ㅎㅎ 일단
Pitch와 Roll을 잘 잡힌다고 결론을 내렸습니다. (저가 설정한 환경에서는요.. 저는 호버링을 생각해서 극단적인 속도의 병진운동은 없다고 보고 있거든요) 그리고 YAW가 문제인데.. 해결안할려고 합니다. 시뮬레이션 결과 YAW 각도의 보정을 PITCH와 ROLL에서 받아올수 있다는 생각이 들더군요..
테스트를 해야하는데 아직도 제대로 된 기구부하나를 가지고 있질 못해서요...크크...ㅜ.ㅜ
그렇군여.. 그런데 여전히 좀 의문이 있습니다 ㅋ
가속도 산호에서 나온 각도라는 것 자체가 노이지한 신호이고 LPF를 거친다고 해도
진동에 의한 노이즈만 제거되지 병진운동에 의한 노이즈가 제거될거 같지는 않을것 같아서요..
답글 달아주신것처럼, 호버링만을 할때는 그 성분이 크게 영향을 주지 않을 것 같은데
장기적으로 이동을 시킬때는 또 문제가 될 것 같네여
그리고 보상필터의 블록도를 보니깐 보이는 것으로는 LPF와 HPF를 디지털 2차필터로 하셨을거 같은데 만족할 만한 필터성능이 나오나영?
저도 쿼드콥터를 만드는것은 아니지만 비슷한 목적으로 자세추정이 필요한데 참 어렵네영 ㅋ
응답속도와 오차면에서 정말 좋은 성과가 나옵니다. 여기서 환경설정이 하나 필요한데요... 보정이 되는 가속도센서에서 나온 각도는 평균적으로 참값이어야합니다. 즉, 흔들리는 물체에서 가속도센서에서 얻은 각도는 분명 참값이 아니겠지만,이를 오랜기간 놓고 생각하면 참값이어야한다는 것이지요. 가속도센서입장에서 병진운동이 느리거나 헬기의 호버링에 적합한 센서가 아닐까합니다...
그리고, 노이즈를 저 필터로 제거하는 것이 아닙니다. 노이즈는 저같은 경우는 구간평균법으로 간단히(완벽히는 아니지만)제거하고 ... 나서 각도를 보면
자이로를 적분한 각도는 전체적인 드리프트가 있고
가속도센서에서 나온 각도는 순간순간 참값은 아니지만 평균적으로는 참값이니...
자이로를 적분한 각도에 하이패스필터를 달아서 극저주파영역의 드리프프를 제거하고
가속도센서에다가 극저주파의 로우패스필터를 달아서 거의 평균적으로 참값를 찾겠다는 뜻으로 생각합니다...
(이 답변은 제 생각입니다.... 제가 참조한 홍성경교수님의 생각도 그러한진는 잘 모르겠네요^^)
http://www.pinkwink.kr/242 하단의 결과그래프를 보시면 정말 좋은 결과가 나타나는 것을 알 수 있습니다.
빠른 답변 감사합니다^^
최소자승법으로 구한 것을 보니깐 정말 깨끗하네여
가속도계에서 얻은 각도가 평균적으로 아니면 오랜시간 놓고 생각하면 참값이라는게
잘 이해가 가지 않네여 ㅠㅠ
자꾸 귀찮게 해드려서 죄송 ㅠㅠ
제가 느낀 점으로.. 뭐 이해하실려고 애쓰실 영역은 아닙니다... 직접 테스트를 한번해보시고 또 "혹시.."님 스스로 결론을 내려보시는 것도 좋을듯합니다.^^
질문 하나 드릴 려고 하는데요...
위에 답글에 보면 하이패스필터로 드리프트를 제거하고 로우패스로 평균적인 참값을 찾겠다라고 생각하셨다고 했는데요..
제가 필터부분을 잘몰라서...왜 하이패스가 드리프트 제거용인건지 로우패스가 참값인건지 모르겠습니다~
한 수 가르쳐 주세용~^^
자이로를 적분한 각도를 관찰하면 드리프트현상이 있습니다. 그런데 이는 아주 극 저주파 영역이라고 볼 수 있습니다. 그러니 고역통과필터를...
또한, 만약 가속도센서에서 도출된 각도가 그때그때는 참값이 아니라도 평균적으로 참값이라면 아주 낮은 주파수를 설정해서 저역통과필터를 통과시키면 평균값, 즉 참값에 가까운 값이 나타날 것입니다. 그것을 자이로를 보정하는데 사용하면 될것이라고 생각한 것입니다.
저 밑에 자이로 관련글에 irmus님께라는 이름을 글쓴 사람입니다.
여기에 나오는 자이로 적분값 그래프를 보면 알 수 있네여
1~2Hz의 진동에서 기준각의 진폭과 동일하게 나오지만,
극 저주파의 움직임에서 기준각보다 자이로 적분그래프의 진폭이 더 크게 나오는 것을 확인할 수 있습니다.
그렇군요^^ 좋은 말씀감사합니다.
LPF의 등가모델을 이용해서 전달함수의 보데플랏을 확인해보시면 이 그래프가 나오게 된 이유가 확실해집니다
핑크윙크님의 블로그에서 좋은 정보 많이 얻어갔는데
그냥 가기가 뭐해서 도움이 될까하고 몇자 적어보네여^^
이상 주제넘은 소리였습니다.
그냥 지나가실수도 있으셨을텐데 이렇게 글을 남겨주셔서 감사합니다.^^
매번 눈팅하다가 질문을 올리네요
NT-Gyro300을 사용하고 있는데 정지시 드리프트가 10초가 10도가 나더군요..
출렁출렁이지만 오래두고 보면 쭈욱 증가하는 추세입니다.
가속도 센서 없이 자이로 자체적으로 필터를 구현하고 싶은데요..
NT-Gyro300은 이미 아날로그 필터가 설계되어 있는 것으로 알고 있는데..
그것만 신뢰 할 수 있는 것인지.. 디지털 필터를 설계한다면 어떤 것이 좋을지 조언을 구합니다.
현재 각도를 구한 값은 그저 샘플링 타임과 측정치, 기준치를 두고 계산 한 것입니다.
요지는 우선 별도의 센서 보정없이 필터의 구현입니다.^^.
가속도 센서로 rolling, pitching 기울어짐 각은 측정하여 사용하고 있긴 합니다만..
우선 필터 공부를 병행하고 싶어서요.
그리고 변위가 발생(전체적인 가속도 증가 혹은 감소)했을때 각도 측정이 안되서..
자이로로 그걸 잡으려고 합니다.
최종 목표는 변위가 생기든 말든 두 종류의 센서로 정확(?)한 기울어짐 각을
측정하는 것이구요..
한걸음씩 해보려고 합니다.
인터페이스를 정리하다보니 횡설수설이 되버렸네요ㅜ
그럼.. 환절기 감기 조심하세요~~
자이로센서만으로 자신의 에러를 보정하는 것은 시도해보지 않았습니다.ㅜ.ㅜ. 그리고, 자이로만으로 필터를 혹은 보정을 멋지게 성공하는 것도 중요하지만, 저는 애초에 보정용으로 다른 센서를 사용하겠다고 생각을 했기 때문에 염두에 두질 않았습니다. 그러니 답변을 드릴수가 없네요^^... 하지만, 인터넷을 조금 검색해보면 다들 칼만필터를 많이들 이야기하던데요^^
안녕하세요...또 질문을 올리게 되네요..ㅜ.ㅠ
dsp2812에 내장된 adc를 사용하다가,,,너무 adc의 떨림이 심해서
spi통신으로 외부 adc를 사용하려고 시도중입니다.
dsp2812를 처음 접하는 입장이라서,,spi통신이 조금 힘드네요..ㅜ..ㅠ
2ms마다 샘플링을 하고싶은데,,
어떤식으로 송/수신을 해야될까요?
제가 생각하는 방법은,,
인터럽트를 2ms마다 걸어서 adc명령을 쏴주고,,,
그다음 어떠케 해야될지,,ㅜ,ㅠ
핑크윙크님은 어떤식으로 하셨나요?
핑크윙크님도 spi통신으로 자이로를 받으시는데,,그것도 세개..
저흰 두개만 받으면 되는데..ㅜ.ㅠ
지금 그거때문에 막혔습니다..ㅜ.ㅠ
혹시 가능하시면 저희가 찾아가서라도 물어보고싶은 입장입니다..ㅜ.ㅜ
졸작,,정말 힘드네요~.~;ㅎ
dsp의 adc 만 떨림이 심한건 아닙니다. 당연히 spi통신을 한다고 adc의 노이즈가 감쇠되는 것 또한 아닙니다.
위에 언급한 spi방식의 제품은 회로의 특성한 노이즈가 많이 제거된 상태입니다. 그러니 응답속도가 좀 느리다는 단점또한 가지고 있지요. 물론 spi통신을 함으로서 선로의 길이가 줄어들어 adc의 노이즈의 영향이 줄어든 결과가 있긴 합니다.
일단 spi통신을 하더라도. 일정시간간격으로 송수신을 하고 싶으시다면 당연히 말씀하신것처럼 타이머 인터럽트를 사용하셔야합니다.
제가 사용한 방식은
http://www.pinkwink.kr/81
에 나타나있습니다. 약간 이상한것이 있었지만, 일단 제가 당시 사용했던 코드는 공개해두었습니다.^^
자이로의 드리프트현상을 극저주파 영역으로 보고 하이패스필터 시키고, 가속도센서로 도출된 각도는 로우패스 필터 시켜서 자이로 값을 보정하는 것은 알겠습니다.
그래서 제가 해보고자 하는 건 자이로를 이용해 도출된 각도를 FIR 디지털필터를 이용, 하이패스 필터를 통과 시키고,
가속도를 이용해 도출된 각도는 FIR 디지털필터를 이용, 로우패스 필터를 통과 시킨후 둘을 합하면 보정이 되지 않겠냐 하는건데요.
근데 이게 잘 안되네요. 제가 뭘 잘 못 생각하고 있는 걸까요?
음.. 댓글의 의미는 잘 알겠습니다. 그런데.. 잘 되지 않는 이유는 저도 잘 모르겠습니다. (해보질 않아서..ㅠㅠ)
먼길 오셨는데 죄송스럽습니다...ㅠㅠ
ㅜㅜ 제가 matlab으로 FIR필터 설계를 잘 못해서 그런건지, 원래 저렇게 접근하면 안 되는건지 갑갑하네요 ㅋ 아무튼 계속 해보고 좋은 결과 있으면 알려드릴께요ㅋ
헉.. 도움도 드리지 못했는데 결과가 나오면 알려주기까지 하실거라니 더더욱 도움을 못드려 죄송합니다...^^
자이로의 드리프트현상을 극저주파 영역으로 보고 하이패스 필터링하여 제거한다는 말에는 무리가 있습니다. 그렇다면 관성항법장치를 다루는 분들이 사용하지 않을리 없지요 실제 동체의 다이나믹도 극저주파 성분이므로 둘을 신호의 왜곡없이 분리한다는 것은 절대로 불가능합니다.
필터의 차수가 무한대인 필터를 사용한다면 혹시 모르겠습니다만 그러한 필터는 존재할 수 없죠..
----------- 이전 댓글을 생략하고...^^-----------
다시 보니...
위의 "재오리"님은 정말 하이패스필터를 FIR로 설계하시는다는 것이고.
아래의 "재이리님"님은 그러면 안된다는 말씀이시군요..
음... 국어가.. 몹시.. 딸리는 pinkwink였습니다.ㅠㅠ
블로그 자료를 참고로 해서 스케일펙터를 구해보았습니다.
atmega128에 연결해서 사용해서 별다른 Vdrive를 입력했기 때문에 그대로 5V로 적용시켜서
(5000/4096) * (1/(4.1*5/5)=0.2977
0.2977*3.14/180=0.0051
위와 같이 구했습니다. 맞게 구해진게 맞나요??
스케일펙터 값이 맞게 구해 졌다면
각속도를 구할때 온도값으로 보정받아서 구하면
각속도 = (측정값-정지값)*0.0051 공식에
현재각속도 = 자이로출력 + (2048-현재자이로온도)*0.08 (여기서 0.08값은 어떤값인가요?)
공식에서 구해진 현재각속도 데이터를 측정값에 대입해서 각속도를 구하면 되는건가요? 이렇게요...
각속도 = (현재각속도-정지값)*0.0051
위 과정대로 제 데이터를 가지고 각속도를 구해 보았습니다.
1952 + (2048-2110)*0.08 = 1947.04
(1947.04-1952)*0.0051 = -0.0255
네.. 실험치를 확인하는 것은 실험장비를 구축해서 신뢰성있는 센서(엔코더같은)와의 값을 비교하는 것이 필요합니다. 그리고, 저는 위 글에서 온도에 대한 보정을 잘몰라서 혹시 이 글을 읽는 분들에게 맞지는 물어보고 있습니다. 그 후, 온도에 대한 생각은 접고, 가속도센서를 이용한 필터를 연습했었습니다. http://pinkwink.kr/78 에 그 내용이 나와있습니다.^^
벨런싱로봇을 만드는데 도무지 진도를 나갈수가 없네요 ㅠ.ㅠ
실험치를 확인할려면 실험장비를 구축해서 확인해보라고 하셨는데 구현할수가 없어서요....
일단 데이터를 추출까진 했는데 여기서 막혔네요...
필터를 적용시킬려면 각속도랑 구해야 하는거 같은데 각속도를 구하고 나서 확인을 할수 없으니...
myGyro300SPI 센서 감도, 스케일펙터때문에 확신이 안서네요...
irmus님께서는 데이터시트에 다 나왔다고 하는데 정확히 어디에 나왔다는건지... 알수가 없네요
제가 영어 실력이 부족해서 해석이 안되서 못찾은건지 아무리 봐도 모르겠더라구요
그래서 위에 질문 올린것처럼 블로그 참고해서 스케일펙터를 구해 봤구요...
그리고 위에 나와 있는 보상필터 수식에 자이로 센서데이터와 가속도 센서 데이터를 적용할려면
각속도, 가속도의 데이터를 양자화 해서 대입해야 하는거죠?
풀이를 할려면 어디에 자이로 센서 데이터가 들어 가고 가속도센서 데이터가 들어가는지 자세하게 설명좀 해주실수 있을까요?
기본이 많이 부족해서 기초적인 질문이 많네요...
바쁘시더라도 자세한 설명 부탁드릴께요
네 김태환님의 말씀처럼 "확신"을 가지는 것이 중요합니다. 김태환님께서 바라는 대답이 무엇인지 압니다만, 그러나 저 역시 이렇게 답변을 드릴 수 밖에 없습니다.
밸런싱로봇을 만든다고 하셨습니다.
밸런싱로봇의 제어를 위해서는 각도측정이 당연히 중요합니다. 그러나 자이로(혹은 가속도센서를 같이 이용하든)를 이용해서 각도를 구할 때, (아무리 데이터시트상으로 정확하게 꾸몄다 해도. 위의 댓글을 볼때 스케일팩터의 구현은 맞는듯합니다.^^) 제어기 디자이너가 현재 센싱값에 확신이 없으면 어떻게 하겠습니까.
당연히 센싱값에 대한 참값과의 비교는 필수입니다.
또한, 단순히 참값과의 비교가 만족할 수준이라해도 그것만으로도 부족합니다. 응답속도는 어떤지 오버슈트는 발생하지 않는지, 눈으로 봐서는 보이지 않지만, 그래프를 그려보면 나타나는 노이즈는 없는지... 등등의 체크도 필요합니다.
인터넷의 자료를 서치하다보면, 각도측정장치를 실험한 많은 동영상을 볼 수 있습니다. 그런데 다들 손으로 살짝 돌려서 (심지어 각도기 위에서) 10도정도로 돌렸는데 센싱결과 10도가 잘 나오더라... 는 실험결과를 제시하는 경우가 많습니다.
이 경우...
참값은 10도였고, 센싱결과도 10도였다고 치죠.
잘 된 걸까요???
손으로 돌리고, 눈으로 그저 확인한것이라 뭔가 놓친것은 없을까요???
예를 들면, 10도라는 참값까지 결과를 내놓는데, 0.5초정도의 시간이 결렸다면?, 또, 10또의 결과가 나오는데, 8도, 9도, 10도 11도로 넘어갔다가 돌아온 10도면 또 어떻게 할까요? 혹은 10도는 10도인데, 실제로는 9.5도와 10.5도사이를 진동하고 있으면??
제가 드리고 싶은 말씀은, 마이크로프로세서를 테스트할때, PWM을 테스트하고 나면, PWM이 잘 나오는지 오실로스코프로 테스트하듯이, 어떤 센서의 응답이 올바른지 확인하는 작업또한 아주 중요하다는 것입니다.
스케일펙터부분을 아주 잘 구현했다 하더라도, 결국 자이로센서만으로는 몇 십초, 몇 백초 후에 발생할 적분오차를 막을 수는 없으니, 분명 어떤 필터링을 하게 될텐데, 그 필터의 성능을 확인해야죠....^^
음... 답글을 달다보니.. 너무 길어졌네요..ㅠㅠ
실제 제가 실험한 내용을 C 코드로 변환한것은
http://pinkwink.kr/254
에 있답니다. 아주 간단해요^^
아침이네요... 할 일이 너무 많았는데, 그만 의자에서 한시경 잠들어 버렸네요..ㅠㅠ 허리도 아프고.. 잠은 개운하지가 못하고... 그래도 활기찬 하루를 시작해야죠^^ 우리모두 화이팅입니다.^^
FIR필터를 이용해서 HPF했을 경우에 주파수 응답을 확인해보니 동체의 다이내믹 또한 필터링 되어버려서 제대로된 데이터를 얻지 못한다는 것을 확인했습니다.
하지만 궁금증이 있습니다.
FIR필터를 이용한 HPF는 동체의 다이내믹스 또한 필터링 되어버리는데 저 링크의 1차필터로 구현한 HPF필터는 실험했을 때 왜 제대로 보정된 결과를 보여주는 것일까요.
핑크윙크님 저 링크의 1차필터를 좀 더 설명해주실 수 있겠습니까? 저는 쉽게 이해가 가질 않습니다;
네... 필터는 정말 어려운것 같아요...ㅠㅠ
관련 포스팅을 한 번 시도해 보겠습니다.
그러나 언제나 그렇듯.. 잘 될지는 잘 모르겠습니다...ㅠㅠ
윙크님 밸런싱로봇은 센서가 회전하는 중심에 놓고 해야되는건가요???
그럼 참값과 실험할때 회전중심에 센서를 놓고 비교를 해야되나요??
여기서 사용한 센서 모듈이 꼭 회전중심축에 있지 않아도 됩니다. 실제로는 회전형 진자 시스템에 관성센서(자이로-가속도)를 설치해서 테스를 하고, 그 상태로 밸런싱로봇에 장착한 겁니다.
회전중심축에 가속도를 두고하면 병진운동이 안생기지않나요??
그래서 회전자끝에 두고하면 병진운동이 생겨서 자이로센서로 보정하는 걸 보여주신거아닌가요?
가속도센서만 사용하는 경우의 문제점과 자이로센서만 사용하는 경우의 문제점을 보정하는 필터를 설계했으니... 이제 회전중심축에 연연할 필요가 없습니다. 그걸 잘 보정했으니까요.
질문이 있습니다.
위 본문에서 yaw각의 경우는 자이로센서만으로 측정하신다고 하셨는데
그럼 yaw각에 대한 보정은 어떻게 해야하는걸까요?
가속도센서만 가지고 yaw까지 보정하는 것은 어렵습니다.
일반적으로는 지자기센서등을 사용해서 yaw를 보정하는 것으로 알고 있습니다.
안녕하세요.
여기에서 많이 배워가고 있습니다.^^
질문이 있어서 글 남기는데요,
센서들이 이론적으로는 한 점에 장착되었다는 전제로 계산이 진행되는데요
실제적으로는 센서들이 한 점에 장착될 수 없는데..
이것에 대한 오차는 어떤식으로 보상하는건가요?
오차가 너무 적어서 보상할 필요가 없는건가요?
평행한 두 선에 직선하나를 비스듬히 그어서 만든 후, 같은 방향을 보는 두 각은 같다는 성질이 있죠?? (이름은 기억이 안나네요^^)
두 센서가 각기 다른 곳에 있어도 큰 영향은 없습니다. 단지, 두 센서가 바라보는 방향에 대한 초기각을 좀.. 잘 설정해야겠지만 말이죠^^
ㅎㅎ 안녕하세요 저기 질문 이있는데요 자이로센서의 드리프트를 저주파영역으로 보고
가속도 센서의 병진운동및 adc 노이즈를 고주파영역이라 나누는 기준이 뭐인가요??
그리고 로우페스 필터랑 하이페스 필터를 따로 설계한뒤 다시 합쳐준게 보정 필터인가요???
또 혹시 죄송한데 하이패스 필터 로우페스 필터 포스팅하신거 있으신가요??
음.. 초창기엔 저도 그렇게 설명했는데, 요즘은 다르게 표현한답니다. 고주파영역에서 자이로센서가 응답특성이 좋기 때문에 하이패스필터를 사용하고, 저주파영역에서는 가속도센서가 응답특성이 좋기 때문에 로우패스필터를 사용하는 것입니다. 그 둘을 합쳐서 사용하겠다는 개념이 이 글에서 소개한 상보필터(complementary filter)로 이를 C로 구현하는 것은 제가 블로그에서 소개를 했습니다.
안드로이드 갤탭내의 자이로 값 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도가 계산 됩니다.
흐음 이게 자이로의 특성일까요?
궁금하네요. ^ㅁ^;
제가 볼때는 회전행렬의 개념을 적용해야하지 않을까합니다.
pitch 30도로 기울이고, 난 후 roll 30도를 기울일때
사람이 바라보는(절대좌표계)입장에서 roll변화와
그 물체입장에서(상대좌표계)입장에서 바라보는 roll변화는 값이 다릅니다.
정확하게는 잘 모르겠습니다만, 주신 질문으로는 일단 그렇게 생각이 듭니다만...
허억 이런 메트랩으로 돌렷는데 왜 따라가질 못할까요??
저번엔 잘나왓엇는데...
그..글쎄요....ㅠㅠ
질문 있는데요~ 실례가 되지 않는다면 제품 만드실때 혹시 센서들의 측정값에 대한 인증은 받으셨는지 물어봐도 될까요..ㅋ
인증 받으셨다면 인증기관은 어디로 하셔서 인증받았는지도 궁금합니다.
아니면 걍 자체적으로 테스트하셨다면 테스트용 장비로는 무엇을 쓰셨나요?
블로그에 나와있는 엔코더만 사용하셨는지 궁금합니다.
외부기관을 통해 인증받은 적은 없습니다. 그리고 모든 센서의 성능을 (전자파, 전기안전, 녹색기반. 등등이 아니라 성능 자체) 인증받는 기관이 있다는 것도 이상합니다.^^. 다양항 환경에서 자체 테스트를 수행한 것입니다.^^
^ㅆ^ 답변 갑사드립니다~
잇힝...자작해서 엔코더를 쓰는수밖에 없겠군요
네.... 하여간 역시 참값과의 비교가 필요하니 말이죠...^^
위의 보상필터를 사용한 결과를 보면 Gyro_ADC는 차이가 없는데 Gyro_SPI의 경우 보상 필터 사용전과 후의 진폭이 다른 것을 발견할 수 있습니다. 보상필터 사용 후의 진폭이 더 커지는 것을 발견할 수 있는데요 저도 똑같이 구현해서 동작을 시켜보니 진폭이 더 커지는 것을 발견할 수 있었습니다. 왜 그런지 잘 모르겠습니다. 별 문제가 아닌것 같으면서도 밸런싱로봇이 잘 안서는거 보면 문제인거 같기도 한데요...
제가 당시 밸런싱로봇에 사용했던것은 아날로그타입의 출력을 가지는 NT-Gyro300이었을 겁니다. (해당글에서 확인하시면 됩니다.) 그리고, 저는 자이로 사용전 참값이라고 믿을 수 있는 엔코더의 차분치와 비교하여 자이로의 결과값을 엔코더 차분치와 맞추는 작업을 수행한 후에 밸런싱로봇에 적용했습니다. 물론 가속도센서에서 얻은 각도도, 가속도센서가 에러가 나지 않는 상황에서 엔코더와 비교하여 일치시키는 작업을 수행했습니다. 이 포스팅은 단지 상보필터의 결과를 보여주는 것이어서 차이가 좀 발생했지만, 그냥 그대로 두고 포스팅을 했습니다.
답변 감사합니다~
먼저 엔코더와 크기를 맞추는 작업을 해야겠네요 ㅎㅎ
답변이 너무 빨라서 놀랐네요 ㅎㅎ;;
네... 성공하시길 빕니다.^^
안녕하세요. 전 이쪽계통에서는 아무것도 모르는 문외한입니다.
단지 자이로 센서(내지는 IMU) 보드를 가지고 자이로 카메라 마운트를 만들고 싶은데요.
어디에서도 이건 팔지를 않더군요.
귀사에 제품중에서 어떤 부품들을 조합해야 만들수 있는지 좀 알고 싶어서 문의드립니다.
참고로 제가 이것저것 조합해서 만들어봤는데요. Youtube에 동영상을 올려봤습니다.
문제는 제가 이쪽은 전혀 문외한이기떄문에 GS-1 (dunehaven.com/gs1_std.htm)
이라는 자이로센서비슷한것이 내장된 서보모터를 달았습니다.
(실제 자이로센서가 들어있지는않고 분해를 해보니 서보모터 안에 중심을잡는 스위치비슷한게 들어있더라구요)
근데 문제는 이게 기울어지고 시간이 약 1초지나면 자꾸 가운데로 다시 움직이는게 문제거든요.
계속 기울어진 각도를 유지하지 못하는거죠. 제대로 된 걸 만들고 싶어서 연락드립니다.
참고로 전 미국에 살고 있습니다. 오토바이에 장착해서 쓰려고 합니다.
여기저기 이걸 만들고 싶어하는 친구가 많아서 제가 한번 만들어보구 싶은 욕심에 이렇게 글을 올립니다.
대충 여기저기 살펴보니까 myGyro300spi 도 필요하고 서보모터 제어모듈도 필요한거 같은데.
어떻게 연결해야 하는지 잘 모르거든요.
어떤 부품을 구매해야 하는지 좀 자세하게 알려주시면 좋겠습니다.
그리고 컴퓨터에서 프로그래밍을 해야하는건지 어떤것을 공부해야 하는지도 좀 알구 싶구요.
일자무식이 밑도 끝도 없이 질문을 해서 죄송하구요.
아무튼 답변 부탁드리겠습니다.
일단 자이로센서만 내장되어있군요.
순전히 제 생각이지만, 이 모터는 순간적인 속도변화를 잡아주는 역활을 하는 것이 아닐까 생각합니다.
현실적으로 소형 MEMS 자이로만 가지고, motion을 모두 잡을 수 없습니다. 그러니까 속도변화가 갑자기 일어나면 정해진 방향으로 회전하도록 되어있지 않나 하는 생각을 합니다.
나머지 질문은 상당히 광범위한 질문입니다.
통상 제대로 된 각도 추정은 자이로센서+가속도센서를 가지고 두 센서를 융합해서 사용합니다. 그렇게 각도를 추출하고 나면, 다시 구동하는 모터(DC 든 BLDC 든)의 위치제어가 필요합니다. 당연히 여기서, 모터 드라이버 뿐만 아니라, 위치 제어기도 필요하게 됩니다. 물론 아주 저속이고 환경변수가 그리 어렵지 않다면, 위치 제어기는 간단히 P 혹은 PI 제어기만으로도 구현될 수 있으며, 그 제어기를 구하는것도 단순히 try-and-again으로 쉽게 구할 수도... 혹은 아닐 수도 있습니다.
제가 드린 답변처럼 질문하신 내용은 아주 광범위한 질문으로 저역시 이렇게 밖에는 답변을 드릴 수가 없습니다.
안녕하세요 덕분에 많은걸 배우고 갑니다
지금 제가 구해야하는건 오도메트리 인데...
3축 가속도 성분과 3축 각도(roll pitch yaw)를 알고 있는 상태에서 이를 이용해
3축 방향 속도-> 3축 방향 위치를 어떻게 표현할 수 있을까요?
단순히 로테이션 메트릭스로 글로벌한 좌표계로 바꿔 가속도를 적분, 또 적분하면
바이어스 때문에 도저히 원하는 결과가 나오질 않습니다.
가속도 데이터에 잡음이 있는데 왠만히 큰 가속도를 주지 않는 이상 그 잡음에 섞여버리는것 같네요
또한 계속 적분을 해야하는데 당연히 누적오차가 발생하니... 대책이..
혹시 가속도와 각속도로 각도를 구한것 처럼
현재 속도라도.. 속도를 어느정도 오차없이 구할 수 있는 방법이 있을까요 ㅠㅠ??
결국 거리를 담당하는건 가속도센서뿐이라는 것인데요.
물론 각종 논문들을 보면 다양한 방법으로 가속도센서만 가지고 거리를 잡는 경우를 보여주고 있습니다. 그러나 대다수는 온도라는 변수를 사용해서 결국은 가속도+온도센서를 융합하고 있고, 그렇지 않다고 하더라도 에러가 많이 줄었다 혹은 특정한 환경에서 좋아졌다는 내용일 뿐입니다.
저가의 MEMS형 가속도센서만 가지고 한번 적분하는 속도도 정확하지 않습니다. 결국 실외라면 GPS를 실내라면 LPS등의 센서를 사용해서 보정하셔야하지 않을까합니다.
roll, pitch 각 tilt 측정 범위가 -90 ~ 90 도로 나오는데 -180 ~ 180도로 나오게는 할 수 없나요?
물론 가능합니다. 자이로쪽은 상관없고, 가속도센서에서 각도를 만드는 부분을 잘 만들면 됩니다.
일반적인 상용화제품중에 180도까지 되는 아이들이 있습니다.
제가 만들때는, 용도가 180도까지 가지 않을거라고 보았고,
또, 90도 경계를 지나갈때 오차가 다른 구간보다 컸기때문이었습니다.
제가 3축 가속도센서와 3축 자이로 센서를 이용해서 Roll Pitch Yaw를 구하려고 하는데요.
Yaw 값을 구할 때 가속도 센서의 z축 값으로 구해도 되는거죠?
실험 하신거보니 자이로센서 2개를 이용해서 Yaw값을 구하신거 같아서요.
3축 자이로와 3축 가속도를 가지고는 Yaw-Pitch-Roll을 검출 하기 아주 어렵습니다. Yaw를 검출하기 위해서는 별도의 센서(일반적으로는 지자기센서)를 하나 더 사용하셔야 합니다.
3축 가속도 지자기 통합센서에 3축 자이로 센서를 사용하고 있습니다.
pitch와 roll은 가속도와 자이로센서로 보상필터 이용해서 쉽게 구해지는데
Yaw값은 지자계 센서의 데이터를 atan(Y/X) 만 해주면 되는건가요? 필터 사용이 필요가 없나요?
x축 중심으로 회전하는 각도인 Roll을 알기위해 자이로에서 x축 중심회전 각속도와 가속도센서의 z축과 x축을 일반적으로 사용하죠.
그런데 yaw를 알기 위해서는 가속도센서를 사용하는것은(pitch와 roll이 0도라면)의미가 없어집니다. 이때 지자기센서의 출력값을 자이로와 함께 사용하게 됩니다.
그런데 일반적이라면 지자기 센서만 해도 각도가 잘 나오니까 마치 필터가 필요없는듯 보일수도 있는데요.
사실 지자기센서는 주변의 자기성분에 엄청 영향을 많이 받습니다. 그래서 역시 필터가 필요합니다.
필터가 필요하다면 혹시 보상필터로도 적용이 가능한가요?
가속도데이터 대신에 지자기센서의 각도를 넣어서 측정하면 되는 건가요?? 어제 한번 자이로값과 지자기값 엔코더각도 데이터 얻어서
파라미터 추정하고 프로세서에 적용해봤는데 드리프트가 발생해서요.
제가 잘 못한건지 궁금합니다. ㅜ
글쎄요. 상보필터는 주파수 특성이 다른 두 결과를 융합하는거라 실제 가속도센서와는 다른 설계값을 찾아야할겁니다.
아니면 아예 칼만을 적용해보는것도 괜찮다고들 하더군요.
그렇다면 칼만을 찾아봐야겠네요.
그래도 블로그에 와서 많은 것을 배워갑니다.
모르는게 너무 많아서 질문이 잦을 듯 하네요 ㅎㅎ;;
감사드립니다~!!
네.. 저도 칼만은 사용해보지 않았답니다.^^
안녕하세요. 센서 공부하면서 들어왔는데 정말 많은 자료를 오픈해두셔서 잘 보았습니다.
질문이 하나 있는데요, 저는 자이로와 인클리노미터로 각속도를 구하고자 합니다.
인클리노미터에서 나오는 각도가 1차 low pass filtering을 하고, 자이로에서는 1차 high pass filtering을 합니다.
그리고 각도가 LPF를 지나고 나온 후 미분해서 나온 각속도와 자이로가 HPF를 지나고 나온 각속도를 더해줘서 각속도를 받아봤는데 자이로에서 그냥 바로 받은 신호보다 잡음이 심해졌는데 이게 왜 이런지 모르겠네요.. LPF와 HPF의 time constant는 cutoff freq.를 0.1Hz로 해서 계산한겁니다. cutoff를 바꿔보아도 잡음 범위같은게 변하긴 하지만 도저히 잡히지가 않아서 질문드립니다. 어디가 잘못됬는지 궁금합니다.
inclinometer -- LPF ------------------------- ∑ ------ 각도
└----- 미분 ----- ↑ --┐
┌~~~~적분~~~~~ ┘ ↓
gyro -- HPF ------------------------------- ∑ 각속도 ; 여기 각속도에서 신호가 잡음이 심하게 보여서요..
그림이 이해되셨으면 좋겠습니다. 부탁드릴게요.
상보필터는 센서의 특성에 따라 정해지게 됩니다.
일단 각속도를 측정하고자 하셨다는데, 그러면 자이로 하나만 가지고 측정이 가능한데.. 왜 구지 필터를 쓸려고 하시나요?
그리고 혹시 각도를 측정할려고 한다면 인클리노메타 하나면 될텐데, 왜 자이로랑 융합할려고 하셨나요? 혹시 인클리노메타가 응답속도가 늦어서 그러셨나요??
보상필터라는게 정확히 어떤 역활을 하는 것인가요?
그 오차값을 줄여나가도록 피드백 하는 역활을 하는 건가요?ㅠㅠ
보상이 아니라 상보입니다. 상보필터라고 하고 영문으로는 complementary filter라고 합니다. 주파수 특성이 다른 두 센서를 서로 보완한다는 의미이지요.
안녕하세요
자이로센서와 가속도센서를 이용해서 인체 모션캡쳐를 하려고 합니다.
말씀하신데로 상보필터를 사용하면
동적인 상황에서도 각도를 구할 수 있게되는지 궁금합니다.
시간이 되신다면 자세히 알려주시면 큰도움이 될 것 같습니다.
ehdwns0817@daum.net 으로 답변 부탁드리겠습니다.
가속도 성분이 높은 경우는 살짝 정적인 각도를 측정하기 어렵던데요.
동적인 상황에서 각도를 구할 수 있다는 건가요..??
그렇습니다만.. 방금 댓글에서 이야기했듯이 가속도성분이 얼마나 큰가에 따라 성능의 차이가 좀 나겠지요. 그리고 정확한것은 확답하기 쉽지 않습니다. 동적인 상황이라는 것도 얼마나 열악한 상황인가에 따라 다르니까요...
질문 답변에 감사합니다.
조언 덕분에 자이로 센서를 이용하여 각도를 알아내는 것 까진 성공했습니다.
앞으로 헤쳐나가야할 길이 멀기때문에 많은 도움 부탁 드리겠습니다.^^
감사합니다.
제가 도움을 드린건 없어 보이는데요.
아마 본 문의 글과 여러 자료를 공부하시면서 성공하신듯합니다.
의외로 성공하고 나면 그다음부터는 일사천리로 또 진행되지요..
화이팅입니다.^^
상보 필터를 구현할때 세타값을 구하는 식이 이해가 잘안갑니다 ㅠㅠ
1/s는 적분을 하는것을 말하는 건가요??
네 적분입니다. 블럭선도에서부터 식이 유도되어 내려온것입니다.
자이로센서는 센서의 기울어짐을 유지할 때의 각을 보여주지만 각도가 조금씩 더해지거나 작아지고,
가속도 센서는 센서의 기울어질때는 각을 구하지만 기울어짐을 유지하면 각을 알 수 가 없는데
이 두 데이터를 합치면 동적인 상황에서 혹은 정적인 상황에서의 각을 구할 수 있는 것이 맞나요??
솔직히 말씀드리자면.. 저는 계속 사용하시는 동적인? 정적인?의 의미를 모르겠습니다. (단어뜻말구요.) 그리고 질문의 의미도 ....
아무튼 다시 표현하면
자이로센서는 각속도를 출력하는 센서이고 이를 적분해서 각도를 얻어야하는데, 적분의 오차가 누적되어 제대로된 각도를 얻기가 어렵습니다.
가속도센서는 가속도성분으로 각도를 구할 수 있지만, 병진운동 성분이 인가되는 순간 구한 각도가 틀렸을 확률이 높습니다.
상보필터(혹은 많은 필터들이)는 이 둘을 융합해서 각도를 구하는 것입니다. 상보필터는 여기서 약간의 단점이 가속도성분이 크면 각도를 구하는데 조금 어렵지만, 제가 포스팅한 글 어디에서 이야기했듯이 밸런싱 로봇 정도 제어하는데는 문제가 없었습니다.