Lecture 8. ์ ๋ & ์ ์ด ์ฅ๋ฒฝ ํจ์ (CBF)
"์ด๋๋ก ๊ฐ์ง" ๊ฒฐ์ ํ๋ ์ ๋(guidance)์ "์ ๋ ๋ถ๋ชํ์ง ์๋" ์์ ํํฐ.
๋ชฉ์ฐจ
- ์ ๋(Guidance)๋?
- LOS ๊ฒฝ๋ก ์ถ์ข + ์ธํฐ๋ํฐ๋ธ
- ์ ์ด ์ฅ๋ฒฝ ํจ์(CBF) ์ด๋ก
- CBF ์์ ํํฐ ์ธํฐ๋ํฐ๋ธ
- ์ฝ๋ ยท ๋ ๊น์ด ๊ณต๋ถํ๊ธฐ
1. ์ ๋๋?
๊ฒฝ๋ก ๊ณํ(L6)์ด ํฐ ๊ทธ๋ฆผ์ ๊ธธ์ ์ ํ๋ค๋ฉด, ์ ๋๋ ๋งค ์๊ฐ "๋ค์์ผ๋ก ์ด๋ ๋ฐฉํฅ์ ๋ด์ผ ํ๋?"๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ทธ ๋ฐฉํฅ์ด ์ ํด์ง๋ฉด ์ ์ด๊ธฐ(L7)๊ฐ ์ค์ ๋ชจํฐ์ ๋ช ๋ น์ ๋ณด๋ ๋๋ค.
2. LOS (Line-of-Sight) ๊ฒฝ๋ก ์ถ์ข
๊ฐ์ฅ ๋จ์ํ ์ ๋๋ฒ: ๊ฒฝ๋ก์์์ ์ผ์ ๊ฑฐ๋ฆฌ ์($L_a$)์ ๊ฐ์ ๋ชฉํ์ ์ ๋๊ณ , ๊ทธ์ชฝ์ ๋ฐ๋ผ๋ณด๋๋ก ์กฐํฅํฉ๋๋ค.
$$ \delta = \arctan\!\left(\frac{k\, e_\text{ct}}{L_a}\right) $$$e_\text{ct}$๋ ๊ฒฝ๋ก๋ก๋ถํฐ์ ์ง๊ฐ ๊ฑฐ๋ฆฌ(cross-track error), $k$๋ ๊ฒ์ธ์ ๋๋ค. ํด์ ์์จ์์์ (ASV)์์๋ enclosure-based LOS ๋ฐฉ์์ด ํ์ค์ ๋๋ค โ ๊ฒฝ๋ก์ ์ผ์ ๋ฐ๊ฒฝ ์์ ๊ต์ ์ ๋ฐ๋ผ๋ด ๋๋ค(Fossen).
๐ฎ ์ธํฐ๋ํฐ๋ธ: LOS ๊ฒฝ๋ก ์ถ์ข (์ง์ ๊ฒฝ๋ก)
์ง์ ๊ฒฝ๋ก(์ด๋ก)๋ฅผ ํฅํด ์ ๋ฐ(ํ๋)์ด LOS๋ก ์ ๊ทผํฉ๋๋ค. ์ ๋ฐฉ ์ฃผ์๊ฑฐ๋ฆฌ $L_a$์ ๊ฒ์ธ์ ๋ฐ๊ฟ ํก์ค์ฐจ ์๋ ด ์๋๋ฅผ ๋น๊ตํด ๋ณด์ธ์.
3. ์ ์ด ์ฅ๋ฒฝ ํจ์ (CBF)
ํผ๋๋ฐฑ ์ ์ด๊ธฐ(PID, Pure Pursuit)๋ "์ผ๋ง๋ ์ ๋ฐ๋ผ๊ฐ๋๋"๋ฅผ ๋ค๋ฃจ์ง, "์ ๋ ๋ถ๋ชํ์ง ์๋๋ก"์ ๋ณด์ฅํ์ง ๋ชปํฉ๋๋ค. CBF๋ ์ด ๊ฐ๊ทน์ ์ํ์ ์์ ์ธ์ฆ์ผ๋ก ๋ฉ์๋๋ค.
"์์ ํ ์์ญ"์ ํจ์ $h(x) \ge 0$๋ก ์ ์ํด๋ด ์๋ค. ์๋ฅผ ๋ค์ด ์ฅ์ ๋ฌผ ์ค์ฌ $(x_o, y_o)$์์ ๋ฐ๊ฒฝ $r$ ์์ ๋ค์ด๊ฐ์ง ์์ผ๋ ค๋ฉด:
$$ h(x) = (x - x_o)^2 + (y - y_o)^2 - r^2 \ge 0 $$๊ทธ๋ฆฌ๊ณ ์ด ์์ ์งํฉ์ด "์์ผ๋ก๋ ์นจ๋ฒ๋์ง ์๋๋ก" ๋ค์ ์กฐ๊ฑด์ ๊ฐ์ ํฉ๋๋ค.
$$ \dot{h}(x) + \gamma\, h(x) \ge 0 $$์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ ๋ ฅ $u$๋ง ํ์ฉํ๋ฉด, ์ฅ์ ๋ฌผ์ ๊ฐ๊น์์ง์๋ก $\dot{h}$๊ฐ ์๋์ผ๋ก ์ปค์ง๋ฉด์ ๋ง์์ค๋๋ค. ๋ง์น ๋ณด์ด์ง ์๋ ์๊ธฐ์ฅ์ด ๋ก๋ด์ ๋ฐ์ด๋ด๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก $\gamma h$ ๋์ class-K ํจ์ $\alpha(h)$๋ฅผ ์๋๋ค. $\alpha$๋ $\alpha(0)=0$์ด๊ณ ์์ฆ๊ฐ ํจ์์ด๋ฉด ๋ฌด์์ด๋ ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ์ฅ ํํ ์ ํ์ด $\alpha(h)=\gamma h$์ด๋ฉฐ, $\gamma$๊ฐ ํด์๋ก ์ฅ์ ๋ฌผ์ ๊ฐ๊น์ด ๊ฐ ์ ์๋๋ก ํ์ฉํฉ๋๋ค(๊ณต๊ฒฉ์ ).
$$ \dot{h}(x, u) + \alpha(h(x)) \ge 0 $$Forward invariance ์ ๋ฆฌ (Ames et al., 2017): ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ $u$๊ฐ ๋งค ์๊ฐ ์กด์ฌํ๋ฉด, ์ด๊ธฐ์ $h(x_0)\ge 0$์ด๋ฉด ๋ชจ๋ $t\ge 0$์์ $h(x(t))\ge 0$์ด ๋ณด์ฅ๋ฉ๋๋ค. ์ฆ, ์์์ด ์์ ํ๋ฉด ์์ํ ์์ .
์ค์ ๋ก๋ ๋ค์ QP(Quadratic Program)๋ฅผ ํ๋๋ค.
$$ u^* = \arg\min_u \|u - u_\text{nominal}\|^2 \;\;\text{s.t.}\;\; \dot{h} + \gamma h \ge 0 $$๐ฎ ์ธํฐ๋ํฐ๋ธ: CBF ์์ ํํฐ
๋ก๋ด(ํ๋)์ด ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก x์ถ์ ๋ฐ๋ผ ์ผ์ ํ ์๋๋ก ์ด๋ํฉ๋๋ค. ๊ฒฝ๋ก์์ ์ฅ์ ๋ฌผ์ด ์์ผ๋ฉด CBF ์์ ํํฐ๊ฐ ์๋์ผ๋ก ๋ช ๋ น์ ์์ ํด y ๋ฐฉํฅ์ผ๋ก ํํผํฉ๋๋ค. $\gamma$๊ฐ ์์์๋ก ์ผ์ฐ, ํฌ๋ฉด ๋ฆ๊ฒ ํํผํฉ๋๋ค.
$\gamma$๊ฐ ์์ผ๋ฉด ๋งค์ฐ ์ผ์ฐ ํํผํ๊ณ (๋ณด์์ ), ํฌ๋ฉด ์ฅ์ ๋ฌผ์ ๊ฑฐ์ ๋ฟ์ ๋๊น์ง ์ง์งํฉ๋๋ค(๊ณต๊ฒฉ์ ). CBF๋ฅผ ๋๋ฉด ๋ช ๋ น์ ๊ทธ๋๋ก ๋ฐ๋ผ ์ถฉ๋ํฉ๋๋ค.
5. ์ฝ๋ ์์ (๊ฐ๋ ์์ฌ์ฝ๋)
import cvxpy as cp
import numpy as np
def cbf_filter(u_nom, x, obstacles, gamma=1.5):
u = cp.Variable(2)
constraints = []
for (ox, oy, r) in obstacles:
dx, dy = x[0]-ox, x[1]-oy
h = dx*dx + dy*dy - r*r
hdot = 2*dx*u[0] + 2*dy*u[1]
constraints.append(hdot + gamma*h >= 0)
cp.Problem(cp.Minimize(cp.sum_squares(u - u_nom)), constraints).solve()
return u.value
6. ๋ ๊น์ด ๊ณต๋ถํ๊ธฐ
- Ames, Xu, Grizzle, Tabuada, "Control Barrier Function based Quadratic Programs for Safety Critical Systems", IEEE TAC 2017 โ CBF์ ํ์ค ์ ์ํ.
- Ames et al., "Control Barrier Functions: Theory and Applications", ECC 2019 โ ํํ ๋ฆฌ์ผ ๋ ผ๋ฌธ.
- Fossen, Handbook of Marine Craft Hydrodynamics and Motion Control, Wiley 2021 โ LOS ์ ๋์ ํด์ ํ์ค ๊ต๊ณผ์.
- Breeden, Panagou, "High Relative Degree Control Barrier Functions Under Input Constraints", CDC 2021 โ ๊ณ ์ฐจ CBF.
- CBF-CLF-Helper (MATLAB/Python) โ Ames ์ฐ๊ตฌ์ค์ ์คํ์์ค ํดํท.