How do I get the UR to stop pushing?

Hi all,
I have an application where I’m loading a lathe chuck with a UR 10. And in order to guarantee a proper chuck loading in the lathe I have it following this sequence:

  1. MoveL - Until force is greater than 35, (position slightly behind the contact position)
  2. Chuck close
  3. Wait for chuck close
  4. Open gripper fingers
    at this point the robot snaps forward because it is still applying force.

My question is:
How do I get it to stop pushing so that it doesn’t snap forward when I open the grippers?
I imagine this would not be very good for the robot in the long term.
THank you!

The actual code looks like this:
MoveL
approach_chuck (waypoint)
wait: 0.1
zero_ftsensor()
load chuck (waypoint)
until expression: force() > 35
set Chuck_Clamp = HI:Pulse 0.5
Wait Chuck_closed = HI
open_gripper() - my script function for opening the gripper
part_gripped := “none” (custom variable for trackig what’s in the gripper)
apprch_chuck (waypoint - retract back to approach position)

Thank you!

first off, 35N seems high for part seating, but i dont know your application.

the direction program node has an “until tool contact” feature that is pretty good, you might try it out here. but it may not apply force to seat the part.

what i have done in the past is turn on freedrive for a moment after the chuck has closed, but before gripper release. The arm wont go anywhere because it is still gripping the part that is now clamped in the chuck. this will effectively unload any mechanical wind up caused by the target waypoint being beyond the physical obstruction. like this pseudo code:

apply force
clamp chuck
wait chuck clamped
turn on freedrive
wait 0.5s
turn off freedrive
open gripper

another way to approach this would be to capture current tcp position after the chuck closes. moveL to that location while the chuck is closed and gripper still gripping. THEN release the gripper. like this:

apply force
clamp chuck
wait chuck clamped
clamped_pose = get_tcp
moveL(clamped_pose)
open gripper

I prefer the freedrive approach since this will also unload any extraneous torques applied by small mis-alignments between the gripping position of the chuck and robot waypoint - the robot will effectively reduce all forces and moments as much as possible

1 Like

Thanks for the quick reply!
I really like the freedrive idea, however, when I tried it, as soon as I turn on the freedrive, (with the turn_on_freedrive() function) the program just pauses.
It’s odd because it doesn’t stop, I can hit the pause and play button, but it won’t go any further.
Any ideas on why this would happen?
Thanks!

I am not familiar with turn_on_freedrive(), and i dont see it in script manual 5.11.

I use freedrive_mode() and end_freedrive_mode(), but i dont know the history off the top of my head and i cant say if/when those were introduced or if theyve always been there

what version of polyscope are you using?

Sorry, I wrote it wrong, i did use the freedrive_mode() function, and just tried it again this morning, but the program won’t go back out of freedrive.
This is what my sequence looks like:

MoveL
apprch_chuck - waypoint
wait (0.1)
zero_ftsensor()
load_chuck - waypoint
until (force > 35)
freedrive_mode()
wait(0.5)
end_freedrive_mode()
open_gripper() - custom script
apprch_chuck - waypoint.

Thanks again!
freedrive_mode()

Well, now it works!!!
Thank you very much! And I’m sure my robot will also appreciate a longer life!!

Awesome! im glad you got it figured out. FYI - the force mode does not need the waypoint to be “behind” the chuck. the arm will progress in the direction of desired force even if that means deviating from a waypoint within a force command.

some other comments:
What I do when I am loading a chuck/vise like this is:

  • move to a point close to the bottom/back of the chuck, but with clearance (say ~1/8"~3/16"?)
  • use direction node; until tool contact; 0mm retraction - GO SLOW SO IT DOESNT BOUNCE BACK. like 5mm/s. (get close in the previous step to reduce time)
  • add action to apply force from here
  • close chuck
  • end force mode
  • freedrive mode
  • small wait
  • turn off freedrive mode
  • open gripper

This does 2 things: 1) the robot is doing controlled collision detection instead of just driving with a desired force and slamming into the back. 2) this will eliminate the waypoint “behind” the chuck since the force waypoint will be the tool contact point.

2nd FYI - while i was looking for turn_on_freedrive(), I came across this which might be interesting. I have not used it, but I am going to try it now!:
image

1 Like