카트 위의 역진자 [제어 부트캠프] - https://www.youtube.com/watch?v=qjhAAQexzLg 돌아오신 것을 환영합니다. 이제 Matlab에서 실제 예제를 코딩하여 제어할 수 있는지 확인하고, 역학을 안정화하는 컨트롤러를 설계해 보겠습니다. 정말 재미있고 강력할 겁니다. 알겠어요? 왜, 언제, 어떻게 제어해야 하는지 이해하기 위해 많은 수학을 했지만, 이제 본격적으로 실습을 해보고 Matlab에서 시스템을 제어하는 것이 얼마나 쉬운지 알아보겠습니다. 알겠어요? 제가 정말 좋아하는 시스템 중 하나는 역진자가 있다고 상상하는 것입니다. 하지만 그 역진자는 카트 위에 놓여 있죠, 알겠어요? 그래서 저는 역진자를 사용하게 될 텐데, 이제 그 진자는 카트 위에 있고, 저는 그 카트를 움직일 수 있습니다. 그래서 어떤 이유에서인지, 이게 항상 저에게는 토크 제어가 바닥에 있는 진자보다 훨씬 더 물리적으로 느껴졌습니다. 너무 쉬워 보이거든요. 이게 좀 더 흥미롭지 않나요? 카트가 있고, 그 카트를 이리저리 움직일 수 있고, 이 역진자를 안정시키려고 합니다. 좋아요, 그럼 어떤 숫자가 필요한지 생각해 봅시다. 글쎄요, 우선 시스템의 상태를 정의해야 합니다. 알겠어요? 그래서 시스템의 상태는 이 카트의 위치로 주어지는데, 이걸 x라고 부르죠. 그리고 이 진자 팔의 각도는 세타라고 부르죠. 그래서 우리의 고차원 동적 시스템 상태를 바꿔서 벡터 y라고 부르겠습니다. 그러니까 이 상태 y 점. 네, 그럴 수도 있겠네요. y라고 부르지 않을 거예요. 출력 측정과 혼동될 테니까요. x라고 하죠. 상태 벡터는 이 위치 스크립트 x, 속도 스크립트 x, 점 세타, 세타 점이라고 하죠. 알겠어요? 그리고 이건 2자유도 시스템이에요. 2자유도 x와 세타, 카트의 위치와 진자의 각도가 있어요. 그리고 뉴턴의 제2법칙에 따르면 2자유도이기 때문에 4개의 결합된 ode를 얻게 됩니다. 알겠어요? 그래서 저는 기본적으로 x의 d dt가 벡터 x의 비선형 함수와 같다는 걸 알게 됩니다. 그래서 이건 4개의 비선형 행 방정식이에요. 이걸 실제로 유도하는 방법에 대한 세부 사항으로 여러분을 지루하게 하지는 않겠지만, 오일러 라그랑주 방정식이나 해밀턴 방정식 같은 걸 사용하면 이런 결합된 1차 비선형 ode를 얻을 수 있어요. 알겠어요? 이건 진짜 비선형 문제지만, 시스템을 선형화할 수 있고 직관적으로 핵심 고정점이 몇 개 있다는 걸 알 수 있죠. 알겠어요? 따라서 시스템의 고정점, 고정점은 진자 아래로 향하는 위치에 해당하는 고정점을 갖게 됩니다. 따라서 우리가 알고 있는 것은 진자가 아래로 향하는 경우 세타가 0이거나 진자가 위로 향하는 경우 PI와 같아야 한다는 것입니다. 세타 점은 0과 같아야 합니다. X 점은 0과 같아야 합니다. 그리고 이 모든 방정식을 적으면 이러한 변화율이 실제로 x 자체에 의존하지 않는다는 것을 알 수 있습니다. 따라서 x는 자유 변수입니다. 그리고 그것은 어느 정도 말이 되죠? 이것이 여기 있든 여기 있든 여기 있든 상관없습니다. 진자를 위로 또는 아래로 두고 속도가 없다면 그것은 고정점입니다. 따라서 두 개의 기본 고정점이 있는데, 세타가 0인 경우 진자가 아래로 향하고 카트가 고정되어 있고 세타가 PI인 경우 진자가 위로 향하고 카트가 고정되어 있습니다. 알겠어요? 그리고 만약 오일러 라그랑주 방정식이 있고 고정점이 있다면, 야코비안을 계산할 수 있고, 본질적으로 d f dx를 고정점에서 평가하여 선형 방정식 시스템을 얻을 수 있습니다. X dot은 axief 더하기 bu와 같습니다. 알겠어요? 그리고 지금, 저는 u가 무엇인지 말하지 않았습니다. 이것은 매우 중요합니다. 그래서 u는 이 시스템의 제어 입력이고, 우리가 제어할 것은 u가 XT 방향으로 카트에 작용하는 힘과 같다고 말할 것입니다. 알겠어요? 그리고 이것은 실제로 매우 합리적입니다. 제가 할 수 있는 것은 이 바퀴 중 하나에 모터를 달고 컨트롤러를 갖는 것입니다. 그래서 제가 원하는 것을 지정하면, 알다시피, 두 배의 힘을 주고 이것을 움직이게 할 수 있습니다. 알겠어요? 그래서 이것은 실제로 매우 현실적입니다. 이 진자를 잡고 움직이는 카트를 만들 수 있고, 힘으로 작동시킬 수 있습니다. 알겠어요? 그리고 지금 제가 할 일은 Matlab을 실행해서 이미 이 모든 예제를 만들어 놓았다는 것을 보여드리려고 합니다. 멋진 함수가 있습니다. Matlab에서 오른쪽 함수를 만듭니다. 이게 제 비선형 ode입니다. 카트 펜드, 카트 진자 시스템이라고 합니다. 그리고 상태를 기준으로 시간 미분을 구합니다. 여기서는 y라고 합니다. 그래서 y라고 부르고 싶었던 것입니다. Matlab에서 가끔 이런 상태를 y라고 부릅니다. Matlab 규칙과 몇 가지 다른 숫자일 뿐입니다. 매개변수를 몇 개 가지고 있습니다. 이 작은 질량에 질량이 있다고 말합니다. 작은 m입니다. 카트에는 질량이 있고 큰 m입니다. 이 역진자는 길이가 유연하고 중력이 아래로 끌어당기는 것을 알고 있고 d가 있는데, 이는 본질적으로 감쇠 항입니다. 알겠어요? 이 방정식에서 마찰이 있을 수 있다고 생각합니다. 감쇠가 x점과 반대가 되는 것입니다. 좋아요, 카트에 감쇠가 있습니다. 이 카트에는 마찰이 있을 수 있습니다. 그리고 진자는 마찰이 훨씬 적다고 가정합니다. 그리고 마지막으로 이 u가 있습니다. 제가 힘을 가하려면 오일러 라그랑주나 해밀턴을 유도하고 포사이스를 적용할 수 있습니다. 그리고 모든 세부 사항으로 여러분을 지루하게 하지는 않겠습니다. YouTube에 이 링크가 있을 테니 이 코드를 다운로드하여 직접 읽어보세요. 하지만 오른쪽의 이러한 역학은 꽤 형편없습니다. 알겠어요? 사실 이 시스템을 연필과 종이로 손으로 유도하는 데는 오랜 시간이 걸립니다. 이 전체 데모에서 가장 시간이 많이 걸리는 부분은 실제로 이 오른쪽 벡터장을 구하는 것입니다. 맞죠? 하지만 세부 사항으로 여러분을 지루하게 하지는 않겠습니다. 계속해서 말하면 꽤 길고 형편없는 표현식이라는 것을 알 수 있을 겁니다. 그리고 입력, 힘은 x 점에 들어갑니다. 그리고 세타 점 방정식은 Euler Lagrange를 거치면 찾을 수 있는 것입니다.그렇죠, 별거 아니에요.그냥 비선형 우변일 뿐입니다.그리고 이것은 MATlab에서 강제가 있든 없든 시스템을 시뮬레이션하는 것이 비교적 쉽습니다.그러니 Sim Cartpend라는 함수로 가보겠습니다.그리고 제가 하는 일은 일부 매개변수를 지정하는 것입니다.그래서 이것은 질량 1이고, 이것은 질량 5라고 말합니다.길이는 2이고, 중력은 정상이며, 카트에 약간의 소산이 있습니다.그리고 Matlab에서 OD 45를 사용하여 벡터장을 적분할 수 있습니다.그래서 시간 범위를 설정하면 이것을 적분할 수 있습니다.그래서 이 초기 조건으로 0에서 시간 10까지 적분하고 싶습니다.다시 말해서, 이 초기 조건은 x가 0이고, x 점이 0이고, 세타가 PI라는 것을 의미합니다.그래서 위로 올라가고, 세타 점은 0.5입니다. 그래서 위쪽 위치에서 시작하지만 오른쪽으로 움직이는 것 같아요. 아니면 양의 세타 방향, 왼쪽일 수도 있어요. 어쨌든, 그런 다음 진행해서 이 ode 45를 씁니다. x, y를 적분하고 싶다고 말하고, dot은 y의 이 함수와 같다고 말합니다. 그리고 이 매개변수를 잠그고 제어가 전혀 없습니다. 지금은 강제 없이 자유 물리학에서 이걸 시뮬레이션할 겁니다. 좋아요. 그리고 여기 아래쪽에 drawcartpend라는 함수를 썼습니다. 그래서 기본적으로 진자의 동영상을 그리는 겁니다. 그리고 다시 이걸 다운로드해서 제가 한 일을 볼 수 있습니다. 그럼 이 sim cart pend를 실제로 실행해 봅시다. 좋아요, 이게 실행되기를 바랍니다. 그리고 이게 기본적으로 예상한 대로라는 걸 알 수 있을 겁니다. 이걸 놓아두면 그냥 계속 스윙하고 스윙하고 스윙할 겁니다. 그리고 결국 더 오래 적분하면 멈출 겁니다. 아마 제가 보여드릴까요, 꽤 쉽거든요. 조금 더 적분해 볼게요. 좋아요. 계속 흔들릴 거고, 계속 흔들릴 거고, 결국 마찰이 일어나서 멈출 거예요. 좋아요. 제가 적분을 멈췄기 때문에 여기서 멈췄을 뿐이에요. 그래서 우리가 제어할 시스템은 이거에요. 좋아요. 우리는 이 시스템을 실제로 제어할 수 있는 아주 좋은 상태에 있어요. 그래서 우리가 할 일은 고정점을 아는 거예요. 아시다시피, 오프라인에서 이 야코비안 행렬을 계산했어요. 보기 흉하고 엉망진창이었는데, 이 고정점을 넣었어요. 그래서 진자 상승 조건에 대한 선형화된 방정식이 있고, 진자 하강 조건에 대한 선형화된 조건이 있어요. 그래서 우리가 할 일은 시뮬레이션하는 거예요. 그 선형화에 기반한 컨트롤러를 설계한 다음, 그것을 완전하고 정직하게 말해서 비선형적인 시스템에 적용할 거예요. 좋아요? 따라서 가장 먼저 해야 할 일은 이 야코비안을 구하는 것입니다. 그런 다음 진자 위 또는 진자 아래 조건에 고정점을 대입하여 이 선형 시스템을 구합니다. 그런 다음 가장 먼저 해야 할 일은 이것이 제어 가능한지 확인하는 것입니다. 좋습니다. 그러면 우리가 할 일은 이것입니다. 이제 여기에 pull place cart pend라는 코드가 있습니다. 좋습니다. 그리고 여기서 한 일은 오프라인입니다. 저는 본질적으로 이 선형화된 방정식 시스템에 대한 a 행렬과 b 행렬을 만들었습니다. 그리고 상향 선형화와 하향 선형화가 많은 공통점을 공유하기 때문에 진자가 올라가면 스위치가 1이고 진자가 내려가면 스위치가 음수 1인 작은 스위치를 사용하기로 했습니다. 따라서 본질적으로 이것이 두 조건에 대한 선형화된 행렬, a 행렬입니다. 진자 위에서 진자 아래로 이동하려면 이 s, 이 s, 이 s를 음수 값으로 바꾸기만 하면 됩니다. 좋습니다. 그래서 이것은 a 행렬과 b 행렬입니다. 이제, 이 시점에서 제가 하고 싶은 것은, 우선 이 코드를 실행하는 것입니다. 그래서 저는 pol을 실행할 것입니다. 이것은 a 행렬과 b 행렬을 로드할 것입니다. 오, 제 생각에는 모든 것을 실행했습니다. 그래서 저는 제 a 행렬을 로드하고 고유값을 살펴볼 것입니다. 이것은 진자 상승 조건에서 제 a 행렬의 고유값입니다. 그리고 이 고유값 중 하나가 불안정하다는 것을 알아차리십시오. 그래서 그것은 결국, 만약 그것이 수직에서 엡실론 떨어져 있다면, 그것은 가속될 것입니다. 이제, 정말 중요한 것은 제가 a와 b가 무엇을 제어할 수 있는지 알고 싶다는 것입니다. 알겠어요? 그래서 이것은 우리가 지금까지 작업해 온 것이고, 지금은 정말 쉽게 테스트할 수 있을 것입니다. 그래서 저는 우선 쉼표 b의 ctrb를 시도할 것입니다. 이것은 저에게 그 제어 가능성 행렬을 줄 것입니다. 큰 행렬입니다. 그냥 엔터를 치겠습니다. 보시면 알겠죠. 그렇죠. 큰 행렬입니다. 4x4 행렬입니다. 따라서 이 CTRB 행렬의 랭크를 보면, 이 랭크가 4이면 제 시스템은 제어 가능합니다. 이 랭크가 4가 아니면 시스템은 제어 불가능합니다. 좋습니다. 이 행렬 a와 카르타의 x 방향의 힘에 해당하는 이 b 행렬을 사용하면 제어 가능 행렬의 랭크가 4이므로 이 제어 가능 부분 공간으로 모든 상태 공간을 확장할 수 있습니다. 즉, 실제로 시스템을 제어하는 컨트롤러를 개발할 수 있습니다. 그럼 다음은 무엇일까요? 다음 영상에서 알려드리겠습니다. 제어 가능하다는 것을 알고 있습니다. 즉, 제어 법칙을 만들어낼 수 있습니다. u는 -kx와 같으므로 닫힌 루프 시스템은 x.t는 a -bkx와 같습니다. 그리고 k를 개발하고 설계하여 고유값이 원하는 위치에 있도록 할 수 있습니다. 그럼 제가 다음에 할 일은, 안정적인 고유값을 지정하고 싶다는 것입니다. 저는 이 고유값을 안정적인 좌반 평면으로 옮기고 싶습니다. 그래서 우리는 하나의 불안정한 고유값을 가졌습니다. 저는 그것을 x의 비례적 피드백과 함께 안정적인 좌반 평면으로 옮길 것입니다. 그리고 이 다이어그램이 어떻게 생겼는지 기억하기 위해, 우리는 이 경우 카트 진자 시스템을 가지고 있습니다. 우리는 전체 상태 x를 측정할 것입니다. 우리는 그것을 피드백할 것입니다. 그래서 u는 -kx가 될 것입니다. 좋아요, 우리는 문자 그대로 u가 이 행렬 k에 x의 측정값을 곱한 것을 -라고 말할 것입니다. 우리는 모든 것을 측정할 것이고, 그것은 이러한 고유값을 갖도록 시스템을 안정화할 것입니다. 그래서 우리가 다음에 할 일입니다. 우리는 Matlab의 place 명령을 사용하여 이러한 고유값을 배치하고 이 행렬 k를 설계할 것입니다. 그런 다음 선형 이차 레귤레이터 또는 LQR 제어를 사용하여 최적의 고유값 배치를 개발할 것입니다. 그럼 다음에 올게요.