Adjusting Payload Dynamically

One thing that I noticed in passing, but didn’t really come to understand until this week is that sometimes I think the motion controller on the ZA6 seems to be thrown off by when I’m carrying a heavier payload than I was when the unit was powered on.

The symptom I see is that if I’ve turned on the robot “empty handed” so to speak, and then go pick up vise jaws and a piece of metal during tending, I can end up with very jerky motion when the robot is carrying the load. After it places the jaws and material on the vise it’s back to normal.

My solution has been to load the vise jaws and metal onto the robot, hit the e-stop and power cycle it so that it boots under load. After that, it seems to be fine. But, I feel like there’s probably a more elegant solution to this that I have overlooked?

@bigtchopshop - that’s a pretty interesting finding and not one that I’ve seen on robots at Tormach. I assume this is with that FJ gripper and a loaded set of top jaws? If you can eyeball the payload weight I’ll try to reproduce the behavior and let you know what I find. I’m sure we can come up with a solution.

In the meantime, you might work around the issue by adding an acceleration command to the ‘heavy payload’ moves. There is an acceleration parameter for move movel(). It’s a value between 0 and 1 representing zero to max acceleration.

Example: movel('my_waypoint', v=0.4, a=0.2) will move to your waypoint at 20% of maximum acceleration. That might smooth things out until we can figure out what’s going on with your robot. Unfortunately that’s not a settable parameter for movej() or movef() so the workaround might be of limited value to you.

I will see if I can capture a video of what happens just so you can verify my thought process there.

In this particular use case, the FJ gripper is always present on the arm, so I think it’s only the additional payload of the top jaws that is causing the problem.

My remedy is to power-cycle the robot fully with the top jaws held in the gripper so that I do a fresh boot with the payload in place, and then I seem to be ok.

I’ve tried limiting velocity at the global level, but I haven’t tried limiting acceleration - so that’s a good suggestion. Most of my moves are movej, but many could just be linear.

I’ll grab some footage here and show you what is happening.

Sorry for the delay - finally grabbed some A/B footage here. Thankfully, I think this is pretty reproducible, so my first attempt got me what I wanted.

In both cases, I booted PathPilot, set the Velocity/Max Vel slider to 20%, and loaded my program. I didn’t actually restart PathPilot between the attempts

“Before” Scenario

Before Vid: Motion Debugging Video - Before Reset - YouTube

In this case, I simply ran the program. You’ll see that the robot comes in moving smoothly, but then when it picks up the jaws, it has very jerky motion after that. My hypothesis here is that the weight of those vise jaws throws off the motion controllers for some reason.

“After Scenario:”

After Vid: Motion Debugging Video - After Reset - YouTube

In the “after” scenario, what I’ve done is as follows:

  1. Get robot to pick up jaws and hold them, sort of half way through that cycle.
  2. Stop program. Estop robot with jaws still being held.
  3. Power down control cabinet.
  4. With jaws still being held by robot, power up control cabinet.
  5. Release Estop, Enable Robot, Hit Reset in PP
  6. Manually take jaws back from robot and put them on vise for the starting scenario
  7. Run my program

In this case, and from this point onward, the robot will be fine with or without carrying the weight of the jaws and will move smoothly until it’s shut down.

Hope that helps!

@bigtchopshop that’s fantastic - thank you for those two videos. I agree it looks like a servo tuning issue related to increased inertia ratio with the bigger payload. I think the team will be able to figure out what’s going on here and get it working better in the next software release. Thank you for such a clear depiction of the problem.

@bigtchopshop I think the combination of the payload and the distance from tool flange to center of inertia/gravity of the payload is putting your robot in a realm that’s close to oscillating. We are working on a feature that allows drives to be tuned dynamically for different payloads, but it’s not ready for release. Until that time we could send you a script to de-tune the drive stiffness by 10%, you could try it, and if it fixes the issue we could create a special hotfix software release for you (so you don’t have to run the script at every startup.)

That makes sense. It’s not a huge emergency here right at the moment as I can always do the work-around to get things to work properly, now that I understand the cause/effect. If there’s a proper solution for it coming down the road, I think I can hold tight for now and just make sure I power up with the load in place.