← Blog해양·수중 물리· 3/4

잠수함은 어떻게 깊이를 유지하나 — 중성부력과 깊이 제어, 그리고 z=NaN 함정

수상함이 흘수선에서 뜬다면, 잠수함은 부력을 조절해 원하는 깊이에 머문다. 중성부력의 원리와 깊이 제어 루프, 그리고 시뮬에서 z가 NaN이 되며 거짓 성공이 나던 함정.

약 2분
submarinebuoyancydepth-controlballastsimulation-basics

잠수함은 어떻게 깊이를 유지하나

수상함은 흘수선에서 뜬다고 했습니다. 잠수함은 다릅니다 — 수면도, 바닥도 아닌 임의의 깊이에 머물러야 합니다. 어떻게 100m 깊이에 정확히 떠 있을 수 있을까요? 답은 부력을 능동적으로 조절하는 것입니다.

실제 시뮬레이션 — 무인잠수정(UUV)이 수중을 항행하는 모습(추적 카메라). 부력·깊이 제어가 맞물려 이런 안정적 잠항이 나온다.

중성부력 — 뜨지도 가라앉지도 않는 균형

핵심 개념은 중성부력(neutral buoyancy) 입니다. 부력(위)과 중력(아래)이 정확히 같으면, 잠수함은 그 깊이에 둥둥 떠 있습니다 — 위로도 아래로도 안 갑니다.

도식 렌더링 중…

잠수함은 밸러스트 탱크에 물을 채우거나 비워 자기 무게를 바꿉니다 — 물을 채우면 무거워져 가라앉고, 비우면 가벼워져 뜹니다. 이 미세 조절로 중성부력을 맞춰 원하는 깊이에 정착합니다.

깊이 제어 루프

목표 깊이로 가는 건 피드백 제어입니다.

도식 렌더링 중…

목표보다 얕으면 무거워지고, 깊으면 가벼워지는 식으로 z를 목표에 수렴시킵니다. 지상 로봇의 제어 루프와 구조는 같되, 제어 대상이 바퀴가 아니라 부력입니다.

시뮬의 함정 — z=NaN이 거짓 성공을 만든다

여기서 우리가 겪은 미묘한 버그가 있습니다. 동적 잠항(능동 깊이 변경)을 제대로 연결하지 않으면, 깊이 z가 계산 중 NaN(숫자가 아님) 이 됐습니다.

⚠️ NaN은 비교를 통과해 거짓 성공이 된다z < 목표_깊이 같은 비교에서 z가 NaN이면, 비교가 항상 False가 되거나 검사를 그냥 빠져나가 — "도달했다"는 거짓 성공이 날 수 있습니다. 깊이가 물리적으로 말이 안 되는데도 임무 성공으로 찍히는 것이죠. silent fail의 수중판입니다. NaN은 반드시 명시적으로 검출해 fail-loud 해야 합니다.

또 하나, 목표 깊이에 도달해도 미세한 진동(depth-hold residual)이 남습니다. 제어 게인이 과하면 출렁이고, 부족하면 못 따라갑니다 — 복원성·감쇠의 균형과 같은 트레이드오프가 수직 축에서 반복됩니다.

한 줄 정리

📌 잠수함은 밸러스트로 부력을 조절해 중성부력(부력=중력) 을 맞춰 원하는 깊이에 머문다. 깊이 제어는 부력을 대상으로 한 피드백 루프다. 시뮬에선 동적 잠항 미연결로 z=NaN이 거짓 성공을 만들 수 있으니, NaN은 명시적으로 검출해 fail-loud 해야 한다.