저장 지도와 계획·제어에 쓰는 비용 지도를 구분한다
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는 미상이라는 특별한 의미이므로 일반적인 위험 점수 하나로만 정렬하지 않는다.
그림 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이 적용되는 범위에서는 다음 거리 감쇠를 사용한다.
여기서 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 정량 진단으로 연결해 근거를 나누자. 이 활동의 계산은 실제 장애물 회피·안전 성능을 측정한 것이 아니다.