11강 Car Traj optimization - collocation

이전 강의에서 다양한 최적화 기법을 실습해보았습니다. 잠시 복습을 해보겠습니다.
  • linear optimization, nonlinear optimization
  • unconstrained optimization, constrained optimization
  • constraint에는 또다시 boundary conditionlinear, non-linear constraint가 있었지요.


이번 시간에는 최적화 기법을 적용하여 거리 D를 움직이는 1차원 자동차에 대해 최적 시간을 만족하는 경로를 계산하고, 해당 경로를 만족하는 제어값도 구해내보고자 합니다.

시작 지점과, 끝 지점에서 속도 0이어야 하며, 시간 T에서 차량은 목적지에 도착해야 할 것입니다. (이것이 곧 constraint가 되는 것이지요.) 그리고, 우리가 전달하는 제어값은 가속도 u라고 정의하겠습니다.

  1. 각각의 시간에 대해 어떠한 제어 u를 전달했을 때, 차량이 시간 T이후 목적지에 도달하게 될까요?
  2. 전달할 수 있는 제어값 u가 -5 ~ 5라는bound constraint를 가질 때, 목적지에 도달하기까지의 최소 시간 T는 어떻게 될까요?

💡목적지 D까지 도달하기 위한 시간 T를 N등분하고, 각각의 step에 대한 제어값 u(t)를 도출해내는 작업이 필요할 것 같습니다.

💡각 step 사이 관계식을 constraint로 정의하고, 시간 T에 대한 최적화 기법도 적용해야겠지요.

이번 시간, 그리고 다음 시간에는 이러한 최적화 문제를 해결하는 방법론을 두 가지 제시하고자 합니다.

1. collocation method

2. shooting method


Collocation method

“Collocation”이라 함은, “나란히 배열한다”는 뜻인데요, 이름에 걸맞게 Collocation method는 system dynamics를 통해 각 step 사이 관계식을 모두 정의하고, 이를 constraint로 두고 목적함수를 최적화하는 식으로 동작합니다.
  • SLSQP가 최적화 문제를 해결할 수 있도록 우리는 다음과 같은 조건들을 전달해야 합니다.

Description
cost function 목적지까지 도달하기 위한 시간 T
boundary condition 물리 세계에서의 동작을 고려한 위치와 속도, 제어 신호의 최대, 최소값
constraints 각 step 사이의 dynamics (system의 dynamics를 알아야 constraint를 정의할 수 있겠지요.)
initial, final condition 초기 위치와 최종 위치, 그때의 속도


코드를 구현하기 전, 혼란을 일으킬 수 있는 step size와 variable state에 대해 다잡고 넘어갑시다.

⇒ 전체 시간을 N step으로 나누었고 initial, final state를 고려해야 하기 때문에 N+1 개의 위치, 속도, 가속도 state들이 정의됩니다. 더불어 total time까지 고려하면 최종 3N+4개의 변수가 정의됩니다.

State index Description
0 total time T
1 ~ N+1 pos states
N+2 ~ 2N+2 vel states
2N+3 ~ 3N+3 control states

💡 각 step 사이의 dynamics를 정의하는 수식은 N개가 필요하며 위치 & 속도, 속도 & 가속도의 dynamics를 고려해야 하기 때문에 2N개의 수식이 필요합니다.

💡 더불어, initial state에서의 위치 & 속도, final state에서의 위치 & 속도를 추가하면 최종 2N+4개의 constraint가 필요합니다.

State index Description
0, 1, 2, 3 initial pos, vel / final pos, vel
4 ~ N+3 pos & vel dynamics
N+4 ~ 2N+3 vel & control dynamics

이제 state, constraint들을 정의하고 파이썬을 통해 최적화까지 진행해 봅시다!

코드 구현

  • 예시를 위해 최종 목적 위치는 5, step size는 12로 정의해보겠습니다.
class Parameters:
    def __init__(self):
        # D : distance between start and end
        # N : number of collocation points
        self.D = 5
        self.N = 12


  • 앞서 설명했던 표에 따라 state variable을 다음 list, x가 정의될 것입니다. 이때, pos, vel, control state에 대해 boundary condition이 적용되어야 하므로 x_min, x_max라는 array를 추가로 생성하였습니다.


  • 다음으로 costconstraint를 정의합니다. cost는 전체 소요 시간 T가 되고, x array로부터 pos, vel, u값을 파싱받고 있습니다.


  • ceq라는 이름으로 constraint들을 담는 array를 생성하였습니다. initial, final constraint들을 추가하고 파싱받은 pos, vel, u값을 통해 각 step사이 dynamics equation을 구현하면 이것이 곧 constraint가 됩니다.


  • 정의한 boundary condition, constraint들을 SLSQP에게 전달하여 optimization을 계산합니다.


  • 계산된 최적 pos, vel, u를 추출하여 plotting하는 것으로 코드가 마무리됩니다.

collocation method는 이렇게 system dynamics를 모두 예측할 수 있다는 가정 하, 목적 함수를 최소화/최대화하는 경로를 생성해냅니다.

위 결과에 대해 직관적으로 생각해보면, 거리의 절반까지 최대 가속을 가해주다가 이후 최대 감속을 가하는 것이기 때문에 굳이 복잡한 코드를 작성하지 않아도 되나 싶습니다. 하지만 로봇의 에너지, boundary, 충격량을 최적화하는 등 다양한 목적에 응용될 수 있음을 인지하면서 계속해서 학습해보시기 바랍니다. 🙂

Complete and Continue