Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

예측 경로를 보면서 실행하기

"Straight · 1 m offset"을 실행하고 재생하세요. 각 시점의 녹색 점선은 그 시점에 계산된 예측 경로입니다. MPC는 예측 범위 전체에 대한 곡률 수열을 한꺼번에 결정하지만, 차량에는 그중 첫 번째 값만 적용하고 다음 주기(0.05초 후)에 전체를 다시 계산합니다. 예측 경로와 실제 경로가 어긋나는 것은 예측 모델이 근사이기 때문이기도 하고, 이후 주기에서 계획이 갱신되기 때문이기도 합니다.

결과를 A로 저장한 다음 "Short horizon (3 steps)" 또는 "Long horizon (30 × 0.2 s)"을 실행하세요. 같은 가중치라도 컨트롤러가 앞을 얼마나 내다보는지에 따라 조향이 형성되는 양상이 달라집니다. 초 단위 예측 범위 길이는 단계 수 N과 단계 간격 Δt의 곱입니다.

예측 모델과 최적화 문제

상태 변수는 경로에 대한 횡방향 오차 e_y(왼쪽이 양)와 방위각 오차 e_ψ입니다. 예측에는 MPC용으로 단순화한 선형 모델을 사용합니다.

e_{y,k+1} = e_{y,k} + v_k\,\Delta t\,e_{\psi,k},\qquad e_{\psi,k+1} = e_{\psi,k} + v_k\,\Delta t\,(u_k - \kappa_k)

u_k는 지령 경로 곡률[1/m]이고, κ_k는 예측된 위치에서의 경로 곡률이며, v_k는 차량과 동일한 속도 서보로 예측한 속도입니다. 조향각은 δ=atan(L u)이므로, 조향 한계 |δ|≤δ_max는 곡률 상한 |u|≤tan(δ_max)/L과 정확히 같습니다. 비용 함수는

J = \sum_{k} q_y e_{y,k}^2 + q_\psi e_{\psi,k}^2 + r\,(u_k-\kappa_k)^2 + r_\Delta\,(u_k-u_{k-1})^2

이며, 곡률 상하한만을 갖는 2차 계획법(QP) 문제가 됩니다. u_{-1}은 직전 주기에서 실제로 적용된 곡률입니다. r은 경로 곡률로부터의 편차에, r_Δ는 곡률의 급격한 변화에 대한 가중치입니다. 예측은 소각도 선형 모델을 사용하지만, 실제 차량은 비선형인 공유 자전거 모델입니다. 이 차이 역시 이 실험이 보여주고자 하는 대상입니다.

솔버, 그리고 수렴하지 않을 때의 처리

2차 계획법(QP) 문제는 투영 뉴턴법(Bertsekas 1982)으로 풉니다. 상하한에 고정된 변수는 그대로 고정하고, 나머지 변수에 대해 뉴턴 방향을 계산한 뒤, 상하한으로의 투영을 포함한 선형 탐색을 수행합니다. 투영된 기울기의 잔차가 1e-6 [1/m] 이하이면 수렴한 것으로 간주합니다. 직전 주기의 해를 초기값으로 사용하므로 보통 몇 번의 반복 안에 수렴합니다.

반복 횟수 상한에 도달해도 수렴하지 않는 경우, 세 가지 처리 방식 중 하나를 선택할 수 있습니다. "Use feasible iterate"는 상하한을 만족하는 도중 해를 적용하고 해당 주기를 미수렴으로 기록합니다. "Hold previous command"는 직전 조향을 유지하고 해당 주기를 유지 상태로 기록합니다. "Stop"은 주행을 실패(controller_failed)로 종료하고 이유를 표시합니다. 반복 상한을 1회로 설정한 세 가지 프리셋으로 그 차이를 비교해 보세요. 이 문제는 상하한만을 제약으로 가지므로 실행 불가능(해가 존재하지 않음)해지는 경우가 없습니다. 상태에 대한 엄격한 제약을 추가했을 때 발생하는 실행 불가능성은 이 연구실의 범위를 벗어납니다.

제약, 가중치, 속도

"8 m/s · default weights"는 완주하지만, "8 m/s · small rate weight (diverges)"는 경로를 벗어납니다. 차량 쪽에는 조향 변화율 0.8 rad/s의 제한이 있지만, 이 최적화 문제는 그 제한을 제약으로 포함하지 않습니다. 변화율 가중치 r_Δ가 작으면 계획상으로는 차량이 따라갈 수 없는 빠른 조향 변화를 전제로 하게 되어 진동이 커집니다. 모델에 포함되지 않은 제약이 폐루프를 무너뜨리는 예입니다. "High lateral weight"에서도 급격한 수정이 조향 변화율 한계에 부딪히는 모습을 확인할 수 있습니다.

"Tight curve (cannot follow)"는 반경 5 m 경로로, 차량이 끝까지 따라갈 수 없는 예입니다. 같은 조건에서는 Stanley 연구실도 경로를 벗어납니다. 제어 법칙을 바꾸더라도 차량과 그 제약이 정하는 한계를 넘어설 수는 없습니다.

공유 차량과 비교 지표

차량은 PP, APP, RPP, Stanley와 공유하는 후륜차축 기준·전진 전용 운동학적 자전거 모델입니다. 최대 30초까지 0.05초 간격이며, 속도 상한 8 m/s, 가감속 ±2 m/s², 조향 변화율 0.8 rad/s입니다. 속도는 MPC가 최적화하지 않으며, 다른 연구실과 동일한 속도 서보 a=2(목표 속도−실제 속도)에서 결정됩니다. 이 연구실의 MPC는 조향만을 다룹니다.

횡방향 오차, 방위각 오차, RMS, 종점 판정은 다른 연구실과 공유하는 정의를 사용하며 후륜차축 기준입니다. 종점을 통과했다고 해서 정지나 주차를 의미하지는 않습니다. 경과 시간이나 완료 상태가 다른 실행 결과를 RMS만으로 순위 매기지 마십시오.

계산 시간에 대하여

솔버 시간은 이 브라우저에서 실행되는 Python(Pyodide)의 실제 경과 시간(wall-clock time)입니다. 이 값은 기기, 브라우저, 동시에 실행 중인 다른 작업에 따라 달라지며, 차량 탑재 컴퓨터에서의 계산 시간이나 제어 주기의 마감 시한을 만족하는지를 나타내지 않습니다. 성능 평가를 위해서는 대상 하드웨어와 구현(예를 들어 OSQP와 같은 전용 솔버)에서 최악의 경우 계산 시간을 측정해야 합니다.

권장 순서

  1. 기본 조건으로 재생하여 예측 경로와 실제 경로를 비교합니다.
  2. 예측 범위의 단계 수와 간격을 바꾸어 조향이 형성되는 양상과 횡방향 오차를 비교합니다.
  3. 8 m/s의 두 프리셋으로 변화율 가중치와 조향 변화율 한계의 관계를 확인합니다.
  4. 반복 상한 1회의 세 프리셋으로 미수렴 주기의 처리 방식 차이를 비교합니다.

모든 계산은 브라우저 안에서 이루어지며, 재생, 프레임 단위 이동, A/B 비교, 리셋, 공유, JSON 다운로드를 사용할 수 있습니다.

참고 자료와 관련 연구실

Related reading

Explore another aspect of this fieldPure Pursuit 연구실 — 고정 선행거리 경로 추종 비교