659.102 tf2_echo를 이용한 변환 실시간 확인
1. 개요
tf2_echo는 TF2 변환 트리에서 두 프레임 사이의 변환을 실시간으로 출력하는 명령행 도구이다. 연속적으로 변환 값을 갱신하여 표시하므로, 동적 변환의 시간적 변화를 관찰하거나 정적 변환의 정확성을 검증하는 데 활용된다.
2. 사용법
2.1 기본 형식
ros2 run tf2_ros tf2_echo [source_frame] [target_frame]
이 명령은 source_frame에서 target_frame으로의 변환을 지속적으로 출력한다.
2.2 출력 예시
$ ros2 run tf2_ros tf2_echo map base_link
At time 1679123456.789012345
- Translation: [2.500, 1.300, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.383, 0.924]
- Rotation: in RPY (radian) [0.000, 0.000, 0.785]
- Rotation: in RPY (degree) [0.000, 0.000, 45.000]
2.3 출력 필드
| 필드 | 설명 |
|---|---|
| At time | 변환이 유효한 시간 (ROS2 시간) |
| Translation | 병진 벡터 [x, y, z] (단위: m) |
| Quaternion | 쿼터니언 [q_x, q_y, q_z, q_w] |
| RPY (radian) | 오일러 각 [\text{roll}, \text{pitch}, \text{yaw}] (단위: rad) |
| RPY (degree) | 오일러 각 (단위: 도) |
2.4 갱신 주기
tf2_echo는 기본적으로 1 Hz로 출력을 갱신한다. --rate 옵션으로 갱신 주기를 변경할 수 있다.
ros2 run tf2_ros tf2_echo map base_link --rate 10
3. 활용 사례
3.1 정적 변환 검증
URDF나 static_transform_publisher로 설정한 정적 변환이 예상 값과 일치하는지 확인한다.
# 예상: Translation [0.3, 0.0, 0.15], Rotation RPY [0, 0, 0]
ros2 run tf2_ros tf2_echo base_link laser_link
3.2 로봇 위치 추적
로봇의 글로벌 위치를 실시간으로 모니터링한다.
ros2 run tf2_ros tf2_echo map base_link
3.3 주행 측정 드리프트 관찰
map → odom 변환의 변화를 관찰하여 위치 추정의 보정 동작을 확인한다.
ros2 run tf2_ros tf2_echo map odom
3.4 센서 프레임 관계 확인
카메라 광학 프레임의 정렬이 올바른지 확인한다.
ros2 run tf2_ros tf2_echo camera_link camera_optical_frame
# 예상: RPY [-90, 0, -90] (도)
4. 오류 메시지
| 오류 | 의미 | 해결 |
|---|---|---|
| “Could not find a connection” | 두 프레임 사이에 경로 없음 | view_frames로 트리 구조 확인 |
| “Lookup would require extrapolation” | 요청 시간에 변환 데이터 없음 | 변환 발행 노드 실행 확인 |
| “source_frame does not exist” | 소스 프레임이 발행되지 않음 | 프레임 이름 및 발행 노드 확인 |
5. 요약
tf2_echo는 두 프레임 간의 변환을 실시간으로 출력하는 경량 진단 도구로, 정적 변환의 검증, 동적 변환의 모니터링, 센서 프레임의 정렬 확인 등 다양한 디버깅 시나리오에서 가장 빈번하게 사용되는 TF2 도구이다.
참고 문헌 및 출처
tf2_ros패키지, https://github.com/ros2/geometry2 (ROS2 Humble 브랜치)- ROS2 공식 문서, “Using tf2_echo”, https://docs.ros.org/en/humble/Tutorials/Intermediate/Tf2/ (ROS2 Humble Hawksbill)