Článek ve formátu PDF je možné stáhnout
zde.
Nové osobní automobily jsou v současnosti výkonnými mechatronickými systémy, dalo by se říci pojízdnými počítači. Modernizace vozidel jako takových je nemyslitelná bez existence adekvátních nástrojů pro jejich vývoj. V něm se rostoucí měrou uplatňují techniky počítačového modelování, simulace, konektivity a také umělá inteligence.
Současné moderní vozy se vyznačují velkým objemem vestavěné elektroniky. V jejich nitru je ukryto několik desítek mikroprocesorů, které se starají o jejich správný chod. Existují zde jednak složité systémy řízení motoru či pokročilých asistenčních soustav pro podporu řidiče, ale také soustavy jednodušší, starající se o běžné ovládací úkony, jako např. nastavování polohy skla v bočním okně či zpětného zrcátka kolébkovým spínačem. Senzory polohy a pohybu sledují každý metr jízdy vozidla, každá otáčka motoru je přesně časována, pečlivě je vyhodnocen každý pohyb pedálu plynu či brzdy atd. A všechna zařízení ve vozidle musí mezi sebou komunikovat, aby pracovala v požadované součinnosti (obr. 1). To vše vyžaduje velké množství programového kódu, který zpracovává vstupní údaje a rozhoduje, co automobil udělá. Jde o tisíce, stovky tisíc řádek programů. Jak tedy vývojové týmy tato zařízení a jejich sestavy programují?
První změnou oproti klasické představě programování jako psaní kódu je, že programy se neprogramují, programy se modelují. Zní to na první pohled možná zvláštně, takže se podívejme, v čem je smysl a přínos takového přístupu.
Model programu
Co je to model programu? Jde o spustitelný matematický popis algoritmu v abstraktnější úrovni, než s jakou pracuje klasický program. Často bývá ve formě přehledného grafického schématu. Model, stejně jako program obsahuje postup, kterým se vstupní údaje přetvoří na výstupy z procesu zpracování. Například může vzít v úvahu údaje o aktuální rychlosti vozidla, stavu motoru a požadavcích na zrychlení a z nich určit množství paliva použité pro další zážeh – tak, aby automobil splnil, co se od něj očekává, a to při zachování emisních limitů a bezpečnosti jízdy (obr. 2, obr. 3).
Model však, na rozdíl od programu, nemusí obsahovat formální náležitosti programovacího jazyka, jako jsou deklarace funkcí či proměnných, a – to zejména – nemusí být „ušitý na míru“ konkrétnímu procesoru, který bude nakonec v automobilu danou úlohu vykonávat.
Právě použitá cesta abstrakce, tedy oddělení algoritmu od konkrétního hardwaru, je jednou z hlavních předností programování při použití modelů označovaném jako Model-Based Design. V častých situacích, kdy koncový hardware není předem znám, nebo dojde k jeho změnám, je snadné přenést výslednou implementaci modelu z jedné procesorové platformy na jinou, aniž by byly nutné jeho výrazné úpravy.
Co může být obsahem modelu programu? V zásadě cokoliv, co do něj vývojář vloží. Modely mohou zahrnovat běžné a léty praxe prověřené algoritmy řízení soustav automobilů a stejně tak i moderní nástroje umělé inteligence, jako jsou hluboké neuronové sítě schopné řešit složité rozhodovací a prediktivní úlohy.
Generování kódu
Jak se model programu dostane do procesoru v automobilu? Využívá se technika automatického generování zdrojového kódu, obvykle v jazyce C. V modelu se nastaví, jakým způsobem má být kód generován, lze vybrat i typ cílového procesoru pro využití optimálních funkcí a struktury programového kódu a poté se „na stisknutí tlačítka“ zdrojový kód vygeneruje. Vygenerovaný kód, který lze certifikovat podle ISO 26262, se pak použije přímo v cílovém procesoru (obr. 4).
Vedle zdrojového kódu v jazyce C, který je obvyklý pro mikroprocesory, lze také generovat např. kód HDL, určený pro velmi výkonná programovatelná hradlová pole (FPGA), nebo kód v jazyce CUDA pro grafické výpočetní jednotky, v současnosti používané zejména ke zpracování kamerového obrazu v pokročilých asistenčních systémech řidiče.
Ověřování a simulace
Dříve, než je možné z modelu programu vygenerovat cílový kód, je třeba model podrobně ověřit. K tomu se využívá simulace. Model programu se spustí, předávají se mu různé vstupní údaje odpovídající scénářům z reálného provozu a sleduje se, jak model reaguje a zda vyhodnocuje vstupní údaje správně. Hlavní přednost simulace spočívá v tom, že lze rychle prověřit velké množství situací, aniž by bylo nutné ujet byť jediný metr ve skutečném vozidle. Jako opora přitom slouží další modely – tentokrát matematické modely chování samotného vozidla. Modely vozidel se vytvářejí ve stejných simulačních nástrojích jako modely programů, ať již jde o klasická vozidla se spalovacími motory, nebo o nově vyvíjené elektromobily, či vozidla s hybridními pohony. Simulační model vozidla je v podstatě jeho digitálním sourozencem.
Simulace a ověřování nemusí probíhat pouze ve virtuálním prostoru návrhářova počítače.
Při použití tzv. simulátorů, jak jsou označovány specializované počítače s mnoha vstupními a výstupními rozhraními, je možné simulovat chování vozidla v reálném čase (obr. 5). K simulátoru se připojí reálný naprogramovaný procesor či řídicí jednotka a ověří se výsledné chování zařízení, jako by bylo zapojeno ve skutečném vozidle – jenomže není. V simulátoru lze snadno vytvářet extrémní scénáře a vyzkoušet na nich v podstatě celou elektroniku vyvíjeného vozidla, aniž by hrozilo reálné nebezpečí poškození, či dokonce zničení nákladného prototypu. Do skutečného vozidla se tak dostane již odladěný, detailně vyzkoušený hardware.
A co klasické programování
Vývoj vozidla je běh na dlouhou trať, kde je často třeba skloubit různé techniky a postupy. Nejinak je tomu i v případě programování jeho elektroniky. Proto je nezbytné mít možnost kombinovat modelování programů s jejich klasickou tvorbou, ručním vytvářením programů v jazyce C. Může jít o programy vytvořené v minulosti, které je výhodné opětovně využít, nebo vývojář pokládá za vhodné vytvořit danou část kódu ručně. Protože modely programů podporují integrování již existujících částí kódu, lze do nich ručně psaný kód snadno zabudovat. Vygenerovaný kód z modelu pak obsahuje tyto ručně psané části jako součást celého programu. Nejde tedy o volbu mezi programováním a modelováním, ale o vhodné skloubení obou přístupů.
Současnost a vize, blízké i vzdálené
Vývoj nových pokročilých metod řízení pohonů a složitých asistenčních systémů řidiče postupně vede k vyšším metám, jako je zcela autonomní jízda vozidel nebo spolupráce a organizace celé flotily vozidel, kdy si automobily vyměňují údaje a přizpůsobují plán jízdy aktuální situaci. Konektivita, sběr a diagnostikování údajů při použití cloudové techniky, autonomní rozhodování a kooperace. To jsou prvky, které dále vedou k projektům širších konceptů, jako smart city apod. V současnosti již existují první plně autonomní dopravní systémy, zatím realizované v uzavřených lokalitách. Je jen otázkou času, kdy se tyto stanou běžnou součástí našeho každodenního života.
Závěr
Článek stručně naznačuje, jak se v současnosti „programují“ automobily. A úplně závěrem otázka pro čtenáře: „Co myslíte, jak se programují letadla, drony a další?“.
Jaroslav Jirkovský, Humusoft, s. r. o.
Obr. 1. Současné moderní automobily v sobě nesou až desítky mikroprocesorů zajišťujících jejich správný chod
Obr. 2. Model programu vytvořený v prostředí Matlab/Simulink
Obr. 3. Princip ověřování modelu programu (nahoře) a ukázka vizualizace výsledků (dole)
Obr. 4. Generování zdrojového kódu z modelu programu v prostředí Matlab/Simulink
Obr. 5. Simulační počítače (simulátory) pro zkoušení modelů programů v reálném čase od firmy dSpace