카트 위의 역진자에 대한 극 배치 [제어 부트캠프] - https://www.youtube.com/watch?v=M_jchYsTZvM 좋아요, 다시 오신 것을 환영합니다. 이제 카트 위의 역진자를 안정화하기 위한 제어 법칙을 설계할 준비가 되었습니다. 좋아요, 여유 공간을 확보하기 위해 사진을 여기 아래로 옮겼습니다. 지난번에 우리는 역진자 카트 위의 진자 문제에 대한 이 역진 카트의 라그랑주 역학을 설명하는 비선형 시스템을 가져왔습니다. 우리는 그것을 시뮬레이션한 다음, 진자의 위쪽 위치에 대해 선형화하여 a 행렬과 B 행렬을 얻었습니다. 저는 모든 수학을 다루지는 않았지만, 그것은 기본적인 물리학입니다. 그래서, 저는 선형화가 있다는 것을 보여드렸습니다. 그리고 나서 제어 가능성 행렬의 랭크가 실제로 4인지 확인했습니다. 즉, 우리는 이 제어 가능성 부분 공간으로 모든 상태 공간을 확장한다는 것을 의미하며, 이는 시스템이 제어 가능하다는 것을 의미합니다. 그리고 물론, 이제 우리는 시스템이 제어 가능하다면 전체 상태 피드백을 통해 카트와 진자의 위치와 속도의 전체 상태를 측정하여 이 전체 상태를 통해 이 폐쇄 루프 시스템을 설계하여 고유값을 원하는 곳에 둘 수 있다는 것을 알고 있습니다. 좋아요, 이제 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를 만들고 싶습니다. 좋아요, 이게 요구하는 게 많은 것 같죠? 방금 모자에서 꺼낸 거예요. 안정적입니다. 고유값은 훌륭할 겁니다. Enter를 치겠습니다. 좋아요, 제 I입니다. 이제 k = place ab I를 입력하겠습니다. 이렇게 간단합니다. Matlab에서는 극점과 고유값이 원하는 위치에 있도록 제어기 k를 만드는 것이 매우 간단합니다. 제 제어기 k입니다. 그냥 행렬일 뿐입니다. 이제 a - b 곱하기 k의 I를 보면, 그것이 + k가 아니라 - k가 되기를 바랍니다. 이렇게 해보겠습니다. 오, a - b 곱하기 k의 I입니다. 보세요, 제가 지정한 고유값을 정확히 얻습니다. 모두 따라하세요. 제가 조금 더 확장해 보겠습니다. 좋아요. 그래서 우리는 Eigs가 이것과 같다고 말했습니다. 우리는 원하는 고유값을 지정했습니다. 그리고 나서 우리가 한 일은 k가 장소와 같다고 말한 것뿐입니다. 애비게일. 이것은 컨트롤러 k가 무엇인지 알려주는 내장된 MATLAB 함수입니다. 이 비례 피드백 컨트롤러는 폐쇄 루프 고유값을 내가 지정한 eig로 형성합니다. 그리고 이것이 그 k입니다. 이제 저는 이 폐쇄 루프 시스템이 실제로 올바른 고유값을 가지고 있는지 확인하고 싶습니다. 그래서 저는 a - b 곱하기 k를 할 것입니다. 그리고 폐쇄 루프 시스템, a - b 곱하기 k는 실제로 이러한 원하는 고유값을 가지고 있습니다. 따라서 폐쇄 루프 피드백으로 고유값을 원하는 곳에 두는 것은 정말 간단합니다. 시스템이 제어 가능하다면. 시스템이 제어 가능하지 않다면 이것을 할 수 없습니다. 그래서 우리는 시스템이 제어 가능하기 때문에 이것을 얻습니다. 카트에 가해지는 힘은 이 진자를 안정화할 수 있는 권한을 주는 좋은 제어이기 때문입니다. 알겠습니다. 알겠습니다. 훌륭합니다. 그리고 이제 이것이 있으면 실제로 이 K 행렬을 사용해 볼 수 있습니다.그러니 k를 다시 입력하겠습니다.그러면 이 K 이득 행렬을 사용하여 실제로 비선형 시스템을 안정화할 수 있습니다.정말 재미있을 겁니다.좋아요, 스크립트로 돌아가겠습니다.좋아요.그리고 시도해 볼 여러 가지 다른 폴 위치가 있지만 아직은 하지 않을 것입니다.그러니 그냥 주석으로 처리하겠습니다.주석으로 처리합니다.Matlab에서 이 작업을 하는 방법을 기억할 수 있는지 보겠습니다.좋아요, 주석으로 처리하겠습니다.그리고 몇 가지 다른 폴 배치를 시도해 볼 것입니다.고유값의 몇 가지 다른 배치입니다.이것을 가지고 놀 것입니다.이 폐루프 시스템의 고유값을 어디에 두고 싶은가요?여러 가지를 시도해 볼 것입니다.하지만 지금은 이것을 시도해 보겠습니다.-0.3 -0.4 -0.5 -0.6 정도. 그냥 모자에서 꺼내는 거예요. 좋아요. 그럼 이 장소 k = 장소 a, b p를 하는데, 여기서 p는 제 고유값 목록입니다. 그런 다음 기본적으로 같은 벡터장, 같은 카트펜 벡터장을 적분할 겁니다. 다만 제어가 있는 u 위치에서만 적분할 겁니다. 0이 되기 전에는 제어가 0이었습니다. 이제 마이너스 k 곱하기 제 상태에서 기준값을 뺀 값을 대입할 겁니다. 좋아요? 기본적으로 제가 원하는 것은 y 제 상태입니다. 왜 그런지는 모르겠지만, 이것을 벡터 y라고 부르고 이것의 dt는 y의 f의 y이고 이 모든 것이 y가 됩니다. 어때요. Matlab에서 제가 원하는 것은 제 상태에 대해 10 PI 0의 기준값에 접근하는 것입니다. 좋아요? 즉, 이것이 x가 1이 되도록 걸어가서 진자를 수직 위치에 유지하려는 것입니다. 그리고 그 k 이득 행렬을 사용하면 시스템을 안정화했기 때문에 이것을 할 수 있어야 합니다. 좋아요, 이걸 시도해 봅시다. 그리고 다시, 이 코드를 실행할 수 있습니다. 미안합니다. 이걸 위로 옮기려고 합니다. 그리고 코드의 마지막에 솔루션을 그릴 겁니다. 이 시뮬레이션을 실행하면 진자가 내가 원하는 대로 하도록 플롯할 겁니다. 좋아요, poll place, cart, pen을 해 봅시다. 제 스크립트입니다. enter를 칩니다. 최선을 바라겠습니다. 오, 화면에서 나갔다가 다시 돌아왔습니다. 좋아요, 더 잘할 수 있는지 봅시다. 더 오래 적분해야 할 것 같아요. 한 번 더 시도해 봅시다. 그다지 인상적이지 않네요. 좋아요, 수직으로 시작하지만 조금 벗어납니다. 실제로 화면에서 나간 다음 매우 느리게 내가 말한 곳으로 돌아옵니다. x 위치의 이 참조 값 1, 속도 0, 세타 방향의 수직 PI, 속도 0. 그래서 이 극 배치는 시스템을 안정화하고 이동시켰는데, 꽤 멋지네요. 좋아요. 그래서 실제로 작동했지만, 거기까지 걸어가는 데 영원히 걸렸어요. 그리고 저는 초기 조건에서 시작했는데, x가 -4와 같은 것 같아요. 한 번 봅시다. 네. 그래서 제 초기 조건은 x가 -3이었고 약간 어긋났습니다. 수직 PI 더하기 0.1. 그러니까 제가 이것을 더 공격적으로 만들고 싶다고 합시다. 오른쪽으로 이동하는 것을 더 빠르게 만들고 싶습니다. 그럼 이 극, 이 고유값에 무엇을 할까요? 저는 이것을 극이라고 부릅니다. 사람들은 이것을 극 또는 고유값이라고 부릅니다. 그것들은 같은 것입니다. 이것들을 더 빠르게 만들려면 무엇을 할까요? 그래서 이것이 더 공격적일까요? 글쎄요, 저는 그것들을 왼쪽 반평면으로 더 멀리 옮길 수 있습니다. 저는 그것들을 더 빠르고 공격적으로 만들어야 하는 더 음의 실수 부분을 가질 수 있습니다. 그럼 이걸 시도해 봅시다. 좋아요, 저는 그것들을 더 음수, -1, -1.1, -1.2, -1.3으로 만들 것입니다. 그래서 이것은 더 공격적인 고유값 배치입니다. 더 빠르고 더 빠른 수렴이 필요해요. 이걸 시도해 봅시다. 폴 플레이스 카트 펜 I 이건 매우 빠르게 실행될 거고, 제대로 가야 할 곳으로 바로 갈 거예요. 그래서 화면에서 벗어나지 않았어요. 거의 제어하지도 못했어요. 꽤 빨리 제어했는데, 좋죠. 그게 우리가 원했던 거예요. 그래서 고유값을 왼쪽 반평면으로 더 멀리 옮기는 게 좋은 것 같았어요. 좋아요, 이제 이걸 무한정 계속할 수 있을까요? 만약 그렇게 한다면, 더 안정적으로 만든다면 어떨까요? 좋아요, 여기서 마이너스 2, -2.1 등등을 만들 거예요. 그래서 이게 훨씬 더 공격적이에요. 이걸 시도해 봅시다. 아마 이게 바로 요점을 짚고 잘 될 거예요. 좋아요. 정말 빠르네요. 좋아요. 거기에 도달하는 데 시간이 걸리지 않았어요. 매우 공격적이었어요. 하지만 꽤 불규칙해지는 것도 볼 수 있었어요. 그렇죠. 아마 꽤 비쌀 거예요. 이 타이어를 정말 크랭크해서 저쪽에서 이걸 움직이게 해야 해요. 그러니까 여기에 큰 엔진이나 큰 모터가 없다면 이 컨트롤러를 실현할 수 없을지도 몰라요. 제가 당신을 플로팅했다면 정말 클 거라고 가정할게요. 좋아요. 이게 정말 끌리거든요. 그리고 더 멀리 갈 수 있어요. 더 멀리 갈 수 있어요. 한 단계 더 가보죠. 한 단계 더 공격적으로요. 그래서 왼쪽 반평면으로 더 멀리 옮기고, 제 시간을 줄일 거예요. 더 이상 30으로 통합할 필요가 없어요. 그리고 엄청나게 갑작스럽게 움직이는 걸 볼 수 있어요. 좋아요. 이걸 보여드리지는 않겠지만, 제가 늘리면, 그 극을 왼쪽 반평면으로 더 멀리 옮기면, 시스템이 실제로 깨져요. 불안정해지죠. 비선형 동역학이 불안정해요. 선형화된 시스템의 극을 왼쪽 반평면으로 너무 멀리 옮기면 사실 흥미로운 점은 고유값이 더 왼쪽 반평면에 있고 더 음의 실수 부분이 더 안정적이라고 생각한다는 것입니다. 즉, 실제로 더 빠르다는 뜻입니다. 이러한 역학은 더 빠릅니다. 이것은 원하는 평형에 더 빨리 접근하지만 실제로는 덜 견고합니다. 이 고유값을 왼쪽 반평면으로 더 밀어 넣을수록 많은 경우 이 경우 덜 견고해집니다. 우리는 실제로 시스템을 휘두르는 칼날 위에 있습니다. 그리고 이러한 비선형. 비선형 시스템은 컨트롤러를 만든 선형 시스템과 정확히 같지 않을 수 있습니다. 따라서 매우 공격적인 제어에서는 실제로 깨질 것입니다. 그래서 거기에는 시스템이 원하는 곳으로 이동하는 속도에 대한 성능의 최상의 균형을 이루고 그렇게 하는 데 너무 많은 제어 노력을 들이지 않는 이 시스템에 배치할 수 있는 이상적인 고유값 집합인 스위트 스팟이 있다는 것이 밝혀졌습니다. 알겠어요? 그래서 그것이 우리가 다음에 작업할 것입니다. 선형 이차 레귤레이터라고 합니다. 알겠어요? 이게 LQR이고, 최적 제어 이론에서 가장 중요한 결과 중 하나입니다. 기본적으로 상태를 얼마나 빨리 안정화하고 얼마나 많은 제어 에너지를 소모하는지의 균형을 맞추는 최적 이득 행렬 k를 제공합니다. 그래서 극 배치의 스위트 스팟과 같습니다. 그리고 다시 말하지만, Matlab에서는 매우 간단합니다. Matlab 코드 한 줄입니다. 알겠어요, 그럼 다음으로 가볼 곳입니다.