Putting a load into several boxes and then the boxes into the trunk of a car is hard for your brain and your muscles. Good thing Škoda drivers can now rely on us to do the thinking for them. We can calculate and show them the ideal way to load their trunk.
Our goal was to create an independent module of a mobile application for Android and iOS which can tell the user in just 60 seconds whether the load fits in their car, and how to load it best.
iOS & Android
+ 1 000 hodin
We want app users to do as little as possible.
Working with our app shouldn’t take longer than actually loading the trunk on their own through trial-and-error.
The user selects the model of their car, takes a photo of the load or enters its dimensions, and then has the app show them the best way to load it into the trunk.
Android – Kotlin, MVVM; iOS – Swift, MVVM-C; The back-end version on Azure Cloud (a requirement by the partner). The back-end solution was written in Python, with some of its parts in the C language (using Cython) due to the solution. We also set up smart scaling in Azure, so we can handle any number of users at the same time.
03 Overcoming obstacles
Sounds too simple, huh?
Škoda Auto provided 3D models of trunks for all the supported types of its cars, only not in a unified form. First, we had to unify the references into a format we could use to do the calculations.The app needed to make the calculations faster than the user, so we had to optimize our algorithms and strike a balance between precision and speed.Entering the dimensions of individual items had to be comfortable. We considered several ways to make this routine simple and easy.
What we came up with
What we came up with
After several tests, we divided the trunk into virtual cubes with an edge of 5 centimetres, which seemed to be ideal. Most of the load is placed into this network and the calculation is finished before you manage to put something into the trunk yourself. This may remind IT guys and mathematicians of the Knapsack problem.
Four ways of calculation
The load in the trunk is calculated in four ways. The most efficient procedure is then drawn using vector masks directly in the mobile device.
It is simple
Of course, the user may enter the dimensions and level of fragility or softness of the load into the app themselves. Some boxes, like the ones containing furniture to be assembled, already have their dimensions written on them. In such cases, simply turn on your camera and smart text recognition does the work for you.
When rendering the items in the trunk, we used only 2D renders of the trunk with its door open. We developed our own calculation of the perspective and projecting the items into the 2D space, including the masks to render the covered parts.
Reasonable format suitable for calculations
The models of the inside of the trunk were provided in a standard triangle format. We had to come up with a reasonable format suitable for calculations, including a suitable transformation of the coordinate system both for rendering and calculations.
Measuring with AR
Entering the size of the items manually would be insufficient and less than user-friendly. This is why each entered item is visualized and animated, and it is even possible to manipulate it, including changing its size using multi-touch gestures. What’s more, the app can use the OCR to recognize an item and determine its size. The user can measure its size using AR if they don’t know its exact size or don’t have a tape measure.
Results in 3D
In order to verify functionality, we needed to iterate and recognize potential scenarios. The results of the calculation can be displayed directly in the matrix in 3D, making it possible to precisely recognize any potential flaws.
The most efficient strategy
There is no single correct result of the calculation, as there can be an infinite number possibilities. This meant that we had to break up the problem into individual potential solutions and define it to look the way the ideal solution should. Gradually, we implemented several strategies to load the items, and the app chooses the most efficient one.
A satisfied client
A satisfied client
Once the Škoda Load-in app was thoroughly tested by the client and met all the requirements of this huge corporation, it was integrated into the main Škoda app for all users.
Of course you can still use for the trunk-packing issue several non app strategies … and brute force. :-)
The version for Android is based on the MVVM architecture and was coded in Kotlin. The version for iOS was created in Swift on the MVVM-C architecture. At the same time, it is all wrapped into a library to be used in other applications via regular packaging systems; currently, LoadIn is a part of the MyŠkoda app.
The algorithm running on the back-end was developed in Python, which has tools well-suited for working with scientific calculations and is quick to iterate in as well. For the final solution, the code gets compiled to C using Cython, which increases calculation speed several times over. The whole thing runs on Azure Cloud, as using smart scaling allows us to handle any number of users even during clearance sales at IKEA. For the trunk-packing issue we use several strategies – residual space and minimal space, both in two versions - … and brute force.
seconds calculation time
supported car models