Hits

ROS(Robot Operating System)에 대해 연재합니다.

Contents

1. ROS Introduction

2. ROS basic concepts

3. ROS step by step으로 설치하고 실습하기

4. ROS TF (Transformation)



(New Update Version. Original 2019-04-04)


이번 포스팅에서는 ROS tf, transformation의 개념을 이해하고, 이를 이용하여 robot의 pose를 broadcating, listening 하는 것에 대해 알아보겠습니다.

  1. tf
  2. transform data types
  3. tf broadcaster, tf listener, tf frame
  4. Time travel with tf



prev : ROS Step by Step

ROS step by step



tf

각 coordinate frame 간의 관계, 임의의 time에서 두 coodinate frame간 점, 벡터 등 변환

image

A robotic system typically has many 3D coordinate frames that change over time, such as a world frame, base frame, gripper frame, head frame, etc. tf keeps track of all these frames over time, and allows you to ask questions like:

  • 5초 전에 head frame이 world frame에 대해 어느 위치에 있는지
  • gripper object의 Pose가 base와 어떤 관련이 있는지

Base data types (Quaternion, Vector, Point, Pose, Transform)

ROS geometry_msg 타입 중에서 transform data types

Type tf Raw Message Definition
Quaternion tf::Quaternion This represents an orientation in free space in quaternion form.float64 xfloat64 yfloat64 zfloat64 w
Vector tf::Vector3 This represents a vector in free space. # It is only meant to represent a direction. Therefore, it does not# make sense to apply a translation to it (e.g., when applying a # generic rigid transformation to a Vector3, tf2 will only apply the# rotation). If you want your data to be translatable too, use the# geometry_msgs/Point message instead.float64 xfloat64 yfloat64 z
Point tf::Point This contains the position of a point in free spacefloat64 xfloat64 yfloat64 z
Pose tf::Pose A representation of pose in free space, composed of position and orientation. Point positionQuaternion orientation
Transform tf::Transform This represents the transform between two coordinate frames in free space.Vector3 translaionQuaternion rotation


Type Description
Vector (벡터) 방향과 크기를 가짐위치는 없음벡터와 벡터간 연산: 덧셈, 뺄셈, 외적 (결과는 벡터), 내적 (결과는 스칼라)벡터와 스칼라 연산 : 곱셈 (결과는 벡터)
Position (위치) 위치만 가짐위치와 위치간 연산: 뺄셈 (결과는 벡터)벡터와 위치 연산: 덧셈 (결과는 위치)
Quaternion 4개의 값으로 이루어진 확장된 복소수 체계를 이용해 3차원 회전을 표현행렬에 비해 연산 속도가 빠르고, 차지하는 메모리의 양도 적으며, 최단호(shortest arc) 보간으로 오류 발생률이 적다.

Euler angle / 짐벌락 현상 개선

image image

Quaternion

아래의 자료는 SLAM KR 스터디 Youtube와 발표자료를 참고하였습니다.

https://www.youtube.com/watch?v=TujSQ09jpWA&feature=youtu.be

(출처 문제 시 삭제하겠습니다.)

image image

translation과 rotation을 포함한 Tranform matrix

image

$ sudo rosdep init
$ rosdep update


tf : tf broadcaster and tf listener

roslaunch learning_tf start_demo.launch

tf 라이브러리를 사용하여 3개의 좌표 프레임 : world frame, turtle1 frame, turtle2 frame을 만듭니다.

  • tf broadcaster : to publish the turtle coordinate frames
  • tf listener : to compute the difference in the turtle frames and move one turtle to follow the other.

image

rosrun tf view_frames
Transform Listener initing
Listening to /tf for 5.000000 seconds
Done Listening
dot - Graphviz version 2.16 (Fri Feb 8 12:52:03 UTC 2008)

Detected dot version 2.16
frames.pdf generated

evince frames.pdf

tf에 의해 broadcast 되는 3개의 프레임 : world, turtle1, turtle2

rosrun rqt_tf_tree rqt_tf_tree

image

rosrun tf tf_echo turtle1 turtel2

the transform of the turtle2 frame with respect to turtle1 frame

터틀1 프레임에 대한 터틀2 프레임의 transform : Translation and Rotation

image

At time 1416409795.450
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405]
in RPY [0.000, -0.000, 2.308]
At time 1416409796.441
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405]
in RPY [0.000, -0.000, 2.308]

tf broadcaster / tf listener / Adding a frame

image image

How to get a transform at a specific time.

turtle1을 움직이고 난 후 5초 후에 turtle2가 움직인다.

image