밸런싱로봇 만들기 연재를 시작한지 꽤 되었는데 이제 네번째 글을 올립니다. 지난 두 세주가 너무 바빴네요. 게다가 지난주에는 제가 있는 학교에서 저의 블로그가 둥지를 틀고 있는 티스토리를 차단[관련글]해 버리는 바람에 꽤 애를 먹었습니다. 지금은 완벽히는 아니지만, 잘 해결[관련글]되어서 한 시름 놓았네요.
이번에는 파라미터 찾기에 대해 이야기를 할려고 합니다. 일단 지난번에 기구부[관련글]를 제작하였고, 그 후 동역학 방정식[관련글]을 나름대로(^^) 유도해 보았습니다. 그러나 당시 동역학을 유도할때 관성모멘트나 마찰계수등등을 수치로 제시하지 못했는데요. 이유는 몰라서이지요..ㅠㅠ. 그래서 이번에는 그와 같은 파라미터들을 추정하는 실험과정을 이야기할까 합니다.
일단, 우리는 현재 정확하다고 믿는 동역학 모델을 가지고 있고, 또 실제 기구부도 완성이 된 상태로 이때 사용하기 참 편한것이 파라미터 추정 (Parameter Estimation)입니다. 이 때 조심해야할 것은 적절한 실험을 어떻게 수행하는가... 이죠. 일단 전체 파라미터를 다 추정하는 것은 약간 어렵습니다. 그래서 기구부를
저렇게 거꾸로 매달아 둡니다. 바뀌는 굴러가지 않도록 고정하구요. 그러면, 마치 진자 (pendulum) 처럼 됩니다. 이 상태에서, 로봇 바디의 관성모멘트(J_m)와 바디와 모터축(기어포함)과의 마찰계수 f_theta를 구할 수 있게 됩니다. 여기서 하나 더, 저 바디 부분을 완전한 음.. 그러니까.. 완전한 균일한 질량 밀도를 가진 막대로 볼 수 없습니다. 무게중심이 바디의 센터에 있다는 보장이 없는거죠.
그래서 제가 이번 실험에서 추정하고 싶은 것은, 로봇바디의 관성모멘트 J_m과 로봇바디와 모터축 사이의 마찰계수 f_theta, 회전중심축과 무게중심사이의 거리 l 입니다.
이 실험을 위해서
이런 진자의 동역학
을 이용합니다. 즉, 위 실험처럼 밸런싱로봇을 뒤집어서 일정한 높이에 놓고 자유운동을 시키면 위 동역학대로 움직인다는 거죠. 그럼 그 실험데이터를 가지고 질량 m과 중력가속도 g는 알고 있으니, J_m, f_theta, l을 찾을 수 있다는 겁니다.
실제 실험은 10회를 수행했습니다. 그리고 모터에 내장된 엔코더를 이용해서 회전각도를 시리얼통신으로 PC에 전송시켜 저장합니다. DSP 쪽 코드는 엔코더 해석에 시리얼 전송 기능 뿐이라 생략합니다.^^
그 데이터를 시리얼 통신으로 받았구요. 10개의 데이터를 하나하나 열어서 약간 편집을 해줍니다. 뭐 코드를 잘 짜고 실험환경을 잘 맞추면 원샷에 처리할 수 있지만, 그냥 10번만 할거라서 약간 노가다(^^)를 뜁니다...
저 데이터가 한번 실험한 건데요. 각도를 측정하는 엔코더가 인크리멘탈형이라서 첫 위치를 '0'으로 봅니다. 그래서 일단 0도에서 손으로 일정부분까지 들어올립니다. 그리고 놓는 거죠. (x축은 데이터 갯수를 의미합니다. 시간이 아니라요.) 그래서 저 빨강박스 부분은 실제 자유운동을 한 부분으로 보고 잘라냅니다. 이걸 다른 실험에도 똑같이 적용하는 거죠.
그리고, MATLAB이 제공하는 Parameter Estimation Toolbox를 사용합니다. 그에 관한 설명은
에서 자세히 다루었기 때문에 생략하겠습니다.
10번의 실험 결과를 이용해서 파라미터를 추정한 결과를 평균했을때
이런 결과를 얻었습니다.
무게중심까지의 거리는 0.2241이고, 마찰계수 f_theta는 0.2707, 관성모멘트 J_m은 0.1916이라고 하는 군요.
위 그래프에서 파란선들은 10번의 실험 데이터들이구요. 그래서 추정한 파라미터를 동역학 모델로 Simulink로 시뮬레이션한 것이 빨간선입니다. 이쯤되면 만족스럽다고 할 수 있을 것 같습니다. 이제 이렇게 추정한 데이터는 확정을 짓고,
의 결과식에 나와있는 나머지 파라미터들을 찾으로 가야지요^^
'Robot > Project' 카테고리의 다른 글
[밸런싱 로봇 만들기] 7. Lego Mindstorm 동역학 따라하기 (46) | 2010.06.20 |
---|---|
[밸런싱 로봇 만들기] 6. Yaw 움직임을 포함한 동역학 (2) (26) | 2010.06.14 |
[밸런싱 로봇 만들기] 5. Yaw 움직임을 포함한 동역학 (1) (46) | 2010.06.12 |
[밸런싱 로봇 만들기] 4. 기구적인 파라미터 찾기 (76) | 2010.06.01 |
[밸런싱 로봇 만들기] 3. 동역학 모델 구성하기 (50) | 2010.05.18 |
[밸런싱 로봇 만들기] 2. 로봇 기구부 구성하기... (30) | 2010.05.12 |
[밸런싱 로봇 만들기] 1. 연재를 시작하며... (18) | 2010.05.06 |
자이로와 가속도센서를 이용한 각도추정 필터를 C로 구현하기 (146) | 2010.02.10 |
파라미터를 구하긴했는데요... 구한 파라미터를 가지고 확인해볼려고 하니까 그래프 모양은 똑같은데....제가 원하는 모양은 초기값에서 진동해서 0으로 수렴해야하는데 초기값에서 위로 진동해서 초기값보다 큰 값으로 수렴하더라고요..... 이게...제가 블럭선도를 잘못그려서인가해서요... 입력은 없는 시스템에 1/s블럭의 초기값만 설정해놓으셨어요???
로봇에 관심이 많은 대학생입니다. 동역학에 미쳐서 -_-; 이번학기에 자동제어 들어서 관련자료 찾다가 들어왔는데 ㄷㄷㄷ....경이롭네요. 필요한 요소 뽑고 조합하는데 도가 트신 듯합니다. 박사과정이신가요? 학부면 ㄷㄷㄷ
기구부를 도중에 살짝 바꿔서 다시 이 작업을 해보니, 값이 조금 터무니없고 일관성을 가지지 않아서 그런데요...
모터의 마찰계수 fm이나, 로봇 바디와 모터축 사이의 마찰계수 f_theta가 매우 작을 경우에는 이럴 수도 있는건가요?? pinkwink님처럼 마찰계수가 크면 파라미터들이 조금 일관성을 가지나요??
pinkwink님의 글을 보고 밸런싱 로봇을 공부하는 학부생입니다.
파라미터를 추정 중에 J_m값이 이상하여 질문드려요ㅠㅠ 정의 함수는 (-m*g*l*sin(u(1))/(J_m+m*l^2))-(f_theta*u(2)/(J_m+m*l^2)),(u(1) : theta , u(2) : dot_theta)로 정의 했고요. 1/s블럭에 초기값도 동일하게 설정했는데
J_m의 값이 음수(-)로 결과가 나왔습니다. 제가 알기론 J_m은 절대 음수가 될 수 없는 것으로 알고 있는데요.어떻게 하면 J_m값이 제대로 나올 수 있을까요?ㅜㅜ
pinkwink님~ simulink에서 입력을 상수로 0을 넣고 control and estimation tools manager에서 estimation탭에서 start한 결과, function Count가 1번으로 끝나네요. parameters탭에서 제가 지정한 변수 a,b,c의 value를 확인하면 초기 -10으로 그대로입니다. 변화된 파라미터값을 보고 싶습니다 ㅠ simulink는 a, b, c를 각각 진자운동식의 계수를 넣어줬구요 sin theta는 선형화 한다는 가정하에 theta로 했습니다.
파라미터 추정을 할 때 실험한 데이터 갯수가 2000개라 하면, 진자운동 식을 넣어서 돌린 데이터 갯수는
70~80개 밖에 안되서 추정이 되지 않는거 같습니다... 진자운동 식을 통해 나온 데이터를
실험한 데이터 갯수 만큼 맞출수 있는 방법이 없을까요 ?
여기서의 블록 선도는 위에
[공학기초/MATLAB] - 파라미터 추정(Parameter Estimation)을 MATLAB으로 간단히 해보자
와 블록선도가 동일 한 것인가요 ?
엔코더 값 저장하고 빨간부분만 잘라내는 건 어떤식으로 하신건가요
답변 해주셔서 감사드립니다 .
추가적으로 질문이 있습니다 .. 제가 몇 일쨰 파보고 있는데 잘 안되서요 ..
1. 그 마지막 수식 내에서 J_m 모터 축의 관성 모멘트는 어떻게 끌어 내신건가요 ?
파라미터 구하기 부분이나 기구부 부분에서 언급이 되있지 않던데 ..
그리고 하나의 질문이 더있습니다 ..ㅠㅠㅠㅠ
2. 여기서 구해낸 바디와 모터 축 사이의 f_theta 는
연재 9~10 부분에서 나오는 f_m(바디와 모터 사이 마찰 계수) 과는 다른 것인가요 ?
엄 ...
제가 Yaw 부분은 제외하고
상태변수를 바퀴 각도와 피치 각 이 두개를 이용하고 방정식을 유도 한 뒤 파라미터를 구하는 과정에있습니다. ..
이때 바디의 관성 모멘트는 위의 방법을 써서 해도 문제는 없는 것이겠지요 ?..
그리고 시뮬링크를 통해서 LQR 제어 한 결과를 봣을 땐 정상적으로 나오는 것을 봤는데 기구에 직접 넣어보니 이상하게 동작을 한다면 .. 시스템 해석을 잘못한것일가오 ?
핑크윙크님 항상 답변 해주셔서 감사드립니다 .
위에 댓글 단 학생인데 ..
연재 10에 있는 시뮬링크에 따른 성능 평가를 할 때 바디의 관성 모멘트는 위의 방법을 써서 해도 문제는 없는 것인지요 ?!!
안녕하세요 핑크윙크님.
덕분에 하나씩 진전이 있어 너무 기쁨니다.
혹시 그 위에서 진자 운동 그래프를 여러개 겹쳐서 그렸지 않습니까 ..
저걸 시뮬링크해서 한방에 여러개로 어떻게 그려낼 수 있죠 ?
배열 식으로 데이터 너으니까 오류가 뜨더라고요
핑크님 질문이있습니다.~
파라미터 측정 start 버튼을 누르고 값이 측정된 뒤 한번 더 눌러도 또 되던데
어떠한 값을 쓰던 무관한건가요 ?
start 라는 부분은 parameter 측정 버튼 눌르는 걸 말한 거였씁니다 죄송합니다 .ㅠㅠ
그래프상은 얼추 비슷하게 나옵니다 . 반복해서 파라미터 측정을 누르더라도
하지만 수치적으론 반복해서 누르던 안누르던
거의 J= 3.****e-014 이런 식으로 나오더군요 ;;
무게는 거진 1키로 되는 기구인데도 말이죠 ...
제가 실험을 한 100번은 넘게 해본 거같은데 항상 저런 수치로 파라미터 측정이 나옵니다 ..
저렇게 작게 나올 수도 있는건가요 ?ㅠㅠ
넵
한번 MIN 값을 0.001 이런 식으로 제한을 두고 해보도록 하겟씁니다. 조언 감사합니다.
그리고 핑크님 동역학 해석하실 떄 모터 두개로 하셨자나요 저는 모터 한개에 요방향이 없는데
단지 그냥 전체 추론식에서 파이 관련 항 다 0 으로 두고 vl vr 을 그냥 vl 하나만 있따고 보면 끝인건가요 ?
이를 이용해서 파라미터 J_psi 를 구하고자 합니다 .
하지만 아직까지 시뮬링크와 수식 점검을 해봣는데 값이 터무니 없이 나오고 그래서 변수에서 min max 값 제한 둘 수 있는게 있어서 거기서 어느 정도 제한을 줫지만 그래프 형상을 비교시 비슷한 형상으로 추측은 하지 못했습니다 .ㅠㅠㅠ
앞으로 또 시도해볼수 잇는것이 무엇이 있을가요 ?
핑크님..!!
http://blog.naver.com/wltn9436/220965268093
이 사이트에 제 진자운동식좀 한번 봐주세요 ㅠㅠ
제가 위에 이제 Scope 를 이용해서 파라미터 측정한 걸 이용해서 스코프로 했을 때 저런 진자 운동 모양은 비슷하게 나옵니다..
하지만 두번째사진에서 파랑색은 제가 실제로 측정한 엔코더 그래프고 빨간색은 제가 스코프로 돌린 그래픈데 시간 부분이 다르더라고요 ..
저게 문제가ㅓ 될거라고 생각하는데 ..
지금 저 Scope 창에서 시간 영역과 데이터를 받아봣는데 시간영역이
0
8.63244802372145e-06
5.17946881423287e-05
0.000267605888735365
0.00134666189170055
0.00674194190652645
0.0337183419806560
0.133718341980656
0.233718341980656
0.333718341980656
0.433718341980656
0.533718341980656
0.633718341980656
0.733718341980656
0.833718341980656
0.933718341980656
1.03371834198066
1.13371834198066
1.23371834198066
1.33371834198066
1.43371834198066
1.53371834198066
1.63371834198066
1.73371834198066
1.83371834198066
1.93371834198066
2.03371834198066
2.13371834198066
2.23371834198066
2.33371834198066
2.43371834198066
2.53371834198066
2.63371834198066
2.73371834198066
2.83371834198066
2.93371834198066
3.03371834198066
3.13371834198066
3.23371834198066
3.33371834198066
3.43371834198066
3.53371834198066
3.63371834198066
막 이런 식으로 나오더라고요 저는 샘플링 타임을 0.01로 했는데 ..
어떻게해야하나요 ?ㅠㅠ
항상 도움 많이 받고 있습니다.
핑크님도 실제 기구 LQR 제어기 설계시 J_psy 값을 위와 같은 방법으로 구하셨나요 ?
핑크님! 혹시 바퀴의 반경 즉 바퀴의 크기가 밸런싱에도 영향줄 수있을가요?
제가 하고잇는데 이 떨림이 몸체길이 크기에 비해 바퀴가 너무작아 슬립도슬립이고 바퀴가 플라스틱재질로 가볍고 작아 작은 각 움직임에도 큰 흔들림이 있다곳 생각이 들어서요
핑크님의 생각은 어떤가요
안녕하세요 핑크윙크님 저희는 감속기 모터를 사용중인데 각도가 수렴하는 시간이 2초안에서 끊나버리네요... 더 고려해줘야할 사항이있을까요?