Curieux.JY
  • JungYeon Lee
  • Post
  • Lecture
  • Note

On this page

  • ๐Ÿ” Ping Review
  • ๐Ÿ”” Ring Review
    • ์„œ๋ก 
    • ๋ฐฉ๋ฒ•
      • ๊ฒฝ์ œ์  MPC์™€ 2์ฐจ ๋น„์šฉ ๊ทผ์‚ฌ
      • ์•กํ„ฐ-ํฌ๋ฆฌํ‹ฑ ๊ตฌ์กฐ
      • ๋ฏธ๋ถ„ ๊ฐ€๋Šฅ MPC: ์•”์‹œ์  ๋ฏธ๋ถ„
      • CA-DiffMPC: 3-์ปค๋„ ์œตํ•ฉ
    • ์‹คํ—˜
      • M_1 โ€” ์†”๋ฒ„ ๋‹จ๋… ์ง€์—ฐ (Table II)
      • M_2 โ€” ํ•™์Šต ์‹œ๊ฐ„ (Table III)
      • M_3 โ€” ์ถ”๋ก  ์ง€์—ฐ (Table IV)
      • M_4 โ€” ๊ณผ์ œ ์„ฑ๋Šฅ / ๋žฉ ํƒ€์ž„ (Table V)
    • ๋น„ํŒ์  ๊ณ ์ฐฐ
    • ์š”์•ฝ ๋ฐ ๊ฒฐ๋ก 

๐Ÿ“ƒCA-AC-MPC

mpc
rl
gpu
CA-AC-MPC: CUDA-Accelerated Actor-Critic Model Predictive Control
Published

June 1, 2026

  • Paper Link

๐Ÿ” 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 ํ•ด๋ฅผ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๋ฏธ๋ถ„ ๊ฐ€๋Šฅ 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๊ฐœ์˜ ์œตํ•ฉ ์ปค๋„๋กœ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค.

  1. 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 ๊ทธ๋ž˜ํ”„๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ๋„ ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

  2. Backward pass ์ปค๋„ (with input bounds): Riccati ์žฌ๊ท€๋กœ ํ”ผ๋“œ๋ฐฑ/ํ”ผ๋“œํฌ์›Œ๋“œ ๊ฒŒ์ธ์„ ๊ตฌํ•ด \delta u_t = K_t \delta x_t + k_t๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ๋ฐ•์Šค ์ œ์•ฝ์ด ์žˆ์œผ๋ฉด ๋‹จ๊ณ„๋ณ„๋กœ ๋ฐ•์Šค ์ œ์•ฝ 2์ฐจ ๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ CUDA์—์„œ ํ’‰๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋ฐฉํ–ฅ์œผ๋กœ๋Š” ์ˆœ์ฐจ์ ์ด์ง€๋งŒ ๋ฐฐ์น˜ ๋ฐฉํ–ฅ์œผ๋กœ ๋ณ‘๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค.

  3. 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๋ฅผ ๋กœ๋ด‡์— ์˜ฌ๋ฆฌ๋ ค๋Š” ์‹ค๋ฌด์ž์—๊ฒŒ๋Š”, ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ ์ตœ์ ํ™”๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ˜์‹ ๋งŒํผ์ด๋‚˜ ํฐ ๋ ˆ๋ฒ„๋ฆฌ์ง€๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‹ค์šฉ์  ๊ตํ›ˆ์„ ๋‚จ๊ธฐ๋Š” ๋…ผ๋ฌธ์ž…๋‹ˆ๋‹ค.

Copyright 2026, JungYeon Lee