9.82 다중 좌표계 관리와 변환 트리(TF Tree)
1. 다중 좌표계의 복잡성
현대 로봇 시스템은 수많은 좌표계를 동시에 관리한다. 매니퓰레이터의 각 링크, 다양한 센서, 작업물, 환경의 기준점 등이 모두 자신의 좌표계를 가진다. 예를 들어 매니퓰레이터에 카메라와 LiDAR가 부착되고 작업 영역에 보조 카메라가 있는 시스템에서는 10개 이상의 좌표계가 존재할 수 있다.
이러한 다중 좌표계 사이의 관계를 체계적으로 관리하지 않으면, 데이터 처리가 복잡해지고 오류 가능성이 높아진다. 변환 트리(transformation tree, TF tree)는 이를 효율적으로 관리하는 데이터 구조이다.
2. 변환 트리의 개념
변환 트리는 좌표계들을 트리(tree) 구조로 조직한 것이다. 각 좌표계가 노드이고, 부모 좌표계와 자식 좌표계 사이의 강체 변환이 에지에 저장된다.
2.1 트리 구조의 특징
- 루트(root): 트리의 최상위 노드. 통상 월드 좌표계나 베이스 좌표계가 루트이다.
- 노드(node): 각 노드가 하나의 좌표계를 나타낸다.
- 에지(edge): 부모-자식 관계의 강체 변환을 저장한다.
- 무순환(acyclic): 트리는 사이클이 없는 그래프이다.
- 연결(connected): 모든 좌표계가 루트로부터 도달 가능하다.
2.2 트리의 예시
매니퓰레이터의 트리는 다음과 같이 구성될 수 있다.
world
└── base_link
├── shoulder_link
│ └── upper_arm_link
│ └── forearm_link
│ └── wrist_1_link
│ └── wrist_2_link
│ └── wrist_3_link
│ └── tool_link
│ └── camera_link
└── base_camera_link
각 노드(좌표계)가 부모와의 변환으로 정의된다.
3. 변환 트리의 장점
3.1 자동 변환 계산
임의의 두 좌표계 사이의 변환이 트리 경로를 따라 자동으로 계산된다. 사용자가 일일이 행렬 곱을 수행할 필요가 없다.
예를 들어 tool_link에서 world로의 변환을 요청하면, 시스템이 자동으로 트리 경로를 따라 모든 변환을 곱하여 결과를 산출한다.
3.2 일관성 보장
모든 변환이 한 곳에서 관리되므로, 다른 모듈이 같은 변환 정보를 사용한다. 일관성 오류가 방지된다.
3.3 확장성
새로운 좌표계를 추가하는 것이 쉽다. 부모 좌표계와의 변환만 지정하면 트리에 통합된다.
3.4 시각화
트리 구조가 시각화에 자연스럽게 매핑된다. 디버깅과 시스템 이해에 도움이 된다.
3.5 시간 처리
각 변환에 시각 정보를 부여하여, 다른 시각의 데이터에 대한 변환을 보간으로 제공할 수 있다.
4. 변환의 합성
두 좌표계 사이의 변환을 계산하는 절차는 다음과 같다.
4.1 같은 부모를 공유하지 않는 경우
두 좌표계 \{A\}와 \{B\} 사이의 변환을 계산하려면, 두 좌표계의 공통 조상(common ancestor)을 찾고 그 조상을 거쳐가는 경로를 결정한다.
예를 들어 camera_link에서 tool_link로의 변환을 계산할 때, 만약 두 좌표계가 모두 wrist_3_link의 자손이라면, wrist_3_link가 공통 조상이다. 경로는 camera_link → wrist_3_link → tool_link이다.
4.2 변환의 곱
경로를 따라 각 변환의 곱을 계산한다.
{}^{tool}\mathbf{T}_{camera} = {}^{tool}\mathbf{T}_{wrist} \cdot {}^{wrist}\mathbf{T}_{camera} = ({}^{wrist}\mathbf{T}_{tool})^{-1} \cdot {}^{wrist}\mathbf{T}_{camera}
이때 일부 변환은 부모-자식 방향이 반대이므로 역행렬을 사용한다.
5. ROS의 TF/TF2 프레임워크
ROS(Robot Operating System)의 TF(Transform) 라이브러리와 그 후속인 TF2는 변환 트리를 ROS 시스템에서 표준화한 도구이다.
5.1 주요 기능
- 트리 구조의 유지 관리
- 시각별 변환 저장
- 임의 두 좌표계 사이의 변환 자동 계산
- 시간 보간으로 인접 시각의 변환 제공
- 분산 시스템에서의 메시지 기반 통신
5.2 사용 예
ROS 노드는 다음과 같이 TF를 사용한다.
- 변환을 발행(publish)하는 노드: 매니퓰레이터의 관절 상태로부터 각 링크 좌표계의 변환을 계산하여 TF에 발행
- 변환을 사용하는 노드: 임의 두 좌표계 사이의 변환을 TF에 요청하여 응답받음
이러한 분리는 시스템의 모듈성을 높이고, 한 노드의 변환이 다른 모든 노드에서 일관되게 사용되도록 보장한다.
6. URDF와 변환 트리
ROS의 URDF(Unified Robot Description Format)는 로봇의 기구학적 구조를 XML로 기술한다. URDF 파일은 직접 변환 트리로 변환된다.
6.1 URDF의 요소
- 링크(link): 좌표계
- 관절(joint): 두 링크 사이의 변환과 운동 매개변수
URDF가 로드되면 ROS는 자동으로 트리 구조를 생성하고, 관절의 현재 상태에 따라 각 링크의 변환을 계산한다.
7. 트리의 시간 관리
변환 트리는 시간에 따라 변할 수 있다. 매니퓰레이터의 관절이 움직이면 각 링크의 변환이 변하기 때문이다. 트리는 다음과 같이 시간을 관리한다.
7.1 정적 변환
시간에 따라 변하지 않는 변환이다. 예를 들어 카메라가 매니퓰레이터의 손목에 단단히 부착되어 있으면, 카메라와 손목 사이의 변환은 정적이다.
7.2 동적 변환
시간에 따라 변하는 변환이다. 매니퓰레이터의 관절 회전, 차량의 운동 등이 동적 변환을 만든다.
7.3 시각별 저장
각 변환은 측정된 시각과 함께 저장된다. 시각이 다른 데이터를 변환할 때 적절한 시각의 변환이 사용된다.
7.4 보간
요청된 시각이 저장된 시각 사이에 있으면 변환이 보간된다. 위치는 선형 보간, 회전은 SLERP가 사용된다.
8. 변환 트리의 일반화
변환 트리는 ROS 외에도 다양한 로봇 시스템에서 채택된다.
8.1 게임 엔진
Unity, Unreal Engine 등의 게임 엔진은 객체 계층 구조를 통해 변환 트리를 구현한다. 부모 객체의 변환이 자식에게 자동으로 적용된다.
8.2 D 시뮬레이터
Gazebo, MuJoCo, PyBullet 등의 시뮬레이터는 객체의 변환을 트리로 관리한다. 물리 시뮬레이션이 트리 구조를 활용하여 효율적이다.
8.3 CAD 소프트웨어
SolidWorks, CATIA 등의 CAD 시스템은 부품 사이의 관계를 트리로 표현한다. 조립품의 변환이 부품 간 관계로부터 계산된다.
9. 변환 트리의 한계
9.1 트리 구조의 제약
변환 트리는 트리(사이클 없음)이므로, 폐쇄 운동학적 구조(closed kinematic chain)를 직접 표현하지 못한다. 폐쇄 구조는 트리에 추가 제약을 부여하여 처리해야 한다.
9.2 단일 부모의 제약
각 좌표계가 하나의 부모만 가질 수 있다. 다중 부모(여러 좌표계에 동시에 부착)는 직접 표현할 수 없다.
9.3 메모리 사용
많은 좌표계와 시간 이력을 저장하면 메모리 사용이 증가한다. 효율적 자료 구조가 필요하다.
10. 실용적 고려 사항
10.1 좌표계 명명 규칙
좌표계 이름은 명확하고 일관되어야 한다. 일반적인 규칙은 {로봇이름}_{부위}_link 형태이다(예: panda_arm_link0).
10.2 트리의 시각화
ROS의 rqt_tf_tree 도구는 현재 트리 구조를 그래프로 시각화한다. 디버깅에 유용하다.
10.3 시간 동기화
분산 시스템에서 각 노드의 시각이 동기화되어 있어야 변환이 정확하다. NTP 또는 PTP와 같은 시간 동기화 프로토콜이 사용된다.
10.4 갱신 빈도
트리의 변환이 충분히 자주 갱신되어야 한다. 매니퓰레이터의 경우 50-100Hz, 자율 주행 차량의 경우 100-1000Hz가 일반적이다.
11. 변환 트리의 응용
11.1 매니퓰레이터 운동 명령
매니퓰레이터에 작업물 좌표계 기준의 명령을 내릴 때, 트리가 자동으로 베이스 좌표계로 변환한다.
11.2 센서 데이터 융합
여러 센서의 데이터를 융합할 때, 트리가 모든 데이터를 공통 좌표계로 변환한다.
11.3 SLAM과 매핑
SLAM에서 로봇의 자세와 지도가 모두 트리에 등록되어, 일관된 좌표 처리가 가능하다.
11.4 시각화
RViz 등의 시각화 도구는 트리를 사용하여 모든 객체를 일관된 좌표계에 표시한다.
11.5 충돌 검사
로봇의 각 링크가 환경 객체와 충돌하는지 검사할 때, 트리가 자동으로 좌표계를 통합한다.
12. 참고 문헌
- Foote, T. (2013). “tf: The Transform Library.” 2013 IEEE Conference on Technologies for Practical Robot Applications (TePRA), 1–6.
- Quigley, M., Gerkey, B., & Smart, W. D. (2015). Programming Robots with ROS. O’Reilly Media.
- Koubaa, A. (Ed.) (2017). Robot Operating System (ROS): The Complete Reference (Volume 2). Springer.
- Joseph, L., & Cacace, J. (2018). Mastering ROS for Robotics Programming (2nd ed.). Packt.
- Goebel, P. (2014). ROS by Example. Lulu.
version: 1.0