👉🏼 A package that lets the user keep track of multiple coordinate frames over time
👉🏼 maintains the relationship between coordinate frames in a tree structure buffered in time
👉🏼 lets the user transform points, vectors, etc between any two coordinate frames at any desired point in time
로봇 시스템의 움직임은 많은 수의 3D 좌표계의 조합으로 표현할 수 있음. 예) 지도, 로봇베이스, 관절, 카메라 등등
tf2는 각 좌표계의 연관 관계를 시간순에 따라서 버퍼에 저장
이를 이용하면 좌표계에 관련한 여러가지 문제를 쉽게 해결 가능
ROS 시스템 내의 모든 노드들은 tf 정보에 접근 가능 (읽거나 쓸 수 있다)
분산시스템 구조
전체 기능을 총괄하는 중앙서버 (central server)가 존재하지 않음
현재는 개선된 버전인 tf2가 주로 사용, tf도 사용 가능
혹시나 설치가 안되어 있으면,
$ sudo apt install ros-noetic-turtle-tf2
데모 실행
$ roslaunch turtle_tf2 turtle_tf2_demo_cpp.launch
$ roslaunch turtle_tf2 turtle_tf2_demo_cpp.launch
....
NODES
/
sim (turtlesim/turtlesim_node)
teleop (turtlesim/turtle_teleop_key)
turtle1_tf2_broadcaster (turtle_tf2/turtle_tf2_broadcaster)
turtle2_tf2_broadcaster (turtle_tf2/turtle_tf2_broadcaster)
turtle_pointer (turtle_tf2/turtle_tf2_listener)
auto-starting new master
process[master]: started with pid [7115]
ROS_MASTER_URI=http://localhost:11311
setting /run_id to ee213ef2-a870-11ea-9128-00e18c79612a
process[rosout-1]: started with pid [7126]
started core service [/rosout]
process[sim-2]: started with pid [7132]
process[teleop-3]: started with pid [7134]
process[turtle1_tf2_broadcaster-4]: started with pid [7135]
Reading from keyboard
---------------------------
Use arrow keys to move the turtle. 'q' to quit.
process[turtle2_tf2_broadcaster-5]: started with pid [7142]
process[turtle_pointer-6]: started with pid [7147]
[ INFO] [1591501357.959344835]: waitForService: Service [/spawn] has not been advertised, waiting...
[ INFO] [1591501358.021799912]: waitForService: Service [/spawn] is now available.
[ WARN] [1591501358.049035936]: "turtle2" passed to lookupTransform argument target_frame does not exist.
💡 키보드의 화살표를 눌러 거북이를 이동해 봅시다. 어떤 일이 발생하나요?
💡 만약 저렇게 프로그램을 작성해야 한다면 어떻게 해야 할까요?