iOS, Android 2018-2019

Škoda Load-In

Tetris s nákladem mohou řidiči nechat na nás

1 rok spolupráce, 1 000+ hodin v projektu

01 Úvod

Poskládat náklad více krabic do kufru auta je fuška pro mozek i svaly. Majitelům vozů Škoda dokážeme odlehčit alespoň od té duševní námahy. Spočítáme a ukážeme jim ideální proces naložení kufru.

Klient:

Škoda Auto

Systém:

iOS & Android

Rok:

2018-2019

Náročnost:

+ 1 000 hodin

Expert modeBasic mode

02 Zadání

Po uživateli toho chceme co nejméně

Po uživateli toho chceme co nejméně

Práce s aplikací by neměla zabrat víc času než nakládka metodou pokus-omyl na vlastní pěst.

Uživatel tedy vybere model svého vozu, nafotí nebo zadá rozměry nákladu – a pak si jen nechá ukázat, jak vše naložit co nejlépe. Aplikace by měla například pomoci v případě, kdy uvažuji nad koupí nábytku, ale nevím, jestli se do auta stojícího na druhé straně parkoviště u nákupního centra krabice vejdou.

Design

UX

Backend

Vývoj

Nasazení

Servis

Úkolem bylo vytvořit nezávislý modul mobilní aplikace pro Android a iOS, která je schopna uživateli do 60 sekund říct, zda se zadaný náklad vejde do jeho auta a pokud ano srozumitelně prezentovat bezpečný postup naložení.

Design

UX

Backend

Vývoj

Nasazení

Servis

Úvod
Výběr auta
Počet pasažérů
Přidání nákladu
Všechno už je v kufru

03 Výzvy

Zní to moc jednoduše?

  • 01
  • 02
  • 03

Škoda Auto nám sice dodala 3D modely kufrů pro všechny podporované modely vozů – ale ne v podobě vhodné pro výpočet. První výzva tedy byla vymyslet nový formát reprezentace prostoru v kufru, se kterým jsme mohli počítat.Výpočet v aplikaci by neměl trvat déle než výpočet v hlavě. Museli jsme proto optimalizovat naše algoritmy a najít rovnováhu mezi přesností a rychlostí.Zadání rozměru jednotlivých položek nákladu by neměla být otrava. Zamýšleli jsme se tedy i nad různými způsoby, jak tuto rutinu zjednodušit a usnadnit.

010203

04 Highlights

S čím jsme přišli

S čím jsme přišli

01

Knapsack problem

Kufr auta jsme rozdělili do virtuálních kostiček o hraně 5 cm. Po pár testech nám tento rozměr vyšel jako ideální – do této sítě naskládáme většinu nákladu a výpočet je hotový dřív, než do kufru zkusíte něco naskládat sami. Informatici a matematici si vybaví pojem Knapsack problem.

02

4 způsoby počítání

Náklad v kufru počítáme 4 způsoby. Nejefektivnější postup naložení pak vykreslujeme pomocí vektorových masek přímo v mobilním zařízení.

03

Je to jednoduché

Uživatelé si samozřejmě mohou zadat rozměry i křehkost či měkkost nákladu naťukat v aplikaci sami. Některé krabice – třeba ty s nábytkem k sestavení – však na sobě rozměr už mají napsaný. Pak stačí jen zapnout foťák a zadávání rozměrů nechat na chytrém rozpoznání textu. Nebo si uživatelé krabice mohou změřit přes AR a to na obou platformách.

01

Vlastní výpočet

Pro vykreslení objektů do nákladového prostoru auta jsme museli vycházet pouze z 2D renderů nákladového prostoru s otevřeným kufrem. Vyvinuli jsme vlastní výpočet perspektivy a promítání objektů do 2D prostoru. A to včetně masek pro vykreslování zakrytých částí.

02

Formát vhodný pro výpočty

Modely vnitřku nákladového prostoru jsou dodávány ve standardním trojúhelníkovém formátu. Museli jsme vymyslet diskrétní formát vhodný pro výpočty, včetně vhodné transformace souřadnicového systému jak pro vykreslování i výpočet.

03

Měření pomocí AR

Pouhé manuální číselné zadávání velikostí objektů by bylo nedostatečné a uživatelsky ne právě přívětivé. Proto se při zadávání celý objekt vizualizuje a animuje a je možno s ním dokonce manipulovat a to včetně změn jeho velikosti pomocí multi-touch gest. To ovšem není vše. Aplikace je schopna pomocí OCR rozpoznat objekt a opsat jeho velikost. Uživatel má možnost objekt změřit pomocí AR pokud třeba nemá dostupný metr nebo nezná jeho přesnou velikost.

04

Výsledky ve 3D

Pro ověření funkcionality jsme potřebovali iterovat a rozeznávat potenciální scénáře. Výsledky výpočtu je možné zobrazit přímo do matice ve 3D, aby bylo možné přesně rozpoznat případné nedostatky konkrétního výsledku.

05

Nejúčinnější strategie

Výpočet nemá jedno správné řešení, ale potenciálně nekonečno. To znamená, že jsme museli problém rozložit na jednotlivá možná řešení a nadefinovat tak, jak by ideální řešení mělo vypadat. Postupně jsme naimplementovali několik různých strategií pro nakládání, přičemž se nakonec vybere ta nejúčinnější.

05 Výsledek

Spokojenost klienta

Úspěšné sladění několika algoritmů

Po důkladném interním testování a nezbytném kolečku uvnitř velké korporace se aplikace Škoda Load-in začala integrovat do hlavní aplikace Škoda pro všechny uživatele.

Verze pro Android je založena na architektuře MVVM. Kódovali jsme v Kotlinu. Aplikace pro iOS je ve Swiftu a na architektuře MVVM-C. Zároveň je vše zabalené do knihovny pro použití v jiných aplikacích pomocí běžných balíčkovacích systémů, aktuálně je totiž LoadIn součástí aplikace MyŠkoda.

Algoritmus běžící na backendu byl vyvíjen v jazyce Python, který má velmi dobrou sadu nástrojů pro práci s vědeckými výpočty a dá se v něm rychle iterovat. Pro finální řešení se kód navíc překompiluje do C pomocí nástroje Cython, což ještě několikrát urychlí výpočet. Celé to běží na Azure Cloud – s chytrým škálováním odbavíme libovolný počet uživatelů i během hromadných výprodejů v IKEA. Pro řešení trunk-packing problému používáme postupně několik strategií – residual space a minimal space, obě ve dvou variantách: Hladové a brute-force.

Stejně úspěšnou aplikaci můžeme vytvořit i pro vás.
Stačí nám napsat

Další projekt