๐CuRobo ๋ฆฌ๋ทฐ
- ๐ ๋ณธ ๋
ผ๋ฌธ์ GPU ๊ฐ์์ ํ์ฉํ์ฌ ๋ก๋ด์ ์ํ ์ถฉ๋ ์๋ ์ต์ ์ ํฌ(minimum-jerk) ๋ชจ์
์์ฑ์ ๋ณ๋ ฌ ์ต์ ํ ๋ฌธ์ ๋ก ๊ณต์ํํ๊ณ , ์ด๋ฅผ ํด๊ฒฐํ๋
cuRobo
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค. - ๐ก
cuRobo
๋ ๊ณ ์ฑ๋ฅ CUDA ์ปค๋ ๊ธฐ๋ฐ์ ์ด๋ํ ๋ฐ Signed Distance ํจ์, ๋ณ๋ ฌ L-BFGS ๋ฐ ํํฐํด ๊ธฐ๋ฐ ์ต์ ํ, ๊ทธ๋ฆฌ๊ณ ๋ณ๋ ฌ ๊ธฐํํ์ ํ๋๋๋ฅผ ํตํฉํ์ฌ ์ ์ฒด ๋ชจ์ ์์ฑ ํ์ดํ๋ผ์ธ์ ๊ฐ์ํํฉ๋๋ค. - ๐ ๊ทธ ๊ฒฐ๊ณผ,
cuRobo
๋ ๊ธฐ์กด ์ต์ ๋ฐฉ๋ฒ๋ณด๋ค ๋ชจ์ ์์ฑ์์ ํ๊ท 60๋ฐฐ, ์ถฉ๋ ์๋ Inverse Kinematics์์ 80๋ฐฐ ์ด์ ๋นจ๋ผ์ก์ผ๋ฉฐ, ๋ ์งง์ ๊ฒฝ๋ก์ ๋ฎ์ ์ ํฌ(jerk)์ ๊ณ ํ์ง ๊ถค์ ์ ์ ๊ณตํ๋ฉฐ ์ค์ ๋ก๋ด ๋ฐ ์ ์ ๋ ฅ ์ฅ์น์์ ์ฑ๋ฅ์ด ๊ฒ์ฆ๋์์ต๋๋ค.

1 Brief Review
์ด ๋ ผ๋ฌธ์ ๋ก๋ด ๋งค๋ํฐ๋ ์ดํฐ์ ์ถฉ๋ ์๋ ๋ชจ์ ์์ฑ(collision-free motion generation) ๋ฌธ์ ๋ฅผ ์ ์ญ ๋ชจ์ ์ต์ ํ(global motion optimization) ๋ฌธ์ ๋ก ๊ณต์ํํ๊ณ , ์ด๋ฅผ ๋ฐฉ๋ํ GPU ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ๋งค์ฐ ๋น ๋ฅด๊ฒ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค. ๊ธฐ์กด ์ต์ฒจ๋จ(SOTA) ๊ถค์ ์ต์ ํ(trajectory optimization) ๋ฐฉ๋ฒ๋ณด๋ค ํ๊ท 60๋ฐฐ ๋น ๋ฅธ ์๋๋ก ํ๊ท 50ms ์ด๋ด์ ๋ชจ์ ์์ฑ์ ๋ฌ์ฑํ๋ฉฐ, NVIDIA Jetson AGX Orin๊ณผ ๊ฐ์ ์ ์ ๋ ฅ ์ฅ์น์์๋ ํ์ํ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค.
ํต์ฌ ๊ธฐ์ฌ:
- ๊ณ ์ฑ๋ฅ Kinematics ๋ฐ Signed Distance Kernel: ๋ก๋ด Kinematics ๋ฐ Signed Distance ๊ณ์ฐ์ ์ํ ๊ณ ์ฑ๋ฅ CUDA Kernel์ ๊ฐ๋ฐํ์ฌ ๊ธฐ์กด CPU ๊ธฐ๋ฐ ๋ฐฉ์๋ณด๋ค ์ต๋ 10,000๋ฐฐ ๋น ๋ฅธ ์๋๋ฅผ ๋ฌ์ฑํ์ต๋๋ค. ์ด๋ PyTorch์์ ๋ฏธ๋ถ ๊ฐ๋ฅํ ํจ์๋ก ์ ๊ณต๋์ด ๋ค๋ฅธ ๋ก๋ด ๊ณตํ ์์ ์๋ ํ์ฉ๋ ์ ์์ต๋๋ค.
- ๋ฏธ๋ถ ๊ฐ๋ฅํ ์ฐ์ ์ถฉ๋ ๊ฒ์ฌ(Differentiable Continuous Collision Checking): Swept Collision Check๋ฅผ ์ํด ์ ์ฟผ๋ฆฌ Signed Distance ํจ์์ ๊ทธ๋๋์ธํธ ๊ณ์ฐ์ ์ํ ๊ฐ์ฅ ๊ฐ๊น์ด ์ (closest point)๋ง ์๊ตฌํ๋ ๋ ์ฐฝ์ ์ธ ์ฐ์ ์ถฉ๋ ๊ฒ์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํฉ๋๋ค. ์ด๋ Primitive, Mesh, Occupancy Map ๋ฑ ๋ค์ํ World Representation์์ ์ฐ์ ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๋ณ๋ ฌ ์ต์ ํ: GPU Batch L-BFGS Optimizer๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ์ด๋ ๊ทผ์ฌ ๋ณ๋ ฌ Line Search Scheme๊ณผ ํํฐํด ๊ธฐ๋ฐ ์ต์ ํ(particle-based optimizer)๋ฅผ ๊ฒฐํฉํ์ฌ ๋์ด๋๊ฐ ๋์ ๋ชจ์ ์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด ์๋ฒ๋ ๊ธฐ์กด CPU ๊ธฐ๋ฐ ์๋ฒ ๋๋น ์ญ๊ธฐ๊ตฌํ(Inverse Kinematics, IK)์์ 23๋ฐฐ, ์ถฉ๋ ์๋ ์ญ๊ธฐ๊ตฌํ(Collision-Free IK)์์ 80๋ฐฐ, ์ถฉ๋ ์๋ ๊ถค์ ์ต์ ํ์์ 87๋ฐฐ ๋ ๋น ๋ฆ ๋๋ค.
- ์ต์ฒจ๋จ IK ์๋ฒ: ๊ฐ๋ฐ๋ ๊ณ ์ฑ๋ฅ Kernel์ ํ์ฉํ์ฌ ์ด๋น 37000๊ฐ์ IK ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ธ๊ณ ์ต๊ณ ์์ค์ IK ์๋ฒ๋ฅผ ๊ตฌํํ์ต๋๋ค (TracIK ๋๋น 23๋ฐฐ ๋น ๋ฆ). ๋ํ ์ด๋น 7600๊ฐ์ ์ถฉ๋ ์๋ IK ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค (TracIK + Bullet ๋๋น 80๋ฐฐ ๋น ๋ฆ).
- ๋ณ๋ ฌ ๊ธฐํํ์ ํ๋๋(Parallel Geometric Planner): ๋ณ๋ ฌ Steering ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ถ ๊ธฐํํ์ ํ๋๋๋ฅผ ๊ฐ๋ฐํ์ฌ 20ms ์ด๋ด์ ์ถฉ๋ ์๋ ๊ฒฝ๋ก๋ฅผ ์์ฑํฉ๋๋ค.
- ์ ์ญ ๋ชจ์ ์์ฑ ํ์ดํ๋ผ์ธ: ์์ ๋ชจ๋ ๊ธฐ์ฌ๋ฅผ ๊ฒฐํฉํ์ฌ, ์์ Configuration์์ ๋ชฉํ Gripper Pose๊น์ง์ ์ถฉ๋ ์๋ ๋ชจ์ ์์ฑ์ ํ๊ท 50ms ์ด๋ด์ ์๋ฃํ๋ ์ ์ญ ๋ชจ์ ์์ฑ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ์ต๋๋ค.
- ์ ์ ๋ ฅ ์ฅ์น ๊ฒ์ฆ: NVIDIA Jetson AGX Orin (60W ๋ฐ 15W ์ ๋ ฅ ์์ฐ)์์ ๊ฒ์ฆ ๊ฒฐ๊ณผ, ๊ธฐ์กด CPU ๊ธฐ๋ฐ ๋ฐฉ๋ฒ๋ณด๋ค ํ๊ท 28๋ฐฐ(60W) ๋ฐ 21๋ฐฐ(15W) ๋ ๋น ๋ฆ์ ์ ์ฆํ์ต๋๋ค.
- cuRobo ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณต๊ฐ: GPU ๊ฐ์ ๋ก๋ด ์๊ณ ๋ฆฌ์ฆ ๋ชจ์์ธ cuRobo ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณต๊ฐํ์ฌ ๋ก๋ด ๊ณตํ ์ปค๋ฎค๋ํฐ์ ๋๊ท๋ชจ ๋ฌธ์ ํ์์ ์ง์ํฉ๋๋ค.
ํต์ฌ ๋ฐฉ๋ฒ๋ก ์์ธ ์ค๋ช :
์ด ๋ ผ๋ฌธ์ ๋ก๋ด ๋ชจ์ ์์ฑ์ ์์ ๊ด์ Configuration \theta_0์์ ๋ก๋ด์ End-Effector๊ฐ ๋ชฉํ Cartesian Pose X_g์ ๋๋ฌํ๋ ์ต์ข ๊ด์ Configuration \theta_T๊น์ง์ ์๊ฐ ์ด์ฐํ๋ ๊ถค์ ์ต์ ํ ๋ฌธ์ ๋ก ๊ณต์ํํฉ๋๋ค. ๋ชฉ์ ํจ์๋ End-Effector์ ๋ชฉํ Pose ๋๋ฌ ๋น์ฉ๊ณผ ๊ถค์ ์ ๋ถ๋๋ฌ์(smoothness)์ ์ํ ๋น์ฉ์ ํฉ์ผ๋ก ์ ์๋ฉ๋๋ค. \arg \min_{\theta_{[1,T]}} C_{\text{task}}(X_g, \theta_T) + \sum_{t=1}^T C_{\text{smooth}}(\cdot) ์ฌ๊ธฐ์ ๋ค์ ์ ์ฝ ์กฐ๊ฑด๋ค์ด ์ ์ฉ๋ฉ๋๋ค: * ๊ด์ ์์น, ์๋, ๊ฐ์๋, ์ ํฌ(jerk) ํ๊ณ: \theta^- \preceq \theta_t \preceq \theta^+, \dot{\theta}^- \preceq \dot{\theta}_t \preceq \dot{\theta}^+, \ddot{\theta}^- \preceq \ddot{\theta}_t \preceq \ddot{\theta}^+, \dddot{\theta}^- \preceq \dddot{\theta}_t \preceq \dddot{\theta}^+ * ์ต์ข ์์ ์์์ ์๋, ๊ฐ์๋, ์ ํฌ 0 ์ ์ฝ: \dot{\theta}_T, \ddot{\theta}_T, \dddot{\theta}_T = 0 * ์๊ธฐ ์ถฉ๋(self-collision) ๋ฐ ์ธ๊ณ ์ถฉ๋(world-collision) ํํผ: C_r(K_s(\theta_t)) \preceq 0, C_w(K_s(\theta_t)) \preceq 0
Kinematics ๋ฐ ์ถฉ๋ ํํผ:
๋ก๋ด์ Kinematics K_s(\cdot)๋ ๊ด์ Configuration์ ๋ก๋ด์ ๋ชจ๋ geometry์ Cartesian Pose๋ก ๋งคํํฉ๋๋ค. Kinematics ๊ณ์ฐ์ ๋ณธ์ง์ ์ผ๋ก ์์ฐจ์ ์ด์ง๋ง, ์ด ๋ ผ๋ฌธ์์๋ transformation์ 4x4 ๋์ฐจ ํ๋ ฌ๋ก ํํํ๊ณ 4๊ฐ์ ๋ณ๋ ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ฌ ๊ณฑ์ ์ ๊ณ์ฐํจ์ผ๋ก์จ ๋ณ๋ ฌํ๋ฅผ ๋ฌ์ฑํฉ๋๋ค. ์ญ๋ฐฉํฅ Kinematics(Backward Kinematics)์ ๊ฒฝ์ฐ 16๊ฐ์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋๋์ธํธ๋ฅผ Cartesian ๊ณต๊ฐ์์ Joint ๊ณต๊ฐ์ผ๋ก ํฌ์ํฉ๋๋ค. ์๊ธฐ ์ถฉ๋ ํํผ๋ฅผ ์ํด ๋ก๋ด ๋ณผ๋ฅจ์ ๊ตฌ(sphere) ์งํฉ์ผ๋ก ํํํ๊ณ , ์๊ธฐ ์ถฉ๋ ๋น์ฉ C_r์ ๊ตฌ ์ ๊ฐ์ ์ต๋ ์นจํฌ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค. C_r(K_s(\theta_t)) = \beta_1 \max_{i,j \in S} (\max(0, s_{i,r} + s_{j,r} - ||s_{i,x} - s_{j,x}||)) ์ฌ๊ธฐ์ s_{i,x}, s_{j,x}๋ ๊ตฌ์ ์์น, s_{i,r}, s_{j,r}์ ๊ตฌ์ ๋ฐ์ง๋ฆ์ด๋ฉฐ, S๋ ์๊ธฐ ์ถฉ๋ ๊ฒ์ฌ๊ฐ ํ์ํ ๊ตฌ ์์ ์งํฉ์ ๋๋ค. ์ธ๊ณ ์ถฉ๋ ํํผ๋ ์ฅ์ ๋ฌผ ํ๋ฉด ๊ทผ์ฒ์ ๋ถ์ฐ์์ฑ์ ์ํํ๊ธฐ ์ํด ํ์ฑํ ๊ฑฐ๋ฆฌ \eta๋ฅผ ๊ฐ๋ ์ด์ฐจ ๋น์ฉ ํ๋กํ์ผ(d_c)์ ์ฌ์ฉํฉ๋๋ค. d_c = \begin{cases} d + 0.5\eta & \text{if } d > 0 \\ 0.5\eta (d + \eta)^2 & \text{if } -\eta < d < 0 \\ 0 & \text{otherwise} \end{cases} ๋ํ, ์ต์ ํ๊ฐ ์ฅ์ ๋ฌผ์ ๋น ๋ฅด๊ฒ ํต๊ณผํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ถฉ๋ ๋น์ฉ์ ๋ก๋ด์ ์๋์ ๋น๋กํ์ฌ ์ค์ผ์ผ๋งํ๋ ์๋ ์ธก์ ํญ๋ชฉ(\dot{s})์ ๋์ ํฉ๋๋ค. ์ฆ, d_s = \dot{s} d_c๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฒฝ๋ก ์ดํ์ ๋ํ ๊ฐ๊ฑด์ฑ์ ์ํด \eta ๊ฑฐ๋ฆฌ ๋ด์์๋ ๋ก๋ด์ ์๋์ ํ๋ํฐ๋ฅผ ๋ถ์ฌํฉ๋๋ค. ์ฐ์ ์ถฉ๋ ๊ฒ์ฌ(Continuous Collision Checking)๋ ์์ ์ฅ์ ๋ฌผ๊ณผ์ ์ถฉ๋์ ๋์น์ง ์๋๋ก ์ค์ํ๋ฉฐ, ์ด ๋ ผ๋ฌธ์์๋ Swept Volume ๋์ World Representation์์ ์ ์ฟผ๋ฆฌ Signed Distance ํจ์๋ง ์๊ตฌํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค. ๊ถค์ ์ ๊ฐ ์์ ์์ ๊ตฌ์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ฐฉ ๋ฐ ํ๋ฐฉ Sweeping์ ์ํํ์ฌ ์ถฉ๋์ ๊ฒ์ฌํ๊ณ , ์ด ๊ณผ์ ์ ๊ทธ๋๋์ธํธ ๊ณ์ฐ์ ๋ณ๋ ฌํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ต์ข ์ธ๊ณ ์ถฉ๋ ๋น์ฉ C_w๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋ฉ๋๋ค. C_w(S_{t-1,t,t+1}) = \beta_2 \text{speed}(S_{t-1,t,t+1})\text{smooth}(\text{sweep}(S_{t-1,t,t+1})) ์ฌ๊ธฐ์ \beta_2๋ ๋น์ฉ ์ค์ผ์ผ๋ง, \text{sweep}(\cdot)๋ ์ฐ์ ์ถฉ๋ ๊ฒ์ฌ, \text{smooth}(\cdot)๋ ์ด์ฐจ smoothing, \text{speed}(\cdot)๋ ์๋ ์ค์ผ์ผ๋ง์ ๋ํ๋ ๋๋ค.
๋ณ๋ ฌ ์ต์ ํ ์๋ฒ:
์ฃผ์ ์ต์ ํ ์๋ฒ๋ก L-BFGS๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด๋ ๋๊ท๋ชจ ์ต์ ํ ๋ฌธ์ ์ ์ ํฉํ๊ณ ๋ณ๋ ฌํ์ ์ฉ์ดํฉ๋๋ค. L-BFGS์ Step Direction ๊ณ์ฐ ํ, ๋ณ๋ ฌ ๋ ธ์ด์ฆ ๋ผ์ธ ํ์(Parallel Noisy Line Search)์ ์ํํฉ๋๋ค. ์ด๋ ์ด์ฐ์ ์ธ ์ค์ผ์ผ ๊ฐ ์งํฉ์ ๋ณ๋ ฌ๋ก ํ๊ฐํ์ฌ ์ต์ ์ Step ํฌ๊ธฐ๋ฅผ ์ฐพ์ต๋๋ค. ๋ ธ์ด์ฆ ์คํ (์: 0.01)์ ๋ผ์ธ ํ์์ด ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ ๋๋ ์ต์ ํ ๋ณ์ ๊ฐ์ ์ง์์ ์ธ ๊ต๋์ ์ ๊ณตํ์ฌ NaN ๊ฐ์ ๋ฐฉ์งํ๊ณ ์๋ ด๋ฅ ์ ํฅ์์ํต๋๋ค. L-BFGS์ ์ง์ญ ์ต์ ํด(local optima) ๋๋ฌ ๋ฅ๋ ฅ์ ํฅ์์ํค๊ธฐ ์ํด ํํฐํด ๊ธฐ๋ฐ ์ต์ ํ(Particle-Based Optimization)๋ฅผ ๊ฒฐํฉํฉ๋๋ค. L-BFGS ์์ ์ ์ ํํฐํด ๊ธฐ๋ฐ ์ต์ ํ๋ฅผ ๋ช ๋ฒ ๋ฐ๋ณตํ์ฌ ์ด๊ธฐํํฉ๋๋ค. ์ด๊ธฐ ํ๊ท ๊ถค์ \Theta_\mu์ ๊ณต๋ถ์ฐ \Theta_\sigma์์ n๊ฐ์ ํํฐํด \theta_{n,[1,T]}๋ฅผ ์ํ๋งํ๊ณ , ๊ฐ ํํฐํด์ ๋น์ฉ์ ๊ณ์ฐํ ํ, Exponential Utility w๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ท ๊ณผ ๊ณต๋ถ์ฐ์ ์ ๋ฐ์ดํธํฉ๋๋ค. \Theta_{\mu} = (1 - k_{\mu})\Theta_{\mu-1} + (k_{\mu})w * \theta_{n,[1,T]} \Theta_{\sigma} = (1 - k_{\sigma})\Theta_{\sigma-1} + w * (\theta^2_{n,[1,T]} - \Theta_{\mu-1}) ์ฌ๊ธฐ์ k_{\mu}์ k_{\sigma}๋ ํ์ต๋ฅ (learning rate)์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ L-BFGS์ ์๋ ด ์๋์ ์ฑ๊ณต๋ฅ ์ ํฌ๊ฒ ๋์ ๋๋ค.
๋ณ๋ ฌ ๊ธฐํํ์ ํ๋๋:
๊ธฐํํ์ ํ๋๋๋ ์์์์ ๋ชฉํ Configuration๊น์ง ์ถฉ๋ ์๋ ๊ฒฝ๋ก๋ฅผ ์์ฑํ๋ฉฐ, ํนํ ๊ทธ๋ํ ๊ตฌ์ถ์ ์ธ ๊ฐ์ง ํต์ฌ ๊ตฌ์ฑ ์์๋ฅผ GPU์์ ๋ณ๋ ฌ๋ก ์คํํฉ๋๋ค: ์ถฉ๋ ์๋ ๋ ธ๋ ์ํ๋ง, ๊ทธ๋ํ ๋ด K-Nearest ๋ ธ๋ ์ฐพ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ๊ฐ ์ํ๋ง๋ ๋ ธ๋์์ K-Nearest ๋ ธ๋๋ก์ ๋ณ๋ ฌ Steering. ํนํ ๋ณ๋ ฌ Steering ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๋ฌ ์ ์ ๊ฐ์ Steering ์๋๋ฅผ ๋์์ ์ฒ๋ฆฌํ์ฌ ๊ฒฝ๋ก ์์ฑ์ ๊ฐ์ํํฉ๋๋ค.
์คํ ๊ฒฐ๊ณผ:
cuRobo๋ Kinematics, ์ถฉ๋ ๊ฒ์ฌ, IK, Trajectory Optimization, Geometric Planning ๋ฑ ๋ชจ๋ ํต์ฌ ๋ชจ๋์์ ๊ธฐ์กด ์ต์ฒจ๋จ CPU ๊ธฐ๋ฐ ๋ฐฉ๋ฒ๋ก ๋๋น ์๋์ ์ธ ๊ณ์ฐ ์๊ฐ ๋จ์ถ์ ๋ณด์ฌ์ค๋๋ค. ์๋ฅผ ๋ค์ด, Kinematics๋ 10๋ง ๋ฐฐ์น์์ ์ต๋ 891๋ฐฐ, Signed Distance ์ฟผ๋ฆฌ๋ 10๋ง ๋ฐฐ์น์์ ์ต๋ 16,000๋ฐฐ ๋น ๋ฆ ๋๋ค. ์ ์ฒด ๋ชจ์ ์์ฑ ํ์ดํ๋ผ์ธ์ PC์์ Tesseract ๋๋น ํ๊ท 60๋ฐฐ ๋น ๋ฅด๋ฉฐ, Jetson ORIN 15W์์๋ Tesseract PC ๋ฒ์ ๋ณด๋ค ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ฌ ์ ์ ๋ ฅ ์์ง ์ฅ์น์์ ๋ฐฐํฌ ๊ฐ๋ฅ์ฑ์ ์ ์ฆํฉ๋๋ค. ๋ชจ์ ํ์ง ์ธก๋ฉด์์๋ cuRobo๊ฐ ๊ธฐ์กด ๋ฐฉ๋ฒ๋ณด๋ค ๋ ์งง์ ๊ฒฝ๋ก ๊ธธ์ด๋ฅผ ์ ๊ณตํ๋ฉฐ, ํนํ Jerk๋ฅผ ์ต์ํํ๋ ๊ถค์ ์ ์์ฑํ์ฌ ๊ธฐ์กด Trajectory Optimization ๊ธฐ๋ฒ๋ณด๋ค Jerk๊ฐ 4๋ฐฐ ๋ฎ๊ณ , ๊ธฐ์กด Time Parameterization ๋ฐฉ๋ฒ๋ณด๋ค 12๋ฐฐ ๋ฎ์ต๋๋ค. ์ด๋ ๋ก๋ด์ด ๋ ๋ถ๋๋ฝ๊ณ ํจ์จ์ ์ผ๋ก ์์ง์ผ ์ ์๋๋ก ํ์ฌ ์ค์ ๋ก๋ด์ ์ถ์ ์ฑ๋ฅ ํฅ์์ ๊ธฐ์ฌํฉ๋๋ค. ์ค์ UR5e ๋ฐ UR10 ๋ก๋ด์์์ ๊ฒ์ฆ์ ํตํด, cuRobo๊ฐ ์์ฑํ ์ต์ ์ ํฌ(minimum-jerk) ๊ถค์ ์ด ๋์ ์ ํ๋๋ก ์ถ์ ๋๋ฉฐ, ๊ณํ ์๊ฐ์ด ์ ์ฒด ์์ ์ฌ์ดํด ์๊ฐ์ 6% ๋ฏธ๋ง์์ ๋ณด์ฌ์ฃผ์ด ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งค์ฐ ์ ํฉํจ์ ์ ์ฆํฉ๋๋ค.
์ด ๋ ผ๋ฌธ์ ๊ณ ํ์ง์ ์ถฉ๋ ์๋ ๋ก๋ด ๋ชจ์ ์์ฑ์ ์ค์๊ฐ์ ๊ฐ๊น๊ฒ ์ํํ ์ ์๋ GPU ๊ธฐ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์ ์ฌ๋ ฅ์ ์์ ํ ๋ณด์ฌ์ฃผ๋ฉฐ, cuRobo ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณต๊ฐ๋ฅผ ํตํด ๋ก๋ด ๊ณตํ ์ฐ๊ตฌ ๋ฐ ์ฐ์ ๋ฐ์ ์ ํฌ๊ฒ ๊ธฐ์ฌํ ๊ฒ์ผ๋ก ๊ธฐ๋๋ฉ๋๋ค.
2 Detail Review
cuRobo: ๋ณ๋ ฌํ๋ ์ถฉ๋ ํํผ ์ต์-์ ํฌ ๋ก๋ด ๋ชจ์ ์์ฑ
2.1 ์๊ฐ: GPU๋ก ๊ฐ์ํ ์ฐจ์ธ๋ ๋ก๋ด ๋ชจ์ ํ๋๋
๋ก๋ด ํ(Manipulator)์ ๋ชจ์ ์์ฑ ๋ฌธ์ ๋, ๋์ ์์ ๋๋ฅผ ๊ฐ์ง ๋ก๋ด์ด ๋ณต์กํ ํ๊ฒฝ์์ ์ถฉ๋ ์์ด ๋ชฉํ ์ง์ ๊น์ง ์ด๋ํ ๊ฒฝ๋ก์ ์๋๋ฅผ ์ฐพ์๋ด๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ธฐ์กด์ ๋ชจ์ ํ๋๋๋ค์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ฑฐ๋, ๊ฒฝ๋ก๋ ์ฐพ์ง๋ง ์์ง์์ด ๋ถ์์ ํ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. cuRobo๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ์๋ ์๋ก์ด ๋ชจ์ ์์ฑ ํ๋ ์์ํฌ๋ก, GPU ๋ณ๋ ฌ ์ปดํจํ ์ ์ ๊ทน ํ์ฉํ์ฌ ์ ์ญ ์ต์ ํ ์์ค์์ ๊ฒฝ๋ก๋ฅผ ํ์ํฉ๋๋ค. cuRobo๋ ํนํ โ์ต์-์ ํฌ(minimum-jerk)โ ๊ธฐ์ค์ผ๋ก ๊ถค์ ์ ์ต์ ํํ์ฌ ๋ถ๋๋ฝ๊ณ ์์ ์ ์ธ ์์ง์์ ์์ฑํ๋ฉฐ, ๋ก๋ด๊ณผ ํ๊ฒฝ ๊ฐ ์ถฉ๋ ํํผ๋ฅผ ํตํฉ์ ์ผ๋ก ๊ณ ๋ คํฉ๋๋ค. ๋๋๊ฒ๋ ์ด ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ํ๊ท 50ms ์ด๋ด์ ์ํํ์ฌ, ๊ธฐ์กด ๊ธฐ๋ฒ ๋๋น ์ฝ 60๋ฐฐ ์ด์์ ์๋ ํฅ์์ ๋ฌ์ฑํฉ๋๋ค. ๋ณธ ํฌ์คํธ์์๋ cuRobo์ ํต์ฌ ์์ด๋์ด์ ์ํคํ ์ฒ๋ฅผ ์ดํด๋ณด๊ณ , ์ฑ๋ฅ ํ๊ฐ ๊ฒฐ๊ณผ์ ๊ธฐ์กด ๋ฐฉ๋ฒ๋ค๊ณผ์ ๋น๊ต๋ฅผ ํตํด ๊ทธ ์ฅ์ ๊ณผ ํ๊ณ๋ฅผ ๊น์ด ์๊ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
2.2 cuRobo์ ํต์ฌ ์์ด๋์ด์ ๊ตฌ์กฐ
cuRobo๋ ๋ก๋ด ๋ชจ์ ์์ฑ์ ํ๋์ ์ต์ ํ ๋ฌธ์ ๋ก ์ ์ํํฉ๋๋ค. ๋ชฉํ๋ ๋ก๋ด์ ์์ ์์ธ์์ ๋ชฉํ ๊ทธ๋ฆฌํผ ์์น/์์ธ์ ๋๋ฌํ๋ ์๊ฐ์ ๋ฐ๋ฅธ ๊ด์ ๊ถค์ ์ ์ฐพ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ถค์ ์ ๊ฐ๋ฅํ ํ ๋ถ๋๋ฝ๊ฒ (๊ฐ์๋์ ์๊ฐ ๋ณํ์จ์ธ ์ ํฌ(jerk)๋ฅผ ์ต์ํ) ์์ง์ด๋ฉด์๋ ๊ฒฝ๋ก ์์ ์ฅ์ ๋ฌผ๊ณผ ์ถฉ๋ํ์ง ์๋๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด cuRobo๋ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ค์ ํฌํจํ๋ ๊ตฌ์กฐ์ ํ์ดํ๋ผ์ธ์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
๋ชฉํ ์์ธ IK ๊ณ์ฐ: ๋จผ์ ๋ชฉํ ๊ทธ๋ฆฌํผ ์์ธ(์์น ๋ฐ ๋ฐฉํฅ)์ ๋์ํ๋ ๋ชฉํ ๊ด์ ๊ฐ์ ์ฐพ์์ผ ํฉ๋๋ค. cuRobo๋ ์์ฒด ๊ฐ๋ฐํ ๋ณ๋ ฌํ๋ ์ญ๊ธฐ๊ตฌํ(IK) ์๋ฒ๋ฅผ ์ด์ฉํด ๋ค์์ IK ํด๋ฅผ ๋์์ ์๋ํ์ฌ, ๊ทธ ์ค ์ถฉ๋์ด ์๊ณ ๋ก๋ด ๊ด์ ๋ฒ์ ๋ด์ ์๋ ํด๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์๋ ๋๋ค. ์ด IK ์๋ฒ๋ GPU ๋ณ๋ ฌํ๋ฅผ ํตํด ์ด๋น 7000ํ ์ด์์ IK ์ฐ์ฐ์ ์ํํ ์ ์์ ์ ๋๋ก ๊ณ ์์ด๋ฉฐ, ํ์ํ๋ฉด ์์ญ ๊ฐ์ ํด๋ฅผ ์์ฑํด ์ดํ ๋จ๊ณ์ ํ๋ณด๋ก ํ์ฉํฉ๋๋ค (์คํ์ ์ผ๋ก 1000๊ฐ์ ์์ธ๋ฅผ 131ms๋ง์ ๋ชจ๋ ์ถฉ๋ ๊ฒ์ฌ๊น์ง ํฌํจ ํด๊ฒฐํ์ฌ ๊ธฐ์กด TracIK ๊ธฐ๋ฐ ์ ๊ทผ๋ณด๋ค 80๋ฐฐ ์ด์ ๋น ๋ฆ).
์ฌ๋ฌ ์ด๊ธฐ ๊ถค์ ์๋ ์์ฑ: IK๋ก ์ป์ ๋ชฉํ ์์ธ(๊ด์ ๊ตฌ์ฑ)๋ก๋ถํฐ, ์์ ์์ธ์ ๋ชฉํ ์์ธ๋ฅผ ์ฐ๊ฒฐํ๋ ์ฌ๋ฌ ๊ฐ์ ์ด๊ธฐ ๊ฒฝ๋ก ์๋๋ฆฌ์ค(์๋)๋ฅผ ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค๋ฉด,
- ์ง์ ์ธํฐํด๋ ์ด์ ๊ฒฝ๋ก: ์์ ๊ด์ ๊ฐ๊ณผ ๋ชฉํ ๊ด์ ๊ฐ์ ์ ํ ๋ณด๊ฐํ์ฌ ์ป์ ๊ฒฝ๋ก,
- ํํด ๋์์ ํฌํจํ ๊ฒฝ๋ก: ์ด๊ธฐ์ ๋ก๋ด ํ์ ์ด์ง ๋ค๋ก ๋นผ๋ ๋ฑ ํน์ ์ค๊ฐ ์์ธ(retract configuration)๋ฅผ ๊ฒฝ์ ํ๋๋ก ๋ง๋ ๊ฒฝ๋ก,
- ๋ณ๋ ฌ ๊ธฐํํ ํ๋๋ ๊ธฐ๋ฐ ๊ฒฝ๋ก: cuRobo์ ๋ด์ฅ๋ GPU ๊ฐ์ ์ํ๋ง ํ๋๋๋ฅผ ์ฌ์ฉํด ์ป์ ์ถฉ๋ ์๋ ๊ฒฝ๋ก ๋ฑ์ด ์์ต๋๋ค.
์ด๋ฌํ ์ฌ๋ฌ ๊ฒฝ๋ก ํ๋ณด๋ฅผ ํ๊บผ๋ฒ์ ์ค๋นํ๋ ์ด์ ๋ ์ ์ญ ์ต์ ํด๋ฅผ ์ฐพ๊ธฐ ์ํจ์ ๋๋ค. ๋ก๋ด ๋ชจ์ ์ต์ ํ ๋ฌธ์ ๋ ์ฅ์ ๋ฌผ์ ์ํด ๋น์ ํ์ ์ด๊ณ ๋ค์ค ๊ทน์ํด๋ฅผ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์, ๋จ์ผ ์ด๊ธฐ ๊ฐ์ผ๋ก ์์ํ๋ฉด ์ต์ ํด๋ฅผ ๋์น๊ฑฐ๋ ์ถฉ๋์ ํผํ์ง ๋ชปํ ์ ์์ต๋๋ค. cuRobo๋ ๋ค์ํ ์๋๋ค์ ๋ณ๋ ฌ๋ก ํ์ํจ์ผ๋ก์จ ์ด๋ฌํ ์ง์ญ ํด ํ๊ณ๋ฅผ ๊ทน๋ณตํ๋ ค ํฉ๋๋ค. ์คํ์ ์ผ๋ก๋ ๋ค์ค ์๋ ๋ฐ ์ฐ์ ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ๋์ ํ๋ฉด ๋จ ํ๋ฒ์ ์ต์ ํ ์๋๋ก๋ ๋ฌธ์ ์ 85% ์ด์์ ์ฑ๊ณต์ ์ผ๋ก ํ ์ ์์ ์ ๋๋ก ์ฑ๊ณต๋ฅ ์ด ๋์์ง๋ค๊ณ ๋ณด๊ณ ํฉ๋๋ค.
๋ณ๋ ฌ ๊ถค์ ์ต์ ํ (Minimum-Jerk): ์ค๋น๋ ๋ค์์ ์๋ ๊ถค์ ๊ฐ๊ฐ์ ๋ํด ๋์์ ์ต์ ํ ์ฐ์ฐ์ ์ํํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฝ์คํธ ํจ์๋ ํฌ๊ฒ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- ๊ฒฝ๋ก์ ๋ชฉ์ ์ง ๋๋ฌ ์ค์ฐจ: ์ต์ข ์์ ์ ์๋ ์ดํํฐ๊ฐ ๋ชฉํ ์์ธ์ ๋๋ฌํ๋๋ก ์ ๋ํ๋ ๋น์ฉ์ผ๋ก, ์์น ์ค์ฐจ์ ์์ธ(quaternion) ์ค์ฐจ๋ฅผ ํฌํจํฉ๋๋ค. ์ด ํญ์ ๋ชฉํ์ ๊ฐ๊น์์ง์๋ก ์ธ๋ฐํ๊ฒ, ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ ๋๋ ์์ ์ ์ผ๋ก ์์ฉํ๋๋ก ์ค์ผ์ผ๋ง๋์ด ์์ด, ๋ชฉํ ๊ทผ์ฒ์์ ๋์ ์ ํ๋๋ฅผ ๋ณด์ฅํ๋ฉด์๋ ์ด๊ธฐ์๋ ์๋งํ ๊ฒฝ์ฌ๋ก ํจ์จ์ ํ์์ ๋์ต๋๋ค.
- ๊ฒฝ๋ก์ ๊ธธ์ด ๋ฐ ๋งค๋๋ฌ์: ๊ฐ์๋ ๋ฐ ์ ํฌ(jerk)์ ๋ํ ํ๋ํฐ๋ฅผ ์ค์ผ๋ก์จ ๋ถํ์ํ๊ฒ ๊ตฝ์ ๊ฒฝ๋ก๋ ๊ธ๊ฒฉํ ์๋ ๋ณํ๋ฅผ ์ต์ ํฉ๋๋ค. ๊ฐ์๋ ์ ๊ณฑํฉ์ ์ต์ํํ๋ ๊ฒ์ ๊ณง ๋ก๋ด ๊ด์ ์๋์ ๊ธ๊ฒฉํ ๋ณํ๋ฅผ ์ค์ฌ ๊ฒฝ๋ก๋ฅผ ๋ถ๋๋ฝ๊ฒ ๋ง๋ค๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ์งง๊ณ ํจ์จ์ ์ธ ๊ฒฝ๋ก๊ฐ ๋์ค๋๋ก ํฉ๋๋ค. ์ฌ๊ธฐ์ ํ ๋จ๊ณ ๋ ๋์๊ฐ, ์ ํฌ(jerk) ํญ์ ํจ๊ป ์ต์ํํจ์ผ๋ก์จ ์๋์ ๋ณํ์จ๊น์ง ์ต์ ํ๋ ์ต์-์ ํฌ ๊ถค์ ์ ์ถ๊ตฌํฉ๋๋ค. ์ด๋ฌํ ์ ํฌ ์ต์ํ๋ ํนํ ๋ก๋ด์ด ์ ์ง ์ํ์์ ๊ณ ์์ผ๋ก ์์ง์ด๊ธฐ ์์ํ๊ฑฐ๋ ๋ฉ์ถ ๋ ๋ฐ์ํ๋ ์ถฉ๊ฒฉ์ ์ค์ฌ์ฃผ๋ฉฐ, ์ค์ ๋ก๋ด ์ ์ด ์ ์ง๋ ๊ฐ์ ๋ฐ ์ถ์ข ์์ ์ฑ ํฅ์์ ํฌ๊ฒ ๊ธฐ์ฌํฉ๋๋ค.
์ถ๊ฐ๋ก, ๊ฒฝ๋ก ์์์ ๊ด์ ๊ฐ๋ ํ๊ณ๋ฅผ ๋์ง ์๋๋ก ํ๋ํฐ๋ฅผ ๋ถ๊ณผํ๊ณ (ํ๋ ์ ์ฝ์ ์ผ๋จ ํฐ ํ๋ํฐ๋ก ์ํํ์ฌ ์ต์ ํ), ํ์ํ ๊ฒฝ์ฐ ๋ก๋ด ๋ชจ๋ธ์ ๋ฐ๋ฅธ ์์ ๊ณต๊ฐ ์ ์ฝ(์: ํน์ ๋์ด ์ ์ง๋ ๋ง๋จ์ ๋ฐฉํฅ ์ ์ง)๋ ๋น์ฉ์ผ๋ก ๋ฃ์ ์ ์์ต๋๋ค. ๋ค๋ง cuRobo ๋ ผ๋ฌธ์์๋ ์ด๋ฐ ์์ -์ ์ฝ ๊ฒฝ๋ก(์: ๋๋จ ๊ณต๊ตฌ์ ์ผ์ ํ ์์ธ ์ ์ง ๋ฑ)์ ๋ํ ์ฒ๋ฆฌ๋ ์ด๊ธฐ ์คํ๋ง ํด๋ณด์๊ณ ์์ง ๋ณธ๊ฒฉ์ ์ผ๋ก ํตํฉํ์ง ์์๋ค๊ณ ๋ฐํ์ต๋๋ค.
์ถฉ๋ ํํผ๋ ์ฝ์คํธ ํจ์์ ํ์ ์์์ ๋๋ค. cuRobo๋ ๋ก๋ด ์์ฒด ์ถฉ๋(์ ํ-์ฝ๋ฆฌ์ )๊ณผ ํ๊ฒฝ ์ฅ์ ๋ฌผ ์ถฉ๋์ ๋ชจ๋ ๊ณ ๋ คํ๊ธฐ ์ํด, ๋ก๋ด ๋ฐ ๋ฌผ์ฒด์ ๊ธฐํ๋ฅผ ํน์ํ ๋ฐฉ์์ผ๋ก ๋ค๋ฃน๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ถฉ๋ ๊ฒ์ถ์ ๋ก๋ด์ ๊ฐ ๋งํฌ ํ์์ ๋งค๋ฒ ์์น์์ผ ๋ฉ์(mesh) ๊ฐ ์ถฉ๋ ์ฌ๋ถ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ ์ทจํ๋๋ฐ, ์ด๋ ๋งค์ฐ ๊ณ์ฐ ์ง์ฝ์ ์ ๋๋ค (์: ROS MoveIt์์๋ ์คํ์์ค FCL(Flexible Collision Library)๋ก ์ด๋ฌํ ์ฐ์ฐ์ CPU์์ ์ํํ๋ฉฐ, ๋ณต์กํ ๋ก๋ด-ํ๊ฒฝ ๊ฐ ์ถฉ๋ ๊ณ์ฐ์ด ๋ณ๋ชฉ์ด ๋๊ณค ํฉ๋๋ค). cuRobo๋ ๋ก๋ด์ ๊ฐ ๋งํฌ๋ฅผ ๋ณต์์ ๊ตฌ(sphere)๋ก ๊ทผ์ฌ ํํํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๊ฐ ๊ตฌ์ ์ค์ฌ ์ขํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ถฉ๋ ๋น์ฉ ํจ์๋ฅผ ์ฐ์์ ์ผ๋ก ๊ณ์ฐํ๋๋ฐ, ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ๊ฒฝ ์ถฉ๋ ๋น์ฉ: ๊ตฌ์ ์ฅ์ ๋ฌผ ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ, ๋ง์ฝ ๊ฑฐ๋ฆฌ๊ฐ ๊ตฌ์ ๋ฐ์ง๋ฆ๋ณด๋ค ํฌ๋ฉด (์ถฉ๋ ์ฌ์ ๊ฐ ์ถฉ๋ถํ๋ฉด) ๋น์ฉ 0, ์ด๋ ์๊ณ ๊ฑฐ๋ฆฌ ์ด๋ด๋ก ๊ฐ๊น์์ง๋ฉด ๋ถ๋๋ฌ์ด 2์ฐจ ํจ์ ํํ๋ก ๋น์ฉ์ด ์ฆ๊ฐํ๋๋ก ๋ง๋ญ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ก๋ด์ด ์ฅ์ ๋ฌผ์ ๊ทผ์ ํ ์๋ก ํฐ ํจ๋ํฐ๋ฅผ ๋ฐ์ ์์ฐ์ค๋ฝ๊ฒ ๋ฉ์ด์ง๋๋ก ์ต์ ํ๋ฉ๋๋ค. ์ฅ์ ๋ฌผ์ ์ฌ์ ์ ์ง์ก๋ฉด์ฒด(collaboration box)๋ ์๋ช ๊ฑฐ๋ฆฌ์ฅ(Signed Distance Field) ๋ฑ์ผ๋ก ํํํ์ฌ, ๊ฐ ๊ตฌ์ ์ค์ฌ๊น์ง์ ๊ฑฐ๋ฆฌ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ๋ณ๋ ฌ ๊ณ์ฐํฉ๋๋ค. (๋ ผ๋ฌธ์์๋ ์คํ ์ ์๊ธฐ๋ฅ ํํ์ ์ฅ์ ๋ฌผ์ ๋์ผํ ๋ถํผ์ ์ง์ก๋ฉด์ฒด๋ก ๊ทผ์ฌํ๋ค๊ณ ์ธ๊ธํฉ๋๋ค. ์ด๋ฌํ ๊ทผ์ฌ๋ ์๋๋ฅผ ๋์ฌ์ฃผ์ง๋ง ์ฝ๊ฐ์ ์ค์ฐจ๋ฅผ ์๋ฐํ์ฌ, ์ผ๋ถ ์ฃ์ง ์ผ์ด์ค์์ ๋ชฉํ ์์ธ ์์ฒด๊ฐ ์ฅ์ ๋ฌผ๊ณผ ๊ฒน์ณ ์ ํจ ๊ฒฝ๋ก๊ฐ ์๋๋ฐ๋ ๊ทผ์ฌ ์ถฉ๋ ๊ฒ์ฌ์ ๊ฐ๊ณผ๋๋ ๋ฑ์ ์ฌ๋ก๊ฐ ์์์ต๋๋ค.)
- ์๊ธฐ ์ถฉ๋ ๋น์ฉ: ๋ก๋ด ๋งํฌ๋ค ๊ฐ ์ผ์ ๊ฑฐ๋ฆฌ ์ด์ ๊ทผ์ ํ์ง ์๋๋ก, ๊ฐ ๋งํฌ๋ฅผ ๋ํํ๋ ๊ตฌ๋ค ์ฌ์ด์ ๊ฐ๊ฒฉ์ ๊ณ์ฐํด ๋น์ฉ์ ๋ถ์ฌํฉ๋๋ค. ์ธ์ ํ ๋งํฌ (์: ๋ฐ๋ก ์ด์ ๊ด์ ์ฌ์ด)๋ ์ด๋ ์ ๋ ๊ฐ๊น์์ง๋ ๊ฒ์ด ํ์ฉ๋๋ฏ๋ก, ํน์ ๊ตฌ ์๋ค๋ง ์ ํ์ ์ผ๋ก ๊ฒ์ฌํ์ฌ ๋ถํ์ํ ์ถฉ๋ ๊ณ์ฐ์ ์ค์ด๊ณ ๋ก๋ด์ ์ ์ ๋์ ๋ฒ์๋ ๋ฐฉํดํ์ง ์๋๋ก ํ์ต๋๋ค.
ํนํ cuRobo๋ ์ฐ์์ (Continuous) ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ์ํํ์ฌ ์๊ฐ์ถ์ ๋ฐ๋ผ ๋ถ๋๋ฝ๊ฒ ์์ง์ด๋ ๋์์๋ ์ค๊ฐ์ ๋ฐ์ํ ์ ์๋ ์ถฉ๋์ ๋์น์ง ์์ต๋๋ค. ์ด๋ ๊ฐ ํ์์คํ ๋ณ ๋ก๋ด ์์ธ๋ฟ๋ง ์๋๋ผ, ์ธ์ ์๊ฐ ๊ตฌ๊ฐ์์ ๋ก๋ด์ ๊ถค์ ์ด ์ง๋๊ฐ๋ ๊ฒฝ๋ก๊น์ง ํ์ธํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๊ด์ ๊ฐ๋ ์ฌ์ด๋ฅผ ์ ํ๋ณด๊ฐํ ์ธ๋ถ์์ธ๋ค๋ ๋ชจ๋ ์ ๊ตฌ-์ฅ์ ๋ฌผ ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ํตํด ์ถฉ๋์ด์๋์ง ํ์ธํ๋ฉฐ, ํ์ํ๋ฉด ์๊ฐ ๋ถํ ์ ์กฐ์ ํด๊ฐ๋ฉฐ ์์ ํ ์ถฉ๋ ํ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ต์ ํ๋ ๋ณ๋ ฌํ๋ L-BFGS ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ํ๋ฉ๋๋ค. ๊ฐ ์๋ ๊ฒฝ๋ก์ ๋ํด ๊ทธ๋๋์ธํธ๋ฅผ ๊ณ์ฐํ๊ณ L-BFGS ๋ฐฉ์์ผ๋ก ๋์์ ๊ฒฝ๋ก๋ฅผ ์์ ํด ๋๊ฐ๋, cuRobo๋ ์ฌ๊ธฐ์ ๋ ์์ ์ธ ๋ณ๋ ฌ ๋ ธ์ด์ฆ Line Search ๊ธฐ๋ฒ์ ๋ํ์ต๋๋ค. ์ผ๋ฐ์ ์ธ L-BFGS ์๊ณ ๋ฆฌ์ฆ์ ์๋ก์ด ์คํ ํฌ๊ธฐ๋ฅผ ์ฐพ์ ๋ ์ง๋ ฌ์ ์ผ๋ก ํ์(line search)์ ํ์ง๋ง, cuRobo๋ ์ฌ๋ฌ ํ๋ณด ์คํ ์ ๋์์ ์๋ํ๊ณ ์ฝ๊ฐ์ ๋ฌด์์์ฑ๋ ๋ถ์ฌํ์ฌ ์ง์ญ ์ต์ ํด์ ๊ฐํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ๋ํ ์ด๊ธฐ ๋ช ํ์ ๋ฐ๋ณต(iteration)์ โํํฐํด ๊ธฐ๋ฐ ์ต์ ํโ๋ผ ๋ถ๋ฆฌ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์๋ ๊ฒฝ๋ก๋ค์ด ๋ ์ข์ ์์ญ์ผ๋ก ์ด๋ํ๋๋ก ์ ๋ํ๊ณ , ์ดํ L-BFGS๋ก ๋น ๋ฅด๊ฒ ์๋ ด์ํค๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๋ต์ ์ทจํฉ๋๋ค. ์ฌ๊ธฐ์ ํํฐํด ๊ธฐ๋ฐ ์ต์ ํ๋ ์๋๋ค์ ์ผ์ข ์ ์ค์(swarm)์ผ๋ก ๊ฐ์ฃผํ์ฌ ๊ฐ๋ต์ ์ธ ์ ์ญ ํ์์ ํ๋ ๋จ๊ณ๋ก ๋ณผ ์ ์์ต๋๋ค (๋ ผ๋ฌธ์์๋ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ผ๋ก ์ํ ๊ธฐ๋ฐ MPPI๋ฒ ๋ฑ์ ํ์ฉํ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค). ์์ฝํ๋ฉด, ๋ค์ค ์๋ + ํํฐํด ํ์ + L-BFGS ๋ฏธ์ธ์กฐ์ ์ ์กฐํฉ์ผ๋ก, ๋์ ์ฑ๊ณต๋ฅ ๊ณผ ๋น ๋ฅธ ์๋ ด ์๋๋ฅผ ๋์์ ์ป๋ ๊ฒ์ ๋๋ค.
์๊ฐ ์ต์ ํ ๋ฐ ์ต์ข ์ถ๋ ฅ: ๊ถค์ ์ต์ ํ๊ฐ ๋๋๋ฉด ๊ฒฐ๊ณผ๋ก ์ป์ ๊ฒฝ๋ก๋ ๊ด์ ๊ณต๊ฐ์์์ ์์ง์ ์์์ผ ๋ฟ ์๋๋ผ, ์๊ฐ ํ๋กํ์ผ์ด ํ ๋น๋์ด์ผ ์ค์ ๋ก๋ด์ด ๋ฐ๋ผ๊ฐ ์ ์์ต๋๋ค. cuRobo๋ ์ฒ์์๋ ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ์๊ฐ ๊ฐ๊ฒฉ(dt)์ ๋๊ณ ์ต์ ํ๋ฅผ ์ํํ์ง๋ง, ์ผ๋จ ์ถฉ๋ ์๋ ๊ฒฝ๋ก๊ฐ ๋์ค๋ฉด ๊ทธ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์์ง์ผ ๋ ๋ก๋ด์ ์๋/๊ฐ์๋ ํ๊ณ๋ฅผ ๊ฒํ ํฉ๋๋ค. ๋ง์ฝ ์ด๋ ๊ตฌ๊ฐ์์ ์๋๋ ๊ฐ์๋ ํ๊ณ๋ฅผ ๋๋๋ค๋ฉด ์๊ฐ์ ๋๋ฆฌ๊ณ , ์ฌ์ ๊ฐ ๋ง๋ค๋ฉด ์๊ฐ์ ๋จ์ถํ๋ ์์ผ๋ก ์๊ฐ ์ค์ผ์ผ์ ์ฌ์กฐ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ํ๋ค๋ฉด ๊ทธ ์๋ก์ด ์๊ฐ ๊ฐ๊ฒฉ์ ๋ง์ถ์ด ๋ค์ ํ๋ฒ ๊ถค์ ์ ๋ฏธ์ธ ์กฐ์ ํ์ฌ, ์ต์ข ์ ์ผ๋ก ๋ก๋ด์ ๋์ ํ๊ณ ๋ด์์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์์ง์ผ ์ ์๋ ์๊ฐ์ ๊ฐ๋ ๊ถค์ ์ ์์ฑํฉ๋๋ค. ์ด๋ ๊ฒ ์ฐ์ถ๋ ๊ฒฐ๊ณผ ๊ถค์ ฮธ[0,T]๋ ์์๋ถํฐ ๋ชฉํ๊น์ง ๊ฐ ์์ ๋ณ ๊ด์ ๊ฐ๊ณผ, ํด๋น ์์ง์์ ๊ฑธ๋ฆฌ๋ ์๊ฐ (์๋ ํ๋กํ์ผ)์ด ๋ชจ๋ ์ ํด์ง ํํ๋ก, ๋ก๋ด์ ์คํ ๋ช ๋ น์ผ๋ก ๋ณด๋ผ ์ค๋น๊ฐ ๋ ์ํ๊ฐ ๋ฉ๋๋ค.
์์ฝํ์๋ฉด, cuRobo์ ๊ตฌ์กฐ๋ (i) ๋ณ๋ ฌ IK๋ก ๋ชฉํ ์์ธ ๋๋ฌ ๊ฐ๋ฅ์ฑ ํ์ธ, (ii) ๋ค์์ ์ด๊ธฐ ๊ฒฝ๋ก ์์ฑ, (iii) ๋ณ๋ ฌ ๊ถค์ ์ต์ ํ๋ก ์ถฉ๋ ์๊ณ ์ต์-์ ํฌ์ธ ๊ฒฝ๋ก ํ์, (iv) ์๊ฐ ์ฌ์กฐ์ ์ผ๋ก ๋ก๋ด ํ๊ณ ๋ด ์ต์ ์๋ ๋ฌ์ฑ์ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ๋ณต์กํ ์์ ์ ๋ชจ๋ ํฌํจํจ์๋, ๊ฐ๋ ฅํ GPU ๋ณ๋ ฌํ๋ฅผ ํตํด ์์ญ ๋ฐ๋ฆฌ์ด ์์ค์ ์๋๋ฅผ ์ด๋ฃจ์ด๋ธ ๊ฒ์ด cuRobo์ ๊ฐ์ฅ ํฐ ํ์ ์ ๋๋ค. ๋ค์ ์น์ ์์๋ cuRobo๊ฐ ์ด๋ป๊ฒ GPU๋ฅผ ํ์ฉํด ์ด๋ฌํ ์ฑ๋ฅ์ ์ป๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
2.3 GPU ๋ณ๋ ฌํ ์ ๋ต๊ณผ ์ต์ ํ ๊ธฐ๋ฒ
cuRobo์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋น๊ฒฐ์ ์ ๋ต์ ์ธ ๋ณ๋ ฌํ(parallelization)์ GPU ์ต์ ํ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ก๋ด ๋ชจ์ ๊ณํ์ ๊ฐ ๊ตฌ์ฑ์์(์: IK ๊ณ์ฐ, ๊ฒฝ๋ก ์ถฉ๋ ๊ฒ์ฌ, ์ต์ ํ ๋ฐ๋ณต ๋ฑ)๋ ์์ฐจ์ ์ผ๋ก ์ํ๋๋ ์์ ์ด์์ต๋๋ค. cuRobo๋ ์ด๋ฅผ ๊ฐ๋ฅํ ๋ชจ๋ ๋จ๊ณ์์ ๋ณ๋ ฌํํ์ฌ, GPU์ ์์ฒ ๊ฐ ์ค๋ ๋๋ฅผ ํ์ฉํจ์ผ๋ก์จ ๋์์ ๋ง์ ์ฐ์ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ค์ค ์๋ ๋ณ๋ ฌ ์ต์ ํ: ์์ ์ค๋ช ํ๋ฏ์ด cuRobo๋ ์ฌ๋ฌ ๊ฐ์ ์ด๊ธฐ ๊ฒฝ๋ก ์๋๋ฅผ ๋ก๋๋ค. ์ด ๊ฐ๊ฐ์ ์๋ ๊ฒฝ๋ก ์ต์ ํ๋ ๋ ๋ฆฝ์ ์ธ ๊ณ์ฐ์ด๋ฏ๋ก, GPU์ ์ฌ๋ฌ ์ค๋ ๋๋ธ๋ก์ ๋ถ๋ฐฐํ์ฌ ๋์์ ์งํํฉ๋๋ค. ๋ ผ๋ฌธ์์๋ ํ ์๋๋น ํ๋์ CUDA ๋ธ๋ก์ ํ ๋นํ๊ณ , ์์ญ ๊ฐ์ ์๋๊ฐ ๊ฐ๊ฐ ๋ณ๋ ฌ๋ก ์ ๋ฐ์ดํธ๋๋ค๊ณ ๋ฐํ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๊ฐ ๋น ๋ง์ ํ๋ณด ๊ฒฝ๋ก๋ฅผ ์ดํด๋ณผ ์ ์์ด, ๋จ์ ๋จ์ผ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์๋ํ๋ ๊ฒ๋ณด๋ค ์๋ฑํ ๋น ๋ฅด๊ฒ ์ฐ์ํ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์ค๋ ๋ ๋จ์ ์ธ๋ถํ: ๋์ฑ ํฅ๋ฏธ๋ก์ด ์ ์, ํ ๊ฐ์ ์๋์ ์ต์ ํ ๊ณผ์ ๋ด๋ถ์์๋ ๋ณ๋ ฌํ๋ฅผ ์ํํ๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํ ๊ถค์ ์ ์ถฉ๋ ๋น์ฉ์ด๋ ๊ทธ๋๋์ธํธ๋ฅผ ๊ณ์ฐํ ๋, ์๊ฐ ๋จ๊ณ๋ณ๋ก ํน์ ๊ด์ ๋ณ๋ก ๊ณ์ฐ์ ์ชผ๊ฐ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ๋ถ๋ดํ๋๋ก ๊ตฌํํ์ต๋๋ค. ๋ ผ๋ฌธ์ ๋ฐ๋ฅด๋ฉด, โworkload๊ฐ ํฐ ์ปค๋๋ค์ ์๋๋ณ๋ก๋ ๋ค์ ์ฌ๋ฌ ์ค๋ ๋๋ก ์ชผ๊ฐ์ด ์คํ(split kernels across many threads per seed)โํ์ฌ, ์ ํต์ ์ผ๋ก ๋ฐ๋ณต์ ์ด๊ณ ์์ฐจ์ ์ธ ์์น์ต์ ํ ์์ ์์๋ ํฐ ํญ์ ๊ฐ์์ ์ป์๋ค๊ณ ํฉ๋๋ค. ๋ํ์ ์ธ ์ฌ๋ก๋ก ๋ก๋ด ์ ๋ฐฉํฅ ๊ธฐ๊ตฌํ (Forward Kinematics) ๊ณ์ฐ์ ๋ค ์ ์์ต๋๋ค. ๋ณดํต n-์์ ๋ ๋ก๋ด์ ์ ๊ธฐ๊ตฌํ์ ๊ฐ ๊ด์ ๋ณํ์ ์์์๋ถํฐ ์ฐจ๋ก๋ก ๊ณฑ์ ์ฉํ๋ ์์ ํ ์ง๋ ฌ์ ์ธ ๊ณ์ฐ์ ๋๋ค. ๊ทธ๋ฌ๋ cuRobo๋ ๋์ฐจ๋ณํ ํ๋ ฌ(4x4)์ ์ฌ์ฉํด 4๊ฐ์ ์์๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํ๊ณ , ์ฌ๋ฌ ๊ด์ ๋ณํ๋ ๋งคํธ๋ฆญ์ค ๊ณฑ์ ์ 4๊ฐ ์ค๋ ๋๊ฐ ๋ณ๋ ฌ ์ํํ๋ ์์ผ๋ก ๋ณ๋ ฌํ๋ฅผ ๋ถ๋ถ ๋์ ํ์ต๋๋ค. ๋ํ ํ ๊ด์ ์ฉ ์งํํ๋ ๊ธฐ์กด GPU ๊ตฌํ(STORM ๋ฑ)์ด ๋ง์ ์ปค๋ ํธ์ถ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํจ ๊ฒ๊ณผ ๋ฌ๋ฆฌ, cuRobo๋ ๋จ์ผ CUDA ์ปค๋์์ ๋ชจ๋ ๋งํฌ ์ขํ๋ฅผ ๊ณ์ฐํ๋๋ก ๊ตฌํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ณ๋ชฉ์ ์ค์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ ์ ๋ฐฐ์น(batch) ํฌ๊ธฐ ์ด์์์๋ CPU์ ์ต๊ณ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Pinocchio ๋ฑ)๋ณด๋ค ์๋ฐฑ - ์์ฒ ๋ฐฐ๊น์ง๋ ๋น ๋ฅธ ๊ธฐ๊ตฌํ ๊ณ์ฐ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. ์ด๋ฌํ ์ธ๋ฐํ ์ต์ ํ ๋๋ถ์, cuRobo์ ์ ๊ธฐ๊ตฌํ์ 100k๊ฐ์ ์์ธ์ ๋ํด์๋ CPU ๋๋น ์ต๋ 891๋ฐฐ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ด๋ฉฐ, ๊ฑฐ๋ฆฌ ๊ณ์ฐ (์ถฉ๋ ๊ฒ์ฌ)๋ ๋๊ท๋ชจ ๋ฐฐ์น ์ PyBullet ๋๋น ์ต๋ 16000๋ฐฐ๊น์ง ๋นจ๋ผ์ง๋ ํ๊ธฐ์ ์ธ ์๋๋ฅผ ๋ฌ์ฑํ์ต๋๋ค (๋ฌผ๋ก ์ด๋ ๊ฒ ํฐ ๋ฐฐ์น๋ ์ค์๊ฐ ์ ์ฉ๋ณด๋ค๋ ๋ณ๋ ฌ ์๋ฎฌ๋ ์ด์ ๋ถ์ ๋ฑ์ ๊ฐ๊น์ง๋ง, 100 - 1000๊ฐ ์์ค์ ๋ณ๋ ฌ ๊ณ์ฐ์์๋ ์ด๋ฏธ ์ ์๋ฏธํ ๊ฐ์์ด ์ผ์ด๋ฉ๋๋ค).
CUDA ๊ทธ๋ํ(CUDA Graphs) ํ์ฉ: cuRobo๋ Python์ผ๋ก ๊ตฌํ๋ ์์ ๋ก์ง์์ ์ฌ๋ฌ CUDA ์ปค๋์ ํธ์ถํ๋ ๊ตฌ์กฐ์ธ๋ฐ, ์ด ๊ฒฝ์ฐ ํธ์คํธ(CPU)-๋๋ฐ์ด์ค(GPU) ๊ฐ ์ปค๋ ํธ์ถ์ ์ค๋ฒํค๋๊ฐ ๋์ ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ค์ด๊ธฐ ์ํด ์ต์ ํ ๋ฐ๋ณต๊ณผ ์ผ๋ถ ๋ฐ์ดํฐ ์ค๋น ๊ณผ์ ์ CUDA Graph ๊ธฐ๋ฅ์ผ๋ก ๋ฌถ์ด ์ผ๊ด ์คํํ๋ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค. CUDA Graph๋ ๋ฏธ๋ฆฌ ์ ์๋ ์ผ๋ จ์ GPU ์ฐ์ฐ์ ํ๊บผ๋ฒ์ ์คํํ๋๋ก ์ค์ผ์ค๋งํ ์ ์๋ ๊ธฐ์ ๋ก, cuRobo๋ ์ด๋ฅผ ํตํด ํ์ด์ฌ ๋ฃจํ์์ ์ปค๋์ ๋งค iteration ํธ์ถํ๋ ๊ฒ์ ๋ นํ(record) ํ ์ฌ์คํํ๋ ํํ๋ก ๋ฐ๊พธ์ด ์ฝ 10๋ฐฐ์ ์๋ ํฅ์์ ์ป์๋ค๊ณ ํฉ๋๋ค. ์ด๋ ๊ฒ Python ๋ ๋ฒจ์ ๋ถ๋ด์ ์ค์ธ ๊ฒฐ๊ณผ, cuRobo์ ์ ์ฒด ๊ณํ ์๊ฐ ์ค Python ์์์ ์๋ชจ๋๋ ์๊ฐ์ด ํ๊ท 8ms ์ ๋์ ๋ถ๊ณผํ๋ฉฐ, ์ถํ ํด๋น ๋ถ๋ถ์ C++๋ก ์ฎ๊ธฐ๊ณ ์ปค๋๋ค์ ๋์ฑ ํตํฉํ๋ค๋ฉด ํ์ฌ 60๋ฐฐ์ธ ์๋ ํฅ์์ด ์ต๋ 93๋ฐฐ๊น์ง๋ ๋์ด๋ ์ ์์์ ๋ณด์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ต์ ํ์ ๊ธฐํ ๊ธฐ๋ฒ: GPU ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ๋๋ฐ, cuRobo๋ ๋ก๋ด ๋ฐ ํ๊ฒฝ ์ ๋ณด๋ฅผ GPU์ ์์ฃผ์์ผ ๋ฐ๋ณต ์ฌ์ฉํ๊ณ , ์ถฉ๋ ๊ฒ์ฌ์ ํ์ํ ๊ตฌ ๊ตฌ์ฑ์ด๋ ์๋ช ๊ฑฐ๋ฆฌ์ฅ ๋ฑ์ ๋ฐ์ดํฐ๋ ํ ๋ฒ ๋ง๋ค์ด ๋์ผ๋ฉด ํจ์จ์ ์ผ๋ก ์ฝ๋๋ก ์ ๊ฒฝ ์ผ์ต๋๋ค. ๋ํ ๋ก๋ด์ ๋ฉ์ -> ๊ตฌ ๊ทผ์ฌ ๋ณํ ๋ฑ์ ๋์์ฃผ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ์ฌ, ์๋ก์ด ๋ก๋ด์ด๋ ํ๊ฒฝ์ ์ ์ฉํ ๋ ๊ฒช๋ ์ด๋ ค์์ ์ค์์ต๋๋ค (NVIDIA Isaac Sim๊ณผ ์ฐ๋๋ sphere generation ์ ํธ๋ฆฌํฐ ๋ฑ์ ์ ๊ณต). ์ด๋ฌํ ์ค๋ฌด์ ์ธ ์ต์ ํ ํฌ์ธํธ๊น์ง ์ฑ๊ฒจ, cuRobo ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ผ๋ฐ PC์์๋ฟ ์๋๋ผ Jetson๊ณผ ๊ฐ์ ์๋ฒ ๋๋ GPU ํ๋ซํผ์์๋ ์ข์ ์ฑ๋ฅ์ ๋ด๋๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
์์ปจ๋ cuRobo๋ โ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒ์ ๋ณ๋ ฌ๋กโ๋ผ๋ ์ฒ ํ์ผ๋ก ์ค๊ณ๋์๊ณ , GPU์ ์ฅ์ ์ ์ต๋ํ ์ด๋ฆฐ ๋ง์ถค ๊ตฌํ์ ํตํด ๊ธฐ์กด CPU ์์ฃผ์ ์ ๊ทผ์ผ๋ก๋ ์์ํ๊ธฐ ์ด๋ ค์ด ์๋๋ฅผ ์คํํ์ต๋๋ค. ๋ค์์ผ๋ก, ์ค์ ์ฑ๋ฅ ์ซ์์ ์คํ ๊ฒฐ๊ณผ๋ค์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
2.4 ์ฑ๋ฅ ํ๊ฐ: ์๋, ์ฑ๊ณต๋ฅ ๊ทธ๋ฆฌ๊ณ ๋์ ์์ ์ฑ
cuRobo์ ์ฑ๋ฅ์ ๋ค์ํ ๊ธฐ์ค์์ ๊ธฐ์กด ๊ธฐ์ ๋ค์ ํฌ๊ฒ ์์๋๊ฐ๋๋ค. ์๋ ์ธก๋ฉด์์๋, ๋ณต์กํ 7์์ ๋ ๋ก๋ด ํ์ด ์ฅ์ ๋ฌผ ์ฌ์ด๋ฅผ ์ด๋ํ๋ ๋ฌธ์ ๋ฅผ ํ๊ท 50ms๋ง์ ํ์ด๋ด์ด, ๊ธฐ์กด ์ต์ ํ ๊ธฐ๋ฐ ๋ฐฉ๋ฒ ๋๋น ์ฝ 60๋ฐฐ ๋นจ๋ผ์ก์ต๋๋ค. ์ฌ์ง์ด ์ด๋ ค์ด ์์ 10% ๋์ด๋ ๋ฌธ์ ๋ค์ ๋ํด์๋ ์์ญ ๋ฐฐ ์ด์์ ๊ฒฉ์ฐจ๊ฐ ๋ฒ์ด์ ธ, ์๋ฅผ ๋ค์ด 98๋ฒ์งธ ํผ์ผํ์ผ ๋์ด๋ ๋ฌธ์ ์ ๊ฒฝ์ฐ cuRobo๋ ์ฝ 0.26์ด, ๊ธฐ์กด ๋ฐฉ์(Tesseract)์ 22์ด๊ฐ ๊ฑธ๋ ค 83๋ฐฐ ์๋ ์ฐจ์ด๋ฅผ ๋ณด์์ต๋๋ค. ์ด๋ฌํ ๋น๊ต๋ Omniverse Isaac Sim์ Franka Emika Panda ๋ก๋ดํ๊ณผ ๋ค์ํ ์ฅ์ ๋ฌผ ํ๊ฒฝ์ ๋ํด ์ด 2600๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ํ ์คํธํ ๊ฒฐ๊ณผ์ ๋๋ค.
ํนํ cuRobo์ ์๋ ํฅ์์ ๋ฐ์คํฌํ ๊ณ ์ฑ๋ฅ PC๋ฟ ์๋๋ผ ์๋ฒ ๋๋ ํ๋ซํผ์์๋ ์ ํจํ์ต๋๋ค. ์๋น๋์ Jetson AGX Orin ๋ชจ๋(์ง๋ฅํ ๋ก๋ด์ ์์ฃผ ์ฐ์ด๋ 60W ๋ด์ธ GPU ์ปดํจํ ๋ชจ๋)์์ ํ ์คํธํ ๊ฒฐ๊ณผ, cuRobo๋ Jetson์์ 15W ์ ์ ๋ ฅ ๋ชจ๋๋ก ๋์ํด๋ ๋ฐ์คํฌํ i7 CPU์์ ๊ตฌ๋ํ Tesseract๋ณด๋ค ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์์ต๋๋ค. Jetson 15W ํ๊ฒฝ์์ ์กฐ์ฐจ cuRobo๊ฐ Tesseract๋ณด๋ค 21๋ฐฐ ๋นจ๋๊ณ , Jetson์ ์ต๋ ์ฑ๋ฅ(MAXN)์ผ๋ก ๊ตฌ๋ํ๋ฉด 28๋ฐฐ๊น์ง๋ ๋นจ๋ผ์ก์ต๋๋ค. ์ด๋ cuRobo์ GPU ์ต์ ํ๊ฐ ์ผ๋ง๋ ๋ฐ์ด๋์ง๋ฅผ ์ ๋ณด์ฌ์ฃผ๋ ์๋ก, ์ ์ ๋ ฅ ์ฃ์ง ๋๋ฐ์ด์ค์์๋ ์ค์๊ฐ ๋ชจ์ ๊ณํ์ ๊ฐ๋ฅ์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
์ฑ๊ณต๋ฅ (์ฑ๊ณต ํ๋ฅ )๊ณผ ๊ฒฝ๋ก ํ์ง ์ธก๋ฉด์์๋ cuRobo๋ ์ฐ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋์ต๋๋ค. ์์ ์ธ๊ธํ 2600๊ฐ์ ๋ค์ํ ๋ฌธ์ ์ธํธ์์, cuRobo์ ๋ชจ์ ์์ฑ์ 99.8%์ ๋งค์ฐ ๋์ ์ฑ๊ณต๋ฅ ์ ๊ธฐ๋กํ์ต๋๋ค. ์ด๋ ๋์ผ ์กฐ๊ฑด์์ ์ ํต์ ์ธ ์กฐํฉ(OMPL RRTConnect + TrajOpt ์ต์ ํ)์ ์ฌ์ฉํ Tesseract์ ์ฝ 98.5%์ ๋น๊ตํด๋ ๋์ ์์น์ ๋๋ค. Tesseract๋ 38๊ฐ์ ์คํจ ์ฌ๋ก๊ฐ ์์๋ ๋ฐ๋ฉด, cuRobo๋ ์ค์ง 5๊ฐ ๋ฌธ์ ๋ง ์คํจํ๋๋ฐ, ๊ทธ๋ง์ ๋ ์๊ณ ๋ฆฌ์ฆ์์ ํ๊ณ๋ผ๊ธฐ๋ณด๋ค ํ ์คํธ ๋ฐ์ดํฐ์ ๋ฌธ์ (๋ชฉํ ์์ธ ์์ฒด๊ฐ ์ฒ์๋ถํฐ ์ฅ์ ๋ฌผ๊ณผ ๊ฒน์ณ์์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ฑ)์๋ค๊ณ ํฉ๋๋ค. ์ฆ, ์ ํจํ ๋ฌธ์ ์ ๋ํด์๋ ์ฌ์ค์ ๋ชจ๋ ํด๊ฒฐํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ๋ํ cuRobo๋ ๊ฒฝ๋ก ์ต์ ํ๋ฅผ ํตํด ๋ถํ์ํ ์ฐํ๋ ๋ฉ๋ฆฌ ๋์๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ํฌ๊ฒ ๋จ์ถ์์ผฐ์ต๋๋ค. ์ธก์ ๊ฒฐ๊ณผ cuRobo๊ฐ ๋ง๋ค์ด๋ธ ๊ฒฝ๋ก์ ๊ด์ ์ด๋๊ฑฐ๋ฆฌ ์ดํฉ(C-space path length)์ ์์ RRT ๊ธฐ๋ฐ ๊ฒฝ๋ก๋ณด๋ค ํ๊ท 53% ์งง์๊ณ , ๋์ผํ TrajOpt ์ ์ฉ ๋๋น๋ก๋ ์ฝ 10% ๊ฐ๋ ๋ ์งง์์ต๋๋ค. ์ด๋ cuRobo๊ฐ ์ต์ํ์ ์์ง์์ผ๋ก ๋ชฉํ์ ๋๋ฌํ๋ ํจ์จ์ ์ธ ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ธ๋ค๋ ์๋ฏธ์ ๋๋ค.
ํ์ง๋ง ๋ญ๋๋ญ๋ํด๋ ํ์ฅ์์ ์ค์ํ ๊ฒ์ ์ค์ ๋ก๋ด ๋์์ ์์ ์ฑ์ผ ๊ฒ์ ๋๋ค. cuRobo์ ์ต์-์ ํฌ ์ต์ ํ๋ ์ด ๋ถ๋ถ์์ ํฐ ๊ฐ์ ์ ๋ณด์๋๋ฐ, ์ด๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ฐ๊ตฌ์ง์ ์ค์ ๋ก๋ด์ผ๋ก ์คํ์ ์งํํ์ต๋๋ค. ์ ๋๋ฒ์ค๋ก๋ด(UR5e, UR10 ๋ชจ๋ธ) ๋ ๋๋ฅผ ์ค๋นํ์ฌ, ๊ฐ๊ฐ์ ์์ ๊ณต๊ฐ์ ์ฅ์ ๋ฌผ์ ๋๊ณ 7๊ฐ์ ์์ ๋ชฉํ ์์ธ๋ฅผ ์์๋๋ก ์ฐ๋ฌ์ ๋๋ฌํ๋ ๊ฒฝ๋ก๋ฅผ ์์ฑ, ๋ก๋ด์๊ฒ ์คํ์ํค๋ ํ ์คํธ๋ฅผ ํ์ต๋๋ค. ๋น๊ต๊ตฐ์ผ๋ก ์ต์-์ ํฌ ์ต์ ์ ๋(min-acc) ๊ฒฝ์ฐ(์ฆ ๊ฐ์๋๋ง ์ต์ํํ๊ณ ์ ํฌ๋ ๊ณ ๋ ค ์ ํ ๊ฒฝ์ฐ)์ ์ผ (min-jerk) ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ์ํํ์ฌ, ๋ก๋ด์ ๊ถค์ ์ถ์ข ์ค์ฐจ๋ฅผ ์ธก์ ํ์ต๋๋ค.
๊ทธ ๊ฒฐ๊ณผ, ์ ํฌ ์ต์ํ๊ฐ ์ผ์ง ๊ฒฝ์ฐ ๋ก๋ด์ ์ถ์ข ์ฑ๋ฅ์ด ๋์ ๋๊ฒ ํฅ์๋จ์ ํ์ธํ์ต๋๋ค. ๋ ๋ก๋ด ๋ชจ๋์์, ๊ด์ ์์น ์ค์ฐจ์ ์๋ ์ถ์ข ์ค์ฐจ๊ฐ ์ต์-์ ํฌ ๊ถค์ ์์ ๋ ๋ฎ์๊ณ , ํนํ UR10 ๊ฐ์ ๋น๊ต์ ํฌ๊ณ ๋ฌด๊ฑฐ์ด ๋ก๋ด์์๋ ์ฐจ์ด๊ฐ ํฌ๊ฒ ๋ํ๋ฌ์ต๋๋ค. UR10์ ๊ฒฝ์ฐ ์ต์-์ ํฌ ์ ์ฉ ์ ํ๊ท ์์น ์ค์ฐจ๊ฐ ์ฝ 0.0013 rad์์ง๋ง, ๋ฏธ์ ์ฉ ์์๋ 0.0025 rad๋ก ๋ ๋ฐฐ ๊ฐ๊น์ด ๋์ด๋, ๋ก๋ด ์์ฝ๋์ ๊ณต์ธ ์ ๋ฐ๋(์ฝ 0.0017 rad)๋ฅผ ๋์ด์๋ ์ค์ฐจ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฌด์๋ณด๋ค, ๊ฐ์๋ ์ต์ํ๋ง ํ ๊ฒฝ์ฐ ๊ถค์ ์์๋ถ์ ํฐ ์๋ ์ค์ฐจ/์์น ์ค์ฐจ ์คํ์ดํฌ๊ฐ ๊ด์ฐฐ๋์๋๋ฐ, ์ด๋ ๋ก๋ด์ด ์๊ฐ์ ์ผ๋ก ์ต๋ ๊ฐ์๋์ ๋๋ฌํ๋๋ก ๋ช ๋ น๋ฐ์์ ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฆ๊ฐ ๋ฐ์ํ์ง ๋ชปํด ์๊ธฐ๋ ์ค์ฐจ์์ต๋๋ค. ๋ฐ๋ฉด ์ ํฌ๋ฅผ ๊ฐ์ด ์ต์ํํ ๊ถค์ ์ ์ด๋ฐ์ ๊ฐ์๋๋ฅผ ์์ํ ๋์ด๋๋ก ๊ณํ๋์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์คํ์ดํฌ๊ฐ ์ฌ๋ผ์ก๊ณ , ์ ๋ฐ์ ์ผ๋ก ๋งค๋๋ฝ๊ฒ ๊ฐ์/๊ฐ์ํ์ฌ ๋ก๋ด์ด ๋ณด๋ค ์ ํํ ๋ฐ๋ผ๊ฐ ์ ์์์ต๋๋ค. ์ด ์คํ์, ์ต์-์ ํฌ ๊ธฐ์ค์ ๊ถค์ ์ด ๊ณ ์ ๋์์์์ ์ง๋์ด๋ ์ถ์ข ์ค์ฐจ๋ฅผ ์ค์ฌ ๋ก๋ด ์์ง์์ ์์ ์ฑ์ ๋์ฌ์ค๋ค๋ ๊ฒ์ ์ค์ ๋ก ์ ์ฆํ์ต๋๋ค. ์ด๋ฌํ ํจ๊ณผ ๋๋ถ์, cuRobo๊ฐ ์์ฑํ ๊ถค์ ์ ๋ก๋ด์ ๋ณด๋ผ ๋ ์ถ๊ฐ์ ์ธ ์๋ ๋ณด๊ฐ ์์ด๋ (32์์ ๊ถค์ ์ 10ms ๊ฐ๊ฒฉ์ผ๋ก ์ ํ ๋ณด๊ฐ๋ง ํ์ฌ) ๋ฌธ์ ์์ด ๊ตฌ๋ํ ์ ์์๊ณ , ์ฝ 35ํ ์ฐ์ ๋์ ์ํ์์๋ ์์ ํ๊ณ ์ ํํ ์์ง์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ค์๊ฐ์ฑ ์ธก๋ฉด์ ์ธ๊ธํ๋ฉด, cuRobo๋ ์ค์ ๋ก๋ด์์์๋ ๊ณํ ์๊ฐ์ ํ๊ท 100ms ์ด๋ด๋ก ์ธก์ ๋์ด ํ๋๋ ์ง์ฐ์ด ๊ฑฐ์ ๋ฌด์ํ ์์ค์์ด ํ์ธ๋์์ต๋๋ค. ์ฆ, ๋ชฉํ ์์ธ๋ง ์ฃผ์ด์ง๋ฉด 0.1์ด ๋ด์ ๊ฒฝ๋ก๊ฐ ๋์ค๊ณ , ๋ฐ๋ก ๋ก๋ด์ด ์์ง์ด๊ธฐ ์์ํ์ฌ ๊ณํ ์๋ฆฝ๋ถํฐ ์คํ ์๋ฃ๊น์ง ๋งค์ฐ ์งง์ ์ฌ์ดํด๋ก ๋์ ๊ฐ๋ฅํจ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ฐ์ ์ฉ ๋ก๋ด์ ๋น๋ฒํ ๊ฒฝ๋ก ์ฌ๊ณํ์ด๋, ์ธ๊ฐ-๋ก๋ด ์ํธ์์ฉ์์ ์ค์๊ฐ ๋ฐ์์ด ํ์ํ ์ํฉ์๋ ์ถฉ๋ถํ ๋์ํ ์ ์๋ ์์ค์ ๋๋ค.
2.5 ๊ตฌํ ๋์ด๋์ ์คํ์์ค ํ์ฉ
cuRobo๋ NVIDIA ์ฐ๊ตฌ์ง์ ์ํด ๊ฐ๋ฐ๋์์ผ๋ฉฐ, ์คํ์์ค๋ก ๊ณต๊ฐ๋์ด ๋๊ตฌ๋ ํ์ฉํ ์ ์๊ฒ ๋์ด ์์ต๋๋ค. ๊ณต์ ๊นํ๋ธ ์ ์ฅ์(NVlabs/curobo)์๋ ์ค์น ๋ฐฉ๋ฒ๊ณผ ์์ ๊ฐ ์ ๊ณต๋์ด ์๊ณ , 2025๋ 4์ ๊ธฐ์ค์ผ๋ก 1.1k ์ด์์ Star๋ฅผ ๋ฐ์ ์ ๋๋ก ๋ง์ ๊ด์ฌ์ ๋ชจ์ผ๊ณ ์์ต๋๋ค. C++/CUDA๋ก ์์ฑ๋ ํต์ฌ ์ฐ์ฐ ์ปค๋๋ค๊ณผ Python ์ธํฐํ์ด์ค๋ก ๊ตฌ์ฑ๋์ด ์์ด, Python ํ๊ฒฝ (์: ROS์ Python ๋ ธ๋ ๋ฑ)์์ ์์ฝ๊ฒ ๋ถ๋ฌ์ธ ์ ์์ผ๋ฉด์๋ ์๊ฐCriticalํ ๋ถ๋ถ์ GPU๋ก ๋์ํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌ์กฐ๋ ๋ชจ๋ํ๋์ด, ํ์ํ ๋ถ๋ถ๋ง ๋ผ์ด์ฐ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ ๋ฐฉํฅ/์ญ๋ฐฉํฅ ๊ธฐ๊ตฌํ, ์ถฉ๋ ๊ฒ์ฌ, MPPI ์ต์ ํ ๋ชจ๋ ๋ฑ์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ํธ์ถํ์ฌ ์ธ ์ ์๊ณ , ์ด๋ฅผ ์กฐํฉํ์ฌ ์์ฒด์ ์ธ ๋ชจ์ ํ๋๋๋ฅผ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค.
์ค์ ๋ก cuRobo๋ MoveIt๊ณผ ๊ฐ์ ๊ธฐ์กด ๋ก๋ด ๋ชจ์ ๊ณํ ํ๋ ์์ํฌ์ ์ฐ๋๋ ๊ณ ๋ ค๋์๋๋ฐ, Isaac ROS cuMotion์ด๋ผ๋ MoveIt ํ๋ฌ๊ทธ์ธ ํํ๋ก๋ ์ ๊ณต๋์ด ROS ํ๊ฒฝ์์ cuRobo์ ๊ณํ๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ง ์ด ์์ฉ ํจํค์ง๋ GPU๊ฐ ์๋ ์์คํ ์์๋ ๋์์ด ์ด๋ ค์ธ ์ ์์ผ๋ฏ๋ก (cuRobo ์์ฒด๊ฐ GPU ๊ฐ์์ ์ ์ ๋ก ์ค๊ณ), ROS๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ์๋ ์๋น๋์ GPU ํ๋ซํผ์์ ํ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
๊ตฌํ ๋์ด๋ ์ธก๋ฉด์์, cuRobo๊ฐ ์์ฒด ๊ฐ๋ฐํ GPU ์ปค๋๋ค์ ๋งค์ฐ ์ ๋ฌธ์ ์ธ ์ต์ ํ ๊ธฐ๋ฒ๋ค์ด ๋์๋์์ผ๋, ๋คํํ ์ต์ข ์ฌ์ฉ์ ์ ์ฅ์์๋ API๋ฅผ ํตํด ์ฌ์ฉํ๋ฉด ๋ด๋ถ ๊ตฌํ์ ๋ชฐ๋ผ๋ ๋ ์ ๋๋ก ์ถ์ํ๋์ด ์์ต๋๋ค. ํ์ง๋ง ์๋ก์ด ๋ก๋ด ๋ชจ๋ธ์ด๋ ์๋ก์ด ํํ์ ์ฅ์ ๋ฌผ ํ๊ฒฝ์ ์ ์ฉํ๋ ค๋ฉด, ํด๋น ๋ชจ๋ธ์ ๊ตฌ(sphere) ๊ทผ์ฌ ๋ชจ๋ธ์ ์์ฑํด์ผ ํ๋ ๋ฑ์ ์ถ๊ฐ ์์ ์ด ํ์ํฉ๋๋ค. ๋ ผ๋ฌธ์์ ์ธ๊ธ๋ ๋ฐ์ ๋ฐ๋ฅด๋ฉด, NVIDIA Isaac Sim ๋ฑ์ ํด์ ์ด์ฉํด ๋ก๋ด์ ๋ฉ์๋ฅผ ๋น ๋ฅด๊ฒ ๋ค์ค ๊ตฌ๋ก ์นํํด์ฃผ๋ ์ ํธ๋ฆฌํฐ๊ฐ ๊ฐ๋ฐ๋์๊ณ , ์ด๋ฅผ ํตํด ๋ง์ ๋ก๋ด์ ๊ตฌ ๋ชจ๋ธ์ ์์ฑํด๋์๋ค๊ณ ํฉ๋๋ค. ์ฆ, ํ์ค์ ์ผ๋ก ์ฐ๊ตฌ์๋ค์ด ์์ฃผ ์ฐ๋ ๋ก๋ด(Franka Panda, UR ์๋ฆฌ์ฆ, Kinova Jaco ๋ฑ)์ ์ด๋ฏธ sphere ๋ชจ๋ธ์ด ์ค๋น๋์ด ์์ด ๊ณง๋ฐ๋ก ํ์ฉ ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค. ๋ง์ฝ ์ฌ์ฉ์๊ฐ ์ง์ ๋ชจ๋ธ์ ์ถ๊ฐํด์ผ ํ๋ค๋ฉด ์ด ๊ณผ์ ์ด ์กฐ๊ธ ๋ฒ๊ฑฐ๋ก์ธ ์ ์์ง๋ง, ์ผํ์ฑ ์์ ์ด๋ฉฐ ์ดํ์๋ ์ถฉ๋ ๊ฒ์ฌ๊ฐ ์๋ ๋นจ๋ผ์ง๋ ์ด์ ์ด ํฌ๋ฏ๋ก ๊ฐ์ํ ๋งํฉ๋๋ค.
์ ๋ฆฌํ๋ฉด, cuRobo๋ ์ต์ GPU ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ผ๋ก ๋ฌด์ฅํ ์ ๋ฌธ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด์ง๋ง, ์ด๋ฅผ ์ ํ๋ ์ฐ๊ตฌ์๋ค์ ์ด๋ฏธ ๊ตฌํ๋ ํจ์๋ฅผ ๋ถ๋ฌ์จ์ ํจ๊ณผ๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค. ๋ ๋์๊ฐ ๊ด์ฌ ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด ์คํ์์ค ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌํ์ฌ ๊ธฐ๋ฅ์ ๊ฐ์ ํ๊ฑฐ๋, cuRobo๋ฅผ ์์ ์ ์ฐ๊ตฌ์ ๋ง๊ฒ ํ์ฅํด๋ณผ ์๋ ์์ ๊ฒ์ ๋๋ค. ์ด๋ฏธ cuRobo์ ์คํ์์คํ๋ก ์ธํด ์ปดํจํฐ ์ํคํ ์ฒ ์ฐ๊ตฌ์๋ค์ด ์ ์ ๋ฐ ์ฐ์ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ณ๋ชฉ์ ์ค์ด๋ ์คํ์ ํ๋ค๊ฑฐ๋, ๋ก๋ณดํฑ์ค ์ธ ๋ถ์ผ ์ ๋ฌธ๊ฐ๋ค์ด ์ด ํ๋ ์์ํฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ ์ํํด๋ณผ ์ ์๊ฒ ๋๋ ๋ฑ ๊ธ์ ์ ์ธ ํ๊ธํจ๊ณผ๊ฐ ๋ณด๊ณ ๋๊ณ ์์ต๋๋ค.
2.6 ๊ธฐ์กด ๋ชจ์ ์์ฑ ๊ธฐ๋ฒ๊ณผ์ ๋น๊ต
cuRobo์ ์ฑ๋ฅ๊ณผ ์ ๊ทผ๋ฒ์ ์ดํดํ๊ธฐ ์ํด, ๊ธฐ์กด์ ๋ํ์ ์ธ ๋ก๋ด ๋ชจ์ ๊ณํ/์์ฑ ๊ธฐ๋ฒ๋ค๊ณผ ๋น๊ตํด๋ณด๊ฒ ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ก๋ด ๋ชจ์ ๊ณํ ๋ถ์ผ์์๋ ์ํ๋ง ๊ธฐ๋ฐ ๊ธฐ๋ฒ(์: RRT, PRM)๊ณผ ์ต์ ํ ๊ธฐ๋ฐ ๊ธฐ๋ฒ(์: CHOMP, TrajOpt, STOMP ๋ฑ), ๊ทธ๋ฆฌ๊ณ ์ค์๊ฐ ํ๋กํ์ผ ์์ฑ๊ธฐ(์: Ruckig) ๋ฑ์ด ํผ์ฌํ์ฌ ์ฌ์ฉ๋์ด ์์ต๋๋ค. ๊ฐ๊ฐ์ ํน์ฑ๊ณผ ํ๊ณ๋ฅผ ์ง์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ํ๋ง ๊ธฐ๋ฐ ๊ธฐ๋ฒ (์: RRT, BiRRT, OMPL ๋ฑ): ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ก๋ด์ ๊ตฌ์ฑ๊ณต๊ฐ(C-space)์ ๋ฌด์์๋ก ์ํ๋งํ๋ฉฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๋ํ์ ์ผ๋ก RRT (Rapidly-exploring Random Tree) ์๊ณ ๋ฆฌ์ฆ์ ์ ์ญ์ ์ธ ๊ฒฝ๋ก ํ์์ ๊ฐ์ ์ด ์์ด ์ข์ ๊ณต๊ฐ์์๋ ํ์ถ ๊ฒฝ๋ก๋ฅผ ์ ์ฐพ์๋ ๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฝ๋ก ํ์ง์ด ๋ค์ญ๋ ์ญํ๊ณ , ์ต๋จ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํ์ง ์์ผ๋ฉฐ, ํ๋ฒ ์ฐพ์ ๊ฒฝ๋ก๋ฅผ ๋ถ๋๋ฝ๊ฒ ๋ค๋ฌ๋ ๋ณ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. Tesseract ๋ฑ์ ํ๋ ์์ํฌ์์ RRT-Connect ๊ฐ์ ๋ฐฉ๋ฒ์ ๊ธฐํํ์ ํ๋๋(geometric planner)๋ก ์ฐ๊ณ , ๊ฒฐ๊ณผ๋ฅผ TrajOpt ์ต์ ํ๋ก ๋ค๋ฌ๋ ์์ผ๋ก ์ฌ์ฉํ๋๋ฐ, cuRobo ๋ํ cuRobo-GP๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฒด RRT ์ ์ฌ ํ๋๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ค๋ง cuRobo-GP๋ GPU ๋ณ๋ ฌํ๋ฅผ ํตํด ํ ๋ฒ์ ๋ง์ ๋ ธ๋ ํ์ฅ์ ๋์์ ์ํํ๋ฏ๋ก ์ผ๋ฐ RRT๋ณด๋ค 100๋ฐฐ ์ด์ ๋น ๋ฅด๊ฒ ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ ๋๋ค. ์ค์ ๋ก OMPL์ RRTConnect์ ๋น๊ต ์ ํ๊ท 101๋ฐฐ ์๋ ํฅ์์ ๋ณด์๊ณ , ํนํ ์ด๋ ค์ด ๋ฌธ์ ๊ตฌ๊ฐ์์ 580๋ฐฐ๊น์ง๋ ์๋ ์ฐจ๊ฐ ๋ฒ์ด์ก์ต๋๋ค. ์ด๋ CPU ๊ธฐ๋ฐ ์ํ๋ง ๊ธฐ๋ฒ์ด ๊ฐ์ง ์๋ฐ์ ์๋ ์ ํ ์ฆ๊ฐ(ํ๋์ ๊ฒฝ๋ก ์ ์ฉ ๊ฒ์ฌ) ๊ณผ์ ์, cuRobo๋ ๋ณ๋ ฌ ๊ทธ๋ํ ํ์ฅ์ผ๋ก ํ๊ธฐ์ ์ผ๋ก ๋ฐ๊พผ ๋๋ถ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ ์ํ๋ง ๊ฒฝ๋ก๋ ์ต์ ํ๋ ๊ฒฝ๋ก์ ๋นํด ๊ธธ๊ณ ๋นํจ์จ์ ์ผ ์ ์์ด, cuRobo์์๋ ์ด ๊ฒฐ๊ณผ๋ฅผ ์ต์ข ์๋ฃจ์ ์ผ๋ก ๋ฐ๋ก ์ฐ๊ธฐ๋ณด๋ค๋ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ด๊ธฐ ์๋๋ก ํ์ฉํ๊ฑฐ๋, ์ต์ ํ๊ฐ ์คํจํ ๊ฒฝ์ฐ ๋๋น์ฑ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
์ต์ ํ ๊ธฐ๋ฐ ๊ธฐ๋ฒ (์: CHOMP, TrajOpt ๋ฑ): ์ด๊ธฐ ๊ฒฝ๋ก๊ฐ ์ฃผ์ด์ง๋ฉด ๊ทธ ๊ฒฝ๋ก๋ฅผ ์ ์ง์ ์ผ๋ก ๊ฐ์ ํ์ฌ ์ถฉ๋ ์๊ณ ๋งค๋๋ฌ์ด ๊ฒฝ๋ก๋ก ๋ง๋๋ ๋ฐฉ๋ฒ๋ค์ ๋๋ค. CHOMP(Covariant Hamiltonian Optimization for Motion Planning) ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ๋ก๋ฅผ ์๋ฆฌ์ ์ผ๋ก ๋ฏธ๋ถ๊ฐ๋ฅํ ํจ์๋ก ๋ณด๊ณ ๊ฒฝ์ฌํ๊ฐ(gradient descent)์ ํตํด ๋น์ฉ์ ์ค์ด๋ ๋ฐฉ์์ ์ต์ด๋ก ๋ณด์ฌ์ค ๊ธฐ๋ฒ์ ๋๋ค. ํ์ง๋ง CHOMP๋ CPU ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, ๋ณต์กํ ํ๊ฒฝ์์๋ ์ ์ด ์ด์์ ๊ณ์ฐ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๊ณ , ์ง์ญ ์ต์ ํด์ ๋น ์ง๋ฉด ์คํจ์จ์ด ๋๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ์ดํ ๋์จ TrajOpt(Trajectory Optimization)์ CHOMP์ ๋น์ทํ ๋ชฉ์ ์ ๊ฐ๋, ์ ์ฝ์กฐ๊ฑด์ ๋ค๋ฃจ๊ธฐ ์ํด ์ด์ฐจ ํ๋ก๊ทธ๋๋ฐ(QP) ํ์ด๋ฅผ ๋งค ๋ฐ๋ณต๋ง๋ค ์ํํ๋ Sequential Convex Optimization ์ ๊ทผ์ ์ฌ์ฉํฉ๋๋ค. TrajOpt๋ CHOMP๋ณด๋ค ์๋ ด์ด ๋น ๋ฅด๊ณ ์ ์ฝ ๋ค๋ฃจ๊ธฐ๊ฐ ์ฌ์ ์ฌ๋ฌ ํ๋ ์์ํฌ์ ํตํฉ๋์์ง๋ง, ์ฌ์ ํ ์ถฉ๋ ์ฒดํฌ๋ ๋ณต์กํ ํ๊ฒฝ์์์ ์ด๊ธฐ๊ฐ ์์กด์ฑ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. cuRobo๋ TrajOpt๊ฐ Tesseract์ ํตํฉ๋ ๋ฒ์ ๊ณผ ์ง์ ๋น๊ต ์คํ์ ํ๋๋ฐ, ํ๊ท 87๋ฐฐ ๋น ๋ฅด๊ณ , ์ต์ ์ ๊ฒฝ์ฐ 145๋ฐฐ๊น์ง ๋น ๋ฅด๊ฒ ๊ฒฝ๋ก ์ต์ ํ๋ฅผ ์๋ฃํ์ต๋๋ค. ์๋ฅผ ๋ค์ด TrajOpt๊ฐ 1.79์ด ๊ฑธ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ cuRobo๋ ๋จ 0.01์ด(10ms) ๋ง์ ํ์ด๋ธ ์ฌ๋ก๋ ์์์ต๋๋ค. ๊ฒ๋ค๊ฐ TrajOpt๋ ๊ฐ ๋ฌธ์ ๋ฅผ ๋จ์ผ ์๋๋ก ํ๊ธฐ์ ์คํจํ๋ฉด ๋ค๋ฅธ ์๋๋ก ์ฌ์์ํด์ผ ํ์ง๋ง, cuRobo๋ ์ ์ด์ ๋ค์ค ์๋๋ฅผ ๋ณ๋ ฌ๋ก ์๋ํ์ฌ ํ ๋ฒ์ ์ฑ๊ณต ํ๋ฅ ์ ๋์ด๋ฏ๋ก ๋ฐ๋ณต ์ฌ์๋ ํ์๋ ์ ์ต๋๋คใ. ์ด๋ฌํ ์ด์ ๋ก ์ ์ฒด ๋ชจ์ ํ๋๋ ํ์ดํ๋ผ์ธ**์ผ๋ก ๋ณด๋ฉด cuRobo๊ฐ TrajOpt ๊ธฐ๋ฐ ํ๋๋๋ณด๋ค ํจ์ฌ ๊ฒฌ๊ณ ํ๊ณ ๋น ๋ฆ ๋๋ค (์คํ์์ TrajOpt+RRT ๋ฐฉ์์ 60์ด๊น์ง ๋ฐ๋ณต ์ฌ์๋ํ๊ฒ ํ์์๋ cuRobo๋ณด๋ค ์ฑ๊ณต๋ฅ ๊ณผ ํ์ง์ด ๋ฎ์์ต๋๋ค).
์ค์๊ฐ ์๋ ํ๋กํ์ผ๋ฌ (์: Ruckig): ํํธ, Ruckig ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฐ์ ํ์ฅ์์ ๊ฐ๊ด๋ฐ๋ ์ค์๊ฐ ๋ชจ์ ํ๋กํ์ผ ์์ฑ๊ธฐ์ ๋๋ค. ์ด๊ฒ์ ๊ฒฝ๋ก ์์ฒด๋ฅผ ์ฐพ๊ธฐ๋ณด๋ค๋, ์ด๋ฏธ ์ ํด์ง ๊ฒฝ๋ก(๋๋ ๋จ์ํ ์์-๋ชฉํ ๋ ์ ์ฌ์ด)๋ฅผ ์ผ๋ง๋ ๋น ๋ฅด๊ฒ/๋ถ๋๋ฝ๊ฒ ์ด๋ํ ์ง ์๋-๊ฐ์๋-์ ํฌ ํ๊ณ ๋ด ์ต์ ์๊ฐ์ ๊ณ์ฐํด์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. Ruckig๋ ์ ๋ ฅ์ผ๋ก ์์ ์ํ(์์น,์๋,๊ฐ์๋)์ ๋ชฉํ ์ํ(์์น,์๋,๊ฐ์๋)๋ฅผ ์ฃผ๋ฉด, ์ด๋ ์๊ฐ ์ต์ํ๋ฅผ ๋ชฉํ๋ก ํ๋ฉด์๋ ์ง์ ๋ ์ต๋ ๊ฐ์/์ ํฌ ์ ์ฝ์ ๋ง์กฑํ๋ ์๋ ํ๋กํ์ผ์ ์ถ๋ ฅํด์ค๋๋ค. cuRobo์ Ruckig๋ฅผ ์ง์ ๋น๊ตํ๋ ๊ฒ์ ์ ํ-์ค๋ ์ง ๊ฒฉ์ด์ง๋ง, โjerk ์ ํโ์ ๋ค๋ฃฌ๋ค๋ ๊ณตํต์ ์ด ์์ด ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค. Ruckig์ ์ฅ์ ์ ๋ง์ดํฌ๋ก์ด ๋จ์์ ๋น ๋ฅธ ๊ณ์ฐ์ผ๋ก ๋ก๋ด ์ ์ด ๋ฃจํ์ ๋ฐ๋ก ๋ฃ์ ์ ์๋ค๋ ์ ์ด์ง๋ง, ๊ฒฝ๋ก ์์ ์ฅ์ ๋ฌผ์ ์ ํ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฃผ์ด์ง ๊ฒฝ๋ก ์์ฒด๊ฐ ์ถฉ๋ ์๋ ๊ฒ์ด์ด์ผ ํฉ๋๋ค. cuRobo๋ ํจ์ฌ ๋ณต์กํ ๋ฌธ์ (๊ฒฝ๋ก ํ์+์๋ ํ๋กํ์ผ ๋์ ๊ฒฐ์ )๋ฅผ ๋ค๋ฃจ๋ฏ๋ก ์๊ฐ์ ์ฝ๊ฐ ๋ ๋ค์ง๋ง, ๊ทธ ๋์ ์ฅ์ ๋ฌผ ํํผ๋ฅผ ํฌํจํ ์ ์ญ ๊ณํ์ ํฉ๋๋ค. ๋ ผ๋ฌธ์์๋ Ruckig๊ฐ ๋ค๋ฃฐ ์ ์๋ ์ค๊ฐ ๊ฒฝ์ ์ ์ด ์๋ ๊ฒฝ์ฐ(waypoints ์๋๋ฆฌ์ค)์ ๋ํด ํ๊ฐํ๋ ค ํ์ผ๋, Ruckig ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋น ๊ธฐ๋ฅ์ ๊ณต๊ฐ ๋ผ์ด์ ์ค๋ก ์ ๊ทผํ๊ธฐ ์ด๋ ค์ ๋น๊ตํ์ง ๋ชปํ๋ค๊ณ ๋ ์ธ๊ธํฉ๋๋ค. ์ด๋ Ruckig๊ฐ ์ฃผ๋ก 1ํ ๊ตฌ๊ฐ(point-to-point) ๋ชจ์ ์ ์ต์ ํ๋์ด ์๊ณ , ์ฌ๋ฌ ๊ตฌ๊ฐ์ ์๋ ๊ฒ์ ์ ํ์ด ์๋ค๋ ์๋ฏธ๋ก ํด์๋ฉ๋๋ค. ์์ฝํ๋ฉด, Ruckig = ๋์ ์ ์ฝ์ ๋ง์กฑํ๋ ์ธ๋ถ ํ๋กํ์ผ๋ฌ, cuRobo = ์ ์ญ ๊ฒฝ๋ก+ํ๋กํ์ผ ํตํฉ ์๋ฃจ์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ์ค์ ์ ์ฉ์์๋, cuRobo๋ก ํฐ ๊ทธ๋ฆผ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ๋ค Ruckig๋ก ๋ง์ง๋ง ๋ฏธ์ธ์กฐ์ ์ ํ๋ ์กฐํฉ๋ ์๊ฐํด๋ณผ ์ ์์ผ๋, cuRobo ์์ฒด๋ jerk ์ต์ ํ๋ฅผ ํฌํจํ๋ฏ๋ก ๋ณ๋ ์กฐ์ ์์ด ๋ฐ๋ก ์คํ ๊ฐ๋ฅํ ์์ค์ ๊ฒฐ๊ณผ๋ฅผ ์ค๋๋ค.
์ถฉ๋ ๊ฒ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (์: FCL ๋ฑ): ๋ก๋ด ๊ฒฝ๋ก ๊ณํ์ ํ ์ถ์ ๋ด๋นํ๋ ๊ฒ์ด ์ถฉ๋ ๊ฒ์ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์์ ์ค๋ช ํ FCL์ ๋๋ฆฌ ์ฐ์ด๋ ์ถฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ก๋ด์ ๋งํฌ์ ์ฅ์ ๋ฌผ์ ๋ฉ์ ํ์ ๊ฐ ์ต๊ทผ์ ๊ฑฐ๋ฆฌ๋ ์ถฉ๋ ์ฌ๋ถ๋ฅผ ๋น ๋ฅด๊ฒ ๊ณ์ฐํด์ฃผ๋ ๋๊ตฌ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ณต์กํ ์ฅ๋ฉด์์๋ ์์ฒ - ์๋ง ์์ ์ผ๊ฐํ ๊ฐ ์ถฉ๋์ ๊ณ์ฐํด์ผ ํ๋ฏ๋ก GPU ์์ด CPU ๋จ์ผ ์ค๋ ๋๋ก๋ ์๊ฐ์ด ๊ฝค ์์๋ฉ๋๋ค. cuRobo๋ FCL ๋์ ์์ฒด GPU ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ก๋ด-ํ๊ฒฝ ์ํธ์์ฉ์ ์ํ์ ํจ์(๊ฑฐ๋ฆฌ ํจ์) ํํ์ ๋น์ฉ์ผ๋ก ํตํฉํ์ต๋๋ค. ๊ตฌ๋ก ๊ทผ์ฌํ ๋ก๋ด ๋ชจ๋ธ ๋๋ถ์ ์ฐ์ ์ถฉ๋ ๋น์ฉ์ ๊ทธ๋๋์ธํธ๊น์ง ๊ณ์ฐ ๊ฐ๋ฅํ ์ ์ ๊ธฐ์กด ์ถฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ด์ง ์ถฉ๋ ์ฌ๋ถ๋ง ์ฒดํฌํ๋ ๊ฒ๊ณผ ๋์กฐ์ ์ ๋๋ค. ๋๋ถ์ cuRobo์ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ถฉ๋ ํํผ ๊ทธ๋๋์ธํธ๋ฅผ ๋ฐ๋ผ ๊ฒฝ๋ก๋ฅผ ๋ฐ์ด๋ผ ์ ์๊ณ , ์ด๋ CHOMP ๋ฑ์ ์ฒ ํ๊ณผ ์ ์ฌํ๋ ํจ์ฌ ๋ณ๋ ฌํ๋์ด ๋นจ๋ผ์ง ํํ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก cuRobo์ ์ถฉ๋ ๊ฒ์ฌ๋ ๋์ผํ ์ํฉ์์ ๊ธฐ์กด PyBullet ์ถฉ๋ ์ฒดํฌ๋ณด๋ค ์ต๋ 16000๋ฐฐ ๋น ๋ฅด๋ฉฐ, ์๋ง ๊ฐ์ ํ๋ณด ์์ธ๋ฅผ ๋์์ ํ๊ฐํ ์๋ ์์ด ํฅํ ํ์ต๊ธฐ๋ฐ ๋ชจ์ ์์ฑ์ด๋ ๋ชฌํ ์นด๋ฅผ๋ก ํธ๋ฆฌ ํ์ ๋ฑ์์ ์ถฉ๋ ์ฒดํฌ ๋ณ๋ชฉ์ ์ ๊ฑฐํ๋ ๋ฐ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
์ข ํฉํ๋ฉด, cuRobo๋ ๊ธฐ์กด ๋ฐฉ๋ฒ๋ค์ ์ฅ์ ์ ํก์ํ๋ ๋จ์ ์ ๊ณผ๊ฐํ ๊ทน๋ณตํ ์ฐจ์ธ๋ ์ ๊ทผ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ํ๋ง ๊ธฐ๋ฒ์ ์ ์ญ ํ์ ๋ฅ๋ ฅ์ ๋์ ํ๋ ๋ณ๋ ฌํ๋ก ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ์ต์ ํ ๊ธฐ๋ฒ์ ๋ถ๋๋ฌ์ด ๊ฒฝ๋ก ์์ฑ ๋ฅ๋ ฅ์ ๋ฐ์ ์์ผ ์ ํฌ๊น์ง ์ต์ํํ์ผ๋ฉฐ, ์ค์๊ฐ ํ๋กํ์ผ๋ฌ ์์ค์ ์๋ ์ ์ฝ ๋ง์กฑ ๋ฅ๋ ฅ์ ํตํฉํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ชจ๋๋ฅผ ๊ฐ๋ฅ์ผ ํ ๊ฒ์ด ๋๊ท๋ชจ ๋ณ๋ ฌ ์ปดํจํ ํ์ฉ์ด๋ผ๋ ์ ์์, cuRobo๋ ๋ก๋ด ๋ชจ์ ๊ณํ์ ๋ณ๋ ฌํ ํจ๋ฌ๋ค์์ ์ฑ๊ณต์ ์ผ๋ก ์ด์ํ ์ฌ๋ก๋ก ํ๊ฐ๋ฉ๋๋ค.
2.7 ์ฃผ์ ์คํ ๊ฒฐ๊ณผ ๋ฐ ํ์ฉ ์๋๋ฆฌ์ค
cuRobo ๋ ผ๋ฌธ์์๋ ๋ค์ํ ํ๊ฒฝ์์์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ํตํด ๊ทธ ์ ์ฉํ ํ์ฉ ์๋๋ฆฌ์ค๋ค์ ์ ์ํฉ๋๋ค. MotionBenchMaker๋ผ๋ ๋ฒค์น๋งํฌ ๋ฐ์ดํฐ์ ์ ํ์ฉํ ์คํ์์, ์ฌ๋ฌ ๊ฐ์ง ๋ณต์กํ ์ฅ๋ฉด(scene)๋ค์ด ์ํ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ์ํ cage ์์์ ํ ๋ป๊ธฐ, ์ ๋ฐ(shelf) ์ฌ์ด๋ก ๋ฌผ์ฒด ์ง๊ธฐ, ํ ์ด๋ธ ์ฃผ์๋ก ๋ฌผ์ฒด ์ฎ๊ธฐ๊ธฐ ๋ฑ, ์ฐ์ ๋ฐ ์๋น์ค ๋ก๋ด์์ ํํ ๋ง์ฃผ์น๋ ์ํฉ๋ค์ด ํฌํจ๋์์ฃ . ์ด๋ฌํ 12๊ฐ์ง ์ ํ์ ํ๊ฒฝ์ ๋ํด Franka Panda ๋ก๋ด์ด ์ถฉ๋ ์์ด ๋ชฉํ ์์น๋ก ํ์ ์์ง์ด๋ ๋ฌธ์ ๋ค์ด ์์ฑ๋์๊ณ , cuRobo๋ ๋ชจ๋ ํ๊ฒฝ์์ ๊ณ ๋ฅด๊ฒ ๋์ ์ฑ๊ณต๋ฅ ๊ณผ ๋น ๋ฅธ ๊ณํ ์๊ฐ์ ๋ณด์์ต๋๋ค.
ํนํ ๋ณต์กํ ์ฅ์ ๋ฌผ ๋ฐ์ง ํ๊ฒฝ์์ cuRobo์ ๊ฐ์ ์ด ๋๋๋ฌ์ก๋๋ฐ, ์ด๋ ๋ณ๋ ฌ ๋ค์ค ์๋ ์ ๊ทผ ๋๋ถ์ ๋๋ค. ์๋ฅผ ๋ค์ด โ๊ณตโ ๋ชจ์ ์ฅ์ ๋ฌผ์ด ๊ฐ๋ํ 3์ฐจ์ ๊ณต๊ฐ์ด๋ ๋ฏธ๋ก ํํ์ ์ฅ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ, ์ ํต์ ์ต์ ํ ๋ฐฉ๋ฒ์ ์ด๊ธฐ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ฝ๊ฒ ์ถฉ๋ ์ง์ญ์์ ๋ชป ๋น ์ ธ๋์ค๊ณ ์คํจํ ์ ์์ง๋ง, cuRobo๋ ์์ญ ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ๋์์ ์๋ํ๋ฉด์ ํ๋๋ผ๋ ๋ซ๋ฆฌ๋ฉด ๊ณง๋ฐ๋ก ์ฐพ์๋ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐพ์ ๊ฒฝ๋ก๋ ๋ค์ ์ต์ ํ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ ๋์ฑ ๋ค๋ฌ์ด์ง๊ธฐ ๋๋ฌธ์, ์ฒ์์๋ ๊ตฌ๋ถ๊ตฌ๋ถํ๋ ์ํ๋ง ๊ฒฝ๋ก๊ฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋งค์ฐ ๋งค๋๋ฝ๊ณ ์งง์ ๊ฒฝ๋ก๋ก ๊ฐ์ ๋ฉ๋๋ค.
๋ ํ๋์ ์๋๋ฆฌ์ค๋ ๋ค์ค ๋ชฉํ ์์ฐจ ๋ฌ์ฑ(Task Sequencing) ๋ฌธ์ ์ ๋๋ค. ์ฐ์ ํ์ฅ์์ ๋ก๋ด์ ์ข ์ข ์ฌ๋ฌ ์ง์ ์ ์์ ์์ด ์ฃผ์ด์ง๊ณ ์ต์ ๊ฒฝ๋ก๋ก ์ํํด์ผ ํ๋๋ฐ, cuRobo๋ ๊ทธ๋ฐ ๋ฌธ์ ์ ๋ถ๋ถ ๊ฒฝ๋ก(point-to-point)๋ค์ ๋น ๋ฅด๊ฒ ํด๊ฒฐํด์ค ์ ์์ต๋๋ค. ์์ปจ๋ 10๊ฐ์ ํฝ์ ํฌ์ธํธ๋ฅผ ์ต์ ์์๋ก ๋ฐฉ๋ฌธํ๋ ๋ฌธ์ ๋ฅผ ํ ๋, ๊ธฐ์กด์๋ ๊ฐ ๊ตฌ๊ฐ ๊ฒฝ๋ก๋ฅผ ๋๋ฆฐ ๋ชจ์ ํ๋๋๋ก ํ์ด์ผ ํ์ง๋ง, cuRobo๋ฅผ ์ฐ๋ฉด ๋ชจ๋ ๊ตฌ๊ฐ ๊ฒฝ๋ก ๋น์ฉ์ ์ ์ํ ๊ณ์ฐํด๋ณผ ์ ์์ผ๋ฏ๋ก, ์์ ๋ ๋ฒจ์์ ์ต์ ์์ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์์ํด์ง๋๋ค. ๋ ผ๋ฌธ์์๋ ์ด๋ฌํ ์์ ์ค์ผ์ค๋ง์ด๋ ๊ฒฝ๋ก ์ต์ ํ(์: Traveling Salesman Problem ๋ณํ)์ cuRobo๊ฐ ๊ธฐ์ฌํ ์ ์์์ ์ ์ํ๊ณ ์์ต๋๋ค.
ํ ์ค์๊ฐ ์ ์ด ์ชฝ ํ์ฉ์ผ๋ก๋, ์ผ์ ํผ๋๋ฐฑ์ ํตํ ๋์ ์ฌ๊ณํ์์ ์์ฉ์ด ์์ต๋๋ค. ๋น๋ก ํ์ฌ cuRobo ์์ฒด๋ ๋ถ๋ถ ๊ด์ฐฐ ๋ฌธ์ (์ค์๊ฐ์ผ๋ก ๋ฐ๋๋ ํ๊ฒฝ ์ธ์)์ ๋์ํ๋ ๋ก์ง์ ์์ง๋ง, ๊ทธ ๊ณ ์์ฑ ๋๋ถ์ ์ผ์๋ก ์๋ก์ด ์ฅ์ ๋ฌผ์ ๊ฐ์งํ ๋๋ง๋ค ๋น ๋ฅด๊ฒ ์ฌ๊ณํ์ ์ํํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ํ ํํผ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ก๋ด ํ ์์ ์ค ์ฌ๋์ด ์์ ๋ฃ๋ ๋ฑ ๋๋ฐ ์ํฉ์ด ์๊ธฐ๋ฉด, cuRobo๋ก 50ms ๋ด ์ ์์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ฆ๊ฐ ๋ก๋ด ์์ง์์ ์์ ํ๋ ํํ๋ก ์ฌ์ฉํ ์ ์์ ๊ฒ์ ๋๋ค. ์์ ํ Reactive Planning์ ๋ํด์๋ ์ฌ์ ํ ํ์ ์ ์ผ๋ก ๋์ ์ด ๋จ์์์ง๋ง (cuRobo๋ 98% ๋์ด๋ ์ผ์ด์ค๊ฐ 0.26์ด ๊ฑธ๋ ธ๋ฏ ์ต์ ๊ฒฝ์ฐ ์๋ฐฑ ms - 1์ด ์์ค๊น์ง ๊ฑธ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์, ์๊ฒฉํ ์ค์๊ฐ ๊ณ ์ ์ฃผ๊ธฐ์๋ ์ถ๊ฐ ์ฐ๊ตฌ ํ์), ์ ์ง์ ์ผ๋ก ๊ฐ์ ํ์ฌ ํฅํ ์ ๋ฐ๋ฆฌ์ด ๋ด ๊ฒฝ๋ก ์ ๋ฐ์ดํธ๋ ๊ฟ๊ฟ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฐ์ cuRobo์ ๋ณ๋ ฌ IK๋ ๋ก๋ด ๊ฐ์์ฑ ์์ญ ๋ถ์ ๋ฑ์ ๋ฐ๋ก ํ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ๋ ผ๋ฌธ์์๋ 3D ๊ณต๊ฐ ๊ฒฉ์์์ ์์ ์์ธ 500๊ฐ์ ๋ํด cuRobo IK๋ฅผ ๋ณ๋ ฌ ์คํํ์ฌ, ํด๋น ์์ธ์ ๋๋ฌ ๊ฐ๋ฅํ์ง ์ฌ๋ถ(์ด๋ก์/๋นจ๊ฐ์ ๊ตฌ์ฒด๋ก ํ์)๋ฅผ 15Hz๋ก ์๊ฐํํ๋ ์์๋ฅผ ๋ณด์์ต๋๋ค. ์ด๋ ๋ก๋ด์ ์์ ๋ฒ์๋ ํน์ ์์น ์ ๊ทผ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ณ์ฐํด์ฃผ๋ ์ ์ฉํ ๋๊ตฌ๋ก ์ฐ์ผ ์ ์์ต๋๋ค. ๋ํ cuRobo์ ๋น ๋ฅธ ์ถฉ๋ IK๋ ๊ธฐ์กด์ ์ ์ด ๊ฑธ๋ฆฌ๋ ์ํ ๊ธฐ๋ฐ ์ถฉ๋ํํผ IK๋ฅผ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๊ฐ์ํ์๊ธฐ์, ์์ผ๋ก ๋ค๊ด์ ๋ก๋ด์ ์์ธ ์ ์ฝ ๋ฌธ์ (์: ๋์์ ์ฌ๋ฌ ๋ก๋ด ๋ฐฐ์น ์ต์ ํ) ๋ฑ์๋ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
๋ง์ง๋ง์ผ๋ก, cuRobo๊ฐ ์ฌ๋ฌ ๋ก๋ด ํ๋ซํผ์ ์ด์๋ ์ฌ๋ก๋ ์๊ฐ๋ฉ๋๋ค. ์ฐ๊ตฌ์ง์ cuRobo๋ฅผ Franka, UR ๋ฑ ์ธ์๋ Nvidia Isaac ์๋ฎฌ๋ ์ดํฐ ์์ Kinova Jaco ๋ก๋ดํ, Allegro ์ ๋ฑ์๋ ์ ์ฉํด๋ณด์๊ณ , ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ์ด ๋ก๋ด ๊ธฐ๊ตฌํ๋ง ๋ง์ถฐ์ฃผ๋ฉด ๊ณตํต์ผ๋ก ๋์ํจ์ ํ์ธํ์ต๋๋ค. ๋ฐ๋ผ์ ํน์ ๋ก๋ด์ ํ๋์ฝ๋ฉ๋ ์๋ฃจ์ ์ด ์๋๋ฉฐ, ๋ฒ์ฉ ๋ก๋ด ๋ชจ์ ๊ณํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์ ํ์ฉํ ์ ์์์ ๋ณด์ฌ์ค๋๋ค.
2.8 ๊ฒฐ๋ก : cuRobo์ ์ฅ์ ๊ณผ ํ๊ณ, ํฅํ ๋ฐ์ ๋ฐฉํฅ
cuRobo๋ ๋ก๋ด ๋ชจ์ ์์ฑ ๋ฌธ์ ์ ๋ณ๋ ฌํ์ GPU ๊ฐ์์ด๋ผ๋ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ๋ฅผ ๋์ ํจ์ผ๋ก์จ, ์๋, ์ฑ๊ณต๋ฅ , ๊ฒฝ๋ก ํ์ง ๋ชจ๋ ๋ฉด์์ ์๋ก์ด ํ์ค์ ์ ์ํ ์๋ฃจ์ ์ ๋๋ค. ์์ฝํ๋ฉด, cuRobo์ ์ฃผ์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ๊ธฐ์ ์ธ ์๋: ๋ณต์กํ ์ถฉ๋ํํผ ๊ฒฝ๋ก๋ ๋ฐ๋ฆฌ์ด ๋จ์์ ์ฐพ์๋ด๋ฉฐ, ๊ธฐ์กด SOTA ๋ฐฉ๋ฒ ๋๋น ์์ญ ๋ฐฐ - ์๋ฐฑ ๋ฐฐ ๋น ๋ฆ ๋๋ค. ์ด๋ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๊ณ ๋น๋ ์ฌ๊ณํ์ ํ์์ ์ธ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋์ ์ ๋ขฐ๋: ๋ค์ค ์๋ ๋ณ๋ ฌ ์ต์ ํ ๋๋ถ์ ์ฌ์ค์ 100%์ ๊ทผ์ ํ๋ ์ฑ๊ณต๋ฅ ๋ก ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ ๋๋ค. ์ง์ญํด ๋ฌธ์ ๋ฅผ ํฌ๊ฒ ์ํํ์ฌ, ๊น๋ค๋ก์ด ํ๊ฒฝ์์๋ ์ธ๊ฐ ์์ค์ผ๋ก ์ ์ฐํ๊ฒ ๊ฒฝ๋ก๋ฅผ ๊ฒฌ์ฃผ์ด ์ฐพ์ต๋๋ค.
- ๋ถ๋๋ฝ๊ณ ์์ ํ ๊ฒฝ๋ก: ๊ฐ์๋-์ ํฌ ์ต์ํ๋ฅผ ํตํด ๋ก๋ด์ด ์คํํ๊ธฐ์ ๋งค์ฐ ๋งค๋๋ฌ์ด ์์ง์์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๋ก๋ด ๊ด์ ์ ๊ธฐ๊ณ์ ์คํธ๋ ์ค๋ฅผ ์ค์ด๊ณ , ๊ณ ์๋์ ์์๋ ์ง๋์ด๋ ์ค์ฐจ๋ฅผ ์ต์ํํ์ฌ ๊ฒฐ๊ตญ ์์ ํ์ง๊ณผ ๋ก๋ด ์๋ช ํฅ์์ผ๋ก ์ด์ด์ง๋๋ค.
- ๋ชจ๋ํ์ ํ์ฅ์ฑ: IK, ๊ธฐํํ ํ๋๋, ์ต์ ํ ๋ชจ๋ ๋ฑ ๊ตฌ์ฑ์์๋ณ ๋ชจ๋ํ๋ก ํ์์ ๋ฐ๋ผ ๋ถ๋ถ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ , ์คํ์์ค๋ก ๊ณต๊ฐ๋์ด ์ฐ๊ตฌ ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌ์ ๊ฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ค์ํ ๋ก๋ด์ ์ฝ๊ฒ ์ด์ ๊ฐ๋ฅํ๋ฉฐ, MoveIt ํ๋ฌ๊ทธ์ธ ๋ฑ ๊ธฐ์กด ์์คํ ๊ณผ ์ฐ๊ณ๋ ์ง์๋ฉ๋๋ค.
- ์๋ฒ ๋๋ ์นํ์ฑ: GPU๊ฐ ํ์ํ๊ธด ํ์ง๋ง, Jetson๊ณผ ๊ฐ์ ์๋ฒ ๋๋ ํ๋ซํผ์์๋ ๊ตฌ๋๋ ๋งํผ ๊ฒฝ๋ ์ต์ ํ๊ฐ ๋์ด ์์ด, ํ์ฅ ๋ก๋ด์ ์ง์ ํ์ฌํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ๋ฉด, ํ๊ณ ๋ฐ ํฅํ ๊ณผ์ ๋ก ์ง์ ๋๋ ๋ถ๋ถ๋ ๋ช ๊ฐ์ง ์์ต๋๋ค:
- ๋์ /๋ฐ์ํ ๊ณํ์ ํ๊ณ: ํ์ฌ cuRobo๋ ์ ์ง๋ ์ํ์ ๋ก๋ด์ด ์ ์ ์ธ ํ๊ฒฝ์์ ๋ชฉํ๊น์ง ๊ฐ๋ ์์ ํ ๋ชจ์ ์ ๊ณํํฉ๋๋ค. ๋ง์ฝ ๋ก๋ด์ด ์์ง์ด๋ ์ค๊ฐ์ ์๋ก์ด ์ฅ์ ๋ฌผ์ด ๋ํ๋๊ฑฐ๋ ๋ชฉํ๊ฐ ๋ณํ๋ค๋ฉด, ์ด๋ฅผ ์ง์์ ์ผ๋ก ์ฌ๊ณํํ๋ ๊ธฐ๋ฅ(reactive planning)์ ์์ง ๊ตฌํ๋์ด ์์ง ์์ต๋๋ค. ์ต์ ๊ฒฝ์ฐ ์๋ฐฑ ms ๊ฑธ๋ฆด ์ ์๋ ์ ์ ๊ณ ๋ คํ๋ฉด, ํ๋ ์ค์๊ฐ ์ ์ด ์ฃผ๊ธฐ(์: 1kHz)์๋ ์ถ๊ฐ ์ฐ๊ตฌ๊ฐ ํ์ํฉ๋๋ค.
- ๋ณต์กํ ์์ ์ ์ฝ: cuRobo๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋จ-ํฌ์ฆ ๋๋ฌ ๋ฌธ์ ์ ์ด์ ์ ๋ง์ถ๊ณ ์์ต๋๋ค. ์ค๊ฐ์ ๋๊ตฌ์ ์์ธ๋ฅผ ์ ์งํ๋ค๊ฑฐ๋ ํน์ ๊ฒฝ๋ก ์ ์ฝ(์: ์ปต์ ๊ธฐ์ธ์ด์ง ์๊ฒ ์ด๋ฐ) ๋ฑ์ ๊ณผ์ ์ ์ฝ์ด ์๋ ๊ฒฝ๋ก ๊ณํ์ ๋ํด์๋ ์์ง ์ผ๋ฐ์ ์ธ ํด๋ฒ์ ํตํฉํ์ง ์์์ต๋๋ค. ์ผ๋ถ Orientation constraint ๋ฑ์ ํฐ ๊ฐ์ค์น๋ก ๋ฃ๋ ์คํ์ ํด๋ณด์์ผ๋, ์ด๋ฅผ ์๋ฐํ๊ฒ ๋ค๋ฃจ๋ ์ ์ฉ ์๊ณ ๋ฆฌ์ฆ(์: ์ ์ฝ๋ ํ์๊ณต๊ฐ์์์ RRT ๋ฑ)์ ํฅํ ๊ณผ์ ๋ก ๋จ๊ฒจ๋์์ต๋๋ค.
- ๋์ญํ ๋ฐ ์ ์ด ๊ณ ๋ ค ๋ถ์กฑ: ํ์ฌ ๋น์ฉ ํจ์๋ ๋ก๋ด์ ๊ธฐ๊ตฌํ์ ์์ง์(๊ด์ ์์น/์๋/๊ฐ์๋)์ ๊ดํ ํญ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฌผ์ฒด๋ฅผ ๋ฐ๊ฑฐ๋ ์ก๋ ๋ฑ ์ ์ด์ด ์๋ ๊ณํ, ํน์ ํ ํฌ ์ต์ ํ๋ ์๋์ง ์ต์ ํ ๊ฐ์ ๋์ ์์๋ ํฌํจ๋์ด ์์ง ์์ต๋๋ค. ์ด๋ฌํ ๋ถ๋ถ์ ๋ค๋ฃจ๋ ค๋ฉด ๋ก๋ด์ ๋์ญํ ๋ชจ๋ธ๊น์ง ํฌํจํ ์ต์ ํ(์: ํ ํฌ ์ต์ํ, ์ํผ๋์ค ์ต์ ํ ๋ฑ)๋ contact-implicit trajectory optimization ๊ธฐ๋ฒ์ ์ ๋ชฉํด์ผ ํ๋๋ฐ, ์ด๋ ์ฐ๊ตฌ์ ์ผ๋ก ๋์ด๋๊ฐ ๋์ง๋ง ํฅํ ํ์ฅ ๊ฐ๋ฅ์ฑ์ผ๋ก ์ ์๋์์ต๋๋ค.
- ๋ถ๋ถ์ ์ธ ํ๊ฒฝ ์ธ์: cuRobo๋ ํ๊ฒฝ ๋ชจ๋ธ์ด ์์ ํ ์ฃผ์ด์ ธ ์๋ค๋ ์ ์ ํ์ ์๋ํฉ๋๋ค. ์ผ์ ๋ฐ์ดํฐ๋ก๋ถํฐ ์ค์๊ฐ์ผ๋ก ํ๊ฒฝ ์ง๋๋ฅผ ์์ฑํ๊ฑฐ๋, ๋ณด์ด์ง ์๋ ์์ญ์ ์ฅ์ ๋ฌผ์ ์ถ์ ํ๋ ๋ฑ์ ํผ์ ์ ๋ถํ์ค์ฑ ํ์์๋ ๋ณ๋์ ๋์ฑ ์ด ํ์ํฉ๋๋ค. ๋ ผ๋ฌธ์์๋ ํ์ต ๊ธฐ๋ฐ์ผ๋ก ๋ฏธ์ง ํ๊ฒฝ์ ๋ํ ์ถฉ๋ ๋น์ฉ์ถ์ ์ ํตํฉํ๋ ๋ฑ ์์ด๋์ด๋ฅผ ์ ์ํ์ง๋ง, ์์ง ๊ตฌํ๋ ๊ฒ์ ์๋๋๋ค.
- ์ ๋ฌธ ์ง์ ์๊ตฌ: ๋น๋ก ์คํ์์ค๋ก ์ ๊ณต๋์ง๋ง, cuRobo์ ์ต์ ์ฑ๋ฅ์ ๋์ด๋ด๊ฑฐ๋ ๋ด๋ถ๋ฅผ ์์ ํ๋ ค๋ฉด GPU ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ, ์์น ์ต์ ํ ๋ฑ ์๋นํ ์ ๋ฌธ์ฑ์ด ํ์ํฉ๋๋ค. ๋คํํ๋ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ํํ์ฌ ์ธ๋ถ ์ฐ๊ตฌ์๋ค์ด ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ํ ์ ์๊ฒ ํด๋์๊ณ , ์ค์ ๋ก ํ๊ณ ๋ค๋ฅธ ์ฐ๊ตฌ์๋ค์ด cuRobo ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด ๋ก๋ด ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ ์๋ฒ๋ฅผ ๊ฐ์ ํ๊ฑฐ๋, ํ๋ ์ ์ฝ์ ์ง์ ํ์ด๋ด๋ ๊ธฐ๋ฒ์ ์ ๋ชฉํ๋ ๋ฑ์ ์๋๋ฅผ ํ๊ณ ์์ต๋๋ค. ์ด๋ฐ ํ์ ์ ํตํด ์ ์ฐจ ์ง์ ์ฅ๋ฒฝ์ ๋ฎ์ถ๊ณ ํ์ฉ์ฑ์ ๋์ฌ๊ฐ๋ ๊ฒ์ด ๊ธฐ๋๋ฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, cuRobo๋ ๋ก๋ด ๋ชจ์ ๊ณํ ๋ถ์ผ์ ์๋ก์ด ์๋์ ํ์ง์ ์งํ์ ์ฐ ๋งค์ฐ ์ธ์์ ์ธ ์ฐ๊ตฌๆๆ์ ๋๋ค. GPU ๋ณ๋ ฌํ์ ์ด์ ์ ๊ทน๋ํํ์ฌ, ์ด์ ๊น์ง ์ ์ด ๊ฑธ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์ค์๊ฐ์ผ๋ก ํด๊ฒฐํ๊ณ , ๊ฒฐ๊ณผ ๊ถค์ ์ ์ค์ฉ์ ์์ ์ฑ๊น์ง ํ๋ณดํ๋ค๋ ์ ์์, ์์ผ๋ก ๋ค์ํ ๋ก๋ด ์์คํ ์ ์์ฉ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ํฅํ ์ค์๊ฐ ๋์์ฑ ๊ฐํ, ๋ณด๋ค ๋ณต์กํ ์ ์ฝ ์กฐ๊ฑด ์ง์, ๋์ญํ ํตํฉ ๋ฑ ๋จ์ ๊ณผ์ ๋ค์ ํด๊ฒฐํ๋ค๋ฉด, cuRobo ํน์ ๊ทธ ํ์ ๊ธฐ์ ์ ๋ฒ์ฉ ๋ก๋ด ๋ชจ์ ํ๋๋์ ํ์ค ํด๋ก ์๋ฆฌ๋งค๊นํ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. ๋ก๋ด๊ณตํ ์ฐ๊ตฌ์๋ค์ ์ด ๋๊ตฌ๋ฅผ ํตํด ๋์ฑ ๋น ๋ฅด๊ณ ๋๋ํ ๋ก๋ด์ ๊ตฌํํ ์ ์์ ๊ฒ์ด๋ฉฐ, ๋์์ ๋จ์ ๋์ ๊ณผ์ ๋ฅผ ํจ๊ป ํ์ด๋๊ฐ์ผ๋ก์จ ๋ก๋ด์ ์์ง์์ ๋ํ ์ดํด์ ์ ์ด ๋ฅ๋ ฅ์ ํ์ธต ๋ฐ์ ์ํฌ ์ ์์ ๊ฒ์ ๋๋ค.
์ฐธ๊ณ ๋ฌธํ (๋ ผ๋ฌธ ๋ฐ ๊ด๋ จ ์๋ฃ)
- Sundaralingam, B., et al. โcuRobo: Parallelized Collision-Free Minimum-Jerk Robot Motion Generation.โ arXiv preprint arXiv:2310.17274 (2023) ๋ฑ.
- Github Repository: NVlabs/curobo (https://github.com/NVlabs/curobo) .
- NVIDIA Developer Blog: โCUDA-Accelerated Robot Motion Generation in Milliseconds with cuRoboโ (2023).
- MoveIt Plugin: Isaac ROS cuMotion.
- ๊ธฐํ ๋น๊ต ๊ธฐ๋ฒ: OMPL, TrajOpt, Ruckig, TracIK, PyBullet ๋ฑ ๊ด๋ จ ๊ณต์ ๋ฌธ์ ๋ฐ ๋ ผ๋ฌธ.