2 minute read

2. Marking and Clearing

Costmap2DROS 객체는 ROS에서 센서 주제에 자동으로 구독하고 이에 따라 자체적으로 업데이트된다. 센서는 장애물 정보를 costmap에 삽입학거나 제거하는 데 사용된다.

costmap이 센서 데이터를 실시간으로 반영하여 환경의 변화를 적절히 표현할 수 있도록 한다. 마킹과 클리어링 작업을 통해 로봇의 주변 환경을 정확하게 반영하며 이러한 업데이트가 로봇의 내비게이션과 경로 계획에 중요한 역할을 한다.

센서의 역할

  1. marking : 장애물 정보를 costmap에 삽입하는 작업. 배열의 인덱스를 통해 특정 셀의 비용을 변경하는 방식이다. 센서의 관측 데이터에 기반하여 해당 셀의 비용 값을 직접 수정한다.
  2. Clearing : 장애물 정보를 costmap에서 제거하는 작업. 센서의 원점에서 시작하여 관측된 방향으로 레이 추적을 통해 이루어진다.
  3. 3차원 구조와 2차원 프로젝션 : 만약 장애물 정보를 저장하기 위해 3차원 구조를 사용한다면, 각 열의 장애물 정보는 costmap에 투영될 때 2차원으로 변환된다.

3. Occupied, Free, and Unknown Space

  • Costmap은 각 셀에 대해 255개의 서로 다른 비용 값을 가질 수 있다.
  • 실제로는 세 가지 상태만을 표현할 수 있는 구조이다.
    • free : costmap_2d::FREE_SPACE
    • occupied : 일정 수 이상의 점유된 셀을 가진 열은 costmap_2d::LETHAL_OBSTACLE 비용이 할당
    • unknown : costmap_2d::NO_INFORMATION
  • 이러한 상태는 costmap에 투영될 때 특별한 비용값으로 변환된다.

4. Map Updates

코스트맵은 update_frequency 매개변수로 지정된 주기에 따라 맵 업데이트 사이클을 수행한다.

  1. 센서 데이터 수집
  2. 마킹 및 클리어링 : 코스트맵의 기저 점유 구조에서 marking 및 clearing 작업이 수행된다.
  3. cost 값 투영 : 업데이트된 점유 구조가 costmap으로 투영되며 적절한 cost가 할당된다.
  4. 장애물 팽창 : costmap_2d::LETHAL_OBSTACLE 비용을 가진 각 셀에 대해 장애물 팽창이 수행된다. 각 점유된 셀에서 사용자 지정된 팽창 반경까지 비용값이 외부로 전파된다.

5. tf

센서 데이터와 코스트맵 사이의 데이터 삽입을 위해 tf 객체를 사용한다.

tf 객체는 다음의 좌표 프레임들 사이의 변환이 서로 연결되어 있으며 최신 상태임을 전제로 한다.

  • global_frame : 전역 좌표 프레임
  • robot_base_frame : 로봇의 기본 좌표 프레임
  • sensor sources : 센서의 좌표 프레임

이 변환들 사이의 최대 지연 시간은 transform_tolerance 매개변수로 설정된다. 이 값은 각 변환 사이에 허용되는 최대 지연 시간이다.

6. Inflation

로봇의 충돌 위험을 고려하여 코스트맵에서 점차적으로 비용 값을 확산시키는 과정

로봇과 관련된 코스트맵 값을 구분하기 위해 5가지 특정 기호가 정의된다.

  1. Lethal Cost (치명적 비용) : 셀에 실제 장애물이 존재하는 경우를 의미한다. 만약 로봇의 중심이 이 셀에 위치한다면 로봇이 장애물과 충돌할 것이다.
  2. Inscribed Cost (내접 비용) : 셀이 로봇의 내접 반경보다 장애물에 가까운 경우를 의미한다. 따라서 로봇의 중심이 이 셀에 위치하면 로봇이 장애물과 충돌할 가능성이 높다.
  3. Possibly Circumscribed Cost (가능한 외접 비용) : 로봇의 외접 반경을 기준으로 하며 로봇의 중심이 이 셀에 위치하면 로봇이 장애물과 충돌할 가능성이 있지만 로봇의 방향에 따라 달라질 수 있다.
  4. Freespace Cost (자유 공간의 비용) : 0. 로봇이 통과하는 데 장애물이 없음을 의미한다.
  5. Unknown Cost (알 수 없음 비용) : 이 값은 셀에 대한 정보가 없음을 의미한다. 사용자는 이 값을 자신이 필요로 하는 방식으로 해석할 수 있다.

기타 모든 비용 값은 freespace와 possibly circumscribed 사이의 값으로 할당되며 lethal 셀과의 거리 및 사용자가 제공한 감소함수에 따라 결정된다.

7. Map Types

costmap_2d::Costmap2DROS 객체를 초기화하는 두 가지 주요 방법

  1. 사용자 생성 정적 맵을 사용하여 초기화
  2. 폭과 높이를 지정하고 rolling_window 파라미터를 true로 설정하여 초기화

Reference

http://wiki.ros.org/costmap_2d

Categories:

Updated: