with-RL
로봇 / ROS2024년 1월 28일

ROS2 Transformation System (TF2)

이 포스트는 로봇의 위치와 방향을 표현하고 계산하는 데 사용되는 ROS2의 transformation에 대한 내용입니다.

이 포스트는 다음 영상의 내용을 기반으로 개발하고자 하는 로봇에 적합하게 수정했습니다.

이 포스트는 다음 과정을 완료한 후에 참고하시길 바랍니다.

1. ChatGPT가 응답한 TF2

Question: ROS2의 tf2에 대해서 설명해줘

Answer: ROS2의 tf2는 Transformation Library for ROS 2의 약어로, 로봇의 위치와 방향 변환 정보를 관리하기 위한 핵심 라이브러리입니다. tf2는 ROS2에서 좌표 프레임 변환과 관련된 작업을 단순화하고, 로봇 시스템의 여러 구성 요소 간의 좌표계 변환을 추적하는 데 사용됩니다.

tf2는 변환 정보를 관리하기 위해 트리 구조를 사용합니다. 이 트리 구조는 프레임(frame)이라고 불리는 좌표계를 포함하며, 각 프레임은 로봇 시스템 내의 특정 위치나 부분을 나타냅니다. 프레임 간의 변환 정보는 로봇 시스템에서 발생하는 모션과 관련된 변환을 나타냅니다.

tf2의 핵심 구성 요소는 다음과 같습니다:

Broadcaster(브로드캐스터): tf2의 브로드캐스터는 변환 정보를 발행(publish)합니다. 로봇 시스템의 다양한 요소(예: 로봇 팔, 센서 등)의 변환 정보를 브로드캐스터를 통해 전달할 수 있습니다.

Listener(리스너): tf2의 리스너는 변환 정보를 구독(subscribe)합니다. 리스너는 원하는 변환 정보를 구독하여 로봇 시스템의 다른 요소들 간의 변환 관계를 추적하고 사용할 수 있습니다.

Transformer(트랜스포머): tf2의 트랜스포머는 프레임 간의 변환 관계를 계산하고 변환을 수행하는 기능을 제공합니다. 트랜스포머는 변환 트리를 통해 로봇 시스템의 다른 프레임 간의 상대적인 위치와 방향을 추적하고, 좌표계 간의 변환을 수행합니다.

tf2를 사용하면 로봇 시스템 내의 다양한 구성 요소들 간의 변환 관계를 쉽게 추적하고, 로봇의 위치와 방향을 변환하고, 센서 데이터를 변환할 수 있습니다. 또한, tf2는 시각화 도구와 통합하여 로봇의 변환 정보를 시각적으로 확인하고 디버깅할 수 있습니다.

2. 로봇 좌표계에서 고려할 점

$$\begin{pmatrix} x_2 \\ y_2 \end{pmatrix} = \begin{pmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{pmatrix} \begin{pmatrix} x_1 \\ y_1 \end{pmatrix}$$

3. static_transform_publisher를 이용한 TF2 기능 확인

$ ros2 run tf2_ros static_transform_publisher 2 1 0 0.785 0 0 world robot_1
$ rviz2
$ ros2 run tf2_ros static_transform_publisher 1 0 0 0 0 0 robot_1 robot_2
$ ros2 run tf2_ros static_transform_publisher 2 1 0 1.57 0 0 world robot_1
$ wget https://gist.githubusercontent.com/joshnewans/69cb8a049fb4606b0a6bdecd6933164e/raw/0851acb1a78605ce658292e734c83bcb73b515a6/example_robot.urdf.xacro
$ rqt_graph

4. Moving Robot 기능 확인

$ cd
$ wget https://gist.githubusercontent.com/joshnewans/69cb8a049fb4606b0a6bdecd6933164e/raw/0851acb1a78605ce658292e734c83bcb73b515a6/example_robot.urdf.xacro
$ ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$( xacro ~/example_robot.urdf.xacro )"
$ ros2 run joint_state_publisher_gui joint_state_publisher_gui
$ rviz2