← BlogAMR 내비게이션 입문· 5/12

Global vs Local Costmap — 큰 그림 경로와 즉석 회피의 분업

전역 경로계획용 global costmap과 실시간 회피용 local costmap의 역할 분담, 동적 범위 산정, 그리고 다중 로봇에서 두 costmap을 모두 챙겨야 하는 이유.

약 2분
Nav2costmapglobal-plannerlocal-plannerAMR

Global vs Local Costmap

로봇 내비게이션에는 서로 성격이 다른 두 가지 질문이 동시에 흐릅니다.

  • "목적지까지 어느 길로 갈까?" — 전체 지도를 보는 큰 그림
  • "지금 눈앞의 저 사람을 어떻게 피하지?" — 1초 안의 즉석 반응

이 둘을 한 costmap으로 처리하면 둘 다 잘 못합니다. 그래서 Nav2는 costmap을 globallocal 둘로 나눠 분업시킵니다.

큰 지도와 움직이는 창문

도식 렌더링 중…
  • Global costmap — 환경 전체를 덮는 고정 크기 지도. 경로 계획기(planner)가 이 위에서 출발→목적지 경로를 한 번 길게 그립니다. 주로 static map(벽) 기반.
  • Local costmap — 로봇을 따라 움직이는 작은 사각 창(rolling window, 예: 5m×5m). 컨트롤러(controller)가 지금 들어온 LiDAR 장애물을 이 안에서 피하며 cmd_vel을 만듭니다.

비유하자면 global은 "내비게이션 앱의 전체 경로", local은 "운전 중 눈앞 1초의 핸들 조작"입니다. 둘은 협력합니다 — global이 큰 경로를 주면, local이 그 경로를 따라가되 즉석 장애물은 알아서 피합니다.

범위는 고정이 아니라 환경에 맞춘다

local costmap의 크기와 센서 반영 범위를 너무 크게 잡으면 계산이 무겁고, 너무 작으면 빨리 다가오는 장애물을 늦게 봅니다. 그래서 범위를 환경 크기에 맞춰 동적으로 정하는 게 좋습니다 — 예컨대 장애물 반영 거리를 min(아레나 대각선/2, 25 m) 처럼 환경에 비례하되 상한을 둡니다.

💡 고정값의 함정 — costmap 크기를 한 값으로 박아두면, 작은 창고에선 과하고 넓은 야외에선 부족합니다. "환경에 비례 + 상한"이 한 설정으로 여러 환경을 견디게 합니다.

다중 로봇의 함정 — 둘 다 챙겨야 한다

앞 글에서 "다른 로봇은 obstacle layer에만 있다"고 했습니다. 여기에 한 겹이 더 있습니다. 다른 로봇 정보는 local costmap과 global costmap 양쪽에 모두 넣어야 합니다.

도식 렌더링 중…

local에만 넣으면 즉석 회피는 되지만, 전역 경로 자체가 다른 로봇을 뚫고 지나가도록 그려져서 로봇들이 계속 마주칩니다. 반대로 LiDAR의 raw 스캔 노이즈는 global에 넣으면 경로가 흔들리니(oscillation), 노이즈는 local에만 / 로봇 위치는 양쪽에 — 이 선택적 분배가 핵심입니다.

⚠️ "local에서 피하니까 됐겠지"는 다중 로봇에서 틀립니다. 전역 경로가 애초에 충돌하도록 그려지면, 회피만으론 교착이 반복됩니다.

한 줄 정리

📌 Global costmap = 전체 지도 위 큰 경로(planner), Local costmap = 로봇 따라 움직이는 창에서 즉석 회피(controller). 범위는 환경에 비례해 동적으로, 그리고 다중 로봇에선 "다른 로봇은 양쪽에, LiDAR 노이즈는 local에만" 선택적으로 분배한다.