ROS 2

ROS2에서 TF란?

정지홍 2025. 3. 14. 17:06

1. TF란?

  • transform은 로봇의 여러 좌표계( frames )사이의 위치( position )와 자세( orientation )를 관리하는 시스템이다.
  • 로봇들의 부붐,센서,바퀴,환경 지도 등은 각각의 고유한 좌표계( frame )을 가지며, ROS 2의 TF는 이러한 프레임들을 연결해서, 로봇의 동작을 쉽게 계산하게 해준다.
  • TF는 tree구조를 기반으로 동작하며, 각각의 Frame들은 부모-자식 관계를 가진다.
    • TF Tree : 모든 프레임과 그 관계를 트리 형태로 구성한 것
    • Frame : 특정 객체의 좌표계
    • Transform : 두 frame 사이의 위치 및 자세 관계 ( translation + rotation )

 

 

 

2. Frame과 Transform의 개념

TF에서 가장 중요한 요소는 프레임과 변환(transform)이다.

  • 2-1. Frame
    • 로봇의 특정한 부분을 기준으로 하는 좌표계이다.
    • 각각의 프레임은 서로 다른 좌표 원점을 가지며, 이 원점들은 3차원 공간에서 (x,y,z)좌표와 회전 값으로 표현된다.
    • ex) 로봇의 본체는 base_link , LiDAR센서는 lidar_link , 카메라는 camera_link 라는 프레임을 가진다.
      • ROS2에서는 로봇의 각 구성 요소를 좌표계로 표현하며, 이를 link라고 부른다.
        그리고 URDF파일에서 정의하는 로봇 모델링에서, 로봇의 각 부품들은 link로 표현되며, 이를 joint를 통해서 서로 연결됨.
  • 2-2. Transform
    • 하나의 프레임에서 다른 프레임으로 변환하는 과정.
      • 다시 말하면, 서로 다른 2개의 좌표계를 서로 일치시키는거
    • 변환은 2가지 요소로 이루어진다.
      • 2-2-1. 이동( Translation ) : x,y,z 방향으로의 거리 이동
      • 2-2-2. 회전 ( Rotation ) : 3d공간에서의 회전
      • ex) 로봇 본체에 LiDAR센서가 있다고 하자.
        LiDAR센서는 현재 로봇을 기준으로 Translation( x=0.5 , y=0.0 , z=0.2 )에 위치한다.

 

 

3. TF가 중요한 이유

로봇이 환경을 인식,동작할 때 필수적으로 해야하는 좌표 변환을 처리해준다.

아래는 예시들...

  • 1. 센서 데이터의 위치 정렬 ( sensor fusion )
    • camera가 감지한 장애물의 좌표를 LiDAR기준 좌표로 변환해야 한다면, TF가 필요하다.
      즉, TF를 사용하면, 카메라의 데이터를 자동으로 LiDAR 기준으로 변환하는것이 가능하다.
    • ex) 센서 데이터 변환 ( LiDAR -> Base )
      • 로봇이 LiDAR로 장애물을 감지했다고 가정하자. LiDAR에서 측정된 장애물 좌표가 ( 1.2 , 0.5 , 0.0 )이다. 하지만, 이 데이터는 로봇의 중심좌표( base_link ) 기준으로 변환해야한다. 그래서 TF를 사용해서 lidar_link에서 base_link로 변환시켜준다.
  • 2. 로봇의 위치 추적 및 이동 ( localization & navigation )
    • 로봇이 움직이면, 모든 센서와 부품의 좌표도 함께 변해야한다.
      즉, TF를 사용하면, 로봇이 특정 시점에서 어디에 있는지 쉽게 알수있다.
  • 3. 로봇 팔 제어
    • 로봇 팔의 관절마다 서로 다른 좌표계를 가지니, 팔의 끝부분 위치를 계산하기 위해서 TF가 필요함.
  • 4. path planning
    • 로봇이 장애물을 피하기 위해서, 상대적인 거리와 위치를 측정할때 TF가 필요.
    • ex) 카메라 데이터 변환 ( camera -> map )
      • 로봇의 카메라가 camera_link좌표에서 사람을 감지했다고 하자. 하지만, 이 위치를 map좌표호 변환을 해야 전체 위치를 알 수 있다. 그래서 TF를 사용하면 camera_link -> base_link -> odom -> map으로 변환이 가능하다.

 

 

 

 

rqt_graph상으로는 3개의 node에서 데이터를 받아오는 걸로 보인다.

4. ROS에서 TF변환

  • ROS에서 TF변환은 node와 topic을 활용해서 동작한다.
  • TF 데이터를 publish하는 것은 특정한 node가 수행한다.
    그리고 이 데이터를 송수신 하는 것은 TF 관련 topic을 통해서 이루어진다.

 

 

 

5. turtlebot4에서 TF관련 node

  • /robot_state_publisher
    • 로봇의 TF를 broadcast하는 node
    • 로봇의 각 link간의 변환을 자동으로 publish할것이다. 즉, 로봇의 센서,바퀴,본체 등 여러 부품의 상대적 위치를 관리.
  • /static_transform
    • 고정된 변환( static TF )를 publish하는 노드
    • 로봇의 움직임과 상관없이 항상 일정한 좌표 변환을 유지하는 tf_static을 생성함.
    • ex)
      • base_link -> camera_link
      • base_link -> lidar_link

 

 

6. turtlebot4에서 TF관련 topic

  • /tf
    • 변하는 TF 데이터를 실시간으로 publish하는 topic ( 예를 들면, 로봇이 움직이면 변하는 프레임들 )
  • /tf_static
    • 변하지 않는 고정된 TF데이터를 제공하는 topic