본문으로 건너뛰기

M18.02 · Global/Local Costmap·Inflation·장애물 갱신

단위별 목표·권장 선수와 자료 준비 상태를 확인하고, 공개된 본문과 활동을 읽고 준비 상태를 확인할 수 있습니다.

전체 커리큘럼

학습 안내

본문을 읽고 장비 없는 기본 실습·세 확인 문제와 해설로 이해를 확인하세요.

예상 학습 시간: 미정. 이 페이지 방문이나 자료 열람으로 완료·숙달을 자동 부여하지 않습니다.

현재 경로·이전·다음 단위 확인 ↓

학습 목표

  • global/local costmap과 정적·장애물·inflation layer의 역할 및 좌표를 구분한다.
  • 주어진 거리·계수로 inflation 비용을 계산하고 내부 값과 footprint의 한계를 설명한다.
  • 합성 관측의 marking·clearing과 자료 나이·미상·layer 결합 결과를 판정한다.

아래 설명·실습·문제로 각 학습 목표를 확인하세요.

권장 선수

M15.02의 점유 격자와 M17의 로봇 형상·충돌을 연결한다. costmap 값, layer, footprint, inflation과 광선 기반 clearing을 본문에서 정의한다. 기준은 Jazzy이며 기본은 합성 비용 표와 광선 기록이다. 실제 costmap·ROS 실행은 없다. 이미 알고 있다면 직접 열어볼 수 있습니다.

설명 필수

세 목표에 대응하는 검수된 설명·예제를 읽습니다.

저장 지도와 계획·제어에 쓰는 비용 지도를 구분한다

costmap은 계획과 제어 판단에 사용할 공간 비용을 격자로 표현한다. 저장 점유 지도, 센서의 장애물 관측, 로봇 형상에 따른 근접 비용 등을 결합할 수 있다. Jazzy Costmap README는 여러 layer를 조합하는 구조를 설명한다. layer는 특정 자료나 변환을 담당하는 층이며 최종 master costmap은 그 결과를 정한 규칙으로 합친 것이다.

global costmap은 넓은 범위의 경로 선택, local costmap은 주변 제어 판단에 쓰는 역할로 이해할 수 있다. 이 예에서는 global은 map 기준 정적 지도와 장애물을 사용하고 local은 odom 기준의 이동 창을 사용한다고 정한다. rolling window는 로봇 주변으로 격자 범위를 옮기는 방식이다. global/local이라는 이름만으로 frame·해상도·layer와 갱신 속도가 자동 결정되는 것은 아니다. 실제 설정과 TF를 확인한다.

창이 로봇을 따라 움직인다고 새 장애물 관측이 생기는 것은 아니다. 같은 오래된 자료를 다시 그리는 화면 갱신과 새로운 센서 취득을 구별한다. 좁은 local 창의 바깥은 확인하지 않은 영역이고, global 지도에 없는 동적 물체는 센서 layer 등의 새 근거가 필요하다. 해상도가 작아지면 정밀한 표현이 가능하지만 셀 수와 계산량도 늘며 자료 오차가 자동으로 줄지는 않는다.

값의 범주와 layer의 책임을 먼저 읽는다

Nav2 내부 costmap은 M15의 점유값 0~100 및 −1과 다른 코드 체계를 사용한다. Jazzy cost_values 정의에서 0은 FREE_SPACE, 254는 LETHAL_OBSTACLE, 253은 INSCRIBED_INFLATED_OBSTACLE, 255는 NO_INFORMATION이다. 1~252는 그 사이의 비용에 사용된다. 이 수치는 충돌 확률의 백분율이 아니다. 255는 미상이라는 특별한 의미이므로 일반적인 위험 점수 하나로만 정렬하지 않는다.

Costmap의 공간 표현: 정적 지도/실시간 관측 → 장애물 layer → Inflation → 계획/제어의 소비.그림 원본 크기로 보기

그림 M18.02-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.

정적 layer는 저장 지도와 변경을 반영하고, obstacle layer는 센서의 표시·지움 관측을 관리한다. inflation layer는 장애물 주변에 거리 기반 비용을 퍼뜨려 근접 이동을 비싸게 만든다. inflation은 새 물체를 관측하는 센서가 아니며 장애물의 실제 반지름을 측정하는 기능도 아니다. 어떤 layer가 값을 만들었는지 알아야 오래된 흔적과 잘못된 지움을 진단할 수 있다.

footprint는 로봇이 바닥면에서 차지하는 형상이다. 중심부터 footprint 경계까지 가장 짧은 거리를 inscribed radius, 내접 반경이라고 한다. 원형 로봇이면 반지름과 같지만 직사각형에서는 모서리가 더 멀다. 장애물에 가까운 중심 위치를 비용으로 표현하는 것과 실제 방향의 footprint 전체를 충돌 검사하는 것은 같은 질문이 아니다.

Jazzy의 단일 장애물 inflation 비용을 계산한다

합성 계산은 해상도 r=0.1 m/cell, 내접 반경 r_in=0.2 m, inflation 반경 0.6 m, cost_scaling_factor κ=2 m⁻¹을 사용한다. 주변의 다른 layer는 알려진 빈 공간이며 장애물 하나만 있다고 준다. d는 가장 가까운 장애물 셀 중심까지의 미터 거리다. 실제 computeCost 입력은 셀 거리이므로 r을 곱해 미터로 바꾼다.

Jazzy inflation_layer의 computeCost는 거리 0에서 254, 0<d≤r_in에서 253을 사용한다. 그 바깥이며 inflation이 적용되는 범위에서는 다음 거리 감쇠를 사용한다.

C(d)=uint8⁡ ⁣(252exp⁡[−κ(d−rin)]).C(d)=\operatorname{uint8}\!\left(252\exp[-\kappa(d-r_{in})]\right).

여기서 uint8 변환은 이 양수 값의 소수 부분을 버려 정수 코드로 만드는 것이다. κ의 단위를 m⁻¹로 두어 지수는 무차원이다. d=0/0.1/0.2 m의 비용은 각각 254/253/253이다. d=0.4 m는 셀 거리 4에 해당하며 252exp(−2×0.2)≈168.92065이므로 코드는 168이다. 이 숫자를 점유 확률 168%로 읽지 않는다.

d=0.7 m인 축 방향 셀은 제공 반경 밖이므로 이 단일 장애물의 inflation 기여를 받지 않는다. 다른 layer도 빈 공간이라는 이 입력에서는 0으로 남는다. 실제 격자에서는 반경을 셀 수로 변환하고 거리 캐시·갱신 영역과 다른 장애물을 함께 사용하므로 연속 원을 그린 그림만으로 모든 경계 셀 값을 단정하지 않는다. 위 식 자체가 반경 밖 적용을 결정하는 전체 코드인 것도 아니다.

κ를 4 m⁻¹로 높이면 같은 d=0.4 m에서 252exp(−0.8)≈113.23090으로 코드 113이 된다. 계수가 커지면 거리에 따라 더 빨리 감소한다. 'factor를 키우면 모든 위치의 비용이 커진다'는 생각은 부호를 반대로 이해한 것이다. 최종 경로 선택에는 planner/controller의 비용 사용과 다른 layer도 영향을 주므로 이 한 값으로 전체 주행 성능을 예측하지 않는다.

낮은 중심 비용도 footprint 충돌을 배제하지 못한다

직사각 footprint가 로봇 중심에서 x방향 ±0.3 m, y방향 ±0.2 m라고 하자. 내접 반경은 0.2 m지만 앞 모서리는 더 멀다. 단순 점 장애물이 중심 기준 (0.3,0) m에 있으면 직사각형 앞 경계와 접촉한다. 중심 거리 0.3 m는 내접 반경보다 커서 위 감쇠 비용은 약 206이지 253이 아니다. 그렇다고 접촉이 사라진 것은 아니다.

이 예는 비용으로 유도하는 근접 회피와 방향별 전체 형상 검사가 다르다는 뜻이다. footprint와 padding, 도구·적재물 및 회전 중 형상을 어떻게 반영했는지 확인한다. inflation 반경을 로봇 내접 반경보다 작게 잡고 전체 형상까지 처리했다고 주장하거나, cost<253이면 모든 로봇이 충돌하지 않는다고 일반화하면 안 된다. 모델과 실제 오차를 더 고려한 여유도 별도다.

marking과 clearing에는 관측 근거가 필요하다

marking은 유효한 센서 반사점 등을 장애물로 표시하는 과정이다. clearing은 센서 원점에서 관측된 거리까지 광선을 추적해 지나간 빈 공간을 지우는 과정이다. Jazzy obstacle layer 구현은 clearing 관측의 raytrace와 새 장애물 marking을 구분한다. 관측의 frame·시각·유효 거리, marking/clearing 설정과 갱신 범위를 함께 확인해야 한다.

합성 센서는 같은 기준의 x=0에서 +x 방향으로 본다. 이전에 x=0.4 m를 obstacle layer에 표시했다. 새 유효 광선은 x=0.8 m에서 반사했고 clearing 범위는 0~1.0 m, marking 범위도 0~1.0 m이며 해당 셀들은 모두 격자 안이라고 준다. 이 새 광선은 0.4 m를 지나므로 obstacle layer의 예전 표시를 지우고 0.8 m를 새 장애물로 표시할 근거가 된다. 반사 끝점은 marking으로 남으며 그 뒤 공간을 자동으로 비어 있다고 만들지 않는다.

그런데 정적 layer가 x=0.4 m를 벽으로 유지하고 두 layer를 알려진 셀의 최대 비용으로 합친다면 최종 값은 여전히 254일 수 있다. obstacle layer의 0과 정적 layer의 254를 합치면 254이기 때문이다. 한 센서 layer를 지웠다고 정적 지도까지 수정됐다는 뜻은 아니다. 실제 결합에는 unknown 전용 규칙도 있으므로 단순 숫자 max를 모든 255 상황에 적용하지 않는다.

자료가 사라진 것과 물체가 사라진 것을 구분한다

새 광선이 없거나 유효 거리·시각을 확인하지 못한 경우에는 빈 공간의 근거가 없다. 가림이나 센서 단절, 범위 밖 값과 반사 실패를 물체 제거로 해석하지 않는다. 관측 버퍼의 보관 기간과 이미 표시된 격자 셀의 지움 규칙도 다르다. 오래된 입력이 버퍼에서 빠졌다고 그 장애물 흔적이 반드시 자동 제거되는 것은 아니다.

같은 clock에서 지금 5.30 s, 마지막 취득은 5.00 s이고 허용 나이는 0.2 s라고 준다면 0.30 s로 0.10 s 초과다. 격자가 갱신 중이라는 이유로 신선하다고 판정할 수 없다. 자료 미상·준비 실패와 계획을 구분하고 어떤 layer와 TF·센서가 원인인지 진단한다. 기존 4.4 멀티레이트 센서 시간 정합 및 6.2 정량 진단으로 연결해 근거를 나누자. 이 활동의 계산은 실제 장애물 회피·안전 성능을 측정한 것이 아니다.

학습 범위와 한계

기본 설명·예제가 준비되었습니다. 기존 보충 자료의 범위와 구별하세요.

실습 필수

장비 없는 실습을 수행하고 관찰·계산 근거를 해설과 비교합니다.

입력은 본문의 단일 장애물과 r=0.1 m/cell, r_in=0.2 m, 반경 0.6 m, κ=2 m⁻¹이며 나머지 layer는 알려진 빈 공간이다. footprint 변형과 x=0.4→0.8 m의 광선 기록, 정적 벽을 유지하는 최대 비용 결합 및 나이 로그도 본문과 같다.

  1. global/local costmap과 정적·obstacle·inflation layer의 입력·역할 및 예제 frame을 나눈다. 값 0/253/254/255와 점유 확률을 구별한다.
  2. 거리 0/0.1/0.2/0.4/0.7 m의 결과와 κ=4인 0.4 m 비용을 계산한다. 직사각 footprint의 접촉 반례를 설명한다.
  3. 새 광선이 있는 경우와 없는 경우, 정적 벽이 남는 경우의 clearing·최종 결과를 판정한다. 5.30/5.00 s의 자료 나이와 추가 확인 근거를 적는다.

관찰은 layer와 값, 거리 계산, 갱신 근거로 나눈다. 지수 계산기가 없으면 본문 근삿값으로 정수 변환을 확인해도 된다. 막히면 '어느 layer의 어느 셀인가'부터 적으며 실제 ROS는 필요하지 않다.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

기본 실습은 장비 없이 수행합니다. 실제 장비·GPU 실증을 완료했다는 뜻은 아닙니다.

평가·해설 필수

목표별 세 서술문항에 답하고 해설·판정 기준으로 자기검토합니다.

확인 문제 Q1

local costmap 창이 움직이고 화면도 갱신됐다. 새 센서 자료와 저장 지도 갱신까지 확인된 것인가? 각 layer와 좌표의 역할을 설명하라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q2

본문에서 κ만 4 m⁻¹로 바꾸었다. d=0.4 m의 정수 비용을 구하고 기존 값과 비교하라. 비용이 253보다 작으면 직사각 로봇의 접촉도 배제할 수 있는가?

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q3

광선 입력이 끊겼고 버퍼의 옛 관측이 사라졌으니 장애물을 모두 지웠다고 한다. 유효 광선·정적 벽 결합·자료 나이의 관점에서 평가하라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

서술답안과 해설이 준비되었습니다. 자기검토와 학습 완료는 숙달 인증과 별개입니다.

참고 자료

학습 확인

실습과 세 문항의 답안을 해설과 비교한 뒤, 이 단위의 학습 완료를 직접 기록할 수 있습니다. 자기검토·학습 완료는 자동 채점이나 숙달 인증과 별개입니다.

실습1개·확인 문제3개의 답안을 저장하고 각각 자기검토를 기록하세요.

학습 이동

학습 단계 순서 · 공통 과정 이후 전문화 선택

전체 목차로 돌아가기 →

신규 활동의 답안은 이 브라우저의 통합 학습 기록에 저장합니다. 기존 화면의 답안·진도는 원래 키를 유지합니다. AI 강사는 현재 단위의 준비 상태·부족한 범위와 연결된 실제 자료를 참고합니다.