Robotic Palletizer | Viscon

Students: Timo van Eijck | Tiemen van Rijswijk | Pedro Nicolas Cristiansen Hutabarat | Max Tienhooven

Original situation description

Viscon Logistics designs, produces and installs a variety of intra logistic solutions all over the world. Their logistics solutions take care of the entire flow of products, crates and pallets. They make sure they are automatically moved, buffered and stored throughout the production process.

A producer of potatoes is in the market to automate several process steps with robotics. Packed potatoes are coming from a multi-head weigher and need to be automatically loaded into various moulds. After loading these moulds, they need to be stacked and via a conveyor transferred to an autoclave for thermal preservation of the potatoes. After the autoclave the packed potatoes will be picked out of the moulds and will be placed in cases (boxes/ and trays). These cases (boxes/ and trays) are currently being palletized by hand.

Problem statement

The customer wants to palletize the cases (boxes/ and trays) automatically. These cases may vary in sizes, computer vision will be used to identify the different sizes. They are looking for a solution in the form of a robot with an End of Arm Tool (EoAT) that can palletize the cases on a Euro-pallet. The cases will be supplied on a roller track.  During a batch the type of cases will always stay the same.

Our solution

Our goal is to create a versatile system that can stack a pallet. The continuous process of this system starts with scanning the type of cases. Simultaneously, another camera reads the information from the case’s QR-code as it moves down the rollertrack. The QR-code on the case includes various details, such as its product type, serial code, and time, available as a CSV file.

This process is followed by the EoAT lifting the case from the roller track and placing it on the pallet.  If a case is not of this type, our system automatically rejects this case. To manage case movement on the roller track, a system with multiple cylinders is installed below the roller track to create a buffer that can handle different sizes of cases.

Major decisions made during the project

  • Use of a PLC

During testing in this project, we discovered that the library we are using to control the robot (URX library) is not capable of switching the I/O while the robot is moving. This was a problem for us because the roller track and the incoming boxes can’t be timed to the robot movements. This meant the I/O had to be separated from the robot. Our solution was to use a standalone PLC for the roller track, this way the roller track is its own module that can continuously identify and send boxes to the pickup location for the robot arm.

Control box for the roller track

  • Use of the circular linear guide

For the first versions of the EoAT a rectangular linear slider was used. However, during testing, we discovered that these sliders provided too much resistance when in motion. That is why we had to change the design to incorporate circular linear sliders. This change reduced the vibration and resistance of the finger movement greatly, which is very import for accurate placement of cases.

  • Use of 6mm stainless steel fingers

Another important decisions for the EoAT was to choose 6mm stainless steel fingers. Initially we used fingers made of 2mm steel, but they bend a lot due to the weight of the cases. This caused inaccurate placement. Because the maximum payload for the UR-10 is 10kg we had to consider the total weight of the EoAT.

Final end of arm tool


When the cases come in through the roller track, they are identified by the vision.

The vision uses an Intel RealSense D435 camera. This camera can make colour and depth images. With this the cases are identified based on their size (height) and colour.

Different/unknown looking produces can be inside the cases. The identification is therefore based only on the edge of the case. A quality check is also incorporated to check if no produces are sticking out above the edge.

The same camera is also used for the position detection of the cases on the roller track. The camera checks if the cases are in the buffer, below the camera, and if they have cleared the stoppers.

Color and depth image from the D435

Main code

In the main code we have used threading, python threading allows you to run multiple threads concurrently within a single process. This means that we can do multiple things at once.

We have split the code up into three threads that are used in the ‘main’ function:

  • The first thread is the robot thread, this does all the robot movements.
  • The second thread is the vision thread, this takes care of the computer vision to detect the case type.
  • The third thread is the pneumatic thread, this is the thread that does all the pneumatics for the roller track and gives a signal to the main code when a new case(s) is/are ready to be picked up.

In the main function the three threads are combined by using a match case constructor inside of a while loop. There is a case for every step of adding a case to the pallet. When a step is completed, the code moves on to the next case etc. and repeats this until the pallet is full.