네, 돌아오신 것을 환영합니다. 이제 우리는
카트 위의 역진자를 안정화하기 위한 제어 법칙을 설계할 준비가 되었습니다.
여유 공간을 위해 그림을 아래로 옮겼습니다.
지난 시간에 우리는 카트 위 역진자 문제의
라그랑주 역학을 설명하는 비선형 시스템을 다뤘습니다.
우리는 이를 시뮬레이션하고, 진자가 위로 향한 위치에서 선형화하여
A 행렬과 B 행렬을 얻었습니다.
모든 수학적 과정을 설명하진 않았지만, 이는 기본적인 물리학입니다.
즉, 선형화가 있다는 것을 보여드렸습니다.
그리고 우리는 제어 가능성 행렬의 랭크가 실제로 4임을 확인했습니다.
이는 우리가 이 제어 가능성 부분공간으로 모든 상태 공간을 포괄한다는 의미로,
시스템이 제어 가능하다는 것을 나타냅니다.
그리고 이제 우리는 시스템이 제어 가능하다면,
전체 상태 피드백을 통해,
카트와 진자의 위치와 속도를 측정하여 전체 상태를 측정함으로써,
이 전체 상태를 통해
내가 원하는 어느 곳에나 고유값을 배치할 수 있도록
이 폐루프 시스템을 설계할 수 있다는 것을 알고 있습니다.
좋습니다. 이제 우리는 Matlab의 place 명령어를 사용할 것입니다.
자, 이제 우리가 사용할 것은
Matlab의 place 명령어입니다.
그래서 우리는 말 그대로 k는 place와 같다고 할 것입니다,
그리고 우리는 b를 제공할 것이고
원하는 고유값의 벡터를 제공할 것입니다.
Eigs입니다. 좋습니다, 이렇게 해봅시다. 우리는 이 시스템이,
내가 그냥 a의 eig를 보면,
불안정한 고유값이 있다는 것을 알고 있습니다. 그래서 그냥
수동으로 내 고유값이 이렇게 되길 원한다고 해봅시다
-1, -1.1, -1.2
그리고 -1.3. 그래서 I는 다음과 같다고 해봅시다
-1.1, -1.2,
-1.3 그리고 -1.4.
그래서 내가 원하는 고유값으로, 내 폐루프 시스템이
이러한 고유값을 갖도록 k를 만들고 싶습니다.
좋습니다, 이게 많이 요구되는 것 같죠? 그냥 이것들을
임의로 선택했습니다. 안정적인 고유값이어야 합니다. 이제
엔터를 누르겠습니다. 좋습니다, 이것들이 내 I입니다. 그리고 이제
k는 place ab와 같다고 입력하겠습니다
I. 이렇게 간단합니다. Matlab에서는 정말 간단하게
원하는 극점, 즉 고유값을 가지도록
컨트롤러 k를 만들 수 있습니다.
이게 제 컨트롤러 k입니다. 그냥 행렬입니다. 그리고 이제
a에서 b와 k를 곱한 것을 뺀 것의 I를 보면,
마이너스 k이길 바라고 플러스 k는 아니길 바랍니다. 한번 해보겠습니다.
오, A에서 B를 뺀 것에
k를 곱합니다. 놀랍게도
제가 지정한 고유값과 정확히 일치합니다.
모두 이해하셨나요? 조금 더 설명해 보겠습니다.
좋습니다. 우리는 Eigs가
이것과 같다고 했습니다. 우리가 원하는 고유값을 지정했죠.
그리고 우리가 한 일은 k equals
place입니다. Abigail. 이것은 MATLAB 내장 함수로
컨트롤러 k가 무엇인지 알려줍니다. 이 비례 피드백
컨트롤러는 폐루프 고유값을 내가 지정한
eig's로 만들어 줍니다. 그리고 이것이 그 k입니다.
이제 이 폐루프 시스템이 실제로
올바른 고유값을 가지는지 확인하고 싶습니다.
그래서 A에서 B와 k의 곱을 뺄 것입니다.
그리고 폐루프 시스템 A에서 B와 k의 곱을 뺀 것은
실제로 이 원하는 고유값을 가집니다. 따라서 폐루프 피드백으로
원하는 곳에 고유값을 배치하는 것은 정말 간단합니다.
시스템이 제어 가능하다면 말이죠. 시스템이 제어 불가능하다면 이렇게
할 수 없을 것입니다. 우리 시스템이 제어 가능하기 때문에 이렇게 할 수 있습니다.
카트에 가해지는 힘이 이 진자를
안정화할 수 있는 좋은 제어 수단이기 때문입니다.
알겠습니다. 알겠습니다.
좋습니다. 이제 이것을 가지고
K 행렬을 실제로 사용해볼 수 있습니다. K를 다시 입력하겠습니다.
이 K 이득 행렬을 사용하여
비선형 시스템을 실제로 안정화할 수 있습니다.
정말 재미있을 거예요. 자, 스크립트로 돌아가겠습니다.
제 스크립트로요.
좋습니다. 시도해 볼 여러 극점 위치가 있지만,
아직 그렇게 하지 않을 겁니다. 그래서
그것들을 주석 처리하겠습니다. 주석 처리합니다.
Matlab에서 이걸 어떻게 하는지 기억해 봅시다.
좋습니다, 주석 처리하겠습니다. 그리고
몇 가지 다른 극점 배치를 시도해 보겠습니다. 고유값들의 다른 배치들을요.
우리가 이리저리 실험해볼 거니까요. 이 폐루프 시스템의 고유값을
어디에 두고 싶은지. 여러 가지를 시도해 볼 겁니다.
하지만 지금은 이것만 시도해 봅시다.
-0.3 -0.4 -0.5 -0.6 정도로요.
그냥 대충 정한 겁니다.
좋습니다. place 함수를 사용합니다. K = place(A, B, P)
여기서 P는 제가 원하는 고유값 목록입니다.
그리고 나서 본질적으로...
같은 벡터 필드를
같은 카트 펜들럼 벡터 필드를 적분합니다,
제어가 있는 u 위치에서
전에는 제어가 없었습니다. 이제
마이너스 k 곱하기 내 상태를 넣을 것입니다,
기준값을 뺀 것을요. 그래서 기본적으로 제가
원하는 건 y, 내 상태입니다. 왜인지 모르겠지만,
이것을 벡터 y라고 부르고 있습니다
그리고 이것의 dt는
y의 f입니다
y와 이 모든 것들이 y가 됩니다. 뭐든지요. Matlab에서,
제 상태에 대해, 이것이
10 PI 0의 기준값에 접근하기를 원합니다
네.
그래서 이것이 의미하는 바는
이것이 x가 1인 곳으로 이동하여
수직 위치에서 진자를 유지하기를 원한다는 것입니다. 그리고 그 k
이득 행렬로, 이것을 할 수 있어야 합니다. 왜냐하면 제가 안정화했기
때문입니다. 자, 이제 한번 해봅시다
이것을.
그리고 다시, 이 코드를 실행할 수 있습니다
죄송합니다, 저는 이동하려고 하고 있습니다
이걸 설정합니다. 그리고 코드 끝에서
해결책을 그릴 겁니다. 이 시뮬레이션을 실행하면,
원하는 대로 움직이는 진자를 그래프로 나타낼 겁니다.
좋습니다. 그럼 pole placement를 해봅시다,
cart, pen. 이게 제 스크립트입니다. 엔터를 누르고 최선을 다해
봅시다. 오, 화면 밖으로 나갔다가 다시
돌아왔네요. 좋습니다, 더 잘할 수 있는지 봅시다.
더 오래 적분해야 할 것 같습니다.
한 번 더 해봅시다. 그리 인상적이진 않네요. 자,
수직으로 시작하지만 약간 벗어났습니다. 실제로 화면 밖으로
나가지만, 그 다음 아주 천천히 제가 지정한 위치로
돌아옵니다. x 위치의 기준값 1,
속도 0, 세타 방향으로 수직인 파이,
속도 0입니다. 이 pole placement가 실제로 안정화시키고
시스템을 이동시켰네요, 꽤 멋집니다. 실제로 작동했지만,
그곳으로 이동하는 데 너무 오래 걸렸습니다.
그리고 초기 조건을 x가 -4 정도에서 시작했던 것 같아요.
봅시다. 네.
초기 조건은 x가 -3이었고
약간 벗어났습니다. 수직에서 파이 플러스 0.1.
이걸 더 공격적으로 만들고 싶다고 합시다. 더 빨리
오른쪽으로 이동하게 하고 싶습니다. 그러려면 어떻게 해야 할까요?
이 극점들, 이 고유값들을 저는 극점이라고 부릅니다. 사람들은 이를
극점 또는 고유값이라고 부르죠. 같은 의미입니다. 이것들을 어떻게 해야
더 빠르게 만들 수 있을까요? 이 시스템을 더 적극적으로 만들려면요?
음, 좌반평면으로 더 멀리 이동시킬 수 있겠죠. 실수부를
더 음수로 만들면 더 빠르고 적극적으로 될 겁니다.
그럼 이걸 시도해 봅시다.
좋습니다, 단순히 더 음수로 만들어보죠. -1, -1.1,
-1.2, -1.3. 이렇게 하면 더 적극적인 고유값
배치가 됩니다. 더 빠른 수렴을 보여야 합니다.
한번 해봅시다. 극점 배치 카트 진자 이
시스템은 매우 빠르게 작동할 겁니다.
그리고 정확히 목표 지점으로 갑니다. 화면 밖으로 나가지 않았고,
겨우 제어되지도 않았습니다. 제어가 꽤
빠르게 이루어졌죠, 좋습니다. 우리가 원하던 바입니다.
고유값을 좌반평면으로 더 멀리 이동시키는 것이
좋아 보입니다. 좋습니다,
이걸 계속 무한정 할 수 있을까요? 만약 더 안정적으로 만든다면 어떨까요?
자, 여기서는 -2, -2.1 등으로 만들어 보겠습니다.
이렇게 하면 훨씬 더 적극적이 됩니다. 한번 시도해 봅시다. 아마도 이렇게 하면
바로 목표점으로 가고 좋은 결과를 낼 수 있을 겁니다.
어떨지 봅시다.
좋습니다. 정말 빠르네요. 좋아요. 시간이 거의 걸리지 않았어요
도착하는 데 시간이 걸렸습니다. 매우 공격적이었죠. 하지만 또한
꽤 불안정해지기 시작했습니다. 아마 비용이 많이 들 겁니다. 정말
이 타이어들을 강하게 돌려서 이것을 움직이게 하고 있습니다
그래서 큰 엔진이나 큰 모터가 없다면
이 컨트롤러를 실현하지 못할 수도 있습니다. 제가 추측하기로는
이걸 그래프로 그리면 굉장히 클 겁니다. 이 물체가
정말 빠르게 움직이고 있기 때문이죠. 더 멀리 갈 수도 있습니다.
더 멀리 갈 수 있습니다. 계속 가보겠습니다
한 단계 더 공격적으로 해보죠. 이걸
왼쪽 반평면으로 더 멀리 옮기고, 시간을
줄이겠습니다. 더 이상 30까지 적분할 필요가 없습니다.
보시다시피 매우 불안정합니다. 제가
보여드리진 않겠지만, 만약 극점들을 왼쪽 반평면으로
더 멀리 옮기면 시스템이 실제로 망가집니다.
비선형 동역학이 불안정해집니다.
선형화된 시스템의 극점을 왼쪽 반평면으로 너무 멀리 옮기면 말이죠.
그래서 흥미롭게도 실제로,
고유값이 왼쪽 반평면에 더 멀리 있고
실수부가 더 음수인 것이 더 안정적이라고 생각하지만,
그것이 실제로 의미하는 바는 더 빠르다는 것입니다. 그 동역학이
더 빠릅니다. 이 물체는 원하는 평형 상태에
더 빨리 도달하지만, 실제로는 덜 견고합니다.
고유값들을 왼쪽 반평면으로 더 밀어넣을수록, 많은 경우에
이 경우에는 강건성이 떨어집니다. 우리는 시스템을
정말 극단적으로 밀어붙이는 칼날의 가장자리에 있는 셈입니다.
그리고 이러한 비선형. 비선형 시스템은 우리가 컨트롤러를 만든
선형 시스템과 정확히 같은 방식으로 작동하지 않을 수 있습니다. 그래서 매우 공격적인
제어에서는 실제로 시스템이 망가질 수 있습니다. 따라서
이 시스템에 대해 최적의 고유값 세트가 존재합니다.
이는 시스템이 원하는 위치로 얼마나 빨리 이동하는지에 대한
성능과 그 과정에서 너무 많은 제어 노력을
들이지 않는 것 사이의 최상의 균형을 제공합니다.
알겠죠? 이것이 우리가 다음에 다룰 내용입니다. 이것을
선형 이차 조정기라고 합니다.
LQR이라고 하죠. 이는 최적 제어 이론에서
가장 중요한 결과 중 하나입니다. 본질적으로 상태를 안정화하는
속도와 그에 소요되는 제어 에너지의 균형을 맞추는
최적의 이득 행렬 k를 제공합니다.
따라서 극배치의 일종의 최적점이라고 할 수 있습니다.
그리고 다시 말하지만, 매트랩에서는 매우 간단합니다.
단 한 줄의 매트랩 코드로 가능합니다. 이것이 우리가 다음에 다룰 내용입니다.