Chapter 14: Coordinate Systems (Base, TCP, Tool, and Feature)

About This Chapter

Understanding coordinate systems is one of the most important aspects of using UR robots.

Operations such as moveL, servoL, Force Mode, and TCP configuration all rely on coordinate systems.

This chapter explains Base coordinates, Tool coordinates, TCP, Feature, Pose, and Rotation Vectors.


14.1 Why Are Coordinate Systems Necessary?

For example, an instruction such as:

Move 100 mm in the X direction

is ambiguous unless we know which X axis is meant.

Possible references include the robot reference frame, the tool reference frame, and the workpiece reference frame.

A coordinate system is therefore necessary.


14.2 Base Coordinates

The Base coordinate system is fixed to the robot body.

           +Z

            ↑

            │

            │

            ○────→ +X

           /

         +Y

The Base coordinate system does not move when the robot moves.

It is the most fundamental reference frame.


14.3 Tool Coordinates

The Tool coordinate system is fixed to the tool tip.

For example:

Gripper

──────►
        TCP

        +X

When the robot rotates, the Tool coordinate system rotates with it.


14.4 TCP

TCP stands for Tool Center Point.

It is the tool’s control point.

For example:

Flange

↓

Gripper

↓

Suction nozzle

↓

TCP is here

The controller calculates the joint positions needed to move the TCP to its target position.


14.5 TCP Configuration

The TCP can be configured using the Teach Pendant or an API.

For example:

Flange

↓

100 mm

↓

Suction pad

In this case, the TCP is located 100 mm beyond the flange.

If the TCP is configured incorrectly, operations such as moveL and Force Mode will not behave as expected.


14.6 Pose

UR represents position and orientation as:

[
x,
y,
z,
rx,
ry,
rz
]

The first three components:

x

y

z

represent position.

The last three components:

rx

ry

rz

represent orientation.


14.7 Units

Position is expressed in:

m

Orientation is expressed in:

rad

For example, to specify:

500 mm

enter:

0.5

14.8 Rotation Vector

UR uses a Rotation Vector, rather than Euler angles.

(rx,ry,rz)

represents:

Rotation axis

×

Rotation angle

For example, a rotation of:

180°

about the X axis

is represented by:

π

0

0

14.9 Why Not Euler Angles?

Euler angles are easy to understand in terms of:

Roll

Pitch

Yaw

However, they have problems such as gimbal lock.

Rotation Vectors can avoid this problem.


14.10 Motion in Base Coordinates

For example:

moveL

X +100 mm

In Base coordinates, this always moves in the robot’s forward direction, regardless of the Tool orientation.


14.11 Motion in Tool Coordinates

In Tool coordinates, motion follows the:

Tool X

direction.

For example, if the Tool rotates by 90°, the same:

Tool X

direction becomes the Y direction in Base coordinates.


14.12 Difference Between Base and Tool

Base:

The world reference frame remains fixed.

The Tool moves.

Tool:

The coordinate system follows the Tool.

14.13 Feature Coordinates

A Feature is a user-defined coordinate system.

For example, it can be assigned to a table, fixture, or workpiece.

Base

↓

Feature

↓

TCP

This forms a hierarchy of reference frames.


14.14 Workpiece Coordinates

For example, suppose the lower-left corner of a workpiece is defined as the:

Feature origin

Even after replacing the workpiece, the same program can be used by updating only the Feature.


14.15 Coordinate Transformations

Inside the controller, transformations such as:

Tool

↓

Base

↓

Joint

are performed every control cycle.

Users normally do not need to be aware of these calculations.


14.16 poseTrans()

In URScript, poseTrans(A,B) can be used to calculate a displacement of:

B

in the coordinate system of

A

It is commonly used for motion relative to the Tool frame.


14.17 poseInv()

poseInv()

calculates the inverse transformation of a Pose.

It is frequently used in coordinate transformations.


14.18 Common Mistakes

  • Entering values in millimeters instead of meters.

  • Entering angles in degrees instead of radians.

  • Failing to configure the TCP.

  • Confusing Base and Tool coordinates.

  • Forgetting to update the Feature.


14.19 Design in ur_ctrl.py

A high-level API can provide functions such as:

move_base()

move_tool()

set_tcp()

get_tcp()

set_feature()

This helps users remain aware of which coordinate system they are using.


14.20 Practical Considerations

For typical automation equipment, it is useful to think in terms of a three-layer structure:

Base

↓

Feature

↓

TCP

Base is fixed to the equipment.

Feature represents the fixture.

TCP represents the tool tip.

By separating these appropriately, changes to the program can be minimized when replacing workpieces or modifying fixtures.


Summary

UR uses multiple coordinate systems, including Base, Tool, TCP, and Feature.

To use moveL, Force Mode, servoL, and similar operations correctly, it is essential to remain aware of the coordinate system in which each command is expressed.

The next chapter explains inverse kinematics (forward and inverse kinematics) and orientation representations in more detail.