검색결과 리스트
글
그럼 이제 대단원의 최종회를 시작해볼까요???^^
먼저, 연재 중간에 기구부를 변경했었습니다. 위의 메인프레임과 모터 바퀴는 [관련글]에서 언급한대로 디바이스마트에서 구매했습니다.
그리고, 자이로센서와 가속도센서를 장착하고, 처음 세팅을 위해 수평계를 장착했습니다. 자이로센서는 InvenSense사의 IDG300이 장착된 모듈이고, 가속도센서는 Freescale사의 MMA7260QT가 장착된 모델로서 모두 디바이스마트에서 구매가능합니다. 혹은
을 장착하셔도 괜찮을 것입니다.
NT-ARSv1 : 관련페이지
메인 프로세서는 DSP 2812를 장착한 Realsys사의 보드를 사용했고, DC모터 드라이버로는 LMD18200을 사용했습니다.
또한, 기본 컨셉은 [관련글]에서 밝혔듯이 레고의 마인드스톰의 동역학을 따라간 후, 차용했습니다.
로봇의 진행방향의 각도는 Psi이고, Theta는 각 모터의 회전각도의 평균입니다.
또한, 두 모터를 사용하기때문에 사실상 Yaw제어가 필요합니다. 그래서 Phi라는 상태를 또한 설정했습니다.
결국 우리의 제어목적은, 로봇이 똑바로 서있고(Psi = 0), 제자리에 가만히 있고(Theta = 0), 한 방향을 똑바로 바라보는(Phi = 0) 것입니다.
그래서, 레고마인드스톰의 동역학을 따라하긴 했지만, 저는 조금더 진행해서, 더블닷에 관한 식으로 변형합니다.[관련글]
그리고, 이를 선형화해서 LQR제어기를 설계하고, 또한 이를 MATLAB/Simulink를 통해 시뮬레이션을 했습니다.[관련글]
이제, DSP 측에 이식(보통 Embedded)해야죠. 먼저 LQR로 도출된 제어기를 사용하기 위해서는 각 상태를 알아야합니다. 저는 Psi, Theta, Phi, dot_Psi, dot_Theta, dot_Phi를 상태를 잡았습니다. 그러므로 이 여섯개의 수치를 측정해야합니다. 그 전에 미분-정확히는 차분-을 수행하기 위해 일정한 샘플링 타임을 유지할 필요가 있습니다. 그래서, 샘플링타임을 10ms로 설정하고, 10ms 마다 타임인터럽트를 걸어줍니다. 결국 메인 제어코드는 타임인터럽트 함수안에 있게 되는 것이지요.
285번행부터 303번행까지는 가속도센서와 자이로센서의 영점을 맞추기 위해 초기 10초를 대기하고, 그 평균을 오프셋으로 지정하는 작업을 합니다.
그리고, 수행되는 코드에서 308번행부터 310번행까지는 ADC를 수행하여 그 오프셋을 빼줍니다. 그리고, 313번부터 328번행은 구간평균(혹은 이동평균)법을 수행해서 5샘플의 평균을 현재의 수치로 사용하도록합니다. 그리고, 자이로센서에서 받은 값은 오프셋과 스케일팩터를 고려해서 바로 로봇이 기울어지는 각속도(dot_psi)로 사용합니다. 아.. 그런데, 기구적으로 장착할때 자이로센서를 반대로 설치하는 바람에 마이너스가 붙었네요.ㅠㅠ
그리고, [관련글]에서 이야기했던 자이로센서와 가속도센서를 이용해서 각도를 추정하는 보정필를 C로 구현[관련글]했습니다. 만약 각도추정 필터의 제작에는 관심이 없이, 그저 각도 추정에만 관심이 있다면
을 참조하셔도 됩니다.
NT-ARSv1 : 관련페이지
이렇게 해서 로봇이 기울어지는 각도(psi)와 그 각속도(dot_psi)는 측정했습니다.
이제
바퀴를 구동하는 모터에 내장된 엔코더를 이용해서 로봇이 이동한 거리를 의미하는 theta를 측정해야합니다. 그러나 같은 모터가 반대방향으로 달려있어서 하나는 부호를 바꿔줘야(345번행-346번행)합니다. 거기서 기어비(50)와 한 바퀴의 펄스수(13)와 DSP 내부의 체배수(4)를 곱한 2600으로 나눠주고, 라디안으로 생각하면 각도로 환산됩니다. 그리고, theta와 phi를 구하게 됩니다.
이제, theta와 phi의 속도성분을 구해야하는데, 이것 역시 문제가 있는게 엔코더 신호를 그냥 단순히 차분하면, 예상외로 이상하다는 것을 확인할 수 있습니다. 이는 엔코더의 분해능이 높지 않을때, 차분하면 순간적으로 높은 값이 나타나서 제어성능을 떨어트릴 수 있습니다. 보통 정교한 제어를 해야하는 경우 펄스와 펄스사이의 시간을 직접 측정해서 속도성분을 찾는데, 사실 펜들럼류의 로봇들은 그렇게까지 정교하지 않아도 제어 성능을 보장받을 수 있습니다. 그래서 위에 보이다시피 역시 구간평균법을 적용해서 theta와 phi의 속도 성분인 dot_theta, dot_phi를 구하게 됩니다.
이제 상태를 모두 측정할 수 있게 되었습니다.
|
|
그럼, 제어기는 어떻게 구현할 까요.??
[관련글]에서 단지 이론적으로 구했던 제어 게인 K1, K2를 그대로 프로세서에 인가하겠습니다.
그래도 되냐구요??
튜닝하지 않아도 되냐구요??
어떻게 이론이 실제와 같냐구요??
시사, 정치, 사상, 경제 등의 인문사회 분야가 아니라 공학이라면, 저는 이론과 실제는 상당히 근접한다고 말하고 싶습니다. 인터넷을 서치하다가 동역학과 시뮬레이션까지는 정말 잘 해놓고, 실제로 적용할 때는 정작 튜닝을 너무 과도하게 하는 경우를 자주 보게 되는데, 그럴거면 왜 그 복잡한 이론적 접근을 수행했는지 묻고 싶습니다.
설계된 제어기가 제대로 동작하지 않는다면, 제어기 디자이너의 실력부족으로 현실을 충분히 반영하지 못했기 때문입니다.
훌륭한 제어기 디자이너는 요구되는 제어목적을 수행하기 위해 버리고 간략화할 것이 무엇인지 판단하고, 제어 목적에서 중요한 요소는 놓치지 않고 반영할 수 있어야합니다.
- 아직은 초보 제어기 디자이너 PinkWink 생각 -
설계된 제어기가 제대로 동작하지 않는다면, 제어기 디자이너의 실력부족으로 현실을 충분히 반영하지 못했기 때문입니다.
훌륭한 제어기 디자이너는 요구되는 제어목적을 수행하기 위해 버리고 간략화할 것이 무엇인지 판단하고, 제어 목적에서 중요한 요소는 놓치지 않고 반영할 수 있어야합니다.
- 아직은 초보 제어기 디자이너 PinkWink 생각 -
응?? 쓸데없는 이야기를 갑자기 해버렸네요. 그래서, 위와 같이 각 모터에 인가할 전압을 생성합니다. 그렇게 동역학을 유도하고, 선형화해서, LQR제어기를 꾸몄는데, 겨우 370번행과 371번행, 딱 두줄에 제어기는 구현되었네요.^^
이제, 마무리네요. 동영상입니다.
대략 10초대에서 화면이 위로 올라가는데, 저 로봇이 아직 배터리를 장착하지 않아서 전원선입니다. 줄로 매달아서 사기치는게 아니냐는 의문을 가지실까바 화면을 위쪽까지 올려봤습니다. 중반부터는 자로 툭툭 때리는 장면도 역시 확인하실수 있습니다.
휴~~ 길고 긴 연재를 마쳤네요. MATLAB 기초 연재할때는 진도가 잘 나가길래 아무생각없이 이번연재를 수행했다가 생각보다 진도가 나가지 않아 죄송스럽습니다. 다음 부터는 연재할때 좀 생각하면서 해야겠어요...^^
아 그리고, 동영상을 하나더 추가합니다. 클. 유투브에 올린건데요. 뭔가 다른 모습도 있어요^^
'The Robot > Robot by PinkWink' 카테고리의 다른 글
[스케이트보드로봇] 시작하며... (8) | 2011/04/06 |
---|---|
스케이트보드 로봇 (Skateboard Mobile Robot) (16) | 2011/03/01 |
메카넘 휠을 이용하면 재미난 로봇을 만들 수 있어요. (10) | 2011/01/13 |
[밸런싱 로봇 만들기] 작은 로봇을 하나 완성해서 큰 기쁨을 얻다 (103) | 2010/07/18 |
[밸런싱 로봇 만들기] 10. LQR 선형제어기 설계 및 MATLAB을 이용한 시뮬레이션 (50) | 2010/07/03 |
[밸런싱 로봇 만들기] 9. 기구부 재구성 및 모터 파라미터 수립 (56) | 2010/06/30 |
[밸런싱 로봇 만들기] 8. 동역학 모델 구축하기 (최종) (24) | 2010/06/22 |
[밸런싱 로봇 만들기] 7. Lego Mindstorm 동역학 따라하기 (32) | 2010/06/20 |
드뎌 졸업을 할수 있겟습니다. ^^
그래 졸업할 수 있다는 것을 축하한다.. ㅋㅋㅋㅋ
정말 대단합니다.
로봇을 만들다니 축하드립니다.
감사합니다.^^
우와 정말 동영상을 보니 멋집니다! ㅠ.ㅠ
전 언제 저런거 해볼수 있을까요 ㅠ.ㅠ
지금부터 하시면 되죠^^
작은 로봇이지만, 다 만들고 나면... 즐거움이 아주 크답니다.^^
저는 그저 어렵게만 느껴지지만 동영상은 놀랍군요. 참, 영상본 후에 그 아래 글을 읽었는데 전 전혀 그런 '사기'라는 생각을 안햇답니다. 그래서 갑자기 카메라가 왜 위를 비추나 했었지요.
히히.. 소심해서 그렇지요... 뭐 사실 줄이 늘어져 있어서 그 줄이 지탱하는게 아니라는 것은 딱 봐도 알 수 있지만, 그래도 혹시나 하고 말이죠^^
드디어 완성을 했군요,, 박수를 보냅니다. 수자로 문자로만 보다가
이렇게 보니 제가 만든 착각에...ㅋㅋ
네.. 감사합니다. 어찌어찌 하다가 만들어졌네요^^
이번엔 미리 만들어놓은걸 연재한게 아니라 만들면서 연재를 하니... 문제가 좀 생기더군요.. 너무 산만하다고 할까요???^^
다음엔 연재를 할지 말지를 좀 신중하게 결정해야겠어요... ㅠㅠ
햐~~ 움직이는 진짜 로봇이네요.
어릴 적 로봇 만화를 보면서 로봇을 만드는 상상을 하곤 했었지요. ^^
저도 로봇태권V를 만드는 상상을 하곤 했었습니다. ㅋㅋ
안녕하세요, 전산학과 석사과정 공부하고 있는 학생입니다.
이번에 로봇 관련해서 뭔가를 해보려고 하는데요, 4wheel skid steering 로봇을 기반으로 해서 공부를 해보려고 해요. 해당 로봇을 제어하고 싶어서 관련 논문을 찾아보았습니다만, 제가 가진 기반지식이 SW나 기본적인 컴퓨터 구조가 전부인지라 너무 어렵고 무슨말인지 하나도 모르겠더라구요.
그래서 막막한 마음에 검색하다가 블로그에 들어오게 되었습니다. 제가 논문에서 봤던 흐름이랑 거의 같은 흐름으로 문제를 푸신걸 보고 감탄했어요.
제가 가진 기반지식은 앞서 말씀드렸다시피 컴퓨터 SW/ 구조 정도인데 핑크윙크님이 하신것 같이 로봇을 실제로 구현하려면 무엇을 공부해야 하나요?
뭔가 새로운걸 만들고 싶은것은 아니구요, 논문에 나와있는 dynamics와 controller를 구현해보고 싶은 것인데요.. dynamics와 control parameter들이 coupling 되는 부분부터 막히더라구요.. 제가 무엇을 공부해야 하는지 조언해주신다면 정말 큰 도움이 될 것 같습니다!!
제가 구현하고 싶은 논문은 이거에요.
Trajectory tracking control of a four wheel differentially driven mobile robot - L. Caracciolo, 1999 IEEE IC on robotics & automation
http://www.dis.uniroma1.it/~labrob/pub/papers/ICRA99_SkidSteer.pdf
4wheel skid steering 로봇의 정확한 의미는 잘 모르겠습니다만, 4개의 바퀴로 구동되는 일종의 이동로봇이라고 하면, 관련된 동역학을 이해하는 것이 먼저입니다. 동역학을 이해하는 과정은 찾으신자료를 따라가는 방법뿐입니다. 물론 찾은 자료가 제어기설계까지 가지고 간다면, 그것도 따라가는 것이 좋아보이지만, 단순 구현에 목적을 두고 계시다면, (자동제어 라는 이름의 어떤 책이든 참고하셔서) 먼저, 동역학을 동작구간에서 선형화를 수행하시고, 상태방정식을 구하신 다음, 가제어성을 만족하는지 확인하시면 됩니다. 만약 가제어성을 만족한다면, 일단, 아주 간단한 제어기 설계가 가능해집니다. 제가 소개한 LQR 같은 걸로 말이죠.
그럼 왜 논문의 제어방법을 따라가는 것은 어렵냐면, 대체로, 제어기법을 소개하는 논문들은 성능향상을 위해 기존의 방법보다 나은 점을 부각시키고자 하기 때문입니다. 즉, 어렵다는...ㅠㅠ
친절한 코멘트 감사드립니다.
제가 궁금했던 것은 바로 그런 용어들, partially, fully linearizing 이라거나 linear controller / nonlinear controller 이런 용어들을 이해하려면, 어떤 교재를 참고해야 할까 하는 점이었어요. 제 기반은 SW라서 이런 기계적인 부분들을 전혀 몰라서요.. 일단 그 자동제어 관련 책을 참고해보도록 하겠습니다. 또 추천해주실만한 게 있나요?
그러니까 말씀하셨듯이 동역학을 이해하고, 선형화를 수행하고, 상태방정식을 구하고, 제어성을 만족하는지를 확인하기 위해서요. 제 기반지식은 저를 기계과 학생이라고 보신다면 아마 학부 1-2학년 수준정도 일거같아요.
네.. 일단.. 흐름은 용어로 알려드렸으니...^^
책이나, 인터넷을 참고하셔서 찾아보셔야하는데요.
먼저, DORF의 자동제어책을 권해드립니다. 그런데 이 책이 좀 분량이 많고 어렵게 설명되어있습니다.
조금 더 쉽게 접근하실려면, "제어시스템공학 임동진 저"를 추천해드립니다.
제 블로그에서는
동역학 유도에 대해 설명이 그나자 자세히 되어있는 글은 http://www.pinkwink.kr/212 입니다. 그리고, MATLAB을 이용한 시뮬레이션은 http://pinkwink.kr/283 에서 다루었고, 선형제어기법 중 LQR을 이용한 방법은 http://pinkwink.kr/286 에서 소개를 하고 있습니다.
와우 핑크윙크님 이거 벌써 만드셨군요 ㅋㅋ
축하드립니다!
2812를 사용하셨군여 혹시 2812에서 PC로의 데이터 로깅은 어떤 방법을 사용했는지 알 수 있을까요?
감사합니다.^^.. JTAG이 연결되어 있는데, 거기서 시리얼 통신으로 데이터를 받고있습니다.^^
질문이 있는데요. 로봇 이론 중에 텐서가 많이 쓰이나요? 지금 텐서 공부중인데 쓸모가 있을까 해서요. 스트레스나 이너셔텐서 빼곤 그다지 안보이네요 ㅋ
응? 텐서가 뭔가요?? 크헉.. 사실.. 뭐 저라고 다를것 없이 제가 사용하고 있는 것만 알고 있답니다. 뭐.. 아직까지는 불편함이 없으니 말이죠...^^
오랜만에 들어 왓는데 정말 멎지시네요...
전 급하게 하다가 체하고 잠시 미뤄두었습니다(단순히 결과만 추구하다가 ;;;..)
핑크님 자료를 토대로 공부좀 더하고 도전해야겠습니다 ㅡㅜ
전자과이지만 제어에대한 욕심은 정말 버릴수 없네요 !!!
더운데 건강하세요~
전자과에도 제어전공이 있는 걸로 아는데 아닌가요???
약간은 재미있게 공부하는 것도 좋은 것같습니다.
급하면 재미를 잃어버릴 수도 있잖아요... ^^
궁금한게 있습니다.
저기 위에서요 가속도센서 각도 구하는 부분에서요
제가 알고있기로는요 각도를 구할려면
(adc현재값 - offset)*스케일팩터;
각도 = atan(y/z)*180/3.14 ;
로 알고있거든요 근데 핑크님은 위에 스케일펙터를 안해주신거같아서요..
그래도 값이 나오나요?? 안해준 이유가있나요??
스케일펙터를 곱해줄 필요가 없어서 입니다. y/z를 할때, 같은 값을 가지는 스케일펙터는 약분될 것이니까요.
핑크님~
엔코더 값받아서요~ 각도로 어떻게 바꾸어주죠??
1/51감속비에 26펄스인데 26*51=1326, 4채배하면 1326*4=5304 펄스가 한바퀴 펄스가 되는건가요?? ㅠㅠ 이해력이 부족해서 자꾸 질문하게 되네요...
말씀하신 것이 맞다면..
한펄스 = 360/5304 도... 혹은
한펄스 = 2*pi/5304 라디안 이 되는 것이지요.
누구나 이해력은 조금씩 아쉬운것이 있습니다. 저두요.
그래서 우리는 집중이라는 고난을 질문과 학습이라는 도구로 이겨가나봅니다.
핑크님 답변 정말 감사합니다~ ^^ 좋은 하루되세요~
네.. 저에게 정말 필요합니다... 좋은 하루...^^
비밀댓글입니다
질문은 블로그를 통해서만 받는답니다.
그저....어렵기만 하네요 ㅎㅎ
저는 예전엔 이와같은 것에 관심을 가질줄도 모르는 학생이었습니다. 그에 비하면 '다질문'님은 당시의 저보다 훨씬 앞서가고 계십니다. 제 블로그에 오셔서 질문을 남기는 모든 분들께 저는 문득문득 부러운 감정을 가지기도 한답니다. 우리모두 화이팅입니다.^^
위의 소스코드에서 ays, azs, gxs배열들이 무슨값인지, 무슨 의미인지 궁금합니다.... 위의 소스코드로만 봐서는 저 각 배열요소들의 초기값도 알 수 없어서 무슨 의미인지 잘......모르겠습니다ㅎㅎ
그것은 구간평균법을 적용하기 위해 현재의 측정된 수치와 이전에 측정된 4개의 샘플을 저장하는 배열입니다.
비밀댓글입니다
우와.. 아주 큰걸로 만드셨네요^^ 잘보았습니다.^^
멋지신데요^^
비밀댓글입니다
정확하게 답변드리긴 어렵지만, 저기서 사용한 마이크로프로세서의 기능은
10ms마다 타임인터럽트,
ADC 3개
PWM 2개
그리고, 소숫점 연산
이 기능뿐입니다.
멋지네요... 이렇게 잘 정리하시고, 공유도 해주셔서, 눈팅만 하고 가려다가 감사인사를 남깁니다. 건승하십시오...^^
네.. 감사합니다.^^
오랜만에 찾아뵙네여^^;
ICROS 논문지에서 핑크윙크님을 만나게 될줄이야 ㅋ
논문 잘 봤습니다.^^
정말 부족한 논문인데... 오히려 민망합니다...ㅠㅠ
저는 졸업논문으로 밸런싱로봇을 만들려고 찾아보던중에 PinkWink님의 블로그를 보고 기초자료를 삼아서 만들려고 합니다.
저도 논문을 보고 싶은데 어떻게 찾아보면 될까요?
http://pinkwink.kr/389 에 소개했습니다. 그러나 블로그에서의 논문 배포는 학회지와의 저작권문제가 있어서 전문을 소개하고 있지는 않습니다. 그러나, 보통 일반적으로 대학교에서는 학회지 수록 논문들이 다운로드가 가능하니, http://pinkwink.kr/389에 소개한 제목대로 검색하시면 될것같습니다.
ㅎㅎ오랜만에 눈팅만 하다가 글을 남깁니다. ㅋ
저 밸런싱로봇을 허접하게 만들엇어요 물론 서지는 않아요 ㅋ 죄송한데 질문이 하나 있는데요..
그런데 제가 모터를 스텝모터를 사용햇어요여기 혹시 스텝모터보다 dc 모터를 사용하는게 낳은가요?? 그리고 동역학 모델을 세우지 않고 한다면 윙크님이 하신 것처럼 안정적인 밸런싱은 얻을 수없겟죠?ㅋ
오랜만입니다.^^. 저도 그간의 소식이 궁금했습니다.
동역학 모델을 기반으로 하지 않고서 제어기(PID제어기의 경우 두개)를 설계해도 됩니다. 그렇게 해도 잘 동작하는 것을 많이 봤습니다. 또한, 밸런싱로봇에 국한 시킨다면, 가속도 센서를 이용한 각도검출만 해도 충분히 동작을 보장받을 수 있습니다.
단지, 저의 경우는 각도추정에 목을 메고 한것이고, 그 각도추정이 잘 된다는 증거로 밸런싱로봇을 했습니다.^^
그리고, 저는 습관적으로 동역학유도후 시뮬레이션, 그 후 제어기 설계를 좋아합니다.^^
인터넷의 많은 동영상을 보면, 밸런싱로봇을 그냥 감으로 동작시키시는 분들도 무지 많으며, 그 분들이 잘못된것이라는 이야기를 한 적은 없습니다. 하여간 각자의 입장에서 쉬운 방법으로 접근하는 거니까요^^
ㅎㅎ 다리는 다낳으셧는지모르겟네요 ㅋ 파라미터 추정에 문제 가 있엇는지 윙크님이 주신 kikp 값을 기준으로 시뮬링크상에서 스코프와 먹스 를 사용해서 비교하면서 계수를 맞췃어요 ㅠㅠ그런데 수정할게 넘많네요 휴
제발 쓰레기통으로 들어가지 만않앗으면 좋겟네요 그리고 전 요새 윙크님이 추천하신 matlab을 사용한 칼만필터의 이해라는 책 을 이해하기위해 부단히 노력중입니다. 보상필터 함해보고나니까 칼만필터도 해볼까?? 라는 근거없는 자신김이 생기네요 ㅋ
항상 뭔가를 이룩하고나면 다음 과정에 욕심이 생기지요^^
똑같은 과정을 따라서 수행해도 잘 되지 않을때가 있습니다.
그러다 어느순간 갑자기 또 본궤도에 오르기도 하구요.
저도 제가 블로그에 올린 한 편의 글 만큼을 하기 위해 오랜기간 실험하고 만들어낸것이니까요^^
안녕하세요 저는 제어쪽을 공부하는 학생입니다.
핑크윙크님께 질문이 있습니다.
모터엔코더에서 수집한 펄스를 샘 하려면, 펄스 카운터가 있어야 한다고 알고 있는데, 위의 밸런싱 로봇에서는 어떤 소자(카운터)를 사용하고 있는지 여쭙니다.
이 로봇은 DSP2812를 메인 MCU로 사용하는데요. 그 아이가 엔코터 카운터를 가지고 있습니다. 그래서 별도의 소자를 사용할 필요가 없었습니다.
아 그렇군요. DSP는 AVR MCU보다 훨씬 좋은 친구군요.
집필하신 논문도 보고 갑니다.
정말 훌륭하시네요. 존경합니다.
그런 기능하나로 좋다고 하긴 그렇지만,
저희가 요즘 사용하는 Cortex-M3나 DSP들이 엔코더 해석기능 2개에, 여러 다양한 통신 방법을 지원하는데다.
가격도 아주 저렴하더라구요^^
늦게나마 잘 보고 갑니다..
저두 막연한 공상만을 해봤는데 이렇게 자세히 설명해주시니 감사할 따름이네요..
어찌보면 아무것도 아닌것처럼 보이지만 이런 복잡함과 치밀함이 필요하다는것에 놀랄따름입니다..
아닙니다. 실제 인터넷의 여러 동영상을 보면 저처럼 이런 과정을 거치지 않아도 잘 만드시는 분들이 많습니다.
단지 전 저한테 익숙한 방법으로 시도했을 뿐입니다.
그래도.. 이렇게 좋다고 해 주셔서 감사합니다.
아 근데... 답방을 갔더니..
로긴한 사용자만 댓글을 달게 되어있더군요..
그래서 인사를 못드렸습니다.^^
죄송하지만...만드신 저 밸런싱 로봇에 들어가는
소프트웨어가 nxt mindstorm 로봇에도 적용이 되나요?
빠른답변 좀 부탁드립니다...ㅠ
제가 마인드스톰의 동역학과 제어기설계에 대한 문서는 참조했습니다만, 실제 마인드스톰을 만져본건 아니라, 답변드리기 곤란합니다.
PinkWink 님 항상 재미있는 게시물에 감사합니다. ^^
로봇 및 모터의 구동 성능을 실험하여, Matlab으로 결과를 뽑아 보고 싶습니다.
예를 들어 Step function을 입력으로 주고 모터의 추정을 뽑아 보고 싶다면 일단 머리 속에 생각되는 것이...
로봇에서 step fnc값과 모터의 상태값을 PC로 보내서 그것을 text로 저장하여, matlab으로 그리는 것인데요.
여기서 step fnc값을 로봇에 저장하여 그것을 변화되는 타겟으로 하여 모터가 추정하도록 하는 것이 일반적인 방법인가요??
아니면 PC에서 로봇에 step fnc값을 보내어 그것을 타겟으로 참고하여, 모터가 추정하도록 하는 것이 좋을까요?!
만약 pinkwink님이시라면 어떠한 방법으로 하실런지... 궁금합니다.
(ps. 실제 플랜트에 대한 실험입니다. 간단히 요약하자면, 디자인 입력을 어떻게 로봇에 주느냐 입니다. 사용하는 MCU는 DSP 2812 입니다.)
'따라하게...'라는 부분은 의미상 조심스럽습니다. 시스템을 확인하기 위해 인가하는 시험신호중 계단입력은 closed가 아닌 open-loop입니다.
그러니 일정 전압을 인가하는 것으로 step 신호의 인가를 마쳐야합니다.
음... 일정 전압을 인가하는 것으로 step 신호의 인가를 마쳐야 한다는 말이 이해가 잘 가지 않습니다. 보다 직관적으로 말씀을 드리자면... pink님이 만드신 밸런싱에 대해 다루어보면... 이동거리에 대해 제어를 하셨는데, 몇초후 얼마만큼 이동해라 라는 디자인된 신호를 주신다고 하면, 이 신호를 MCU에 심어서 하시는지... 아니면 통신하는 부분(PC)에서 이 디자인된 신호를 샘플링마다 뿌려서 주시는 것인지 궁금하네요,
분명 첫 질문은 step입력을 어떻게 인가하는 가라는 것이었지 않습니까?
계단입력을 입력신호로 사용하신다근 것은 5V 혹은 10V등의 전압을 그냥 인가하겠다는 뜻입니다. 그러니 같은 전압을 계속인가하시면 됩니다. 그것이 MCU를 통한 직접입력이든 외부에서 통신을 통해 인가하든 시스템입장에서는 차이가 없습니다.
그리고, 첫 질문에서 step을 입력으로 주겠다고 하시고, 다시 step을 타겟으로 따라가겠다고 하신것이 다른 이야기입니다. 입력을 step으로 준다는것은 시스템의 응답특서을 확인하는 용도등으로 입력을 주는 것이고, step을 따라가게 하겠다는것은 시스템의 출력을 tracking.. 하게 하겠다는 뜻인데요.
아, 용어구분을 하지 않아서 혼동을 일으킨것 같습니다. 죄송합니다. 결론부터 말씀을 드리자면, tracking 하고자 하는 의미 입니다. 그리고, MCU를 통한 직접입력이든, 외부통신에서 주는 방법이든 차이가 없다고는 생각하지만, general한 방법이 궁금해서 질문을 한 것입니다. ^^
네.. 그러셨군요. general한 방법이란게 없지 않을까합니다.
LabVIEW를 쓰는 사람들은 PC에서 전송된 신호로 제어를 하는 거고, Firmware가 익숙한 사람들은 MCU에서 직접 제어를 하니까요.
general하다는 건 그냥 자신이 몸담고 있는 분야에서 편하게 쓴다는 뜻이기도 한 것 같다는 생각을 요즘 많이 합니다.
네, 그렇군요~ 아직 전문직업에 종사하지 않는 학생입장으로서 현장에 몸담고 있으신 분들은 실험을 어떻게 하고 계신지 궁금했었습니다. ^^ 그리고, 현장에서는 실제 실험을 이런식으로 합니다! 라고 한다면, 그 이유도 궁금했고요 ^^ 흠... 아무튼 참고할만한 대답을 해 주셔서 감사합니다~
좋은 성과와 재미난 공부를 하시기 바랍니다. 화이팅^^
좋은자료 잘보고 있습니다. 저희가 이 자료를 보고 atmega128을 활용하여서 밸런싱로봇을 제작하고 있는데요 모터를 PWM으로 제어하는데 소스 마지막부분 Volt_R,Volt_L을 어떻게 모터에 인가하셨는지 알 수 있을까요?
24V최대값인 경우 PWM 50%라면 일반적으로 (물론 구동회로에 따라 조금씩 다르겠지만) 12V라고 봅니다. 도출된 제어입력을 PWM듀티비로 바꿔주시면 됩니다.
그렇다면 다음부분에 OCR1A=(Volt_L/24)*Top값으로 입력하면 된다는건가요? 그리고 앞뒤 방향에 대해서도 따로 설정해 주어야하는건가요?
ㅎㅎ 글 전반에 걸쳐 나타나지만, 전 레지스터등의 이름은 모릅니다.
제어입력이 -로 나타나면 설정된 방향을 전환시켜주시면 되구요.
항상 잘 보고 있습니다 ^^ 저희가 atmega128과 틸트와 자이로를 이용해서 세그웨이를 만들고 있는데요 저희도 위에 처럼 기준값을 10초정도 잡고 돌아가게끔 소스를 짰는데 이상하게 count를 한번 하고 끝내지 않고 count 했다가 모터를 조금 돌렸다가 다시 count 하는 것 같습니다. 소스를 어떻게 짜면 이런 문제가 해결될 수 있을까요??
글쎄요.. 그와같은 부분은 제가 뭐라 도움을 드릴 수가 없습니다.
디테일까지 어떻게 하기 곤란한 부분이 있어요...ㅠㅠ
pinkwink님~ 글 너무너무 잘 읽었습니다. 감사하고요~
마지막영상에서 로봇이 흔들거리는 것을 없애려면 어떻게 해야하나요?
제어기를 수정해야하나요?
여러가지 방법으로 모색하셔야할듯합니다. 동영학은 정확한지(동역학 모델로 제어기를 구하셨다면), 제어기의 튜닝, 기구적인 무게중심의 문제, 각도 센싱 등등 너무 많습니다. 설계자가 하나하나 집고 넘어가야하지 않을까 생각됩니다.
안녕하세요, 다름이 아니라 저도 저것과 같이 엔코더 타입의
같은 제품을 구입했습니다.
핑크윙크님 회사의 제품이군요 +_+
근데 궁금한게.. 저 엔코더에서 나오는 커넥터가 한국에 연결선이없는데 ㅡ.ㅡ;;
어떻게 저걸 보드까지 끌어다쓰셨는지.. 궁금합니다 -_-;;
아 그리고 한가지 더 궁금한점이 있는데요..^^;;
엔코더 사용법이나 데이터시트 혹은 참고할수있을만한
자료가 있다면 좀 알려주실수있을까요?
음... 아닙니다.
저도 입사는 했지만, 이 글은 입사하기전 학생일때 작성된거구요.
커넥터 연결부는 저희는 당시 아무 문제없이 연결을 했습니다.
dc모터 모델링 한후에 PID제어기를 설계해 세그웨이를 만들고 있는 학생입니다.
핑크윙크님글을 따라가면서 만들어보고싶었지만 너무 난해해 먼저 저한테 좀더 나은 방식으로
한 뒤 따라가볼생각입니다.
아 그런데 여쭤보고 싶은 것은 왜 샘플링 시간을 10ms 로 하셨나요??
간단합니다.. 그렇게 해도 되길래요^^
더 느리게 하고 싶었어요. 그런데 대략 10ms 보다 길어지면 안되더군요.
그래서입니다^^
안녕하세요 밸런싱 로봇으 만들려는 전자과 학생입니다. 혹시 프로그램 라인 282번줄 이전에 는 어떤 내용들이 들어 있는 건가요?
구구절절한 설정과 주석들일겁니다.^^
답변 감사합니다 ㅠ 설정이라면 앞에서한 값들을 말씀 하시는 건가요? 핑크윙크님의 상보 필터를 보면서 공부하는데 많이 어렵네요 ㅠ 상보를 이해하고 제작을 하려는데 잘안되네요
흠 컴파일러에서 프로젝트를 생성하면 발생하는 기본 설정들이 대부분이며, 나머지는 몇몇 운영상에 필요한 함수들이에요^^
안녕하세요 pinkwink님 블로그에서 많은 도움을 얻고있는 졸업을 앞둔 학생입니다.
다름이 아니라 제가 준비하는 졸업작품이 외줄위에서 밸런싱을 유지하는 로봇 시스템인데요.
초기 계획에는 Roll 방향 제어에 Reaction wheel 시스템을 쓰려고 했었는데 여차저차 하다보니 학부 수준으로는 어려울 것 같아 실제 외줄타기를 하는 사람 처럼 긴 봉(막대기)를 시스템에 달아 Roll 방향제어를 하려고 하는데 Pinkwink님 생각에는 봉의 중심을 모터와 연결시켜 시스템의 Roll제어가 가능할지 Pinkwink님의 의견을 들을 수 있다면 감사하겠습니다.
네 가능합니다. 구글링을 조금 해보면 비슷한 실험을 한 사람들이 많았습니다. (예전에 검색했지만^^)
봉을 좀 길게 하시면 더 안정되게 제어할 수 있답니다.^^
안녕하세요.이번에 segway를 이용하여 플젝을 준비하는 학생입니다. pinkwink님 자료를 매일 보면서 공부해 나가고 있습니다.
제어가 처음인데 ...플젝을 해야 하는 상황이어서 pinkwink님의 도움이 많이 필요합니다. ㅠ
매틀랩에서 제어만 하면 굳이 coding은 할 필요없는 것 아닌가요?? coding은 상태측정을 위한 것이죠??
말씀하신 코딩이 뭔가요?
아무튼 제 추측이 맞는지 모르지만 대답을 드리면
MATLAB으로는 시뮬레이션을 한 겁니다. 제어기(실제로는 두개의 PD제어기)가 잘 동작하는지 동역학 기반으로 시뮬레이션을 해서 확인해 본겁니다.
이제 그 제어기를 실제 기구로 만들어진 로봇에 적용하고 이 글의 경우는 C로 짜여졌네요. 제어기를 적용한겁니다.
안녕하세요 핑크윙크님^^ 열심히 블로그를 보며 밸런싱로봇을 공부하는 학생입니다..
글 올리신 지가 꽤 되었지만 궁금한것이 생겼는데 아무도 질문을 하지 않은것 같아서 질문드려봅니다..
위 DSP 쪽 C코드에서...왜 가속도센서의 y,z 성분, 자이로의 x 성분만을 이용하는 것인가요..??
(저는 3축가속도,3축 자이로센서(MPU6050)를 사용중인데 Gyro_x,y,z. ACC_x,y,z 값은 출력가능하나 어떻게 사용해서 6가지 요소들을 구해야하는지 감이 안잡힙니다...)
설명으로는 로봇이 기울어지는 각도(psi)를 구하셨다고 나오는데 소스에는 그 부분이 없는것 같아서요...
제가 못찾는 것인가요..??
dot_psi= -gx*GyroS; 에서 GyroS는 어디에서 값을 가져오는 변수인가요?? 위 소스에는 나타나지 않네요
또한 AccAngle = atan(ay/az); 구문은 어디에서 사용이 되어지는지요.....
너무 질문이 많아서 죄송합니다.... 동역학을 배우지도 않았지만 블로그 글과 답글을 보면서 열심히 따라오고 있습니다. 이제서야 제어기가 몇가지 변수에 들어가는 Gain으로 이루어져 있다는게 이해가 되었습니다.
동역학으로 구성한 공식들은 MCU에서 계산되어져야 하는것이 아니라 밸런싱 로봇 그 자체를 의미한다는 것두요..
조금씩 알아가니 너무 기대가 됩니다. 저 로봇이 서게되는 날을 생각하면요..... 질문이 많아서 죄송합니다^^
날씨가 갑자기 추워졌는데 감기조심하시고 항상 블로그에서 많은것을 얻어가고 있습니다 감사합니다.
일단 이 밸런싱 로봇은 yaw와 pitch만 필요한데요. 응? pitch인지 roll인지는 정의에 따라 다르니 그건 고민하지 말고, 그냥 각도 두개만 있으면 되는데,
yaw는 정확하진 않아도 시스템의 안정성에는 문제가 없으니, 양쪽 바퀴의 회전 각도를 가지고 계산을 하도록 했습니다.
남은게 로봇이 기울어지는 각도 하나만 계산하면 되고, 그건 가속도 센서와 자이로 센서를 융합하겠다는 것이었지요. 그중 한 축만 알고 싶을때 필터에 따라 다르겠지만, 가속도센서의 yz 성분으로 가속도센서의 장착 방법의 영향을 받았겠지만, 아무튼 가속도센서 좌표계를 기준으로 yz평면만 확인하면 됩니다.
그리고 각도를 구하는 소스는 원래는 포함되어 있었는데 약간의 문제가 있어서 수정했구요.
http://pinkwink.kr/338#.UvGCx_l_t8E 에서 확인해보시면 1차 필터를 코드로 구현해놓은게 있습니다. 그거 한줄짜리이니 C 로 구현하는데 큰 어려움이 없을 겁니다.^^.
또 각종 변수를 물어보신게 있는데, 초기화부분을 생력해서 그렇구요. 아무튼 dot_psi는 자이로센서의 출력값을 radian/sec 단위로 환산한 결과여야합니다.
핑크윙크님^^ 저는 지금 6가지 요소들(theta,phi,psi,dot_....)등을 구하였습니다. 그런데 여기서 모든 값들은 radian 값으로 구해줘야 하나요??
(psi값은 각도로 해야하는지 라디안으로 해야하는지 해깔려서요...)
그리고 출력값 Volt_R, Volt_L은 어떤값으로 나오는것인가요??
전압 값이라면... 5v, 12v 이런식으로 나온다는 말씀이신가요?? 사용되는 모터의 최대전압 최소전압을 고려한 부분은 없는것 같은데....어디에서 그것들이 고려되어서 전압으로 나오는 건가요???
지금 최대1024 값을 넣을수 있는 PWM 레지스터를 사용하고 있는데 이 값을 어떻게 듀티비에 맞게 넣어줄 수 있을지 잘 모르겠습니다..
일단은 출력되는 좌,우바퀴의 전압값이 제대로 나오는 것인지도 모르겠구요....답변 부탁드립니다(__)
밸런싱로봇에서 필요한 상태는 진행방향으로 기울어지는 각도와 각속도, 그리고, 옆으로 회전하는 각도와 각속도, 또한 모터 입장에서 직선방향 거리와 속도.. 이렇게 6개의 상태입니다. 이 걸 다 구하셨다는 이야기겠죠. 물론 어느정도 신뢰할 수 있다는 참값과의 비교는 하셨으리라 생각합니다.
그리고, 본 글의 동역학 상~ 모든 각도는 라디안입니다. 그리고, 시뮬레이션으로 올바른 제어기가 설계되었다면, 제어입력의 단위는 volt이며 이는 제어기가 알아서 하는 겁니다. 아무튼 출력은 volt로 나오고, 이를 구동 드라이버에 그대로 인가하기 위해 그 전압에 맞는 PWM으로 변환하게 됩니다. 24V 최대전압인 모터에서 12V라는 제어 입력이 나왔다면, 당연히 PWM 50%가 인가되어야지요.
PINKWINK님!^^ 블로그에 연재하신 글들과 댓글들을 천천히 읽어보고 구현을 했습니다.하지만 아직은 조금 불안한 상태인데요.....처음에 시스템이 시작하였을때 각도값이나 속도값이 크게 변하지 않을때에는 균형을 잘 잡습니다.... 그러다가 몇번 좌우로 움직이고,동작반경이 커지면 그것을 따라가지를 못하네요... 올리신 동영상에서 처럼 민첩한 작동이 이루어지지 않는데요...원인을 어떻게 찾아야할까요??? 문제점을 찾아야 하는데 어디가 잘못인지 감이오질 않습니다.. 실험했던 파라미터가 잘못된것인지....프로그램을 짜면서 센서값의 출력속도나 그런것들이 영향을 받는것인지.... 이것을 찾으려면 어떤방식으로 접근해야 할까요?? 조언부탁드려봅니다...
각도를 안정화하는 제어기 설계가 잘 되어야겠네요.
특히 움직이는 부분은 이 글에서는 레퍼런스를 바꿔가는 형태로 꾸며져 있어서 이대로 따라 하셨다면 레퍼런스 간격을 줄여보시는 것도 괜찮습니다.
몇일만에 다시한번 찾아뵙습니다....
그전에 로봇의 민감도 문제는 해결을 하였습니다.
첫번째 문제는 센서값에 문제가 있었구요 그것이 첫번째 원인이였습니다.(필터상에 수치를 잘못 입력해서요...)
두번째 문제는 모터의 구동주파수가 문제였습니다... 그것은 신경을 못쓰고 있었습니다. 그냥 단순히 PWM에 %값만 넣어주면 된다고 생각했는데 DC모터의 최적주파수를 고려하지않아 응답속도가 느린것이였더군요......
한가지 질문드리고싶은게 있는데 두번째 동영상에서 보이는 트래킹 기술에 대해서도 좀 알려주실수 있으신가요....?? 그부분도 한번 해보고싶어서요^^
그렇군요. 해결하셨다니 축하드립니다.
에러는 특히 이런 종류에서의 에러는 항상 상황에 따라 다른듯합니다. 그걸 해결하는가 못하는가는 확실히 50%이상은 엔지니어의 열정에 달린듯하구요. 아무튼 다시 한번 축하합니다.
트래킹은 여기선 별거 없습니다.
레퍼런스값만 바꿔주었습니다. 에러를 '0'로 추정하도록하고 말이죠^^.
http://pinkwink.kr/362 를 참조하시면 될듯합니다.
아참 어쩌다보니 관리자 페이지에서 테스트하던 위젯으로 알게되었는데, 주소지가 제천으로 뜨는 군요. 방가워용 저도 자주 간답니다. 저희 장인/장모님 댁이 거기거든요. ^^
아! 그렇군요ㅎ 저는 제천토박이 이고, 제천에 있는 세명대학교에 재학중인 학생입니다^^ 항상 PINKWINK님 블로그를 보면서 많은것을 배우고 있습니다~~!!!
위 글에 나오는 트래킹 기술이 쉽게말해 동역학을 유도했던 부분에서 에러를 정정하는 부분을 하나더 추가하고 다시 Gain값을 얻어내는것인가요?? 실제 시스템에서는 어떻게 외란을 주어야하는지....어떻게 적용해야하는지 어렵습니다ㅠㅅㅠ
아직 제글을 이해하지 못하신듯합니다. 트래킹하고자 하는 상태를 x라고 하면, x대신에 x-x_reference를 error라고 하고, error를 상태로 두는 겁니다. 좀 더 쉽게 이야기하면, 흠~~~~ 지금 x값을 0로 두지 말고, 뭐~ 0.5로 한번 시작할때 강제로 바꿔보세요. 그럼 50cm를 이동할겁니다.
안녕하세요 핑크윙크님 쭉 눈팅만하다가 질문을 하게 되네요 ㅎㅎ. 제가 이번에 MSP430 으로 한번 밸런싱 로봇을 만들어보려고 하는데 매틀랩으로 제어기를 만들어 시뮬레이션을 하고 제어기를 MCU에 어떻게 넣는지 궁금합니다.
엔코더는 MCU 보드에 내장되있지 않으면 만들어야 되겠죠 ??
제어기는 제 글대로 따라간다면 단지 PD 제어기 두개가 나올뿐입니다. PD 제어기는 두 개의 제어 게인으로 단지 상태를 측정해서 곱하기만 하면 됩니다. 시뮬레이션을 설명하는 글에서 보면 나타나있습니다.
안녕하세요. 블로그의 내용을 보며 밸런싱 로봇을 제작하고 있는 대학생입니다.
질문이 있어 글을 씁니다.
linear velocity 에 대한 프로파일과
헤딩엥글(파이)의 미분값인 angular velocity에 대한 프로파일을 따라가도록 하고자 할때
6개의 state에 대한 reference를 어떻게 주어야 할지 궁금합니다.
linear velocity 프로파일은 theta_dot에 대한 reference
linear velocity 을 적분해서 theta에 대한 reference
angular velocity 프로파일은 phi_dot에 대한 reference
angular velocity 을 적분해서 phi에에 대한 reference 으로 주며,
psi_dot과 psi는 reference를 0으로 주는 것인지 궁금합니다.
아니라면 어떠한 방식으로 reference를 주어야 하는지 궁금합니다.
레퍼런스는 어떻게 주어도 상관없습니다. 단, 시뮬레이션 해보시구요.^^. 그리고 레퍼런스를 주는 경우는 밸런싱로봇의 각도를 제외하고는 모두 레퍼런스에 대한 현재값의 오차로 상태를 잡아주셔야 합니다.
세그웨이 저도 똑같은 프레임에 atmega128을 사용하고 dc모터모듈과 NT-ARSv1자이로센서를 사용해서 만들려고하는데 도저히 진행이 안되는데 어디서부터 시작을 해야할까요?
아.. 너무 어려운 질문입니다. 혹시 오픈소스쪽은 찾아 보셨는지요?
지금 오픈소스가 인터넷에 있는 소스를 말하는 건가요??
저는 avr스튜디오로 하는데 그럼 c같은데 c로 된것은 없던거 같더라고요
nxt 이거 레고로봇으로 한거밖에 안나와있더라고요
아니요.. avr인지 어떤 mcu인지는 잘 모르지만,
저도 마찬가지로 그 nxt 문서를 보고 따라한 것(ㅠㅠ)이니까요.
그런 종류의 오픈소스를 보고 자기것으로 만들어가는 과정은 있다고 보고... 오픈소스가 혹시 있는지 확인해보는것이 어떨까하는 말을 한 것입니다.
관리자의 승인을 기다리고 있는 댓글입니다