flowchart LR
S["State x_t"] --> NN["Actor MLP<br/>(2x512, ReLU)"]
NN -->|"cost params (C_t, c_t)"| MPC["CA-DiffMPC layer<br/>(iLQR, K iters)"]
MPC -->|"u*_t"| ENV["Drone dynamics f"]
ENV -->|"reward r_t"| CRITIC["Critic MLP<br/>(value V)"]
CRITIC -.->|"advantage / PPO loss"| NN
MPC -.->|"implicit diff (KKT)"| NN
ENV --> S
๐CA-AC-MPC
๐ Ping Review
๐ Ping โ A light tap on the surface. Get the gist in seconds.
๐ Ring Review
๐ Ring โ An idea that echoes. Grasp the core and its value.
์๋ก
๋ก๋ด ์ ์ด์์ ์ฐ๋ฆฌ๋ ๋ ๋ ๋ง๋ฆฌ ํ ๋ผ๋ฅผ ์ซ์ต๋๋ค. ํ๋๋ ๋ชจ๋ธ ๊ธฐ๋ฐ ์ต์ ์ ์ด(MPC) ๊ฐ ์ฃผ๋ ๊ตฌ์กฐ์ ์์ ์ฑ๊ณผ ์ ์ฝ ์กฐ๊ฑด ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ๊ฐํํ์ต(RL) ์ด ์ฃผ๋ ์ ์ฐ์ฑ๊ณผ ๊ณผ์ ์ค์ฌ์ ์ฑ๋ฅ์ ๋๋ค. MPC๋ โ๋ค์ ๋ช ์คํ ๋์ ์ด๋ป๊ฒ ์์ง์ฌ์ผ ๋น์ฉ์ด ์ต์๊ฐ ๋ ๊น?โ๋ฅผ ๋งค ์๊ฐ ํ์ด๋ด์ง๋ง, ์ฌ๋์ด ์ง์ ๋น์ฉ ํจ์๋ฅผ ์ ๊ตํ๊ฒ ์ค๊ณํด์ผ ํ๊ณ ๋ชจ๋ธ์ด ์ ํํด์ผ๋ง ์ ๋์ํฉ๋๋ค. RL์ ๋น์ฉ ํจ์๋ฅผ ์์ผ๋ก ์ง์ง ์์๋ ๋ณด์ ์ ํธ๋ง์ผ๋ก ์ ์ฑ ์ ํ์ตํ์ง๋ง, ์๋ฐฑ๋ง ๋ฒ์ ์๋ฎฌ๋ ์ด์ ์ด ํ์ํ๊ณ ์ ์ฝ ์กฐ๊ฑด์ ๋ณด์ฅํ๊ธฐ ์ด๋ ต์ต๋๋ค.
AC-MPC(Actor-Critic Model Predictive Control) ๋ ์ด ๋์ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ํจ๋ฌ๋ค์์ ๋๋ค. ํต์ฌ ์์ด๋์ด๋ฅผ ๋น์ ํ์๋ฉด, MPC๋ฅผ ์กํฐ(actor) ์ ๊ฒฝ๋ง์ ๋ง์ง๋ง ์ธต์ผ๋ก ๋ผ์ ๋ฃ๋ ๊ฒ์ ๋๋ค. ์ ๊ฒฝ๋ง์ด โ์ด๋ฒ ์ํฉ์์๋ ์ด๋ฐ ๋น์ฉ ํจ์๊ฐ ์ข๊ฒ ๋คโ๋ผ๊ณ ๋น์ฉ ๊ณ์ (C_t, c_t)๋ฅผ ์ถ๋ ฅํ๋ฉด, ๊ทธ ๋น์ฉ์ ๋ฐ์ MPC๊ฐ ์ค์ ์ ์ด ์ ๋ ฅ์ ํ์ด๋ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด MPC ์ธต์ ๋ฏธ๋ถ ๊ฐ๋ฅ(differentiable) ํ๊ฒ ๋ง๋ค์ด RL ์์ค์ ๊ทธ๋๋์ธํธ๊ฐ MPC๋ฅผ ๊ฑฐ๊พธ๋ก ํต๊ณผํด ์ ๊ฒฝ๋ง๊น์ง ํ๋ฌ๊ฐ๊ฒ ํฉ๋๋ค. ์ฆ, โ๋ฌด์์ ์ต์ ํํ ์ง(๋น์ฉ)โ๋ RL์ด ํ์ต์ผ๋ก ์ ํ๊ณ , โ์ด๋ป๊ฒ ํธ๋์ง(์ต์ ํ)โ๋ MPC๊ฐ ์ฑ ์์ง๋๋ค.
๋ฌธ์ ๋ ์๋์ ๋๋ค. ์ผ๋ฐ์ ์ธ MLP ์ ์ฑ ์ ํ ๋ฒ์ ์๋ฐฉํฅ ํจ์ค(feed-forward)๋ฉด ๋์ด์ง๋ง, AC-MPC๋ ๋งค ์ ์ฑ ํ๊ฐ๋ง๋ค ์ต์ ํ ๋ฌธ์ ๋ฅผ ํ์ด์ผ ํ๊ณ , ํ์ต ์ค์๋ ์๋ฒ๋ฅผ ๊ฑฐ๊พธ๋ก ๋ฏธ๋ถ๊น์ง ํด์ผ ํฉ๋๋ค. ํ ๋ฒ์ ํ์ต ๊ณผ์ ์์ MPC๋ฅผ ์๋ฐฑ๋ง ๋ฒ ํ๊ฒ ๋๋, ํ์ต๊ณผ ์ถ๋ก ๋ชจ๋ ํ์ค MLP๋ณด๋ค ํจ์ฌ ๋๋ ค์ง๋๋ค.
์ด ๋
ผ๋ฌธ(ICUAS 2026, ๋ํด๋ฆฌ ํ๋ฐ๋ฆฌ์ฝ II ๋ํ PRISMA Lab)์ด ์ฃผ๋ชฉํ ์ง์ ์ด ํฅ๋ฏธ๋กญ์ต๋๋ค. ์ ์๋ค์ ์ด ๋ณ๋ชฉ์ด GPU์ ์์ ์ฐ์ฐ ์ฒ๋ฆฌ๋(throughput) ๋ฌธ์ ๊ฐ ์๋๋ผ, ์ปค๋ ์คํ ์ค๋ฒํค๋(kernel launch overhead) ๋ฌธ์ ๋ผ๊ณ ์ง๋จํฉ๋๋ค. ๋ก๋ด ์ ์ด์์ ์ํ/์ ์ด ์ฐจ์(n_x, n_u)์ ๋ณดํต ์๊ฑฐ๋ ์ค๊ฐ ๊ท๋ชจ(๊ฐ๋ น 100 ๋ฏธ๋ง)๋ผ์, ๊ฐ๋ณ ์ฐ์ฐ ์์ฒด๋ ๋ช ๋ง์ดํฌ๋ก์ด๋ฉด ๋๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ธฐ์กด PyTorch ๊ธฐ๋ฐ ๊ตฌํ(mpc.pytorch)์ ์์ธก ์งํ์ T์ ๋ํด Python ๋ ๋ฒจ for ๋ฃจํ๋ฅผ ๋๋ฉด์ ๋จ๊ณ๋ง๋ค O(T)๋ฒ์ GPU ์ปค๋์ ๋์๋๋ค. ๋น์ ํ์๋ฉด, ์์ ์ง์ ์๋ฐฑ ๋ฒ ๋๋ฅด๋๋ฐ ๋งค๋ฒ ํธ๋ญ ์๋์ ์๋ก ๊ฑฐ๋ ์
์
๋๋ค. ์ง์ ์ฎ๊ธฐ๋ ์๊ฐ๋ณด๋ค ์๋ ๊ฑฐ๋ ์๊ฐ์ด ๋ ๊ธธ์ด์ง๋๋ค.
CA-AC-MPC์ ํ ์ค ์์ฝ: ์ํ์ ์ ์ํ๋ ๊ทธ๋๋ก ๋๊ณ , iLQR ์๋ฒ๋ฅผ ๋จ 3๊ฐ์ ์ตํฉ CUDA ์ปค๋(fused kernel) ๋ก ์ฌ๊ตฌ์ฑํด ์ด โ์๋ ๊ฑฐ๋ ์ค๋ฒํค๋โ๋ฅผ ์ง์ ์ ๊ฑฐํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ์๋ฒ๋ 1~2 ์๋ฆฟ์(orders of magnitude) ๋นจ๋ผ์ง๊ณ , AC-MPC๋ฅผ ์ค์ฉ์ ์ธ ํ์ต ์๋๋ก ๋์ด๋ด๋ฆฝ๋๋ค.
๋ฐฉ๋ฒ
๊ฒฝ์ ์ MPC์ 2์ฐจ ๋น์ฉ ๊ทผ์ฌ
๋จผ์ ํ ๋๊ฐ ๋๋ ๊ฒฝ์ ์ MPC(economic MPC) ๋ฅผ ๋ด ์๋ค. ์ด์ฐ ์๊ฐ ๋์ญํ x_{t+1} = f(x_t, u_t) ์์์ ์ ํ ์งํ์ ์ต์ ์ ์ด ๋ฌธ์ (OCP)๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
\min_{u_0, \dots, u_{T-1}} \sum_{t=0}^{T-1} \ell_t(x_t, u_t) + V_f(x_T) \quad \text{s.t.} \quad x_{t+1} = f(x_t, u_t),\; u_t \in \mathcal{U},\; x_0 = x_{\text{init}}
๋งค ์ํ๋ง ์์ ๋ง๋ค ์ด ๋ฌธ์ ๋ฅผ ํ๊ณ , ์ต์ ์ํ์ค ์ค ์ฒซ ๋ฒ์งธ ์ ๋ ฅ u_0^\star ๋ง ์ ์ฉํ ๋ค ๋ค์ ์คํ ์์ ๋ค์ ํธ๋ ๊ฒ์ด ๋ฐ๋ก receding horizon ๋ฐฉ์์ ๋๋ค.
ํ์ค ์ถ์ (tracking) MPC๋ ๋น์ฉ \ell_t๋ฅผ โ๋ชฉํ ๊ถค์ ์์ ์ผ๋ง๋ ๋ฒ์ด๋ฌ๋โ๋ฅผ ์ฌ๋ ์์ ์ ๋ถํธ 2์ฐจ ํจ์๋ก ์ก์ต๋๋ค. ํ์ง๋ง ๋๋ก ๋ ์ด์ฑ์ฒ๋ผ โ๋ฉ ํ์ ์ต์ํโ ๊ฐ์ ๊ณผ์ ์ค์ฌ ๋ชฉํ๋ ๋ณธ์ง์ ์ผ๋ก ํฌ์ํ๊ฑฐ๋(sparse), ๋น๋งค๋๋ฝ๊ฑฐ๋(non-smooth), ๋ฏธ๋ถ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋์ ์ ์๋ค์ ๋น์ฉ์ 2์ฐจ ๋๋ฆฌ ํจ์(quadratic surrogate) ๋ก ๊ทผ์ฌํฉ๋๋ค. z_t = [x_t^\top, u_t^\top]^\top \in \mathbb{R}^{n_x + n_u}๋ก ๋๋ฉด,
\ell(z_t) \approx \frac{1}{2} z_t^\top C_t z_t + c_t^\top z_t
์ฌ๊ธฐ์ C_t๋ ์์ ์ค์ ๋ถํธ ๋น์ฉ ํ๋ ฌ, c_t๋ ์ ํ ๋น์ฉ ๊ณ์์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ชฉํ๊ฐ ๋งค๋๋ฌ์์ง๊ณ (C_t, c_t)์ ๋ํด ๋ฏธ๋ถ ๊ฐ๋ฅํด์ง๋๋ค. ์ด๊ฒ ํต์ฌ์ ๋๋ค. ์์ผ๋ก ๊ณ ์ ํด ๋ ๊ณ์๋ ์ํฉ๋ง๋ค ์ผ๋ฐํํ์ง ๋ชปํ๋, ์ ๊ฒฝ๋ง์ด ๋งค ์์ ยท๋งค ์ํฉ๋ง๋ค (C_t, c_t)๋ฅผ ๋์ ์ผ๋ก ์ถ๋ ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด์ฃ .
์กํฐ-ํฌ๋ฆฌํฑ ๊ตฌ์กฐ
RL ๋ถ๋ถ์ ํ์ค์ ์ธ actor-critic์ PPO(proximal policy optimization)๋ก ํ์ตํฉ๋๋ค. ํฌ๋ฆฌํฑ์ TD(temporal difference) ์ค์ฐจ๋ก ๊ฐ์น ํจ์๋ฅผ ์ถ์ ํฉ๋๋ค.
\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)
์กํฐ๋ ์ด๋๋ฐดํฐ์ง A_\phi(s_t, a_t) \approx \delta_t๋ฅผ ์ฑ๋ฅ ์ ํธ๋ก ์ผ์ ์ ์ฑ ๊ทธ๋๋์ธํธ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
\nabla_\theta J(\pi_\theta) = \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{L} \nabla_\theta \log \pi_\theta(a_t^i \mid s_t^i)\, A_\phi(s_t^i, a_t^i)
AC-MPC์์ ์กํฐ์ ๋ง์ง๋ง ์ธต์ด ๋ฐ๋ก MPC์ ๋๋ค. ํ์ต ์์๋ ํํ์ ์ํด MPC ํด ์ฃผ๋ณ์์ ํ๋ฅ ์ ์ผ๋ก ํ๋์ ์ํ๋งํ๊ณ , ๋ฐฐํฌ ์์๋ ๊ฒฐ์ ๋ก ์ MPC ํด๋ฅผ ๊ทธ๋๋ก ์ ์ฉํฉ๋๋ค.
๋ฏธ๋ถ ๊ฐ๋ฅ MPC: ์์์ ๋ฏธ๋ถ
MPC ์ธต์ ๊ฑฐ๊พธ๋ก ๋ฏธ๋ถํ๋ ๋ ๊ฐ์ง ๊ธธ์ด ์์ต๋๋ค. ํ๋๋ ์๋ฒ ๋ฐ๋ณต์ ๊ทธ๋๋ก ํ์ดํค์ณ(unrolling) ์๋ ๋ฏธ๋ถํ๋ ๊ฒ์ธ๋ฐ, ๊ณ์ฐ ๋น์ฉ์ด ํฌ๊ณ ์์น์ ์ผ๋ก ๋ถ์์ ํฉ๋๋ค. ์ด ๋ ผ๋ฌธ์ด ํํ ๊ธธ์ ์์์ ๋ฏธ๋ถ(implicit differentiation) ์ผ๋ก, ์๋ ดํ ํด์์ KKT ์ต์ ์ฑ ์กฐ๊ฑด์ ๋ฏธ๋ถํด ๊ทธ๋๋์ธํธ๋ฅผ ์ป์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ์ฒด ๊ณ์ฐ ๊ทธ๋ํ๋ฅผ ์ ์ฅํ ํ์๊ฐ ์๊ณ , ๋ฐฑ์๋ ํจ์ค๊ฐ ์๋ฒ ๋ฐ๋ณต ํ์์ ๋ฌด๊ดํด์ง๋๋ค. ์ธ๋ถ ์์ค L์ ๋ํ (C_t, c_t)์ x_{\text{init}}์ ๊ทธ๋๋์ธํธ๊ฐ ๋ณด์กฐ ์ ํ ์์คํ ํ ๋ฒ์ผ๋ก ๋ณต์๋ฉ๋๋ค.
CA-DiffMPC: 3-์ปค๋ ์ตํฉ
์ฌ๊ธฐ๊ฐ ์ด ๋ ผ๋ฌธ์ ์ง์ง ๊ธฐ์ฌ์ ๋๋ค. ์๋ฐฉํฅ ์๋ฒ๋ ์ ์ด ์ ์ฝ์ ๋ค๋ฃจ๋ control-limited iLQR(Tassa et al., 2014)์ ๋ฐ๋ฆ ๋๋ค. ํ๋ ค๋ ๋ฐ์ค ์ ์ฝ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
\min_{x_t, u_t} \sum_{t=0}^{T-1} \frac{1}{2} z_t^\top C_t z_t + c_t^\top z_t \quad \text{s.t.}\quad x_{t+1}=f(x_t,u_t),\; u_{\min} \le u_t \le u_{\max},\; x_0 = x_{\text{init}}
๊ธฐ์กด mpc.pytorch๋ ๊ฐ iLQR ๋จ๊ณ(์ ํํ, Riccati ๋ฐฑ์๋, ๋ผ์ธ์์น ๋กค์์)๋ฅผ ์งํ์ T์ ๋ํ Python for ๋ฃจํ๋ก ๋๋ ค ๋จ๊ณยท๋ฐ๋ณต๋ง๋ค O(T)๊ฐ์ ์ปค๋์ ๋์๋๋ค. ์ ์๋ค์ ์ด๋ฅผ iLQR ๋ฐ๋ณต๋น ์ ํํ 3๊ฐ์ ์ตํฉ ์ปค๋๋ก ์์ถํฉ๋๋ค.
Rollout & linearization ์ปค๋: ํ์ฌ ๊ณต์นญ ์ ๋ ฅ์ผ๋ก ์ํ ๋กค์์ x_{t+1}=f(x_t,u_t)๋ฅผ ๊ณ์ฐํ๊ณ , ํด์์ ์ผ์ฝ๋น์ A_t = \partial f / \partial x \in \mathbb{R}^{n_x \times n_x}, B_t = \partial f / \partial u \in \mathbb{R}^{n_x \times n_u}๋ฅผ ๋ชจ๋ ๋ฐฐ์นยท์์ ์ ๋ํด ํ ๋ฒ์ ๊ตฌํฉ๋๋ค. ํด์์ ๋ฏธ๋ถ์ด๋ผ autograd ๊ทธ๋ํ๋ฅผ ์ ์ฅํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์ฝ๋ฉ๋๋ค.
Backward pass ์ปค๋ (with input bounds): Riccati ์ฌ๊ท๋ก ํผ๋๋ฐฑ/ํผ๋ํฌ์๋ ๊ฒ์ธ์ ๊ตฌํด \delta u_t = K_t \delta x_t + k_t๋ฅผ ์ป์ต๋๋ค. ๋ฐ์ค ์ ์ฝ์ด ์์ผ๋ฉด ๋จ๊ณ๋ณ๋ก ๋ฐ์ค ์ ์ฝ 2์ฐจ ๋ถ๋ถ ๋ฌธ์ ๋ฅผ CUDA์์ ํ๋๋ค. ์๊ฐ ๋ฐฉํฅ์ผ๋ก๋ ์์ฐจ์ ์ด์ง๋ง ๋ฐฐ์น ๋ฐฉํฅ์ผ๋ก ๋ณ๋ ฌํํฉ๋๋ค.
Forward pass ์ปค๋ (with line-search): ๋ผ์ธ์์น ๊ณ์ \alpha \in \{1.0, 0.5, 0.25, 0.1\} ํ๋ณด๋ค์ ๋ณ๋ ฌ๋ก ํ๊ฐํด, ์ํ ํผ๋๋ฐฑ ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฉํ๊ณ ๋์ญํ์ ๋กค์์ํด ๋น์ฉ์ ์ฐ ๋ค ๊ฐ์ฅ ์ข์ ํ๋ณด๋ฅผ ์ ํํฉ๋๋ค.
์์ฌ์ฝ๋๋ก ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Algorithm: CA-AC-MPC deployment
Require: actor pi_theta, dynamics f, horizon T, max iter K, bounds U
1: init CA-DiffMPC backend
2: for t = 0, 1, 2, ... do
3: observe state x_t
4: (C, c)_{0:T-1} <- pi_theta(x_t) # cost params from actor MLP
5: (X0, U0) <- Rollout(x_t, f)
6: for k = 1 ... K do
7: (A, B, l)_{0:T-1} <- LQ(f, (C,c), X_{k-1}, U_{k-1}) # kernel 1: linearize
8: (K, kff)_{0:T-1} <- FBP((A,B,l), U) # kernel 2: fused backward
9: (X_k, U_k) <- FFP(x_t, U_{k-1}, (K,kff)) # kernel 3: fused forward + line-search
10: if Converged(X_k, U_k) then break
11: end for
12: u*_t <- U_k[0] # receding horizon: apply first input
13: apply u*_t to system
14: end for
์ค์ํ ์ ์ ์ํ์ ์ ์ํ์ ์์์ ๋ฏธ๋ถ ํ๊น์ด ๊ธฐ์กด DiffMPC์ ์์ ํ ๋์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ธฐ์ฌ๋ ์์ํ๊ฒ ์ํคํ ์ฒ์ ์ ๋๋ค. ์์ ๋ณ Python ๋ฃจํ๋ฅผ ๋ฐ๋ณต๋น 3๊ฐ์ ํธ๋ผ์ด์ฆ ๋ ๋ฆฝ์ ์ธ CUDA ์ปค๋๋ก ๋ฐ๊พผ ๊ฒ์ด์ฃ . ๊ฒฐ๊ณผ๋ฌผ์ ์๋ฒ ๋จ๋ ์ผ๋ก๋ CA-DiffMPC, AC-MPC์ ํตํฉํ๋ฉด CA-AC-MPC๋ผ ๋ถ๋ฆ ๋๋ค.
์คํ
ํ๋์จ์ด๋ Intel Core i9-13900K CPU + NVIDIA RTX A6000 GPU์ ๋๋ค. ๊ณผ์ ๋ SplitS ํธ๋์ ๋๋ ๋ฏผ์ฒฉํ ๋๋ก ๋ ์ด์ฑ(์ ํธ๋ ํ์์ด ๋น๊ณต๊ฐ๋ผ ์ค๋ช ๊ธฐ๋ฐ์ผ๋ก ์ฌ๊ตฌ์ฑ)์ ๋๋ค. ํ๊ฐ๋ ๋ค ๊ฐ์ง ์งํ M_1~M_4๋ก ๋๋๋ฉฐ, ์งํ์ T \in \{2, 5, 10\}์ iLQR ๋ฐ๋ณต K \in \{1, 5, 10\}๋ฅผ ๊ฐ๋ก์ง๋ฌ ์ธก์ ํฉ๋๋ค. ์กํฐ/ํฌ๋ฆฌํฑ ๋ชจ๋ 512 ์ ๋ 2์ธต ReLU MLP์ด๊ณ , ์กํฐ๋ ์๊ทธ๋ชจ์ด๋ ์ถ๋ ฅ์ผ๋ก ๋น์ฉ ๊ณ์๋ฅผ ์ค์ผ์ผยท๋ฐ์ด๋ํฉ๋๋ค.
M_1 โ ์๋ฒ ๋จ๋ ์ง์ฐ (Table II)
ํธ๋ฒ๋ง ์์ ํ ๊ณผ์ ์์ ์ ์ด ์ ๋ฐ์ดํธ 1ํ ๊ณ์ฐ ์๊ฐ(ms)์ ์ธก์ ํด baseline DiffMPC์ ๋น๊ตํฉ๋๋ค.
| Batch B | T | CA-DiffMPC ์๋ฐฉํฅ | DiffMPC ์๋ฐฉํฅ | CA-DiffMPC ์ญ๋ฐฉํฅ | DiffMPC ์ญ๋ฐฉํฅ |
|---|---|---|---|---|---|
| 1 | 2 | 0.93 | 9.92 | 0.32 | 4.81 |
| 1 | 10 | 1.08 | 41.0 | 0.80 | 9.16 |
| 1 | 50 | 1.84 | 492 | 2.35 | 30.1 |
| 256 | 2 | 1.21 | 25.4 | 0.38 | 9.71 |
| 256 | 10 | 1.68 | 90.3 | 0.87 | 14.5 |
| 256 | 50 | 4.00 | 674 | 2.60 | 37.3 |
ํด์: ๋จ์ผ ์ธ์คํด์ค T=50์์ ์๋ฐฉํฅ์ด 492ms โ 1.84ms๋ก ์ฝ 267๋ฐฐ, ๋ฐฐ์น 256ยทT=50์์ 674ms โ 4.00ms๋ก ์ฝ 168๋ฐฐ ๋นจ๋ผ์ง๋๋ค. ๊ฒฐ์ ์ ์ผ๋ก, baseline DiffMPC๋ T๊ฐ ์ปค์ง์๋ก ์๊ฐ์ด ๊ฑฐ์ ์ ํ~์ด์ ํ์ผ๋ก ํญ์ฆํ์ง๋ง(O(T) ์ปค๋), CA-DiffMPC๋ ์งํ์ ์ ๊ฑฐ์ ๋๊ฐํฉ๋๋ค. ์ด๊ฒ ๋ฐ๋ก โ์ปค๋ ์๊ฐ ์์โ๋ผ๋ ์ค๊ณ์ ํจ๊ณผ์ ๋๋ค.
M_2 โ ํ์ต ์๊ฐ (Table III)
์ ์ฒด ์คํ์ ํ์ต ์๊ฐ ๋น๊ต์ ๋๋ค. ๋ค๋ง ์ ์๋ค์ ๊ณต๊ฐ AC-MPC ์ฝ๋๋ฒ ์ด์ค์์ ์ง์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐ๊ฒฌํด(autograd ํด๋์ค ๋ฉํ๋ฐ์ดํฐ ๋์ + ๊ทธ๋๋์ธํธ ์ถ์ ์ผ์ง ์ฑ๋ก iLQR ๋ฃจํ ์คํ) ํจ์น ํ์์ผ baseline์ ์๋ ด์ํฌ ์ ์์์ต๋๋ค.
| ๋ฐฉ๋ฒ | T | ํ์ต ์๊ฐ |
|---|---|---|
| AC-MLP | โ | 16m:18s |
| AC-MPC (์๋ณธ) | 2 | 2h:15m:03s (K{=}5) |
| CA-AC-MPC | 2 | 21m:22s (K{=}1) / 27m:32s (K{=}5) / 30m:30s (K{=}10) |
| CA-AC-MPC | 5 | 21m:55s / 37m:03s / 29m:01s |
| CA-AC-MPC | 10 | 21m:34s / 30m:29s / 33m:22s |
ํด์: ์๋ณธ AC-MPC๋ 2์๊ฐ 15๋ถ์ด ๊ฑธ๋ฆฌ๋ ํ์ต์ด CA-AC-MPC์์๋ ์ฝ 27๋ถ์ผ๋ก ์ค์ด ์ฝ 5.4๋ฐฐ ๋นจ๋ผ์ง๋๋ค. ์์ MLP(16๋ถ)์ ๋น๊ตํด๋ ์ค๋ฒํค๋๊ฐ ์ฝ 1.3๋ฐฐ์ ๋ถ๊ณผํฉ๋๋ค. ์๋ณธ AC-MPC๊ฐ MLP ๋๋น ์ฝ 30๋ฐฐ์๋ ๊ฒ๊ณผ ๊ทน๋ช ํ๊ฒ ๋๋น๋ฉ๋๋ค.
M_3 โ ์ถ๋ก ์ง์ฐ (Table IV)
| ๋ฐฉ๋ฒ | T | K=1 | K=5 | K=10 |
|---|---|---|---|---|
| AC-MLP | โ | 0.245 ยฑ 0.01 ms | ||
| AC-MPC | 2 | โ | 11.6 ยฑ 0.9 ms | โ |
| CA-AC-MPC | 2 | 1.26 ยฑ 0.06 | 1.26 ยฑ 0.06 | 1.26 ยฑ 0.07 |
| CA-AC-MPC | 5 | 1.43 ยฑ 0.08 | 2.39 ยฑ 0.08 | 2.32 ยฑ 0.17 |
| CA-AC-MPC | 10 | 1.60 ยฑ 0.01 | 2.83 ยฑ 0.10 | 2.99 ยฑ 0.30 |
ํด์: baseline AC-MPC(T{=}2, K{=}5)์ 11.6ms ๋๋น CA-AC-MPC๋ 1.26ms๋ก ์ฝ 10๋ฐฐ ๋น ๋ฆ ๋๋ค. ์งํ์ ์ด ๊ธธ๊ณ ๋ฐ๋ณต์ด ๋ง์์๋ก ๊ฒฉ์ฐจ๋ ๋ ๋ฒ์ด์ง๋๋ค. ํฅ๋ฏธ๋กญ๊ฒ๋ T{=}2์์๋ K๊ฐ ๋์ด๋ ์ถ๋ก ์๊ฐ์ด ๊ฑฐ์ 1.26ms๋ก ์ผ์ ํ๋ฐ, ์ด๋ ์ปค๋ ์๊ฐ ๋ฐ๋ณต๊ณผ ๋ฌด๊ดํ๊ฒ ์์๋ผ๋ ์ ๊ณผ ์ผ์ฐ ์๋ ด(early convergence)์ด ์๋ํจ์ ์์ฌํฉ๋๋ค.
M_4 โ ๊ณผ์ ์ฑ๋ฅ / ๋ฉ ํ์ (Table V)
| ๋ฐฉ๋ฒ | T | K | ๋ฉ ํ์ [s] |
|---|---|---|---|
| AC-MLP | โ | โ | 5.32 |
| CA-AC-MPC | 2 | 5 | 5.26 |
| CA-AC-MPC | 2 | 10 | 5.10 |
| CA-AC-MPC | 5 | 5 | 4.98 |
ํด์: ๋ชจ๋ ์ ์ฑ ์ด ์ฝ 20 m/s์ ์ต๊ณ ์๋์ ๋๋ฌํด ํ๋ซํผ์ ๋์ญํ ํ๊ณ ๊ทผ์ฒ์์ ๋นํํฉ๋๋ค. CA-AC-MPC(T{=}5, K{=}5)๋ 4.98์ด๋ก AC-MLP(5.32์ด)๋ณด๋ค ๋น ๋ฅด๋ฉฐ, ๋ฐ๋ณต K๊ฐ ๋์๋ก ๊ถค์ ์ด ๋ ๋งค๋๋ฌ์์ง๋๋ค. ์ ์ฑ์ ์ผ๋ก๋ ๊ฒ์ดํธ 2~4 ๊ตฌ๊ฐ(split-S ์ง์ )์์ MPC ์ ์ฑ ์ด ๋ ๋์ ์๋๋ฅผ ์ ์งํ๋ ๋ฐ๋ฉด, MLP๋ ์จ์ดํฌ์ธํธ ์ ๊ทผ ์ ๊ฐ์ํ๋ ๊ฒฝํฅ์ ๋ณด์ ๋๋ค. ๋จ, ์ ๋ ๋ฉ ํ์์ ํธ๋ ์ฌ๊ตฌ์ฑ ๋๋ฌธ์ ๋ฌธํ ๊ฐ๊ณผ ์ง์ ๋น๊ตํ์ง ์์ต๋๋ค.
๋นํ์ ๊ณ ์ฐฐ
๊ฐ์
- ์ ํํ ๋ฌธ์ ์ง๋จ: โGPU ์ฒ๋ฆฌ๋์ด ์๋๋ผ ์ปค๋ ์คํ ์ค๋ฒํค๋๊ฐ ๋ณ๋ชฉโ์ด๋ผ๋ ํต์ฐฐ์ด ํต์ฌ์ ๋๋ค. ๋ก๋ด ์ ์ด์ ์์~์ค๊ฐ ๊ท๋ชจ ๋ฌธ์ ์์ ์๊ฐ ๋ณ๋ ฌํ๊ฐ ์ค๋ฒํค๋๋ฅผ ์์ํ์ง ๋ชปํ๋ค๋ ์ ์ ์ ๋ฉด์ผ๋ก ๊ณต๋ตํ์ต๋๋ค. ์ด๋ ์๊ฐ ๋ณ๋ ฌ associative scan(legged locomotion, [13])์ด๋ SQP+PCG ๊ธฐ๋ฐ GPU DiffMPC([14]) ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ ๋ ๋ฒจ ๊ฐ์๊ณผ ์ฐจ๋ณํ๋๋ ์์คํ /๊ตฌํ ๋ ๋ฒจ ์ ๊ทผ์ ๋๋ค.
- ์ํ์ ๋๋ฑ์ฑ ๋ณด์กด: ์ ์ํ์ ์์์ ๋ฏธ๋ถ์ ๊ทธ๋๋ก ๋๊ณ ๊ตฌํ๋ง ๋ฐ๊ฟจ๊ธฐ ๋๋ฌธ์, ์ฑ๋ฅ ์ ํ ์์ด ์๋๋ง ์ป๋๋ค๋ ์ฃผ์ฅ์ด ์ค๋๋ ฅ ์์ต๋๋ค.
- ์ฌํ์ฑ: ์ฝ๋๋ฅผ ๊ณต๊ฐํ๊ณ , baseline์ ๋ฉ๋ชจ๋ฆฌ ๋์๊น์ง ์ ์งํ๊ฒ ํจ์นยท๋ณด๊ณ ํ์ต๋๋ค.
- ์๋ฒ ๋๋ ์ ์ฌ๋ ฅ: ํธ๋ผ์ด์ฆ ๋ ๋ฆฝ์ ์์ ์ปค๋ ํจํด์ NVIDIA Jetson Orin ๊ฐ์ ํ๋ซํผ์์ ๋์คํจ์น ์ค๋ฒํค๋ ์ ๊ฐ์ ์ ๋ฆฌํ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
์ฝ์ ๋ฐ ํ๊ณ
- ๊ณต์ ํ ๋น๊ต์ ๋ถ๊ฐ๋ฅ: baseline AC-MPC๊ฐ ๊ณต๊ฐ ์ ์ฅ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ก ์๋ ดํ์ง ๋ชปํด, M_4์์ like-for-like ํ๋ฃจํ ๋น๊ต๊ฐ ๋ถ๊ฐ๋ฅํ์ต๋๋ค. ๋น๊ต๋ ์ฃผ๋ก AC-MLP๋ฅผ ์๋๋ก ์ด๋ค์ก๊ณ , ์๋ณธ AC-MPC์์ ์ง์ ๋น๊ต๋ ๋จ์ผ ์๋ ด ์ผ์ด์ค์ ๊ตญํ๋ฉ๋๋ค.
- ํธ๋ ์ฌ๊ตฌ์ฑ: ์ SplitS ํ์์ด ๋น๊ณต๊ฐ๋ผ ์ค๋ช ๊ธฐ๋ฐ์ผ๋ก ์ฌ๊ตฌ์ฑํ๊ณ (๊ฒ์ดํธ ๋์ด๋ ํนํ ๋ถํ์ค), ์ ๋ ๋ฉ ํ์์ ๋ฌธํ๊ณผ ๋น๊ตํ ์ ์์ต๋๋ค. ์ฆ โstate-of-the-artโ๋ผ๋ ์ฃผ์ฅ์ ๋์ผ ํ๊ฒฝ ๋ด ์๋ ๋น๊ต์ ํ์ ๋ฉ๋๋ค.
- ๊ธด ์งํ์ ์์์ ๋ถ์์ : T{=}10์ด๋ฉด MPC๊ฐ 140๊ฐ์ ์ต์ ํ ๋ณ์๋ฅผ ์์ธกํด์ผ ํ๋๋ฐ, ๋จ์ ํผ๋ํฌ์๋ MLP๋ ์๊ฐ์ ์ผ๋ก ์ผ๊ด๋ ๋น์ฉ ์ค์ผ์ค์ ์ถ๋ ฅํ์ง ๋ชปํด ํ์ต์ด ๋ถ์์ ํด์ง๊ณ ์๋ ด์ ์คํจํ์ต๋๋ค. ๊ฐ์ฅ ์์ ์ ์ธ ๊ฒฐ๊ณผ๋ T{=}2, 5์์๋ง ๋์์ต๋๋ค. (์ ์๋ค์ move-blocking์ด๋ ์๊ณ์ด ์ํคํ ์ฒ๋ฅผ ํด๋ฒ์ผ๋ก ์ ์ํฉ๋๋ค.)
- ์ํ ์ ์ฝ ๋ฏธ์ง์: ๋ฐ์ค ์ ์ฝ์ iLQR/DDP ์ ๋ฐ์ดํธ ์์์ ์ฒ๋ฆฌํ์ง๋ง, ์ผ๋ฐ ์ํ ์ ์ฝ์ ๋ฏธ๋ถ ๊ฐ๋ฅ ๋ฐฐ๋ฆฌ์ด/ํ๋ํฐ ํญ์ผ๋ก๋ง ๋ค๋ค ํ๋ ์ ์ฝ์ ๋ณด์ฅํ์ง ๋ชปํฉ๋๋ค. ์ด๋ ์กํฐ๊ฐ ๊ณผ์ ์ต์ ์ฑ๊ณผ ์์์ ์ ์ฝ ๋ง์กฑ์ ๋์์ ํ์ตํด์ผ ํ๋ ๋ถ๋ด์ ์ค๋๋ค.
- ํ๋์จ์ด ๊ฒ์ฆ ๋ถ์ฌ: ์ค์ ๋๋ก /์๋ฒ ๋๋ GPU ๊ฒ์ฆ์ ํฅํ ๊ณผ์ ๋ก ๋จ์๊ณ , ํ๊ฐ๋ ๋ชจ๋ ์๋ฎฌ๋ ์ด์ ์ ๋๋ค.
- (์ถ์ธก) ๋ณด๊ณ ๋ ๊ฐ์ ๋ฐฐ์์ ์๋น ๋ถ๋ถ์ baseline
mpc.pytorch๊ฐ GPU ์นํ์ ์ผ๋ก ์์ฑ๋์ง ์์ ์ ์์ ๋น๋กฏ๋์ ์ ์์ด, ๋ ์ ์ต์ ํ๋ baseline์ด๋ผ๋ฉด ๊ฒฉ์ฐจ๊ฐ ์ค์ด๋ค ์ฌ์ง๊ฐ ์์ต๋๋ค.
๊ด๋ จ ์ฐ๊ตฌ์์ ์์น: ๋ฏธ๋ถ ๊ฐ๋ฅ ์ต์ ํ ์ธต์ ๊ณ๋ณด(OptNet [6], DiffMPC [7], mpc.pytorch [8])์ AC-MPC([5], [9]) ์์ ์ ์์ผ๋ฉฐ, GPU ๊ฐ์์ด๋ผ๋ ์ ์์ primal-dual iLQR([13])ยทSQP ๊ธฐ๋ฐ GPU DiffMPC([14])์ ๊ฐ์ ํ๋ฆ์ด์ง๋ง, ์ด๋ค์ด ์๊ณ ๋ฆฌ์ฆ ์ฐจ์์ ๋ณ๋ ฌ์ฑ์ ๋
ธ๋ฆฐ ๋ฐ๋ฉด ์ด ๋
ผ๋ฌธ์ ์ปค๋ ์ตํฉ์ผ๋ก ๋์คํจ์น ์ค๋ฒํค๋๋ฅผ ์ง์ ์ ๊ฑฐํ๋ค๋ ์ ์์ ์๋ณด์ ์
๋๋ค.
์์ฝ ๋ฐ ๊ฒฐ๋ก
CA-AC-MPC๋ ๋ฏธ๋ถ ๊ฐ๋ฅ MPC๋ฅผ ์กํฐ-ํฌ๋ฆฌํฑ์ ๋ผ์ ๋ฃ์ ๋ ๋ฐ์ํ๋ ๊ฐ์ฅ ํฐ ๋ณ๋ชฉ, ์ฆ ์ปค๋ ์คํ ์ค๋ฒํค๋๋ฅผ ์ ํํ ๊ฒจ๋ฅํฉ๋๋ค. iLQR์ ๋ฐ๋ณต๋น 3๊ฐ์ ์ตํฉ CUDA ์ปค๋(๋กค์์ยท์ ํํ / ๋ฐ์ค ์ ์ฝ Riccati ๋ฐฑ์๋ / ๋ผ์ธ์์น ํฌ์๋)๋ก ์ฌ๊ตฌ์ฑํ CA-DiffMPC๊ฐ ํต์ฌ ๊ธฐ์ฌ์ด๋ฉฐ, ์ํ์ ์ ์ํ์ ์์์ ๋ฏธ๋ถ์ ๊ทธ๋๋ก ๋ณด์กดํฉ๋๋ค.
์์น์ ์ผ๋ก, ์๋ฒ ๋จ๋ ์ผ๋ก ๋จ์ผ ์ธ์คํด์ค์์ ์๋ฐฉํฅยท์ญ๋ฐฉํฅ ์ต์ 1์๋ฆฟ์, ๋ฐฐ์น์์ ์ต์ 20๋ฐฐ ์ด์ ๊ฐ์๋ฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ ์ฒด ํ์ต ์๊ฐ์ AC-MLP ๋๋น ์ฝ 30%(1.3๋ฐฐ) ์ฆ๊ฐ์ ๊ทธ์ณ, ์๋ณธ AC-MPC์ ์ฝ 30๋ฐฐ์ ๊ทน์ ์ผ๋ก ๋๋น๋ฉ๋๋ค(์ฝ 5.4๋ฐฐ ํ์ต ๊ฐ์). ์ถ๋ก ์ ์ฝ 10๋ฐฐ ๋นจ๋ผ์ง๊ณ (M_3), ๋๋ก ๋ ์ด์ฑ ๋ฉ ํ์์ 4.98์ด๋ก MLP(5.32์ด)๋ฅผ ๋ฅ๊ฐํ๋ฉฐ ์ฝ 20 m/s์ ๋์ญํ ํ๊ณ ๊ทผ์ฒ ๋นํ์ ๋ณด์กดํฉ๋๋ค(M_4).
์์ปจ๋ ์ด ์ฐ๊ตฌ๋ โ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๊พธ์ง ์๊ณ ๊ตฌํ๋ง ๋ฐ๊ฟ๋, ๋ฏธ๋ถ ๊ฐ๋ฅ MPC๋ฅผ ์ค์ฉ์ ํ์ต ์๋๋ก ๋์ด๋ด๋ฆด ์ ์๋คโ๋ ์ ์ ๋ถ๋ช ํ ๋ณด์ฌ์ค๋๋ค. ๋จ์ ๊ณผ์ ๋ ๊ธด ์งํ์ ์์์ ๋น์ฉ ์ผ๊ด์ฑ(์๊ณ์ด ์ํคํ ์ฒ), ํ๋ ์ํ ์ ์ฝ, ๊ทธ๋ฆฌ๊ณ ์ค์ ์๋ฒ ๋๋ GPU์์์ ํ๋์จ์ด ๊ฒ์ฆ์ ๋๋ค. ๋ฏธ๋ถ ๊ฐ๋ฅ MPC๋ฅผ ๋ก๋ด์ ์ฌ๋ฆฌ๋ ค๋ ์ค๋ฌด์์๊ฒ๋, ์์คํ ๋ ๋ฒจ ์ต์ ํ๊ฐ ์๊ณ ๋ฆฌ์ฆ ํ์ ๋งํผ์ด๋ ํฐ ๋ ๋ฒ๋ฆฌ์ง๋ฅผ ์ค ์ ์๋ค๋ ์ค์ฉ์ ๊ตํ์ ๋จ๊ธฐ๋ ๋ ผ๋ฌธ์ ๋๋ค.