Ep#21: Robotic Palletizing using a hydraulic mobile platform-TX86

Written by:

In This Episode, I would like to write about the TX-86 the Mobile hydraulic platform and simulate a palletizing application with that. Its important to note that i use trial version of this software which is free for everyone. here are some points that can help you to start with such offline robot programming projects:

1- design the robotic workcell layout

For every possible senario you need to understand the material flow and also the position of the conveying system in order to design an efficient robotic workcell lay-out. Ofcourse in reality this can be challenging job due to the space restriction on the factory floor or the demanded production rate. you also want to reduce the inventory as much as possible to maintain the sig sigma standard deviation in production rate.

2- Select the Proper tool for the application

TX86 with IRB 6700
IRB660

In Episode #14, I explained what is the component of the Mobile platform and we selected a 6 DOF robotic arm (IRB 6700) for a spot-welding application, however for Palletizing application We have selected an IRB660 which has 4 DOF and is dedicated to the the palleting application besides a rail system IRBT6004. So it’s important to select the proper robot for the proper application. Also, the payload is important. If the Payload is heavier, then there is a need for bigger and stronger robots. Another factor is reachability and working envelope. If the working envelope is limited. It might be challenging to maneuver in the limited space, also the scaping from singularity might get challenging. The last factor would be motion’s precision. For some application the high motion’s precision of +-0.05 would be needed, especially in assembly or similar field, however for palletizing such a precision is irelevant. I would recommend to consult with an expert to select the model that suits you well and its economic. The selction of the gripper and sucktion cup material and vaccum power is also important for palletizing of light packages.

3- Safety

Unfortunatelly i have not considered proper protection sheild for palletizing workcell, however in reality its a very important issue. The area that belongs to the working envelop of the robot must be secure enough for the personal on the factory line. Therfore its needed to take required safety action in order to limit the work accidents. One of the barrier of safety shield in mobile robotic platform is the changability of location of the robot according the specified tasks. I remember that one of the robotic workcell had even an inteligent door locking system to stop the functioning of the robot if someone step ninside the working envelope. So please take safety really seriously!

Safety shields are important!

4- Offline programming and simulation

one of the positive aspects of Offline programming is that you can see everything before real implementation and if there is collision or singularity on the path it can be identified. I would like to share the code of palletizing example with you to give some idea, how it works on Rapid editor’:

PROC main()
    
     IF DI_10=1 THEN
        
        counter1:=counter1+1;
        IF counter1=1 THEN 
         IF DI_10=1 THEN
         Movej transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL pickup1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         Set DO_10;
         WaitTime 2;
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
        
      
        
         MoveL transit2,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL putdown1,v1000,z100,Gripper_Sc\WObj:=wobj0;
       
         WaitTime 2;
         Reset DO_10;
         MoveL transit2,v1000,z100,Gripper_Sc\WObj:=wobj0;
         ENDIF
        ENDIF 
        
        
        
         IF counter1=2 THEN 
         IF DI_10=1 THEN
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL pickup1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         Set DO_10;
         WaitTime 2;
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
        
      
        
         MoveL transit2,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL putdown2,v1000,z100,Gripper_Sc\WObj:=wobj0;
       
         WaitTime 2;
         Reset DO_10;
         MoveL transit2,v1000,z100,Gripper_Sc\WObj:=wobj0;
         ENDIF
        ENDIF
        
        
        
        
         IF counter1=3 THEN 
         IF DI_10=1 THEN
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL pickup1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         Set DO_10;
         WaitTime 2;
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
        
      
        
         MoveL transit3,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL putdown3,v1000,z100,Gripper_Sc\WObj:=wobj0;
       
         WaitTime 2;
         Reset DO_10;
         MoveL transit3,v1000,z100,Gripper_Sc\WObj:=wobj0;
         ENDIF
        ENDIF
        
        
        
        
         IF counter1=4 THEN 
         IF DI_10=1 THEN
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL pickup1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         Set DO_10;
         WaitTime 2;
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
        
      
        
         MoveL transit3,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL putdown4,v1000,z100,Gripper_Sc\WObj:=wobj0;
       
         WaitTime 3;
         Reset DO_10;
         MoveL transit3,v1000,z100,Gripper_Sc\WObj:=wobj0;
         ENDIF
        ENDIF
        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
        IF counter1=5 THEN 
         IF DI_10=1 THEN
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL pickup1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         Set DO_10;
         WaitTime 2;
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
        
      
        
         MoveL transit3,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL putdown5,v1000,z100,Gripper_Sc\WObj:=wobj0;
       
         WaitTime 2;
         Reset DO_10;
         MoveL transit3,v1000,z100,Gripper_Sc\WObj:=wobj0;
         ENDIF
        ENDIF 
        
        
        
         IF counter1=6 THEN 
         IF DI_10=1 THEN
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL pickup1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         Set DO_10;
         WaitTime 2;
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
        
      
        
         MoveL transit3,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL putdown6,v1000,z100,Gripper_Sc\WObj:=wobj0;
       
         WaitTime 2;
         Reset DO_10;
         MoveL transit3,v1000,z100,Gripper_Sc\WObj:=wobj0;
         ENDIF
        ENDIF
        
        
        
        
         IF counter1=7 THEN 
         IF DI_10=1 THEN
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL pickup1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         Set DO_10;
         WaitTime 2;
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
        
      
        
         MoveL transit4,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL putdown7,v1000,z100,Gripper_Sc\WObj:=wobj0;
       
         WaitTime 2;
         Reset DO_10;
         MoveL transit4,v1000,z100,Gripper_Sc\WObj:=wobj0;
         ENDIF
        ENDIF
        
        
        
        
         IF counter1=8 THEN 
         IF DI_10=1 THEN
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL pickup1,v1000,z100,Gripper_Sc\WObj:=wobj0;
         Set DO_10;
         WaitTime 2;
         MoveL transit1,v1000,z100,Gripper_Sc\WObj:=wobj0;
        
      
        
         MoveL transit4,v1000,z100,Gripper_Sc\WObj:=wobj0;
         MoveL putdown8,v1000,z100,Gripper_Sc\WObj:=wobj0;
       
         WaitTime 2;
         Reset DO_10;
         MoveL transit4,v1000,z100,Gripper_Sc\WObj:=wobj0;
         Set DO_11;
         ENDIF
        ENDIF
       
        IF counter1>=9 THEN
            
            WaitTime 2;
             counter1:=0;
             reset DO_11;
         ENDIF
          
    ENDIF
    
ENDPROC

	
ENDMODULE

I would like to write a code that can handle different size of the packages for palletizing and tries to fit the best geometrically on the pallet. This needs an optimized algorithm to identify the best position of the package on the pallet. Please follow this trend to keep yourself updated.

see you!

Donnation!

Please support me to keep writing content for robotics and automation 🙂 Thank you Nima

€3.00

Leave a comment

Leave a comment