659.9 부모 프레임과 자식 프레임의 관계
1. 부모-자식 관계의 정의
TF2의 변환 트리에서 부모 프레임(parent frame)과 자식 프레임(child frame)의 관계는 두 좌표 프레임 간의 계층적 종속 관계를 나타낸다. 이 관계는 TransformStamped 메시지의 header.frame_id(부모)와 child_frame_id(자식) 필드로 명시되며, 변환 트리의 엣지를 구성하는 기본 단위이다.
부모 프레임 \{P\}에서 자식 프레임 \{C\}로의 관계는 다음과 같은 변환 {}^{P}T_{C}로 표현된다.
{}^{P}T_{C} = \begin{bmatrix} {}^{P}R_{C} & {}^{P}t_{C} \\ 0^T & 1 \end{bmatrix}
여기서 {}^{P}R_{C}는 부모 프레임에서 관측한 자식 프레임의 회전이고, {}^{P}t_{C}는 부모 프레임에서 관측한 자식 프레임 원점의 위치이다.
2. 단일 부모 규칙
TF2의 변환 트리에서 가장 중요한 규칙 중 하나는 **단일 부모 규칙(single parent rule)**이다. 루트 프레임을 제외한 모든 프레임은 정확히 하나의 부모 프레임만 가질 수 있다. 이 규칙은 트리 구조를 유지하기 위한 필수 조건이며, 이를 위반하면 변환 트리가 그래프(graph)로 변질되어 임의의 두 프레임 간 경로의 유일성이 보장되지 않는다.
\forall f \in V \setminus \{f_{\text{root}}\}: \quad \left|\{p \in V : (p, f) \in E\}\right| = 1
2.1 단일 부모 규칙 위반 시의 동작
TF2에서 동일한 자식 프레임에 대해 서로 다른 부모 프레임으로부터의 변환이 발행되면, 나중에 도착한 변환이 기존 변환을 덮어쓴다. 이 경우 TF2는 경고 메시지를 출력한다.
[WARN] [tf2]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame camera_link
at time X because a parent (old_parent) already exists.
이러한 상황은 시스템 구성 오류를 나타내므로, 변환 발행 노드들의 프레임 ID 설정을 검토해야 한다.
3. 다중 자식 관계
하나의 부모 프레임은 여러 자식 프레임을 가질 수 있다. 이는 트리 구조에서의 분기(branching)에 해당하며, 로봇 시스템에서 매우 일반적인 패턴이다.
3.1 일반적인 다중 자식 패턴
| 부모 프레임 | 자식 프레임들 | 설명 |
|---|---|---|
base_link | laser_frame, camera_link, imu_link | 로봇 본체에 장착된 센서들 |
base_link | wheel_left_link, wheel_right_link | 차동 구동 로봇의 바퀴 |
camera_link | camera_optical_frame, camera_depth_frame | 카메라의 하위 프레임들 |
odom | base_link | 오도메트리에서 로봇 본체 |
shoulder_link | upper_arm_link | 매니퓰레이터 관절 체인 |
4. 부모-자식 관계의 물리적 해석
4.1 물리적 부착 관계
부모-자식 관계는 주로 물리적 부착(attachment) 관계를 반영한다. 로봇 본체(base_link)에 물리적으로 고정된 센서들은 base_link의 자식 프레임으로 정의되며, 이들 간의 변환은 정적 변환(static transform)이다. 물리적 부착 관계의 변환은 센서의 장착 위치와 방향에 의해 결정되며, 시간에 따라 변하지 않는다.
4.2 운동학적 관계
매니퓰레이터의 관절 체인에서 부모-자식 관계는 운동학적 연결(kinematic linkage)을 나타낸다. 각 관절의 부모 링크는 부모 프레임이 되고, 자식 링크는 자식 프레임이 된다. 관절 각도(\theta)의 변화에 따라 부모-자식 간의 변환이 동적으로 갱신된다.
회전 관절(revolute joint)의 경우, 부모 프레임에서 자식 프레임으로의 변환은 다음과 같이 표현된다.
{}^{P}T_{C}(\theta) = T_{\text{fixed}} \cdot R_z(\theta)
여기서 T_{\text{fixed}}는 관절의 고정 오프셋이고, R_z(\theta)는 관절 축을 중심으로 한 \theta만큼의 회전이다.
4.3 위치 추정 관계
map → odom과 같은 위치 추정 관계에서, 부모-자식 관계는 위치 추정 알고리즘에 의해 계산된 보정 변환을 나타낸다. 이 경우 부모-자식 관계는 물리적 부착이 아닌, 알고리즘적으로 결정된 논리적 관계이다.
5. 부모-자식 관계의 발행 책임
TF2의 분산 아키텍처에서, 각 부모-자식 변환은 해당 변환에 대한 지식을 가진 노드에 의해 발행된다.
| 변환 | 발행 노드 | 유형 |
|---|---|---|
map → odom | 위치 추정 노드 (예: AMCL, SLAM) | 동적 |
odom → base_link | 오도메트리 노드 | 동적 |
base_link → sensor_frame | robot_state_publisher 또는 센서 드라이버 | 정적 |
link_i → link_{i+1} | robot_state_publisher | 동적 (관절) |
변환의 발행 책임은 명확하게 분리되어야 한다. 동일한 부모-자식 변환을 여러 노드가 동시에 발행하면 데이터 충돌과 불일관성이 발생한다.
6. 부모-자식 관계의 설계 원칙
6.1 원칙 1: 물리적 구조 반영
변환 트리의 부모-자식 관계는 가능한 한 로봇의 물리적 구조를 반영해야 한다. 물리적으로 부착된 구성 요소는 부착된 본체의 자식으로 정의하며, 독립적으로 움직이는 구성 요소는 별도의 변환 체인으로 분리한다.
6.2 원칙 2: 변환 발행의 독립성
각 부모-자식 변환은 단일 노드에 의해 독점적으로 발행되어야 한다. 이를 통해 변환 데이터의 일관성을 보장하고, 변환 발행의 책임 소재를 명확하게 한다.
6.3 원칙 3: 적절한 깊이 유지
변환 트리의 깊이가 과도하게 깊어지면, 변환 합성 시 누적 오차(accumulated error)가 증가하고 연산 비용이 상승한다. 반면, 트리가 과도하게 평탄(flat)하면 관련 프레임 간의 논리적 관계가 표현되지 않는다. 따라서 물리적 구조와 논리적 관계를 적절히 반영하는 깊이를 유지해야 한다.
6.4 원칙 4: 의미 있는 프레임만 정의
변환 트리에 불필요한 중간 프레임을 추가하면 시스템 복잡성이 증가한다. 실제로 좌표 변환이 필요한 물리적 또는 논리적 개체에 대해서만 프레임을 정의해야 한다.
7. 부모-자식 관계의 동적 변경
일반적으로 TF2의 변환 트리 구조(즉, 부모-자식 관계의 연결 관계)는 시스템 실행 중에 변경되지 않는다. 트리의 구조는 시스템 시작 시 확정되며, 실행 중에는 각 엣지의 변환 값만 갱신된다.
그러나 특수한 경우(예: 로봇이 물체를 집어 올리거나 놓는 경우)에는 변환 트리의 구조 변경이 필요할 수 있다. 이러한 경우에는 기존 변환을 중단하고 새로운 부모-자식 관계를 발행하는 방식으로 처리하되, 설계 시 주의 깊은 고려가 필요하다.
참고 문헌 및 출처:
- Foote, T., “tf: The transform library,” 2013 IEEE Conference on Technologies for Practical Robot Applications (TePRA), pp. 1-6, 2013.
- Open Robotics, “tf2 — ROS 2 Documentation,” ROS 2 Jazzy Jalisco, 2024.
- Craig, J.J., Introduction to Robotics: Mechanics and Control, 4th ed., Pearson, 2018.
- REP 105, “Coordinate Frames for Mobile Platforms,” Open Robotics, 2010.