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를 통해서 서로 연결됨.
- ROS2에서는 로봇의 각 구성 요소를 좌표계로 표현하며, 이를 link라고 부른다.
- 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로 변환시켜준다.
- camera가 감지한 장애물의 좌표를 LiDAR기준 좌표로 변환해야 한다면, TF가 필요하다.
- 2. 로봇의 위치 추적 및 이동 ( localization & navigation )
- 로봇이 움직이면, 모든 센서와 부품의 좌표도 함께 변해야한다.
즉, TF를 사용하면, 로봇이 특정 시점에서 어디에 있는지 쉽게 알수있다.
- 로봇이 움직이면, 모든 센서와 부품의 좌표도 함께 변해야한다.
- 3. 로봇 팔 제어
- 로봇 팔의 관절마다 서로 다른 좌표계를 가지니, 팔의 끝부분 위치를 계산하기 위해서 TF가 필요함.
- 4. path planning
- 로봇이 장애물을 피하기 위해서, 상대적인 거리와 위치를 측정할때 TF가 필요.
- ex) 카메라 데이터 변환 ( camera -> map )
- 로봇의 카메라가 camera_link좌표에서 사람을 감지했다고 하자. 하지만, 이 위치를 map좌표호 변환을 해야 전체 위치를 알 수 있다. 그래서 TF를 사용하면 camera_link -> base_link -> odom -> map으로 변환이 가능하다.

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