Od rakiet po roboty a čo s tým má Python spoločné. Príbeh absolventov GeekBrains

Od rakiet po roboty a čo s tým má Python spoločné. Príbeh absolventov GeekBrains
Dnes zverejňujeme príbeh prechodu Andrey Vukolova do IT. Jeho detská vášeň pre vesmír ho raz priviedla k štúdiu raketovej vedy na MSTU. Drsná realita mi dala zabudnúť na sen, no všetko sa ukázalo ešte zaujímavejšie. Štúdium C++ a Pythonu mi umožnilo robiť rovnako vzrušujúcu prácu: programovanie logiky riadiacich systémov robotov.

začiatok

Mal som to šťastie, že som celé detstvo blúznil o vesmíre. Preto som po škole ani minútu nepochyboval, kam by som mal ísť študovať, a vstúpil som na MSTU. Baumana, na Katedru raketového pohonu. Samotnú vetvu kurzu – práškové či kvapalinové motory vesmírnych rakiet – však vôbec nemuseli vyberať: v roku 2001 ešte špeciálna fakultná komisia rozdeľovala cieľové skupiny uchádzačov. Chytili ma v sude pušného prachu.

V tom čase existoval „raketový boom“ len v plánoch, inžinieri dostávali mizerné platy a pracovali v špeciálnych uzavretých projekčných kanceláriách a výskumných ústavoch prakticky bez vyhliadok na kariérny a odborný rast. Napriek tomu sú práškové rakety v Rusku čisto vojenské produkty.

Teraz je táto oblasť žiadaná, ale už počas štúdia som si uvedomil, že v raketovej vede je akákoľvek aktivita z vlastnej iniciatívy takmer nemožná. V skutočnosti ide o vojenskú službu. Napríklad pri práci v raketovom priemysle by som bol úplne zbavený možnosti samostatne vyvíjať softvér, dokonca aj pre seba, pretože táto činnosť je prísne regulovaná.

Všetky softvérové ​​produkty sú vyvíjané výhradne na špeciálnu objednávku a so súhlasom komisie pre utajovanie (teraz divízia FSTEC). Tamojší vývojár je povinný zaregistrovať a licencovať doslova každý riadok kódu. Všetok softvér je spočiatku tajný na úrovni úloh. To čiastočne vysvetľuje, prečo bol softvér, ktorý sa teraz používa na výcvik študentov raketovej vedy, vyvinutý najneskôr v 90. rokoch.

V čase, keď som skončil inštitút, sa mi podarilo pracovať na katedre teórie mechanizmov a začal som vyvíjať simulátor vzdelávacích procesov v C++, takže som mal príklad na porovnanie a mohol som zvážiť pre a proti. Voľba bola jasná a postupne som začal smerovať k IT a robotike. Aplikovaná mechanika bola oveľa zábavnejšia ako raketová veda: veľa nevyriešených problémov, otvorené prostredie, chýbajúci vývojový priemysel, naliehavá potreba simulačného softvéru. V robotike existuje neusporiadaná architektúra bežného softvéru a potreba opakovane implementovať zložité algoritmy vrátane fuzzy logiky a začiatkov AI. Preto som sa po mojich prvých programoch na spracovanie experimentálnych dát takmer nikdy nevrátil k raketám (s výnimkou môjho absolventského projektu).

Výsledkom bolo, že som mal možnosť pracovať vo svojej špecializácii len štyri mesiace pred ukončením štúdia v závode pri Moskve na kompozitné konštrukcie pre letecký priemysel. Po ukončení štúdia som si ani nemusel hľadať prácu – hneď som prišiel učiť aplikovanú mechaniku na katedru robotiky.

Od výučby po programovanie

Od rakiet po roboty a čo s tým má Python spoločné. Príbeh absolventov GeekBrains
Na svetovom kongrese IFTOMM so študentskými členmi výskumnej skupiny (ja vpravo)

Pracoval som na MSTU na oddelení odberov 10 rokov, viedol som kurz teórie mechanizmov. Publikoval vedecké práce (pozri koniec článku), postupne prešiel od mechaniky k CAD a robotike. A nakoniec sa rozhodol zanechať učiteľstvo. Aby som čo najjasnejšie ilustroval dôvody tohto rozhodnutia, poviem, že za desať rokov sa študijný odbor, ktorý som vyučoval, nezmenil o jedno desatinné miesto. Aj keď sa aplikovaná mechanika, súdiac podľa publikácií, posunula vpred veľmi, veľmi úspešne.

Práca navyše čoraz viac pripomínala byrokratickú prácu – správy, programy, normy a tony papiera. V takýchto podmienkach bolo potešenie z vyučovania nahradené hlásením o prijatí tohto potešenia, a to je pre cvičiaceho špecialistu viac než nepríjemné.

A nakoniec som sa dostal k robotike takto: v rokoch 2007-2009 sme spolu s profesormi A. Golovinom a N. Umnovom začali pripravovať prvé vedecké práce. Tam som musel použiť algoritmy na určenie dráh objektov zo zábleskovej fotografie. Od tejto témy je krok k strojovému videniu, OpenCV a Robotickému operačnému systému (hoci vtedy som o takom rozsahu ani neuvažoval). Potom som sa konečne zameral na aplikovanú mechaniku a robotiku vo výskume a vývoj sa stal nosnou činnosťou.

Na nájdenie novej práce v robotike však bolo potrebné zdokonaliť a doplniť si znalosti z programovania. Koniec koncov, nikdy som špecificky IT neštudoval, okrem ročného univerzitného kurzu (ObjectPascal a Borland VCL v C++) a pri teoretických aspektoch vývoja som sa spoliehal na matematiku.

Najprv som zvažoval možnosti denného štúdia v mojom rodnom inštitúte. Pravda, rýchlo sa ukázalo, že skĺbiť takéto štúdium s prácou na katedre bude takmer nemožné pre nepravidelný rozvrh a častú prácu mimo vlastného rozvrhu (suplovanie a pod.). Tak som postupne prišiel na myšlienku absolvovať platené kurzy na diaľku. Do GeekBrains som sa dostal na odporúčanie profesorov zo školiaceho strediska Mail.ru Technopark, ktoré sa nachádza v Baumanke, a prihlásil som sa do kurzu Python Programmer.

Kurzy nerobili žiadne ťažkosti, problém bol len v tom, že som ich neustále musel kombinovať s prácou na katedre, vedeckými prácami a podujatiami. Čas bol taký tesný, že väčšina sociálnych väzieb mimo domova musela byť obetovaná (našťastie dočasne).

Takto som sa vyrovnal s pracovným zaťažením: riešil som problémy na cestách. Táto zručnosť, vyvinutá mnohými pracovnými cestami, sa ukázala ako veľmi užitočná, keďže bez nej by som ani nedokázal dokončiť všetky domáce úlohy (a nahrádza aj meditáciu...). Naučil som sa kódovať na cestách pomocou notebooku, smartfónu a bezdrôtovej klávesnice smartfónu.

Môj notebook je Dell Latitude 3470 a vystačí si s každým smartfónom s uhlopriečkou 5.5 palca a viac spárovaným s klávesnicou Logitech K 810 BT. Vo všeobecnosti odporúčam produkty Logitech každému, sú veľmi spoľahlivé a znesú aj veľmi drsné podmienky používania (a toto nikdy nie je reklama).

Od rakiet po roboty a čo s tým má Python spoločné. Príbeh absolventov GeekBrains
Klávesnica Logitech K810

Python je veľmi vhodný pre takúto prácu - ak máte dobrého editora. Ďalší programátorský hack: použite vzdialené pripojenie k pracovnej ploche alebo runtime prostrediu. Dokončil som niekoľko úloh pomocou zabezpečeného webového servera so systémom Django na mojom domácom počítači. Pracoval som z vlaku pomocou softvéru PyDroid, DroidEdit, Maxima.

Prečo Python?

Netrvalo dlho a pokúsil som sa použiť PHP ako systémový skriptovací jazyk. Spočiatku som študoval Python sám a postupne „pre seba“. Rozhodol som sa vážne študovať potom, čo som sa dozvedel o existencii efektívneho prepojenia medzi Pythonom a C++ na úrovni modulov – zdalo sa mi zaujímavé zdieľať optimalizované algoritmy a postupy prípravy údajov v rámci toho istého jazyka.

Najjednoduchší príklad: existuje riadiaci systém pre neštandardný výkonný pohon, implementovaný na embedded stroji s procesorom RISC, v C++. Správa prebieha cez externé API závislé od počítača, ktoré podporuje napríklad komunikáciu medzi subsystémami cez sieť. Na vysokej úrovni nie je algoritmus činnosti pohonu odladený alebo nie je konštantný (v závislosti od pracovného procesu je potrebné načítať rôzne algoritmy).

Jedným z najlepších spôsobov, ako dosiahnuť takýto systém, je použiť počítačovo špecifické API subsystému C++ ako základ pre množinu tried Pythonu, ktoré bežia na multiplatformovom interprete. Vývojár najvyššej úrovne teda nebude musieť brať do úvahy vlastnosti zabudovaného stroja a jeho OS, bude jednoducho pracovať s triedami Pythonu, ktoré fungujú ako „obaly“ nízkoúrovňového API.

Musel som sa naučiť C++ a Python binding takmer od nuly. Rýchlo sa ukázalo, že objektovo orientované schopnosti na vysokej úrovni sú oveľa dôležitejšie ako na nízkej úrovni. Z tohto dôvodu sme museli úplne zmeniť prístup k návrhu a implementácii API, pričom sme sa rozhodli pre triedy na úrovni Pythonu a zdieľali globálne dáta v C/C++. Zvyknite si na generovanie kódu: napríklad samotný rámec ROS generuje názvy a objekty v Pythone, takže pri navrhovaní rozhraní musíte brať do úvahy jazykové rozdiely, najmä v písaní.

Práca v súčasnosti: Logika ovládania Pythonu a robota

Teraz pracujem ako Python a C++ programátor vo Výskumnom a vzdelávacom centre robotiky na Moskovskej štátnej technickej univerzite. Realizujeme výskumné projekty a softvérové ​​nástroje na objednávku vládnych rezortov: vyvíjame manipulátory so zabudovanými systémami technického videnia a vysokoúrovňovými automatickými riadiacimi algoritmami, ktoré sú nezávislé od systémov.

V súčasnosti programujem logiku na vysokej úrovni pre riadiace systémy robotov v Pythone; tento jazyk spája vysoko optimalizované moduly napísané v C++, assembleri a Go.

Pri programovaní riadiacich algoritmov robota sa používajú dve veľké skupiny algoritmov. Prvý z nich je implementovaný priamo na zariadení na nízkej úrovni – ide o zabudovaný softvér ovládačov pohonov, koncentrátorov komunikačných liniek a podsystémov interakcie operátora.

Algoritmy sú tu navrhnuté pre kontrolovanú rýchlosť vykonávania a spoľahlivosť, ktorá prevyšuje výkon robota ako celku. Ten je povinný, pretože bezpečnosť celého systému závisí od nízkoúrovňového riadiaceho softvéru.

Druhá skupina algoritmov určuje fungovanie robota ako celku. Ide o programy na vysokej úrovni, pri vývoji ktorých sa kladie dôraz na prehľadnosť a rýchlosť implementácie algoritmu, často pomerne zložitého. Softvér robota na vysokej úrovni navyše veľmi často podlieha zmenám počas procesu nastavenia a testovania. Pre takýto vývoj sú nevyhnutné interpretované jazyky na všeobecné účely.

Aké znalosti sú potrebné na takúto prácu?

Povinné bude štúdium jazyka šablón C++ a objektovo orientovaných možností Pythonu. Takmer nenahraditeľnou zručnosťou je schopnosť navrhovať a dokumentovať API. Bolo by dobré preskúmať možnosti špecializovaných knižníc, ako je Boost::Python. Tí, ktorí pracujú s nízkoúrovňovým softvérom, sa určite budú musieť vysporiadať s multithreadingom (na úrovni jadra) a systémovými volaniami Linux/UNIX/QNX. Pre lepšie pochopenie princípov robotiky je veľmi užitočné zoznámiť sa s rámcom robotického operačného systému.

Snažím sa mať aspoň jeden kompilovaný a jeden interpretovaný programovací jazyk, ktorý sa vyvíja a je žiadaný. Toto je víťazná stratégia pre prácu v inžinierstve, kde je neustála potreba vyvíjať vysoko špecializované (čítaj: neobvyklé) algoritmy a implementovať ich do kompilačných jazykov. Úloha prípravy dát pre takýto softvér je oveľa príjemnejšia na riešenie pomocou interpretovaných jazykov. Spočiatku moja zostava obsahovala C++, Pascal a BASIC, neskôr pribudli PHP a BASH.

Ako môžu byť rozvojové nástroje užitočné pri výučbe študentov

Hlavným plánom profesionálneho rozvoja v súčasnosti je pokúsiť sa poskytnúť vedecký základ pre využitie nástrojov profesionálneho vývoja softvéru v pedagogike, vyvinúť a otestovať vyučovacie metódy.

Od roku 2016 som začal veľký experiment so zavádzaním vývojových nástrojov – programovacích jazykov, IDE, generátorov dokumentácie, systémov na správu verzií – do pedagogickej praxe na vysokých školách. Teraz sa nám podarilo získať výsledky, ktoré sa dajú kvalitatívne zovšeobecniť.

Napríklad zavedenie verzií materiálov do vzdelávacieho procesu výrazne skvalitňuje prácu študentov, avšak len pod podmienkou, že študenti spolupracujú na spoločných projektoch. Vývojom metód výučby technických disciplín s využitím profesionálnych nástrojov na vývoj softvéru sa v súčasnosti aktívne venuje moja výskumná skupina zložená zo študentov, uchádzačov a študentov doplnkových vzdelávacích programov na MSTU.

Mimochodom, učiteľskú prax som neopustil – vytvoril som si vlastný hĺbkový denný kurz o návrhu a správe Linuxu pre Inštitút pokročilých štúdií na MSTU a sám ho učím.

Vedecká práca

Rané práce
Problémy plánovania chôdze pri navrhovaní štvornohých systémov chôdze na príklade implementácie chôdze koňa (2010 g.)

K problematike kinematiky a zaťaženia nosného prvku prednej nohy koňa v štádiu približovania sa k opore ako súčasti pracovného cyklu štvornohého premiestňovača. (2012 g.)

Z posledného
Aplikácia 3D simulácie výroby ozubených kolies pre výučbu teórie mechanizmov a strojov (2019 g.)

Metóda rozpoznávania štrukturálnych prekážok a jej aplikácia pri hľadaní reliéfnych objektov (2018 g.)

Ostatné práce indexované vedeckými citačnými databázami si môžete pozrieť v mojom profile na ResearchGate. Väčšina článkov je venovaná pohybu strojov, sú tu práce o inžinierskej pedagogike a edukačný softvér.

Zdroj: hab.com

Pridať komentár