# SoftMove issues

Options
Hello all,

We have two IRB4600 with SoftMove option for machine tool tending. We use Softmove to push against the part trays when picking up parts for loading. The trays are 60 inch by 30 inch, with three trays in the work zone. The robot goes from almost all the way extended to very close to the base when picking up. The problem I am having is the reduce stiffness value in the TCP Z axis needs to vary depending on where the robot is picking from. If I set it too light when the robot is extended it does not push against the tray. If I set it too heavy when the robot is in close it overloads/alarms the robot. I see there is a Force_offset_tune function to figure out the force needed to move at a point. The result is in Nm. The stifness value to push against the tray is a percentage. Is there some sort of function to map the values or some other trick to get the right force at varying points?

Code sample of what we are doing now. Note; I have three different values for the Fload variable depending on where the robot is, but it is not really working that well. I am looking for something more dynamic.

! Move to p1+offset
MoveL offs(Point1,xoff,yoff,200+Spindle1off),v1000,fine,grip6\WObj:=trayNum;

! feed onto part
MoveL offs(Point1,xoff,yoff,10+Spindle1off),V100,fine,grip6\WObj:=trayNum;

MoveL offs(Point1,xoff,yoff,Fpos+Spindle1off),V100,fine,grip6\WObj:=trayNum;

waitTime 1;
CloseGripper;
CSSDeactMoveL offs(Point1,xoff,yoff,200+Spindle1off),V100,grip6\WObj:=trayNum;
PartCheck;

TIA

• ✭✭✭
Options
Let's say that you pick figure the least force to pick - at the nearest part.  Then figure the most force to pick - at the farthest part.  Use the distance function to determine the distance from the nearest part to the part you are picking.  Make a formula to set the percentage of force based on the percentage of distance you are between the nearest and farthest part.  I hope that I make it clear what I am trying to describe.
Lee Justice
• Options
I am exploring your idea. In my Rapid code the only point for picking up parts is the corner of the tray. The actual part position is called with offs to that corner point to from a calculation. I would need to be able to capture the current location of the TCP to a point to use the Distance function. Is there a way to capture the current position?
• Options
YoDoug said:
I am exploring your idea. In my Rapid code the only point for picking up parts is the corner of the tray. The actual part position is called with offs to that corner point to from a calculation. I would need to be able to capture the current location of the TCP to a point to use the Distance function. Is there a way to capture the current position?
You can use CrobT.

pCurrentPosition:=CRobT(\Tool:=grip6\Wobj:=trayNum);
• Options
I worked out my formula for mapping the force according to the distance this morning. I should be able to get into the robot cell later today to test. Thanks for the help.
• ✭✭✭
Options
Good luck,let us know if it works.
Lee Justice
• Options
I finally got some time to test this morning. So far it appears to be working great. Here is what I ended up using to calculate the variable force by position.

PROC ForceCalc()

posPick := CPos(\Tool:=grip6 \WObj:=wobj0);
posBase := [0,0,300];
dist := Distance(posBase, posPick);
Dmin := 635;
Dmax := 2540;
Fmax := 40;
Fmin := 5;
FLoad := (dist - Dmin)*((Fmax - Fmin)/(Dmax - Dmin));

ENDPROC

Thanks again for the help!
• ✭✭✭
Options
You could also write that as a function to return the FLoad value.  Good job.
Lee Justice