Same coordinate group in different orientations

Hello everyone,

hello to all,
I’m new to robotics and I’m using an ur10e and I ask you for advice on how to perform this task:

there is a blue box with 4 buttons to press (P0, p1, p2, p3), the arm is positioned in front of this box and its position is fixed. the blue box today is in a position, tomorrow it will be moved a few centimeters or rotated a few degrees (the keys are fixed on the box and therefore always have the same positions known on it).

Currently I set the coordinates of the point P0 with Backdrive and then from this position imposed Direction long x , y , z. I set all coordinates in the TCP frame so far everything works. The problem arises when the box will not be in the same position, because even if I set the new P0, the end effector does not reach the keys precisely (or sometimes tries to “pass them”)

Is there a method to only assign the coordinates of P0 in reverse and then from that to reach all the positions of the other points whatever the position of the box?

thank you in advance

danidi Welcome to the forum,

Have you taught a plane for the Box?

If you have then there is no reteach P0 simply re-teach the plane to the new position of the box. All positions will automatically move relative to the new frame position.

If not then teach the plane then teach the position(s) but make sure the plane is selected in the feature of the move.

Hope this helps.

Hi Hammerton,

how do I create a plan for the box and move it every time?

I thought of fixing a xyz tern with origin in TCP every time I set the new P0, and then from P0 move to the other points(the translations are in the Tool space). I think the problem is due to the rotations that are created compared to the previous P0, because the translations are performed correctly

In the Manual section 17.3.4 Plane feature explains how to add and teach a plane. Note (a good TCP is required for teaching an accurate Plane!)

each time the box is moved. position the TCP to the new origin point and use get_actual_tcp_pose() apply that to the Plane feature

(in script) Plane_1 = get_actual_tcp_pose()
(Make sure the tool direction x, y, z is the same orientation as the plane was taught!)

Now your P0 will automatically be correct relative to the updated plane.


hi hammerton, first of all thank you for your support.
I tried to follow your advice, so I created the plan as specified in the Manual and set the coordinates of the points from the functions of the polyscope (okay the same? I am not very practical with urscript).
It seems to work, but it’s not very precise.
Could you help me structure the urscript code, step by step?

I try to show what I want to do better: (I replace the box with the cylinder because it is more realistic, and in fact the keys are at a different depth. the keys are fixed on the cylinder, but the cylinder can be found in slightly different positions)

There are probably a couple of ways to do this (like using URscript) but here is a very basic way:

I would check out URacademy - eLearning / 10. Feature Coordinates which would probably work if you index your “cylinder” in the same orientation each time and the locations of the keys are the same relative distance to one another. I don’t know what your EOAT looks like but I would adjust your TCP and move using the TOOL to get finer adjusts near your desired locations on your part, also scale the speed down.

This may not be exactly what you are looking for but I hope it helps and best of luck!