## Data Types

TF can be used either with the underlying Bullet transform types or with the transform types available in the geometry_msgs package. Since tf deals with coordinate frames, every datatype that tf uses needs to be *stamped*, i.e. extra information is added to the datatype to represent the name of the frame in which it lives and a timestamp. The timestamp typically represents the time at which the data was created/ last valid.

tf can directly operate on the following messages or Bullet datatypes:

**Pose**- tf can transform poses by using the tf::transformPose function. The transformPose function can operate on:geometry_msgs/PoseStamped - A stamped representation of a pose expressed in a particular frame

`tf::Stamped<tf::Pose>`- A templated stamped representation of the underlying Bullet datatype btTransform.

**Position**- tf can transform positions (or points) using the tf::transformPoint function. The transformPoint function can operate on:geometry_msgs/PointStamped - Represents a stamped point in 3D.

`tf::Stamped<tf::Point>`- A stamped version of the underlying Bullet datatype btVector3.

**Rotation**- tf can transform a rotation using the tf::transformQuaternion function. The transformQuaternion function can operate on:geometry_msgs/QuaternionStamped - A stamped representation of a quaternion.

`tf::Stamped<tf::Quaternion>`- A stamped version of the underlying Bullet datatype btQuaternion.

**Vector**- tf can transform a free vector using the tf::transformVector function. The tranformVector function can operate on:geometry_msgs/VectorStamped - A stamped representation of a free vector.

`tf::Stamped<tf::Vector3>`- A stamped version of the underlying Bullet datatype btVector.

**PointCloud**- tf can transform point clouds directly using the tf::transformPointCloud function. This function operates on:sensor_msgs/PointCloud - A representation of a 3D point cloud.