# Base offset from a point

• Hi everybody!

I’m new in the forum and I’ll like to know if some of you can help me to see the light on this.

The thing is that I’m creating an inline form for easily adjust Bases when this has been moved.

The program works this way:

It ask you for a base, tcp and a E6Pos (a welding spot) , then you go manually to the right position of the welding spot and whenever you are there you run the inline and the base shifts and you get that your current position is now exactly the same coordinates as the E6pos you wanted. Everything works fine until the frame is moved in A, B or C, because I get my XYZ crazy.
I supose that I’ll need to use the geometric operator ( : ) but I don’t know exactly how it works.

Sorry if my explanation has been a little messy but I’m not used to write in english!

Thanks!

• if you want to correct base, it is important to know what constraints are in place because base measurement requires three points, not one.

2) if you have an issue with robot, post question in the correct forum section... do NOT contact me directly

• So, I assume the weld spot you're using as a reference is programmed in the Base you want to correct, yes?

The thing about shifting a Base (or point) is that you need to have your reference datums in the same reference frame. All Bases are just offsets from \$WORLD. So if you just go into the BASE_DATA entry and change the values of XYZ, you are shifting the Base along the World axes.

Example: Let's take a simple Base: BASE_DATA[1] = {X 1000,Y 0,Z 0,A 90,B 0,C 0}. Now, this base is located 1 meter in front of the robot, and is rotated by 90deg counterclockwise around an axis parallel to the \$WORLD Z axis. This means that Base1's Z axis is still parallel to \$WORLD's Z axis, but Base1's Y axis is exactly antiparallel to \$WORLD X, and Base1's X is antiparallel to \$WORLD Y.

If you do this:

\$BASE_DATA[1].Y = \$BASE_DATA[1].Y + 100

You will move the origin of Base1 along \$WORLD's Y axis, not along Base1's Y axis.

On the other hand, if you do this:

\$BASE_DATA[1] = \$BASE_DATA[1] : {X 0,Y 100,Z 0A 0,B 0,C 0}

That will move Base1 along it's own Y axis.

So, if the weld spot you're using as a reference is programmed in \$WORLD (Base 0), you need to use the first method. If your weld spot is programmed in Base 1, you need to use the second method.

Now, as Panic said, to generate rotation corrections for a Base, you need at least 3 points. And the math gets rather involved. There used to be a utility included in KRCs for doing this, but I'm not sure it still is -- check in the /KRC/UTIL directory.

The simplest method would be to select 4 reference points, and record their optimal positions in the optimal Base. Then, when you need to update the Base, use the 4-point indirect method to re-teach the base, using the actual and nominal positions of those four reference points.

• why not use three points and calculate base? code was shared on forum before. just need tool with nice TCP - spot guns are not good for this, tip are rounded and burn out. for cases like this i like to have a pointer. could be something that attaches to existing tool but has a well defined tip. then you can measure three points on your fixture and use mentioned code to calculate frame. if fixture moves, just touchup those three points. oh.. and make sure that inline forms for those points use world as base.

2) if you have an issue with robot, post question in the correct forum section... do NOT contact me directly

• this is generic transform to find base when everything else is known:

base_data[2]=base_data[1]:xP1:INV_POS(tool_data[1]):tool_data[2]:INV_POS(xP2)

if the tool did not change, this becomes simpler

base_data[2]=base_data[1]:xP1:INV_POS(xP2)

but... how do you suppose you can get the point correctly?

2) if you have an issue with robot, post question in the correct forum section... do NOT contact me directly

• hello to members. as base offset is discussed in this thread, and issue is related to this thread so post here.

i am working on a project of robotic drilling and riveting. 2 separate kuka robots are used for both drilling and riveting

1st step, drilling will be done with spindle mounted on kuka robot. assembly is clamped in a fixture.

2nd step, the assembly is shifted to riveting station which is a rivet gun mounted on kuka robot.

assembly is clamped in a new fixture for riveting.

i want to use single program for both drilling and riveting. The problem is "due to mechanical fixtures there comes an offset in the drilled hole positions".

Can i use the single program for both kuka robots using offset techniques (tool or base) or should use a vision system to detect the exact hole position and move kuka to that hole for riveting. Is there any method using offsets commands, that after teaching random xyz points at riveting station, kuka calculates the exact position of base or drilled holes.