A rakétáktól a robotokig és mi köze van a Pythonnak ehhez? GeekBrains Alumni története

A rakétáktól a robotokig és mi köze van a Pythonnak ehhez? GeekBrains Alumni története
Ma Andrej Vukolov IT-re való átállásának történetét tesszük közzé. Gyermekkori űrszenvedélye egykor arra késztette, hogy az MSTU-n rakétatudományt tanuljon. A rideg valóság elfeledtette velem az álmot, de minden még érdekesebb lett. A C++ és a Python tanulmányozása lehetővé tette számomra, hogy ugyanolyan izgalmas munkát végezhessek: a robotvezérlő rendszerek logikájának programozását.

kezdet

Szerencsém volt, hogy egész gyerekkoromban az űrről tomboltam. Ezért iskola után egy percig sem kételkedtem, hova menjek tanulni, és beléptem az MSTU-ba. Bauman, a Rakétahajtómű-mérnöki Tanszékhez. Magát a képzés ágát - az űrrakéták por- vagy folyékony hajtóműveit - azonban egyáltalán nem kellett választani: 2001-ben még külön kari bizottság osztotta szét a jelentkezők célcsoportjait. Egy puskaporos hordóba kerültem.

Abban az időben a „rakétaboom” csak tervekben létezett, a mérnökök csekély fizetést kaptak, és speciális zárt tervezőirodákban és kutatóintézetekben dolgoztak, ahol gyakorlatilag nem volt kilátás a karrierre és a szakmai fejlődésre. Ennek ellenére a porrakéták Oroszországban tisztán katonai termékek.

Ma már erre a területre van kereslet, de már tanulmányaim alatt rájöttem, hogy a rakétatudományban szinte lehetetlen bármilyen tevékenység saját kezdeményezésre. Valójában ez a katonai szolgálat. Például a rakétaiparban dolgozva teljesen megfosztanának attól a lehetőségtől, hogy önállóan fejleszthessek szoftvereket, még saját magam számára is, mivel ez a tevékenység szigorúan szabályozott.

Minden szoftverterméket kizárólag speciális megrendelésre és a titoktartási bizottság (jelenleg az FSTEC részlege) jóváhagyásával fejlesztenek. Az ottani fejlesztőnek szó szerint minden kódsort regisztrálnia és licencet kell adnia. Minden szoftver kezdetben titkos a feladat szintjén. Ez részben megmagyarázza, hogy a ma rakétatudományi hallgatók képzésére használt szoftvert miért fejlesztették ki legkorábban az 90-es években.

Mire elvégeztem az intézetet, sikerült a mechanizmuselméleti tanszéken dolgozni, és elkezdtem fejleszteni egy oktatási folyamatszimulátort C++ nyelven, így volt egy összehasonlítási példa, és mérlegelni tudtam az előnyöket és hátrányokat. A választás nyilvánvaló volt, és fokozatosan elkezdtem sodródni az informatika és a robotika felé. Az alkalmazott mechanika sokkal szórakoztatóbb volt, mint a rakétatudomány: sok megoldatlan probléma, nyitott környezet, fejlesztőipar hiánya, sürgős szükség van szimulációs szoftverre. A robotikában a közös szoftverek rendezetlen architektúrája van, és összetett algoritmusok ismételt megvalósítására van szükség, beleértve a fuzzy logikát és az AI kezdeteit. Ezért az első kísérleti adatok feldolgozására szolgáló programjaim után szinte soha nem tértem vissza a rakétákhoz (kivéve az érettségi projektemet).

Ennek eredményeként mindössze négy hónapig volt lehetőségem a szakterületemen dolgozni, mielőtt egy Moszkva melletti üzemben diplomáztam a repülőgépipar kompozit szerkezeteinek szakterületén. Tanulmányaim befejezése után nem is kellett munkát keresnem – azonnal eljöttem alkalmazott mechanikát tanítani a robotika szakra.

A tanítástól a programozásig

A rakétáktól a robotokig és mi köze van a Pythonnak ehhez? GeekBrains Alumni története
Az IFTOMM Világkongresszuson a kutatócsoport hallgatóival (jobbra én)

10 évig dolgoztam az MSTU-ban a mintavételi osztályon, és tanítottam egy tanfolyamot a mechanizmusok elméletéről. Tudományos munkákat publikált (lásd a cikk végén), fokozatosan a mechanikától a CAD és a robotika felé mozdult el. És végül úgy döntött, hogy otthagyja a tanítást. A döntés okainak legvilágosabb szemléltetésére elmondom, hogy tíz év alatt egyetlen tizedesjegyet sem változott az általam tanított tanulmányok menete. Bár az alkalmazott mechanika a publikációk alapján nagyon-nagyon sikeresen haladt előre.

Ráadásul a munka egyre jobban hasonlított a bürokratikus munkához – jelentések, programok, szabványok és rengeteg papír. Ilyen körülmények között a tanítás örömét felváltotta ennek az örömnek az átvételéről szóló jelentés, és ez egy gyakorló szakember számára több mint kellemetlen.

És végül így jutottam el a robotikához: 2007-2009-ben A. Golovin és N. Umnov professzorokkal együtt elkezdtük az első tudományos munkák előkészítését. Ott algoritmusokkal kellett meghatároznom a stroboszkópos fotózásból származó objektumok útját. Ettől a témától egy lépés a gépi látás, az OpenCV és a Robotic Operating System (bár akkor még nem is gondoltam ilyen léptékre). Ezt követően végül az alkalmazott mechanikára és a robotikára koncentráltam a kutatásban, a fejlesztés pedig támogató tevékenységgé vált.

Ahhoz azonban, hogy új állást találjak a robotikában, programozási ismereteim fejlesztésére, kiegészítésére volt szükség. Hiszen soha nem tanultam kifejezetten informatikát, kivéve egy éves egyetemi tanfolyamot (ObjectPascal és Borland VCL C++-ban), és a matematikára támaszkodtam a fejlesztés elméleti vonatkozásaiban.

Eleinte a szülői intézetemben fontolgattam nappali tagozatos kurzusok lehetőségét. Igaz, hamar kiderült, hogy a rendszertelen időbeosztás és a gyakori, saját beosztáson kívüli munkavégzés (helyettesítés, stb.) miatt szinte lehetetlen lenne az ilyen tanulmányokat a tanszéki munkával összekapcsolni. Így aztán fokozatosan jutott eszembe, hogy fizetős tanfolyamokat végezzek távolról. A baumankai Mail.ru Technopark képzési központ professzorainak ajánlására érkeztem a GeekBrains-hez, és beiratkoztam a Python programozói tanfolyamra.

A tanfolyamok nem okoztak nehézséget, csak az volt a probléma, hogy folyamatosan össze kellett kapcsolnom a tanszéki munkával, tudományos munkákkal, rendezvényekkel. Az idő annyira szűkös volt, hogy a legtöbb otthonon kívüli társadalmi kapcsolatot fel kellett áldozni (szerencsére átmenetileg).

Így bírtam a leterheltséget: útközben megoldottam a problémákat. Ez a számtalan üzleti úton kialakult készség nagyon hasznosnak bizonyult, hiszen enélkül még a házi feladatomat sem tudnám elvégezni (és a meditációt is helyettesíti...). Megtanultam kódolni útközben a laptopom, az okostelefonom és a vezeték nélküli okostelefon-billentyűzetek segítségével.

A laptopom egy Dell Latitude 3470, és bármilyen 5.5 hüvelykes vagy annál nagyobb átlójú okostelefon megteszi a Logitech K 810 BT billentyűzettel párosítva. Általánosságban mindenkinek ajánlom a Logitech termékeit, nagyon megbízhatóak és kibírják a nagyon kemény használati körülményeket is (ez pedig sosem reklám).

A rakétáktól a robotokig és mi köze van a Pythonnak ehhez? GeekBrains Alumni története
Logitech K810 billentyűzet

A Python nagyon kedvez az ilyen munkának – ha van egy jó szerkesztő. Egy másik programozási hack: használjon távoli kapcsolatokat az asztali vagy futási környezethez. Számos feladatot elvégeztem egy biztonságos webszerverrel, amelyen Django fut az otthoni számítógépemen. Vonatról dolgoztam, PyDroid, DroidEdit, Maxima szoftverekkel.

Miért Python?

Nem sokkal később megpróbáltam a PHP-t rendszerszkriptnyelvként használni. Kezdetben egyedül tanultam a Python-t, és fokozatosan „magamnak”. Azután döntöttem el, hogy komolyan tanulok, miután megtudtam, hogy a Python és a C++ között létezik hatékony modulszintű kapcsolat – érdekesnek tűnt az optimalizált algoritmusok és adat-előkészítési eljárások megosztása ugyanazon a nyelven belül.

A legegyszerűbb példa: van egy vezérlőrendszer egy nem szabványos nagy teljesítményű meghajtóhoz, RISC processzorral ellátott beágyazott gépen C++ nyelven. A kezelés egy külső gépfüggő API-n keresztül történik, amely támogatja például az alrendszerek közötti kommunikációt hálózaton keresztül. Magas szinten a meghajtó működési algoritmusa nem hibakeresés, vagy nem állandó (a munkafolyamattól függően különböző algoritmusokat kell betölteni).

Egy ilyen rendszer megvalósításának egyik legjobb módja a gépspecifikus C++ alrendszer API használata a többplatformos értelmezőn futó Python-osztályok alapjaként. Így a legfelső szintű fejlesztőnek nem kell figyelembe vennie a beágyazott gép és annak operációs rendszerének jellemzőit, egyszerűen csak olyan Python osztályokkal fog dolgozni, amelyek az alacsony szintű API „burkolóiként” működnek.

Szinte a nulláról kellett megtanulnom a C++ és Python kötést. Gyorsan világossá vált, hogy az objektum-orientált képességek magas szinten sokkal fontosabbak, mint alacsony szinten. Emiatt teljesen meg kellett változtatnunk az API tervezésének és megvalósításának megközelítését, a Python szintű osztályok mellett a globális adatok megosztását a C/C++ nyelven. Szokj hozzá a kódgeneráláshoz: például a ROS keretrendszer maga generál neveket és objektumokat Pythonban, így a felületek tervezésénél figyelembe kell venni a nyelvi különbségeket, különösen a gépelésnél.

Munka a jelenben: Python és Robot Control Logic

Jelenleg Python és C++ programozóként dolgozom a Moszkvai Állami Műszaki Egyetem Robotikai Kutatási és Oktatási Központjában. Kutatási projekteket és szoftvereszközöket valósítunk meg kormányzati szervek megbízásából: manipulátorokat fejlesztünk beépített technikai látásrendszerrel és magas szintű, rendszerektől független automatikus vezérlő algoritmusokkal.

Jelenleg Pythonban programozok magas szintű logikát a robotvezérlő rendszerekhez, ez a nyelv összekapcsolja a C++, assembler és Go nyelven írt, rendkívül optimalizált modulokat.

A robotvezérlési algoritmusok programozásában két nagy algoritmuscsoportot használnak. Az elsőt közvetlenül a berendezésen, alacsony szinten valósítják meg - ez a hajtásvezérlők, a kommunikációs vonal-koncentrátorok és a kezelői interakciós alrendszerek beépített szoftvere.

Az itt található algoritmusok olyan szabályozott végrehajtási sebességre és megbízhatóságra készültek, amely meghaladja a robot egészének teljesítményét. Ez utóbbi kötelező, hiszen az egész rendszer biztonsága az alacsony szintű vezérlőszoftvertől függ.

Az algoritmusok második csoportja a robot egészének működését határozza meg. Ezek magas szintű programok, amelyek fejlesztése során a hangsúly az algoritmus áttekinthetőségén és végrehajtásának gyorsaságán van, gyakran meglehetősen összetett. Ezenkívül a robot magas szintű szoftvere nagyon gyakran módosul a beállítási és tesztelési folyamat során. Az ilyen fejlődéshez elengedhetetlenek az általános célú tolmácsolt nyelvek.

Milyen tudás szükséges egy ilyen munkához?

Kötelező lesz a C++ sablonnyelv és a Python objektumorientált képességeinek tanulmányozása. Szinte pótolhatatlan készség az API-k tervezésének és dokumentálásának képessége. Jó ötlet lenne felfedezni a speciális könyvtárak, például a Boost::Python képességeit. Aki alacsony szintű szoftverekkel dolgozik, annak mindenképpen meg kell küzdenie a többszálú (kernel szinten) és a Linux/UNIX/QNX rendszerhívásokkal. A robotika alapelveinek jobb megértése érdekében nagyon hasznos megismerkedni a Robotic Operating System keretrendszerrel.

Arra törekszem, hogy legyen legalább egy lefordított és egy értelmezett programozási nyelv, amely fejlődik és keresett. Ez egy nyerő stratégia a mérnöki munka számára, ahol folyamatosan szükség van speciális (értsd: szokatlan) algoritmusok kidolgozására és fordítási nyelveken való megvalósítására. Az ilyen szoftverekhez való adat-előkészítési feladat sokkal kellemesebben megoldható értelmezett nyelvek használatával. Kezdetben C++, Pascal és BASIC szerepelt a készletemben, később a PHP és a BASH is bekerült.

Hogyan lehetnek hasznosak a fejlesztő eszközök a tanulók tanításában

A szakmai fejlődés fő terve most az, hogy a professzionális szoftverfejlesztő eszközök pedagógiai alkalmazásához próbáljunk tudományos alapot adni, tanítási módszereket kidolgozni, tesztelni.

2016 óta nagy kísérletbe kezdtem a fejlesztőeszközök – programozási nyelvek, IDE-k, dokumentációgenerátorok, verziókezelő rendszerek – bevezetése a felsőoktatási oktatási gyakorlatba. Mostanra sikerült minőségileg általánosítható eredményeket elérni.

Például az anyagok verziózásának bevezetése az oktatási folyamatba jelentősen javítja a hallgatói munka minőségét, de csak kötelező feltétellel: a diákok közös projekteken dolgoznak együtt. A műszaki tudományok professzionális szoftverfejlesztő eszközökkel történő oktatásának módszereinek fejlesztését jelenleg az MSTU hallgatóiból, jelentkezőiből és kiegészítő oktatási programok hallgatóiból álló kutatócsoportom aktívan végzi.

Mellesleg nem hagytam ott a tanítási gyakorlatomat – kidolgoztam egy saját mélyreható nappali tanfolyamomat a Linux tervezéséről és adminisztrációjáról az MSTU Advanced Studies Intézete számára, és magam tanítom.

Tudományos munka

Korai munka
A járástervezés kérdései négylábú járórendszerek tervezésekor a lójárás megvalósításának példáján (2010)

A ló mellső lábának tartóelemének kinematikájának és terhelésének kérdéséről a támasz megközelítésének szakaszában, mint a négylábú mozgató munkaciklusának összetevői (2012)

Az utolsóból
3D hajtóműgyártás szimulációs alkalmazás mechanizmus- és gépelmélet oktatásához (2019)

Szerkezeti akadályok felismerésének módszere és alkalmazása domborműtárgyak felkutatásában (2018)

Egyéb tudományos hivatkozási adatbázisok által indexelt munkák a profilomban tekinthetők meg Researchgate. A cikkek többsége a gépek mozgásával foglalkozik, vannak mérnökpedagógiai és oktatási szoftverekkel kapcsolatos munkák.

Forrás: will.com

Hozzászólás