Study
Isaac · Sim

Isaac Sim ROS2 Tutorial 4: TF Tree와 Odometry 구성

TurtleBot의 sensor frame, odom frame, base frame을 ROS2 TF tree와 odometry topic으로 연결한다.

isaac-simros2tfodometryrviz2omnigraph

이번 글에서는 TurtleBot의 sensor frame과 odometry를 ROS2 TF tree로 내보내는 과정을 정리했다. camera와 lidar topic이 보이더라도, RViz2에서 로봇 위에 올바르게 표시하려면 각 topic의 frame이 TF tree 안에 연결되어 있어야 한다.

1. Camera TF Publisher

이전 글에서 만든 camera prim들을 대상으로 ROS2 Publish Transform Tree 노드를 추가한다. timestamp는 Isaac Sim simulation time을 사용하도록 연결한다.

TF publish용 OmniGraph

TF publisher target 설정

robot articulation root를 함께 넣고 parent prim을 base frame으로 맞추면 camera와 wheel frame을 robot base 아래에 묶을 수 있다.

camera TF tree graph

TF tree node input 설정

2. Odometry 설정

Odometry graph는 robot의 이동량을 계산해 /odom topic으로 publish하고, 동시에 odom -> base_link 관계를 TF로 내보낸다.

odom에서 base_link를 계산하는 graph

odometry target 설정

odom과 base_link frame 설정

3. Robot Base 아래 TF 정리

sensor frame과 wheel frame이 base 아래에 일관되게 붙어 있어야 RViz2에서 display 기준 frame을 바꿔도 데이터가 흐트러지지 않는다.

robot base link와 하위 link TF 설정

robot base link와 child link TF tree

1
2
orientation: (1, 0, 0, 0)
translation: (0, 0, 0)

4. World와 Odom 연결

simulation world와 odom frame 사이의 관계도 명시적으로 publish한다. 이 연결이 빠지면 TF tree가 둘로 갈라져 RViz2에서 frame lookup 오류가 날 수 있다.

world와 odom의 TF tree

world와 odom raw transform 설정

최종 TF tree

5. RViz2와 tf_viewer 확인

RViz2에서는 fixed frame을 odom 또는 base_link로 두고, camera, lidar, odometry display가 같은 tree 안에서 움직이는지 확인한다.

실행 결과 미리보기

1
2
3
4
world
  -> odom
  -> base_link / base_footprint
  -> sensors and wheel links

Isaac Sim의 tf_viewer extension을 사용하면 stage 안에서도 TF 구성을 빠르게 확인할 수 있다.

tf_viewer extension enable

1
2
3
4
robot prim / sensor prim
  -> ROS2 Publish Transform Tree
  -> ROS2 Publish Odometry
  -> RViz2 TF and Odometry display

이번 단계의 핵심은 topic과 frame을 따로 보지 않는 것이다. ROS2 sensor message는 frame_id를 포함하고, 그 frame_id가 TF tree 안에서 robot base와 연결되어야 실제 로봇 위치 기준으로 해석된다.