2024. 9. 20. 17:23ㆍROS2/기초
https://with-rl.tistory.com/entry/ROS2-Transformation-System-TF2
참조 문서
TF2
ROS2의 tf2는 Transformation Library for ROS 2의 약어로, 로봇의 위치와 방향 변환 정보를 관리하기 위한 핵심 라이브러리입니다. tf2는 ROS2에서 좌표 프레임 변환과 관련된 작업을 단순화하고, 로봇 시스템의 여러 구성 요소 간의 좌표계 변환을 추적하는 데 사용됩니다.
tf2는 변환 정보를 관리하기 위해 트리 구조를 사용합니다. 이 트리 구조는 프레임(frame)이라고 불리는 좌표계를 포함하며, 각 프레임은 로봇 시스템 내의 특정 위치나 부분을 나타냅니다. 프레임 간의 변환 정보는 로봇 시스템에서 발생하는 모션과 관련된 변환을 나타냅니다.
tf2의 핵심 구성요소
- Broadcaster(브로드캐스터): tf2의 브로드캐스터는 변환 정보를 발행(publish)합니다. 로봇 시스템의 다양한 요소(예: 로봇 팔, 센서 등)의 변환 정보를 브로드캐스터를 통해 전달할 수 있습니다.
- Listener(리스너): tf2의 리스너는 변환 정보를 구독(subscribe)합니다. 리스너는 원하는 변환 정보를 구독하여 로봇 시스템의 다른 요소들 간의 변환 관계를 추적하고 사용할 수 있습니다.
- Transformer(트랜스포머): tf2의 트랜스포머는 프레임 간의 변환 관계를 계산하고 변환을 수행하는 기능을 제공합니다. 트랜스포머는 변환 트리를 통해 로봇 시스템의 다른 프레임 간의 상대적인 위치와 방향을 추적하고, 좌표계 간의 변환을 수행합니다.
tf2를 사용하면 로봇 시스템 내의 다양한 구성 요소들 간의 변환 관계를 쉽게 추적하고, 로봇의 위치와 방향을 변환하고, 센서 데이터를 변환할 수 있습니다. 또한, tf2는 시각화 도구와 통합하여 로봇의 변환 정보를 시각적으로 확인하고 디버깅할 수 있습니다.
- 3차원 공간에서 물체의 위치와 자세를 표현하기 위해서는 (x,y,z,θx,θy,θz) 6개의 값으로 표현할 수 있습니다.
◦ x: x 축 방향으로 이동 거리입니다.
◦ y: y 축 방향으로 이동 거리입니다.
◦ z: z 축 방향으로 이동 거리입니다.
◦ : x 축을 기준으로 반 시계 방향으로 회전한 각도입니다.
◦ : y 축을 기준으로 반 시계 방향으로 회전한 각도입니다.
◦ : z 축을 기준으로 반 시계 방향으로 회전한 각도입니다. - 2차원 공간에서는 물체의 위치와 자세를 표현하기 위해서는 (x,y,θ) 3개의 값으로 표현할 수 있습니다.
◦ : x축 방향으로 이동 거리입니다.
◦ : y축 방향으로 이동 거리입니다.
◦ : 반 시계 방향으로 회전한 각도입니다. - 3차원 공간에서 물체의 위치와 자세를 표현하는 것은 매우 복잡한 내용이므로 이번 포스팅에서는 2차원 공간에서 물체의 위치와 자세를 표현하는 것으로 설명하겠습니다.
static_transform_publisher를 이용한 TF2 기능 확인
- 서로 연결된 두 개의 로봇 중 한 개를 회전했을 때 다른 로봇의 위치에 계산에 대한 기능을 확인하는 과정
- 아래 명령을 실행해서 world frame과 robot_1을 생성합니다.
◦ 2 1 0: x, y, z 좌표로 x=2, y=1, z=0이라는 의미입니다.
◦ 0.785 0 0: 은 yaw, pitch, roll 값으로 반시계 방향으로 45° π/4 만큼 회전하라는 의미입니다.
ros2 run tf2_ros static_transform_publisher 2 1 0 0.785 0 0 world robot_1
rviz2
- 아래 명령을 실행해서 robot_1의 하위에 robot_2 생성합니다.
◦ 1 0 0: x, y, z 좌표로 x=1, y=0, z=0이라는 의미입니다.
◦ 0 0 0: 은 yaw, pitch, roll 값으로 회전이 없다는 의미입니다.
ros2 run tf2_ros static_transform_publisher 1 0 0 0 0 0 robot_1 robot_2
- 아래 명령을 실행해서 world 좌표를 기준으로 robot_1의 위치를 변경합니다.
◦ 2 1 0: x, y, z 좌표로 x=2, y=1, z=0이라는 의미입니다.
◦ 1.57 0 0: 은 yaw, pitch, roll 값으로 반시계 방향으로 90° π/2 만큼 회전하라는 의미입니다.
ros2 run tf2_ros static_transform_publisher 2 1 0 1.57 0 0 world robot_1
Moving Robot 기능 확인
Josh Newans님이 제공하는 robot urdf를 이용해서 TF 기능을 확인해보는 과정
터미널 창에서 아래 명령 실행해서 파일 다운로드
wget https://gist.githubusercontent.com/joshnewans/69cb8a049fb4606b0a6bdecd6933164e/raw/0851acb1a78605ce658292e734c83bcb73b515a6/example_robot.urdf.xacro
첫 번째 터미널 창에서 아래 명령 실행해서 robot_state_publisher 실행, robot에 대한 정보인 robot_description은 다운로드한 'example_robot.urdf.xacro'
ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$( xacro ~/example_robot.urdf.xacro )"
두 번째 터미널 창에서 아래 명령 실행해서 'joint_state_publisher_gui' 실행
ros2 run joint_state_publisher_gui joint_state_publisher_gui
세 번째 터미널 창에서 아래 명령 실행해서 Rviz 실행
rviz2
'ROS2 > 기초' 카테고리의 다른 글
ROS2 3일차(2) Service 프로그래밍 (0) | 2024.09.23 |
---|---|
ROS2 3일차(1) Service (0) | 2024.09.23 |
ROS2 2일차(4) topic 프로그래밍 (0) | 2024.09.20 |
ROS2 2일차(3) topic (0) | 2024.09.20 |
ROS2 2일차(2) launch (0) | 2024.09.20 |