Od raket po roboty a co s tím má společného Python. Příběh absolventů GeekBrains

Od raket po roboty a co s tím má společného Python. Příběh absolventů GeekBrains
Dnes zveřejňujeme příběh přechodu Andrey Vukolova do IT. Jeho dětská vášeň pro vesmír ho jednou přivedla ke studiu raketové vědy na MSTU. Drsná realita mi dala zapomenout na sen, ale vše se ukázalo ještě zajímavější. Studium C++ a Pythonu mi umožnilo dělat stejně vzrušující práci: programovat logiku řídicích systémů robotů.

začátek

Měl jsem štěstí, že jsem celé dětství blouznil o vesmíru. Po škole jsem proto ani na minutu nezapochyboval, kam bych měl jít studovat, a vstoupil jsem na MSTU. Bauman, na katedře raketového pohonu. Samotná větev kurzu - práškové nebo kapalinové motory kosmických raket - však vůbec nemusela být vybrána: v roce 2001 ještě speciální fakultní komise rozdělovala cílové skupiny uchazečů. Byl jsem chycen v sudu střelného prachu.

V té době existoval „raketový boom“ pouze v plánech, inženýři dostávali mizivé platy a pracovali ve speciálních uzavřených projekčních kancelářích a výzkumných ústavech prakticky bez vyhlídek na kariérní a profesní růst. Přesto jsou práškové rakety v Rusku čistě vojenské produkty.

Nyní je tato oblast žádaná, ale už během studií jsem si uvědomil, že v raketové vědě je jakákoli činnost z vlastní iniciativy téměř nemožná. Ve skutečnosti se jedná o vojenskou službu. Například při práci v raketovém průmyslu bych byl zcela zbaven možnosti samostatně vyvíjet software, a to i pro sebe, protože tato činnost je přísně regulována.

Všechny softwarové produkty jsou vyvíjeny výhradně na zvláštní objednávku a se souhlasem komise pro utajení (nyní divize FSTEC). Tamní vývojář je povinen zaregistrovat a licencovat doslova každý řádek kódu. Veškerý software je zpočátku tajný na úrovni úkolu. To částečně vysvětluje, proč byl software, který se nyní používá k výcviku studentů raketových věd, vyvinut nejpozději v 90. letech.

V době, kdy jsem absolvoval institut, se mi podařilo pracovat na katedře teorie mechanismů a začal jsem vyvíjet simulátor vzdělávacích procesů v C++, takže jsem měl příklad pro srovnání a mohl zvážit pro a proti. Volba byla jasná a postupně jsem začal směřovat k IT a robotice. Aplikovaná mechanika byla mnohem zábavnější než raketová věda: mnoho nevyřešených problémů, otevřené prostředí, nedostatek vývojového průmyslu, naléhavá potřeba simulačního softwaru. V robotice existuje nestálá architektura běžného softwaru a potřeba opakovaně implementovat složité algoritmy, včetně fuzzy logiky a počátků umělé inteligence. Proto jsem se po svých prvních programech na zpracování experimentálních dat téměř nikdy nevrátil k raketám (s výjimkou svého absolventského projektu).

Díky tomu jsem měl možnost pracovat ve své specializaci pouhé čtyři měsíce, než jsem promoval v závodě nedaleko Moskvy na kompozitní konstrukce pro letecký průmysl. Po dokončení studia jsem si ani nemusel hledat práci – hned jsem přišel učit aplikovanou mechaniku na katedru robotiky.

Od výuky k programování

Od raket po roboty a co s tím má společného Python. Příběh absolventů GeekBrains
Na světovém kongresu IFTOMM se studentskými členy výzkumné skupiny (já vpravo)

Pracoval jsem 10 let na MSTU v oddělení odběru vzorků, kde jsem vedl kurz teorie mechanismů. Publikoval vědecké práce (viz konec článku), postupně přešel od mechaniky k CADu a robotice. A nakonec se rozhodl učitelství opustit. Abych co nejjasněji ilustroval důvody tohoto rozhodnutí, řeknu, že za deset let se obor, který jsem učil, nezměnil o jedno desetinné místo. I když se aplikovaná mechanika, soudě podle publikací, posunula vpřed velmi, velmi úspěšně.

Práce navíc stále více připomínala byrokratickou práci – zprávy, programy, normy a tuny papíru. V takových podmínkách bylo potěšení z výuky nahrazeno hlášením o přijetí tohoto potěšení, a to je pro praktikujícího specialistu více než nepříjemné.

A nakonec jsem se k robotice dostal takto: v letech 2007-2009 jsme spolu s profesory A. Golovinem a N. Umnovem začali připravovat první vědecké práce. Tam jsem musel pomocí algoritmů určovat dráhy objektů ze zábleskové fotografie. Od tohoto tématu je krok ke strojovému vidění, OpenCV a Robotickému operačnímu systému (i když jsem v té době o takovém měřítku ani neuvažoval). Poté jsem se konečně zaměřil na aplikovanou mechaniku a robotiku ve výzkumu a vývoj se stal podpůrnou činností.

K nalezení nového uplatnění v robotice však bylo nutné zdokonalit a doplnit si znalosti programování. Ostatně IT jsem nikdy specificky nestudoval, kromě ročního univerzitního kurzu (ObjectPascal a Borland VCL v C++) a v teoretických aspektech vývoje jsem spoléhal na matematiku.

Nejprve jsem zvažoval možnosti denních kurzů v mém rodném ústavu. Pravda, rychle se ukázalo, že skloubit takové studium s prací na katedře bude téměř nemožné kvůli nepravidelnému rozvrhu a časté práci mimo vlastní rozvrh (suplování apod.). Postupně jsem tedy přišel na myšlenku absolvovat placené kurzy na dálku. Do GeekBrains jsem se dostal na doporučení profesorů ze školícího centra Mail.ru Technopark, které se nachází v Baumance, a zapsal jsem se do kurzu Python Programmer.

Kurzy nedělaly žádné potíže, problém byl jen v tom, že jsem je neustále musel kombinovat s prací na katedře, vědeckými pracemi a akcemi. Čas byl tak napjatý, že většina sociálních vazeb mimo domov musela být obětována (naštěstí dočasně).

S vytížením jsem se vyrovnal takto: řešil jsem problémy na cestách. Tato dovednost, rozvíjená četnými pracovními cestami, se ukázala jako velmi užitečná, protože bez ní bych ani nedokázal dokončit všechny domácí úkoly (a také mi nahrazuje meditaci...). Naučil jsem se kódovat na cestách pomocí notebooku, smartphonu a bezdrátových klávesnic smartphonů.

Můj notebook je Dell Latitude 3470 a vystačí si s každým smartphonem s úhlopříčkou 5.5 palce nebo více spárovaným s klávesnicí Logitech K 810 BT. Obecně produkty Logitech doporučuji všem, jsou velmi spolehlivé a snesou velmi drsné podmínky používání (a to nikdy není reklama).

Od raket po roboty a co s tím má společného Python. Příběh absolventů GeekBrains
Klávesnice Logitech K810

Python je pro takovou práci velmi vhodný – pokud máte dobrého editora. Další programátorský hack: použijte vzdálené připojení k ploše nebo runtime prostředí. Dokončil jsem několik úkolů pomocí zabezpečeného webového serveru se systémem Django na mém domácím počítači. Pracoval jsem z vlaku pomocí softwaru PyDroid, DroidEdit, Maxima.

Proč Python?

Netrvalo dlouho a zkusil jsem použít PHP jako systémový skriptovací jazyk. Původně jsem studoval Python sám a postupně „pro sebe“. Rozhodl jsem se vážně studovat poté, co jsem se dozvěděl o existenci efektivního propojení mezi Pythonem a C++ na úrovni modulu – zdálo se zajímavé sdílet optimalizované algoritmy a postupy přípravy dat v rámci stejného jazyka.

Nejjednodušší příklad: existuje řídicí systém pro nestandardně výkonný pohon, implementovaný na vestavěném stroji s procesorem RISC, v C++. Správa probíhá prostřednictvím externího API závislého na počítači, které podporuje například komunikaci mezi subsystémy po síti. Na vysoké úrovni není algoritmus provozu měniče odladěn nebo není konstantní (je nutné načíst různé algoritmy v závislosti na pracovním procesu).

Jedním z nejlepších způsobů, jak dosáhnout takového systému, je použít pro počítač specifické API subsystému C++ jako základ pro sadu tříd Pythonu, které běží na multiplatformním interpretu. Vývojář na nejvyšší úrovni tedy nebude muset brát v úvahu vlastnosti vestavěného stroje a jeho OS, bude jednoduše pracovat s třídami Pythonu, které fungují jako „obaly“ nízkoúrovňového API.

Musel jsem se naučit vazby C++ a Pythonu téměř od nuly. Rychle se ukázalo, že objektově orientované schopnosti na vysoké úrovni jsou mnohem důležitější než na nízké úrovni. Kvůli tomu jsme museli úplně změnit přístup k navrhování a implementaci API, rozhodli jsme se pro třídy na úrovni Pythonu a sdílená globální data v C/C++. Zvykněte si na generování kódu: například samotný framework ROS generuje jména a objekty v Pythonu, takže při navrhování rozhraní musíte vzít v úvahu jazykové rozdíly, zejména v psaní.

Práce v přítomnosti: Python a logika ovládání robota

Nyní pracuji jako Python a C++ programátor ve Výzkumném a vzdělávacím centru robotiky na Moskevské státní technické univerzitě. Realizujeme výzkumné projekty a softwarové nástroje zadané ministerstvy: vyvíjíme manipulátory s vestavěnými systémy technického vidění a algoritmy automatického řízení na vysoké úrovni, které jsou nezávislé na systémech.

V současné době programuji logiku na vysoké úrovni pro řídicí systémy robotů v Pythonu; tento jazyk spojuje vysoce optimalizované moduly napsané v C++, assembleru a Go.

Při programování řídicích algoritmů robota se používají dvě velké skupiny algoritmů. První z nich je implementován přímo na zařízení na nízké úrovni – jedná se o vestavěný software ovladačů pohonů, koncentrátorů komunikačních linek a subsystémů interakce operátora.

Algoritmy jsou zde navrženy pro řízenou rychlost a spolehlivost provádění, která převyšuje výkon robota jako celku. To je povinné, protože bezpečnost celého systému závisí na nízkoúrovňovém řídicím softwaru.

Druhá skupina algoritmů určuje chod robota jako celku. Jedná se o programy na vysoké úrovni, při jejichž vývoji je kladen důraz na přehlednost a rychlost implementace algoritmu, často poměrně složitého. Navíc software na vysoké úrovni robota velmi často podléhá změnám během procesu nastavení a testování. Pro takový vývoj jsou nepostradatelné univerzální interpretované jazyky.

Jaké znalosti jsou pro takovou práci potřeba?

Bude povinné studovat šablonovací jazyk C++ a objektově orientované možnosti Pythonu. Téměř nenahraditelnou dovedností je schopnost navrhovat a dokumentovat API. Bylo by dobré prozkoumat možnosti specializovaných knihoven, jako je Boost::Python. Ti, kteří pracují s nízkoúrovňovým softwarem, se určitě budou muset vypořádat s multithreadingem (na úrovni jádra) a systémovými voláními Linux/UNIX/QNX. Pro lepší pochopení principů robotiky je velmi užitečné seznámit se s frameworkem Robotic Operating System.

Snažím se mít alespoň jeden zkompilovaný a jeden interpretovaný programovací jazyk, který se vyvíjí a je žádaný. Toto je vítězná strategie pro práci ve strojírenství, kde je neustálá potřeba vyvíjet vysoce specializované (čti: neobvyklé) algoritmy a implementovat je do kompilačních jazyků. Úkol přípravy dat pro takový software je mnohem příjemnější řešit pomocí interpretovaných jazyků. Zpočátku moje sada obsahovala C++, Pascal a BASIC, později se přidaly PHP a BASH.

Jak mohou být vývojové nástroje užitečné při výuce studentů

Hlavním plánem profesního rozvoje je nyní pokusit se poskytnout vědecký základ pro využití profesionálních softwarových vývojových nástrojů v pedagogice, vyvinout a otestovat výukové metody.

Od roku 2016 jsem zahájil velký experiment se zaváděním vývojových nástrojů – programovacích jazyků, IDE, generátorů dokumentace, systémů pro správu verzí – do pedagogické praxe na vysokých školách. Nyní se nám podařilo získat výsledky, které lze kvalitativně zobecnit.

Například zavedení verzování materiálů do vzdělávacího procesu výrazně zlepšuje kvalitu studentských prací, ovšem pouze za povinné podmínky: studenti spolupracující na sdílených projektech. Vývoj metod pro výuku technických oborů s využitím profesionálních softwarových vývojových nástrojů nyní aktivně provádí moje výzkumná skupina složená ze studentů, uchazečů a studentů doplňkových vzdělávacích programů na MSTU.

Svou učitelskou praxi jsem mimochodem neopustil – vytvořil jsem si vlastní hloubkový prezenční kurz o návrhu a správě Linuxu pro Institut pokročilých studií na MSTU a sám ho učím.

Výzkumné práce

Brzká práce
Problémy plánování chůze při navrhování čtyřnohých systémů chůze na příkladu implementace chůze koně (2010 g.)

K problematice kinematiky a zatížení opěrného prvku přední nohy koně ve fázi přibližování k opěrce jako komponentům pracovního cyklu čtyřnohého hybatele (2012 g.)

Z posledního
3D aplikace simulace výroby ozubených kol pro výuku teorie mechanismů a strojů (2019 g.)

Metoda rozpoznávání strukturálních překážek a její aplikace při hledání reliéfních objektů (2018 g.)

Další práce indexované vědeckými citačními databázemi můžete vidět v mém profilu na ResearchGATE. Většina článků je věnována pohybu strojů, jsou zde práce o inženýrské pedagogice a výukovém softwaru.

Zdroj: www.habr.com

Přidat komentář