659.108 다중 로봇 프레임 네임스페이싱

1. 개요

다중 로봇 시스템에서 프레임 네임스페이싱(namespacing)은 각 로봇의 좌표 프레임에 고유한 접두사를 부여하여 프레임 이름의 충돌을 방지하는 기법이다. 네임스페이싱이 없으면 복수의 로봇이 동일한 base_link 프레임을 발행하여 TF2 트리에서 충돌이 발생한다.

2. 네임스페이싱 방법

2.1 런치 파일의 namespace 매개변수

Node(
    package='robot_state_publisher',
    executable='robot_state_publisher',
    namespace='robot1',
    parameters=[{
        'robot_description': robot_description,
        'frame_prefix': 'robot1/',
    }],
)

frame_prefix 매개변수는 robot_state_publisher가 발행하는 모든 프레임 이름에 접두사를 추가한다.

2.2 결과 프레임 구조

robot1/base_link
robot1/laser_link
robot1/camera_link
robot1/camera_optical_frame
robot1/imu_link

robot2/base_link
robot2/laser_link
robot2/camera_link

3. 센서 드라이버의 네임스페이싱

센서 드라이버의 frame_id 매개변수도 네임스페이스에 맞게 설정하여야 한다.

# robot1의 LiDAR 드라이버
robot1:
  laser_driver:
    ros__parameters:
      frame_id: "robot1/laser_link"  # 네임스페이스 포함

또는 런치 파일에서 네임스페이스를 적용하면 frame_id를 상대적으로 설정할 수 있는 드라이버도 있다.

4. 주행 측정과 위치 추정의 네임스페이싱

# robot1의 EKF 노드
robot1:
  ekf_node:
    ros__parameters:
      odom_frame: "robot1/odom"
      base_link_frame: "robot1/base_link"
      world_frame: "robot1/odom"

# robot1의 AMCL 노드
robot1:
  amcl:
    ros__parameters:
      global_frame_id: "map"          # map은 공유
      odom_frame_id: "robot1/odom"
      base_frame_id: "robot1/base_link"

map 프레임은 모든 로봇이 공유하므로 네임스페이스를 적용하지 않는다. 각 로봇의 odombase_link만 네임스페이싱된다.

5. 주의 사항

  1. 일관성: 모든 노드(드라이버, 위치 추정, 내비게이션 등)에서 동일한 네임스페이스를 사용하여야 한다.
  2. 공유 프레임: map, earth 등의 글로벌 프레임에는 네임스페이스를 적용하지 않는다.
  3. 토픽 네임스페이싱: TF 프레임 네임스페이싱과 함께 토픽(/tf, /tf_static)도 네임스페이스로 분리하거나, 공유 토픽에 모든 로봇의 변환을 발행할지 결정하여야 한다.

6. 요약

프레임 네임스페이싱은 다중 로봇 시스템에서 프레임 이름 충돌을 방지하는 핵심 기법으로, frame_prefix와 런치 파일의 namespace를 통하여 구현된다. 글로벌 공유 프레임(map, earth)은 네임스페이싱에서 제외하고, 로봇별 프레임(odom, base_link, 센서 프레임)에만 접두사를 적용한다.


참고 문헌 및 출처

  • T. Foote, “REP 105 – Coordinate Frames for Mobile Platforms,” ROS Enhancement Proposals, https://www.ros.org/reps/rep-0105.html (2010, 최종 갱신 2022)
  • robot_state_publisher 패키지, https://github.com/ros/robot_state_publisher (ROS2 Humble 브랜치)