Skip to content

Coordinate Systems

Michel Breyer edited this page Feb 10, 2021 · 12 revisions

Robotic systems consist of many parts (links) connected with revolute, prismatic, fixed, floating, or planar joints. The configuration of each link can be represented with a set of 6 coordinates, three coordinates for translation and three coordinates for orientation. It is common practice to associate each link with a coordinate frame rigidly attached to a point on the body.

Transformation Matrix

Often we want to transform the coordinates of a point between coordinate systems. Let A and B be two arbitrary coordinate systems. Let pB be the coordinates of a point p with respect to coordinate system B.

The coordinates of p with respect to the coordinate system A are then given by

Naming Convention

Symbol Code Meaning
TAB T_A_B Transformation matrix that transforms points from frame B to frame A.
RAB R_A_B Rotation matrix that rotates points from coordinate system B to coordinate system A.
tAB t_A_B Position of frame B with respect to coordinate system A.
pA p_A Position of point p with respect to coordinate system A.

Common Frame Names

Name Description
world Fixed world reference frame, mostly used in simulation.
task Dynamically defined reference frame for a manipulation task, e.g. corner of a table.
base Base coordinate system located at the base of the robot.
tool0 Robot tool mounting point.
TCP Center point of the tool.

Libraries

scipy.spatial.transform

URDF

The Universal Robot Description Format is commonly used in the ROS stack to represent a robot model. The joint element describes the kinematics of a joint between two links as illustrated in the following image.

<joint name="my_joint" type="floating">
   <origin xyz="..." rpy="..."/>
   <parent link="parent"/>
   <child link="child"/>
</joint>

Here the origin tag defines the position and orientation of child w.r.t. parent, i.e. T_parent_child. Note that the rpy tag expects rotations to be specified as Euler angles. This can be achieved by calling the as_euler("xyz") method when working with SciPy's Rotation class.

ROS geometry

The tf and tf2 packages contain useful utilities to keep track of transformations between the robot links over time.

The transform between frame A and frame B can be looked up using the following command

rosrun tf tf_echo A B
Clone this wiki locally