Coordinate systems and especially transformations between local and world coordinates are used in robotics very often. Here is a small but practical introduction into the topic.

There are different types of coordinate systems but when we talk about robotic the most popular are:

- The standard
**Cartesian coordinates**- values x, y specify position of a point as a distance from the coordinate system origin. Origin is the point where coordinate system axis cross each other. These axis are perpendicular. Computer display uses this type of coordinate system. - The standard
**Polar coordinates**- 2D coordinate system in which position of a point in a plane is determined by a distance from a fixed point (r) and an angle (theta) from a fixed direction.

**Transformation matrix**- the coordinate system that is rotating while the object remains fixed. (http://www.continuummechanics.org/cm/coordxforms.html)

**Rotation matrix**- the object rotates while the coordinate system remains fixed.

**Transformation from global to local coordinates and vise versa in Octave/Matlab**

clear all;

close all;

clc;

offset = 0.1;

%Transformation matrix from global to local coordinates

theta1 = -pi/4;

x1 = 2;

y1 = 2;

R1 = [cos(theta1), - sin(theta1), x1; sin(theta1), cos(theta1), y1; 0, 0, 1];

%Transformation matrix from local to global coordinates

R1_inv = inv(R1);

%Points in global and local coordinate system

Xg = [1;2;1];

Xl = [1;1;1];

%Temp vector used to store temporary math result

TMP = [0;0;0];

%Vector containing data to be plotted - initially filled by min and max values so the plot has dimensions 0 - 10 in x direction and 0 - 10 in y direction

x=[0,0;10,0];

y=[0,0;10,0];

%Display Xg in global CS

printf("Xg in global CS - no transformation needed: ");

TMP = Xg

text (TMP(1,1) + offset,TMP(2,1) - offset, "Xg in\ngl. CS");

hold on

x=[x;TMP(1),0]; %Add result into vector that will be plotted

y=[y;TMP(2),0]; %Add result into vector that will be plotted

** %Display Xl in global CS**

printf("Xl in global CS - transformed via R1: ");** TMP = R1*Xl**

text (TMP(1,1) + offset,TMP(2,1) - offset, "Xl in\ngl. CS");

hold on

x=[x;TMP(1),0];

y=[y;TMP(2),0];

** %Display Xg in local CS**

printf("Xg in local CS - transformed via R1_inv: ");** TMP = R1_inv*Xg**

text (TMP(1,1) + offset,TMP(2,1) - offset, "Xg in local CS\nnote: [0,0] of this view is taken as origin of the local CS for this point");

hold on

x=[x;TMP(1),0];

y=[y;TMP(2),0];

%Plot

stem(x,y);

%Save

print("local_to_global_coords_transforms.png");

----------------------------------------------------------------------

Source code : local_to_global_coords_transforms.m

Extended source code : local_to_global_coords_transforms_ext.m

## Comments

Here is my homepage - We-Vibe 4 Plus madrid: http://lolatoys.com/es/we-vibe-4-plus.html

RSS feed for comments to this post