Is there a “best practice” to avoid protective stops when the robot is lifting up objects with different weight where the payload is not exactly known in advance?
As an example, boxes with the same external dimensions but with unknown contents arrive on a conveyor and the robot should be able to pick them with a vacuumgripper.
Thanks for any suggestions,
Sounds like an interesting application. Do you at least know the lightest box, and the heaviest box?
I would consider to use any weight scale before/at pick position, which should be possible to share measured payload through fieldbus. Then calculated payload and center of gravity can be set with following UR Script commands:
Polyscope SW v5.9 and older:
Polyscope SW v5.10 and newer:
set_target_payload(m, cog, inertia=[0, 0, 0, 0, 0, 0])
The second option could be to use e-Series built-in F/T sensor to measure payload:
Updating the payload value and monitoring the changes in the robot behaviour may be a suitable solution even on CB-series robots which don’t have a force sensor. The following ‘proof of concept’ worked on CB-series, but requires further testing and improvements:
- setting the payload to the weight of the empty gripper
- pick the box
- start moving the box vertically up on a linear path by using interpolate_pose(), get_inverse_kin(), and servoj() commands
- monitor the joint angle deviations (get_target_joint_positions(), get_actual_joint_positions()) while moving with servoj()
- if joint deviation exceeds a small threshold limit, increment the payload value in small steps and continue servoj()
This could lift a 10kg box and set an approximate payload automatically on a CB-series robot. To improve accuracy, the force() function may be monitored in addition to the joint angle deviations, but this requires a lot of further testing.