ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

How to change Fanuc payload programatically?

asked 2022-10-04 08:37:08 -0500

Theodoro Cardoso gravatar image

Hi everyone,

I'm using the Fanuc CRX-10iA/L for a pick and place application on ROS Noetic and I’d like some help with making the robot lift more weight without complaining.

We have a 5kg gripper that must pick up objects weighing up to 3kg, one at a time.

In the initial grasping posture, the object is far away from the gripper as it extends out to grab it, causing the robot to throw a warning and stop due to excessive force. We can, however, move the robot without warnings once the object is already grasped.

Using a fixed payload has worked for lighter objects, however, if we set the fixed payload to work when picking up the heavy item, the robot fails when the gripper is empty. So now we apparently need a different payload configuration to switch to when carrying the heavy item.

On the state machine, I know exactly when that happens to trigger the payload change and there's a TP program named changed payload.

How can I call it programmatically?

Is there a way to run a Karel script or something like that from the CLI / C++ code?

I’m glad to provide more details as needed. Thanks!

edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted
0

answered 2022-10-05 03:22:53 -0500

gvdhoorn gravatar image

updated 2022-10-05 03:30:03 -0500

You don't mention how you are controlling your CRX-10iA/L, but this is not something that's directly supported by any of the drivers I've written (ie: fanuc_driver and fanuc_driver_exp).

What you could perhaps do is add a PAYLOAD[R[...]] statement somewhere after this line (or perhaps here would be better), then remotely update the register (ie: ... above) with gavanderhoorn/dominh (or some other way: fieldbus, Fanuc PCDK, etc). dominh currently does not have any ROS integration though.

You'd have to setup some payload schedules which capture the range of your payloads sufficiently, and then switch to them at opportune moments. I don't know whether you can update payload schedules directly (ie: the system variables). If you can, that would remove the need for many different pre-configured schedules.

One complicating factor here is that PAYLOAD[...] must be executed before your motion is started. With the payload schedule ID in a register, which you'd update via a different input (ie: remotely), and the controller pre-interpreting/executing some TP statements, you'd have to verify whether this will all work.

I also don't know whether setting PAYLOAD every time will slow down execution of the TP program. That'd also be something to check.

If you want/need to avoid possible race-conditions, you could extend the messages the driver itself uses (ie: at the Simple Message level) to not only include pose, velocity and time, but also a payload schedule nr. That would mean forking and would take you away from what's supported upstream. Whether that's a concern for you or not only you can decide.

edit flag offensive delete link more

Comments

I appreciate the answer, but we're on a tight deadline, wouldn't it be possible to workaround the payload problem in a simpler way, like using the TP web page, for example?

Theodoro Cardoso gravatar image Theodoro Cardoso  ( 2022-10-05 07:57:36 -0500 )edit

I'm not sure I follow.

gvdhoorn gravatar image gvdhoorn  ( 2022-10-05 08:07:27 -0500 )edit

The solution you proposed appears to be a bit more complex than what we had in mind. So I'm just curious to understand if we have other, possibly less elegant, ways of getting rid of the payload error straight from the Linux PC that runs ROS.

From my limited experience with the Fanuc CRX-10iA/L, it seems like we can access pretty much all the teach pendant functions on a browser like Firefox, including the program that allows the payload to be modified. Would you know of any way to interface with that programmatically?

Theodoro Cardoso gravatar image Theodoro Cardoso  ( 2022-10-05 11:24:55 -0500 )edit

Updating the ros_movesm TP program should not be very difficult. I've already described what would need to be added.

The only thing missing is a way to update the register. gavanderhoorn/dominh gives you a Python library which could be used, but it's non-deterministic. A fieldbus would be better, but more involved. If you have it, OPC-UA could be used.

it seems like we can access pretty much all the teach pendant functions on a browser like Firefox, including the program that allows the payload to be modified. Would you know of any way to interface with that programmatically?

no, I don't, although I don't doubt it'd be possible.

But if you'd be worried about synchronisation between motion execution and updating the payload configuration, I'd be more worried when using the TP app. It's essentially the same non-deterministic way of updating settings ...(more)

gvdhoorn gravatar image gvdhoorn  ( 2022-10-05 12:32:30 -0500 )edit

getting rid of the payload error

you're not looking to "get rid" of anything.

You're looking for a way to correctly configure the controller and tell it about the dynamic properties of the objects you're picking and placing. That's done using PAYLOAD[...] in TP.

gvdhoorn gravatar image gvdhoorn  ( 2022-10-05 12:33:19 -0500 )edit

Question Tools

2 followers

Stats

Asked: 2022-10-04 08:37:08 -0500

Seen: 2,138 times

Last updated: Oct 05 '22