Škoda Load-In
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
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
03 Výzvy
Zní to moc jednoduše?
04 Highlights
S čím jsme přišli
S čím jsme přišli
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.
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í.
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.
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í.
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.
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.
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.
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