Open Robotics

Balancing Robot (3)

Balancing Robot LQR 제어기 설계 view 발행 | Balancing Robot
방랑야옹이~ 2011.07.04 19:08
잘 읽었습니다^^
LQR이 아닌 고전적인 PID 제어기를 이용해서는 구현할 수 없나요?
해보지는 않았지만, 가능할겁니다. 하지만 PID 제어기의 게인을 찾는 작업을 경험적으로 해야하기때문에, 적절한 게인 찾는게 어려워보입니다.
시뮬링크이 PID 블록에 오토튜닝 기능이있긴합니다만.. 올려주신 블록도에 PID를 끼워넣으니 에러가 나네요..ㅎㅎ;
어떤 에러인지는 모르겠지만, 도립진자 모델이 불안정한 모델이기때문에 PID로 게인을 잡기가 쉽지는 않을 것입니다. 하지만 KAIST에서 작성한 논문을 보면, 실제 구현에 있어서는 PID 제어기를 사용합니다. ^^
그렇군요 답변감사합니다^^ 한가지 더 물어볼게있는데요..
mux 왼쪽 제어 입력부분이 잘 이해가^^;; 시뮬링크가 익숙치않은데 mux에서 여러가지 입력을 받아서 하나의 출력으로 내보내면 신호가 섞이는건가요?
신호가 서로 섞이지는 않고 묶인다고 생각하시는게 좋겠습니다. 1x1 벡터가 4개 MUX로 들어가면 출력은 4x1 벡터로 된다고 생각하시면 됩니다.
졸업 논문 작성에 지대한 도움을 받게 되어 늘 감사를 드리고 있습니다.

위 자료를 참조해 LQR 로 얻어낸 gain을 실제로 로봇을 구성해서 daq에 연결하여 c 코드로 적용해 시뮬레이션과

실제 구동의 일치까지 마쳐 성공적인 결과를 얻었습니다.  

하지만 졸업 논문 앞서의 선행 연구에서는 PID 제어를 하려고 게인을 손수 구하려고 했으나 각 TF 간에 연결과 적용이 힘들어 포기를 했던 기억이 납니다.

혹시 카이스트의 어떠한 논문에서 PID 로 제어에 대해 수록했는지 알 수 있을까요 ?

2륜자기균형이동차의 개발 및 외란 측정기를 이용한 강인제어 는 이미 참조를 했지만 PID 제어에는 도움이 되지 않았습니다.
예, 상기 논문이 맞습니다. 논문에서 실제 로봇 구현에서 PID 제어기가 사용되었는데, 게인을 설정하는 구체적인 방법은 논문에 나와있지 않아 구현이 어려우리라 예상됩니다.
좋은 자료 정말 감사합니다. 제가 제어에 대해 많이 부족해서 그런지 시뮬링크에서 왜 결과값에 LQR제어기를 넣어 피드백하지 않고 출력값과 입력값에 대한 오차를 LQR제어기에 넣었는지 궁금하네요. 답변부탁드립니다.
벨런싱 로봇을 제어하기 위한 신호들을 입력으로 넣어야 하기때문입니다. ^^
추가된 2개의 펄스와 4개의 상수는 어떤역할을 하는 사용자입력인지 궁금합니다
그리고 AA(1:3, 1:3) = zeros(3); 이부분들이 무슨 의미인지 잘 모르겠습니다..
Y(theta, psi, phi)와 Y_dot에 대한 제어 입력입니다. Y_dot은 제어할 필요가 없기때문에 0으로 입력한 것이고 theta와 phi를 제어하여 밸런싱 로봇을 이리저리 움직여야 하기때문에 pulse generator로 제어 입력을 만든것입니다.

zeros(3)은 3x3 영행렬를 만들어 AA의 일부를 초기화 하는 것입니다.

감사합니다.
음 그러면 Y_dot은 처음부터 피드백을 안시키면 안되나요?
모든 constant가 0으로 입력되있는데 그럼 theta,psi,phi도 0이되는게 아닌지 궁금합니다
그리고 (u1-u2)/2가 phi,(u1+u2)/2가 theta인데 왜 각각 왼쪽모터 오른쪽모터로 구분되어 입력되는지 궁금합니다.
Y, Y_dot은 센서에서 측정한 값으로 보셔야 합니다. 간단히 설명하자면 비행기를 10도 회전하라는 명령을 줬는데 센서로 측정해보니 5도만 회전한것으로 측정되었다면 5도를 더 돌아가라는 명령을 줘야합니다. 이 과정을 비행기가 10도 돌아갈 때까지 계속 반복합니다. 이렇게 비행기가(대부분의 시스템이 마찬가지입니다.) 말을 잘 안듣기 때문에 원하는 목적을 달성할 때까지 계속 감시하고 명령하는 제어기가 설계되는 것입니다.

u(1)과 u(2)는 전진과 회전 속도입니다. 이를 차동바퀴 구조를 가지는 벨런싱 로봇의 좌우 바퀴의 속도로 변환하기 위한 식입니다.

감사합니다.
값이 0인 4개의 constant는 각각의 역할이 무언지 아직 잘 이해가 안됩니다ㅠㅠ
그리고 회전속도 u2=Vr-Vl 이 나오는데 오른쪽모터전압에서 왼쪽모터전압을 빼는것인 이유가 뭔지 궁금합니다 왼쪽에서 오른쪽빼면 그것도 가능한건지.. 차동바퀴에선 원래 그렇게 쓰는건가요?
값이 0인 4개의 상수는 우리가 원하는 값입니다. 즉 로봇의 상태가 0에 머물러 있기를 바라는 거죠. 그러나 로봇의 상태 측정 값 Y와 Y_dot은 0이 아니라 계속 변하는 값입니다. 왜냐면 로봇이 계속 움직이고 있기때문이겠죠. 이 로봇의 상태변수 Y와 Y_dot을 0으로 제어를 하겠다는 의미입니다.

차동바퀴 구조를 종이에 그리고 속도 관계식을 이용해 수식을 유도할 수 있습니다. 잘 이해가 가지 않는다면 그냥 쓰면 됩니다.
답변 감사합니다!

문서에서도 궁금한게 있는데 Vb가 3가지 성분 속도벡터가 있는데 이게 아마 i,j,k방향 속도인것으로 이해하였는데 각 값이 나온 과정이 어떻게 되는지 궁금합니다. 형태로 유추해보면 극좌표의 개념으로 이해했는데 맞습니까?

그리고 T_theta,T_psi가 서로 크기가 (T_l+T_r)로 같고 부호가 반대인 의미가 궁금합니다.
로봇이 3차원 공간에서 회전된 상태에서 오일러각의 속도로 인해 발생하는 질량 중심의 속도를 기술한 것입니다. 그림으로 수식이 유도된 것을 설명하는 방법이 좀 쉬운데, 여기서 설명하기에는 분량이 꽤 될것같습니다.

부호가 반대인 이유는 작용과 반작용력이라 생각하시면 됩니다.
음,,, 그런데 Y,Y_dot이 피드백되면 행렬의 행갯수가 3개씩 총 6개인데 constant는 왜 4개인지 궁금하네요 제가 잘못이해를 한거같기도 하고,,,

그리고 라그랑지안을 통해 구한 운동에너지 T_psi 항을 보면 theta_2dot값만 있어 2dot이 영향을 주고 theta_dot값은 없어서 영향을 안준다고 생각했는데 제어과정에서 2dot은 안쓰는 원리가 궁금하네요. 모터토크psi에 theta_dot을 쓰기는 하는데 모터토크만 제어하면 되는건가요?

그리고 2.2.1 로봇과 모터동역학의 결합에서 동역학에서 모터토크와 운동에너지를 합치면서 같다고 하여 소거하게 되는데 이게 왜 같은지를 잘 이해못하겠습니다ㅠㅠ 매번 자잘한 질문으로 귀찮게 해드려 죄송합니다..
Pulse generator와 constant 합쳐서 6개가 제어 입력으로 들어갑니다. constant에서 0으로 설정한 것은 로봇의 상태변수가 항상 0으로 유지되기를 바라는 것이고 pulse generator에서 어떠한 값을 준 것은 로봇의 상태변수가 그 값을 추종하여 움직이도록 요구하는 것입니다.

2dot은 가속도인데 가속도는 힘과 비례관계입니다. (F=ma) 우리가 우리 주변의 사물을 움직일(제어할) 때를 생각해보면, 사물에 접촉하여 어떠한 힘을 가해 사물에 속도를 발생시키고 위치를 변화시킵니다. 이것처럼 힘(가속도)는 우리가 뭔가를 제어하기 위한 근본 수단이 됩니다. 그래서 로봇에서도 똑같이 가속도를 가하고 가속도로 인해 발생하는 속도와 위치변화를 관찰하여 이를 다시 가속도의 제어에 반영하는 원리입니다. 토크 또한 돌림힘입니다.

시스템에 존재하는 모든 에너지를 합쳐 라그랑지안을 취하면 이게 외부에서 가해지는 힘 or 돌림힘(토크)과 크기같게 됩니다.
질문좀 드릴게요 제어기의 게인값을 구하는 과정이 조금 이해가 안가서요...
윗분과 비슷한 질문인데 eye,inv,diag 이것이 어떤 수행을 하나요?
그리고 첨부해주신 파일에도 있는 K = LQR(AA, BB, QQ, RR, 0) <-이것은 그냥 매트랩에 내장된 함수인가요?
또 제어기 게인이 꼭 행렬로 나타나야 하는지요
eye,inv,diag 들은 MATLAB의 행렬과 관련된 함수들입니다. MATLAB의 도우말을 참고하시기 바랍니다.
LQR은 MATLAB에서 제공하는 함수입니다.
게인을 곱하는 상태변수가 행렬로 구성되기 때문에 게인을 행렬로 나타내어 연산을 좀 더 쉽게 하기우함입니다.

감사합니다.
답변 감사합니다 공부할게 많네요!^^

한가지만 더 질문드리고싶은데 답변을 보고 찾아보니 LQR제어기 함수가 LQR(A,B,Q,R)이렇게 0이 없이 끝나는 예도 있는데 어떤차이인가요
MATLAB 커멘드 입력 창에서 다음과 같이 입력하면 각 함수에 대한 도움말을 볼 수 있습니다.

>> help lqr

       ...

       The matrix N is set to zero when omitted.   Also returned are the
       the solution S of the associated algebraic Riccati equation and
       the closed-loop eigenvalues E = EIG(A-B*K).

       즉, LQR의 게인을 구하기 위해 사용하던 중간값들을 되돌려 받는데, 제어기가 안정한지 혹은 계산가능한지 등의
       여부를 판단하기 위해서입니다.
가중치행렬을 바꿔가면서 제어기성능을 달리 해보고 있는데 가중치행렬값을 크게 변화시켜도 그래프가 거의 똑같이 나오는데 가중치행렬이 정확히 어떤역할을 하는건가요?
가중치 행렬은 말그대로 각각의 제어 상태변수에 얼마만큼의 중요도를 줄 것인지를 결정합니다.
안녕하십니까?
요새 밸런스 로봇을 만들어보고 싶어서 서핑하다 오게 되었습니다.
이 블로그를 보고 거의 복사,붙이기 수준으로 대략 시뮬레이션 했는데요..
그러다가 여쭈어보고 싶은 점이 생겨서 좀 여쭤 보겠습니다.
사실 저는 매틀랩과 시뮬링크가 없지만(m파일 자체를 열수가 없습니다.) 랩뷰로 랩뷰안에 매틀랩 기능을 한정적으로 쓸수 있어서 대충은 구현을 했습니다만, 위에 그려진 그래프 파형처럼은 나오지가 않아서요..
일단 입력으로 함수발생기1,2 의 파형의정보를 알고 싶습니다. 주기나 진폭 듀티사이클 같은 것요.
LQR 게인K값도 일치하는데 왜 파형은.....ㅠㅠ사진이라도 올려 드리고 싶군요......
매틀랩으로 LQR의 K가
K = -3.1623 -137.4900     -0.0000   -10.6535   -13.0959     -0.0000
             0.0000       0.0000       1.0000       0.0000       0.0000       0.0719
이런식으로 2줄로 나오는데 각 값들이 뭘 의미하는거죠 ㅠㅠ
상태 x = [ theta , psi, phi, dot_theta, dot_psi , dot_phi]의 전치 입니다!
등록
텍스티콘 텍스티콘
Two Wheeled balancing Robot.pdf (328 KB) 다운로드
balancingRobot_LQR.mdl (53 KB) 다운로드
balancingRobot_LQR_Gain.m (1 KB) 다운로드
DrawSimResult.m (1 KB) 다운로드
BR_LQR_Sim0.mp4 (62 KB) 다운로드
balancingRobot_LQR.mdl (53 KB) 다운로드
balancingRobot_LQR_Gain.m (1 KB) 다운로드
DrawSimResult.m (1 KB) 다운로드
top

'Balancing Robot' 카테고리의 다른 글