Can the robot calculate its own load?

  • I have a robot here (IRB6400, s4c) that lifts different size truck wheels, small ones about 50kg up to large ones at 150kg. At the moment there are 3 main groups with similar weights, the 17.5 inch that are the small wheels, 19.5 inch wheels which are the medium wheels and the 22.5 which are the large. The wheels are fitted by a guy then loaded on a conveyor where the robot lifts the wheel and stacks it. they are done in stacks of 6 mostly. The guy fitting the tyres sets the wheel type on the controller every time he changes sizes.


    The problem is, they have that much going on they often forget to change the program on the controller and the robot crashes due to incorrect load data. I am trying to make the program so it will work for all size of wheels without any human intervention, I have everything else figured out except the load data. Is there anyway to get the robot to calculate its own load data or is there something I can change that will allow the robot to work within this range of weight without crashing due to load data?

  • Sorry I did not recognize the S4C designation until after the post. I am too far removed from S4C to recall if the Service Routines were available back in those days.


    It can rightly be presumed more experienced people will respond, for the present investigate the Service Routine LoadIdentify, and the RAPID instruction GripLoad.

    Some Service Routine info is in the Op Manual IRC5 w Flex Pendant - 3HAC16590...
    RAPID Reference for GripLoad - 3HAC16581


    ABB article numbers are based on RW 5.15... though depending on RobotStudio licensing they may be available for you there.

  • GripLoad will change the active load data, to one of the user-created Loads. And LoadIdentify can be run during the robot configuration phase, but not, I think, while the robot is running in production.


    It sounds to me as if @Sean_MMSNI wants the robot to identify which tire it's picking up by detecting the weight?


    I'm not sure how possible that is. Using MotionSup set to the lowest payload would (hopefully) cause the robot to fault if a heavier payload was in the gripper, but I'm not sure there's a way to automatically recover from that fault and try the next-higher MotionSup setting. Plus, if that were done every cycle, it would probably be murder on cycle time.


    Maybe the Test Signals? Grip the tire, move up slowly, and sample the torque channels during that motion? I'm just guessing, but it seems like it might be possible. OTOH, I'm really just guessing.

  • Yeah I have been looking at the LoadID function in the manual, I think the robot has to be in a certain position with axis 5 and 6 nearly in the 0 degrees position and will take about 3 minutes to workout, my cycle time atm is just over one minute so this wouldn't be a viable option for me.


    if there is no way to do this I might have to continue to get the operator to select the wheel size.

  • Neither axis six nor five have to be at or near zero. The combined angles of axis three and five need to be such that the faceplate, tool0 should be perpendicular to the floor. Axis four does need to be at zero. Should you select unknown mass, axis three will move during the process of identifying the load, otherwise it will not move. I suggest adding a TPReadFK in your program in which the operator will have to make that selection for size before it runs.

  • Well, what you need is some way to detect which wheel the robot is picking up. You don't need to run a full LoadID to do that. If you had any sensor that could identify one wheel from another (say, by diameter, or any other unique feature), the robot could read that sensor and simply do a GripLoad command to the correct payload. Something like:


    TEST giWheelID

    CASE 1:

    GripLoad Wheel1;

    CASE 2:

    GripLoad Wheel2;

    DEFAULT:

    ErrWrite "invalid wheel id!";

    ENDTEST


    You would need to set up each WheelX LoadData using LoadID, but once that was done, you would never run LoadID again, unless you're adding a new wheel, or something happens to change your load (like a change to the gripper that moves the CoG).


    The trick is, how to identify the wheel? It would be nice if you could use the axis torque measurement to figure it out on the fly (the TestSignals, maybe), but robots aren't terribly precise at measuring loads that way, and usually it only works if the robot is stationary or moving quite slowly, and it only works if the pose is good. To roughly identify the wheel the robot is carrying, say 50kg vs 25kg, it might work, but identifying 25kg vs 30 probably wouldn't. And it might not work within your cycle time, anyway.


    But if there was any way to add a sensor to the gripper, or to the pickup station, that could ID the wheel and send that to the robot as a Group Input, the above example should work fine. Heck, maybe you could just put a digital scale under the wheel where the robot picks it up, and connect the scale to the robot's inputs.

  • Thanks very much SkyeFire, this is very helpful. The problem detecting the tyre is there are that many different versions with different diameters and widths even for the one generic size of 17.5rim.


    Your idea with the scale under the wheel sound like it could be a good option, I think I will look into this and try this.

  • Integrating measuring devices into robot controls is likely not for the faint of heart.

    It may be worth considering having a PLC determine the mass then send appropriate signaling to the ABB control for program evaluation:


    TEST nMassID

    CASE 1:

    GripLoad Wheel1;

    CASE 2:

    GripLoad Wheel2;

    DEFAULT:

    ErrWrite "invalid wheel id!";

    ENDTEST


    Additionally, this is from the RW 5.15 RAPID manual about the LoadID instruction:


    ***********

    Usually load identification of tool or payload for the robot is done with the service

    routine LoadIdentify. It is also possible to do this identification with this RAPID

    instruction LoadId. Before loading or executing the program with LoadId following

    modules must be loaded to the system:


    Load \Dynamic, "RELEASE:/system/mockit.sys";

    Load \Dynamic, "RELEASE:/system/mockit1.sys";


    It is not possible to restart the load identification movements after any type of stop

    such as program stop, emergency stop, or power failure. The load identification

    movements must then be started from the beginning.
    ***********


    The feasibility of this possible solution is not likely very high, due to RW version, cycle time, etc.


    The routine "LoadIdentify" was able to be invoked in auto mode using late binding:


    %"LoadIdentify"%;

    Edited 4 times, last by SomeTekk: Update. ().

Advertising from our partners