# Define a surface with three points

**URL:** <https://tech-community.robotics.abb.com/t/define-a-surface-with-three-points/891>\
**Category:** Robot Controller\
**Created:** [October 15, 2006, 12:13pm UTC](https://tech-community.robotics.abb.com/t/define-a-surface-with-three-points/891 "2006-10-15T12:13:05Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Katrin](https://avatars.discourse-cdn.com/v4/letter/k/ad7895/32.png) [@Katrin](https://tech-community.robotics.abb.com/u/Katrin)\
**Post date:** [October 15, 2006, 12:13pm UTC](https://tech-community.robotics.abb.com/t/define-a-surface-with-three-points/891/1 "2006-10-15T12:13:05Z")

</div>

I want to define a surface with three points. Than I want to move to a point on this surface. After that I want to move the table (which is my surface) to another point in the workingspace, define the surface with three points again and move to exactly that point I moved before. Can somebody please help me to find a solution? I want to program the robot in RAPID! I tried it with define a frame or workobject? But I don’t know how the point has to look like which I want to reach on the surface (Offset …)?  
Thank you very much!

---

<div class="post-metadata">

**Author:** ![claudio](https://avatars.discourse-cdn.com/v4/letter/c/7cd45c/32.png) [@claudio](https://tech-community.robotics.abb.com/u/claudio)\
**Post date:** [October 21, 2006, 4:13pm UTC](https://tech-community.robotics.abb.com/t/define-a-surface-with-three-points/891/2 "2006-10-21T16:13:21Z")

</div>

Hi Katrin.

1. Define the workobject. From the Manual Movement window, create a new workobject (with a good name, such wo\_Work).  
Use the 3 points method.
2. Make a trip with the robot in the new system (that is, selecting the new wo\_Work in workobject field in manual movement). Be sure you defined the coordinate system correctly, especially for Z axis!
3. If you’re satisfied with your new system, teach your points in a program. You’ll have a program like:

MoveL p10, v100, fine, tool1wobj:=wo\_work;  
MoveL p20, v100, fine, tool1wobj:=wo\_work;  
MoveL p30, v100, fine, tool1wobj:=wo\_work;  
MoveL p40, v100, fine, tool1wobj:=wo\_work;  
…

Now, if you move the table, you just need to redefine wo\_Work to fix all the points.  
If you need to move to a specified coordinate, you can do something like this:

ConfLOff;  
p := p10;  
p.trans := [10,10,0];  
MoveL p, v100, fine, tool1wobj:=wo\_work;  
p.trans := [20,10,0];  
MoveL p, v100, fine, tool1wobj:=wo\_work;  
…

Or, if you prefer:

ConfLOff;  
p\_Origin:= p10;  
p\_Origin.trans:=[0,0,0];  
MoveL Offs(p\_Origin, 10,10,0), v100, fine, tool1wobj:=wo\_work;  
MoveL Offs(p\_Origin, 20,10,0), v100, fine, tool1wobj:=wo\_work;  
…

If you don’t like the automatic procedure, you can also set the workobject in the program using:

wo\_Work.uframe:=DefFrame(p1,p2,p3);

Quaternions of points p10,p20,p30,p40 depend on the tool orientation you use. Play with EulerZYX and OrientZYX to alter the tool orientation in the program.

I hope this can help.

Bye  
Claudio
