Od raket do robotov in kaj ima s tem Python. Zgodba nekdanjega študenta GeekBrains

Od raket do robotov in kaj ima s tem Python. Zgodba nekdanjega študenta GeekBrains
Danes objavljamo zgodbo o prehodu Andreja Vukolova v IT. Njegova otroška strast do vesolja ga je nekoč pripeljala do študija raketne znanosti na MSTU. Zaradi krute resničnosti sem pozabil na sanje, a vse se je izkazalo še bolj zanimivo. Študij C++ in Python mi je omogočil enako razburljivo delo: programiranje logike sistemov za nadzor robotov.

začenja

Imel sem srečo, da sem vse otroštvo navduševal nad vesoljem. Zato po šoli niti za minuto nisem dvomil, kam naj grem študirat, in sem vstopil v MSTU. Bauman, na Oddelek za raketno pogonsko tehniko. A same veje predmeta - motorjev na smodnik ali tekočino vesoljskih raket - sploh ni bilo treba izbrati: leta 2001 je posebna fakultetna komisija vseeno razdelila ciljne skupine prijavljenih. Ujet sem bil v sodu smodnika.

Takrat je "raketni bum" obstajal le v načrtih, inženirji so prejemali skromne plače in delali v posebnih zaprtih projektantskih birojih in raziskovalnih inštitutih tako rekoč brez možnosti za kariero in poklicno rast. Kljub temu so rakete na smodnik v Rusiji izključno vojaški izdelki.

Zdaj je to področje iskano, vendar sem že med študijem ugotovil, da je v raketni znanosti samoiniciativno delovanje skoraj nemogoče. Pravzaprav je to služenje vojaškega roka. Na primer, če bi delal v raketni industriji, bi bil popolnoma prikrajšan za možnost samostojnega razvoja programske opreme, tudi zase, saj je ta dejavnost strogo regulirana.

Vsi izdelki programske opreme so razviti izključno po posebnem naročilu in z odobritvijo komisije za tajnost (zdaj oddelek FSTEC). Tamkajšnji razvijalec se mora registrirati in licencirati dobesedno vsako vrstico kode. Vsa programska oprema je sprva tajna na ravni nalog. To deloma pojasnjuje, zakaj je bila programska oprema, ki se zdaj uporablja za usposabljanje študentov raketne znanosti, razvita najpozneje v devetdesetih letih.

Ko sem diplomiral na inštitutu, mi je uspelo delati na oddelku za teorijo mehanizmov in začel razvijati simulator izobraževalnega procesa v C++, tako da sem imel primer za primerjavo in lahko pretehtal prednosti in slabosti. Izbira je bila očitna in postopoma sem se začel usmerjati k informatiki in robotiki. Uporabna mehanika je bila veliko bolj zabavna kot raketna znanost: veliko nerešenih problemov, odprto okolje, pomanjkanje razvojne industrije, nujna potreba po programski opremi za simulacijo. V robotiki obstaja neurejena arhitektura skupne programske opreme in potreba po ponavljajočem se izvajanju kompleksnih algoritmov, vključno z mehko logiko in začetki umetne inteligence. Zato se po svojih prvih programih za obdelavo eksperimentalnih podatkov skoraj nikoli več nisem vrnil k raketam (z izjemo diplomske naloge).

Posledično sem imel priložnost delati po svoji specialnosti le štiri mesece, preden sem diplomiral v tovarni blizu Moskve za kompozitne strukture za vesoljsko industrijo. Po končanem študiju mi ​​sploh ni bilo treba iskati službe – takoj sem prišel predavat uporabno mehaniko na oddelku za robotiko.

Od poučevanja do programiranja

Od raket do robotov in kaj ima s tem Python. Zgodba nekdanjega študenta GeekBrains
Na svetovnem kongresu IFTOMM s študenti člani raziskovalne skupine (jaz desno)

Na MSTU sem 10 let delal na oddelku za vzorčenje in poučeval tečaj teorije mehanizmov. Objavljal je znanstvena dela (glej konec članka), postopoma prehajal od mehanike k CAD in robotiki. In na koncu se je odločil zapustiti poučevanje. Za nazornejšo ilustracijo razlogov za to odločitev bom povedal, da se študij, ki sem ga predaval, v desetih letih ni spremenil niti za eno decimalno mesto. Čeprav je uporabna mehanika, sodeč po publikacijah, napredovala zelo, zelo uspešno.

Poleg tega je delo vse bolj spominjalo na birokratsko – poročila, programi, standardi in tone papirja. V takih razmerah je bil užitek poučevanja nadomeščen s poročanjem o prejemu tega užitka, kar je za praktikanta več kot neprijetno.

In končno sem do robotike prišel takole: leta 2007-2009 smo skupaj s profesorjema A. Golovinom in N. Umnovom začeli pripravljati prva znanstvena dela. Tam sem moral uporabiti algoritme za določanje poti objektov iz stroboskopske fotografije. Od te teme je en korak do strojnega vida, OpenCV in robotskega operacijskega sistema (čeprav takrat sploh nisem razmišljal o takšnem obsegu). Po tem sem se v raziskavah dokončno usmeril v uporabno mehaniko in robotiko, razvoj pa je postal podporna dejavnost.

Za novo zaposlitev v robotiki pa je bilo potrebno izpopolniti in dopolniti znanje programiranja. Navsezadnje nikoli nisem posebej študiral IT, razen enoletnega univerzitetnega tečaja (ObjectPascal in Borland VCL v C++) in sem se zanašal na matematiko za teoretične vidike razvoja.

Sprva sem razmišljal o možnostih rednih tečajev na domačem inštitutu. Res je, hitro je postalo jasno, da bo tak študij zaradi nerednega urnika in pogostega dela izven lastnega urnika (nadomeščanje ipd.) skoraj nemogoče združiti z delom na oddelku. Tako sem postopoma prišel na idejo o dokončanju plačanih tečajev na daljavo. V GeekBrains sem prišel na priporočilo profesorjev iz izobraževalnega centra Mail.ru Technopark, ki se nahaja v Baumanki, in se vpisal na tečaj Python Programmer.

Tečaji niso povzročali nobenih težav, težava je bila le v tem, da sem jih morala nenehno usklajevati z delom na oddelku, znanstvenimi deli in dogodki. Časa je bilo tako malo, da je bilo treba (na srečo začasno) žrtvovati večino socialnih vezi zunaj doma.

Takole sem se spopadal z delovno obremenitvijo: težave sem reševal na cesti. Ta veščina, razvita na številnih službenih potovanjih, se je izkazala za zelo uporabno, saj brez nje ne bi mogel opraviti niti vseh domačih nalog (pa tudi nadomešča meditacijo ...). Naučil sem se kodirati na poti z uporabo prenosnika, pametnega telefona in brezžične tipkovnice pametnega telefona.

Moj prenosni računalnik je Dell Latitude 3470 in primeren je kateri koli pametni telefon z diagonalo 5.5 palca ali več, združen s tipkovnico Logitech K 810 BT. Na splošno vsem priporočam izdelke Logitech, ki so zelo zanesljivi in ​​prenesejo zelo težke pogoje uporabe (in to nikoli ni reklama).

Od raket do robotov in kaj ima s tem Python. Zgodba nekdanjega študenta GeekBrains
Tipkovnica Logitech K810

Python je zelo primeren za takšno delo - če imate dober urejevalnik. Še en programski trik: uporabite oddaljene povezave z namizjem ali izvajalnim okoljem. Opravil sem več nalog z uporabo varnega spletnega strežnika, ki izvaja Django na domačem računalniku. Delal sem iz vlaka, z uporabo programske opreme PyDroid, DroidEdit, Maxima.

Zakaj Python?

Ni minilo dolgo, preden sem poskusil uporabiti PHP kot sistemski skriptni jezik. Python sem sprva študiral sam in malo po malo »zase«. Za resen študij sem se odločil potem, ko sem izvedel za obstoj učinkovite povezave med Pythonom in C++ na modulski ravni – zdelo se mi je zanimivo deliti optimizirane algoritme in postopke priprave podatkov znotraj istega jezika.

Najenostavnejši primer: obstaja nadzorni sistem za nestandardni zmogljiv pogon, implementiran na vgrajenem stroju s procesorjem RISC, v C++. Upravljanje poteka prek zunanjega strojno odvisnega API-ja, ki podpira na primer komunikacijo med podsistemi prek omrežja. Na visoki ravni algoritem delovanja pogona ni odpravljen ali pa ni konstanten (potrebno je naložiti različne algoritme glede na delovni proces).

Eden najboljših načinov za doseganje takšnega sistema je uporaba strojno specifičnega API-ja podsistema C++ kot osnove za nabor razredov Python, ki se izvajajo na tolmaču za več platform. Tako razvijalcu na najvišji ravni ne bo treba upoštevati značilnosti vgrajenega stroja in njegovega operacijskega sistema; preprosto bo delal z razredi Python, ki delujejo kot »ovitki« API-ja na nizki ravni.

Vezave C++ in Python sem se moral naučiti skoraj iz nič. Hitro je postalo jasno, da so objektno usmerjene zmogljivosti na visoki ravni veliko bolj pomembne kot na nizki ravni. Zaradi tega smo morali popolnoma spremeniti pristop k oblikovanju in implementaciji API-ja, tako da smo se odločili za razrede na ravni Python in skupne globalne podatke v C/C++. Navadite se na ustvarjanje kode: na primer, ogrodje ROS samo generira imena in objekte v Pythonu, zato morate pri načrtovanju vmesnikov upoštevati jezikovne razlike, zlasti pri tipkanju.

Delo v sedanjosti: Python in logika nadzora robotov

Zdaj delam kot programer za Python in C++ v Raziskovalnem in izobraževalnem centru za robotiko na Moskovski državni tehnični univerzi. Izvajamo raziskovalne projekte in programska orodja, ki jih naročajo vladni oddelki: razvijamo manipulatorje z vgrajenimi sistemi tehničnega vida in visokonivojskimi algoritmi za samodejno krmiljenje, ki so neodvisni od sistemov.

Trenutno programiram visokonivojsko logiko za nadzorne sisteme robotov v Pythonu; ta jezik povezuje visoko optimizirane module, napisane v C++, asemblerju in Go.

Pri programiranju algoritmov za krmiljenje robotov se uporabljata dve veliki skupini algoritmov. Prvi od njih je implementiran neposredno na opremi, na nizki ravni - to je vgrajena programska oprema pogonskih krmilnikov, koncentratorjev komunikacijskih linij in podsistemov za interakcijo operaterja.

Algoritmi tukaj so zasnovani za nadzorovano hitrost izvajanja in zanesljivost, ki presega zmogljivost robota kot celote. Slednje je obvezno, saj je varnost celotnega sistema odvisna od nizkonivojske nadzorne programske opreme.

Druga skupina algoritmov določa delovanje robota kot celote. To so programi na visoki ravni, katerih poudarek pri razvoju je na jasnosti in hitrosti izvajanja algoritma, pogosto precej zapletenega. Poleg tega se visokonivojska programska oprema na robotu zelo pogosto spreminja med namestitvijo in postopkom testiranja. Za takšen razvoj so nepogrešljivi splošnonamenski tolmačeni jeziki.

Kakšno znanje je potrebno za takšno delo?

Obvezno bo preučiti jezik predlog C++ in objektno usmerjene zmogljivosti Pythona. Skoraj nenadomestljiva veščina je sposobnost oblikovanja in dokumentiranja API-jev. Dobro bi bilo raziskati zmogljivosti specializiranih knjižnic, kot je Boost::Python. Tisti, ki delajo z nizkonivojsko programsko opremo, bodo zagotovo imeli opravka z večnitnostjo (na ravni jedra) in sistemskimi klici Linux/UNIX/QNX. Da bi izboljšali vaše razumevanje principov robotike, je zelo koristno, da se seznanite z okvirom robotskega operacijskega sistema.

Poskušam imeti vsaj en preveden in en interpretiran programski jezik, ki se razvija in je po njem povpraševanje. To je zmagovalna strategija za delo v inženiringu, kjer je nenehno treba razvijati visoko specializirane (beri: nenavadne) algoritme in jih izvajati v jezikih za prevajanje. Nalogo priprave podatkov za takšno programsko opremo je veliko prijetneje reševati z uporabo interpretiranih jezikov. Sprva je moj nabor vključeval C++, Pascal in BASIC, kasneje sta bila dodana PHP in BASH.

Kako so lahko razvojna orodja uporabna pri poučevanju študentov

Glavni načrt strokovnega razvoja zdaj je poskušati zagotoviti znanstveno podlago za uporabo profesionalnih orodij za razvoj programske opreme v pedagogiki, razviti in preizkusiti metode poučevanja.

Od leta 2016 sem začel z velikim eksperimentom uvajanja razvojnih orodij - programskih jezikov, IDE-jev, generatorjev dokumentacije, sistemov za nadzor različic - v pedagoško prakso v visokem šolstvu. Sedaj nam je uspelo dobiti rezultate, ki jih je mogoče kvalitativno posplošiti.

Na primer, uvedba verzioniranja gradiv v izobraževalni proces bistveno izboljša kakovost študentskega dela, vendar le pod obveznim pogojem: študenti sodelujejo pri skupnih projektih. Razvoj metod za poučevanje tehničnih disciplin z uporabo profesionalnih orodij za razvoj programske opreme zdaj aktivno izvaja moja raziskovalna skupina, ki jo sestavljajo študenti, kandidati in študenti dodatnih izobraževalnih programov na MSTU.

Mimogrede, nisem zapustil svoje pedagoške prakse - razvil sem lasten poglobljen redni tečaj o načrtovanju in upravljanju Linuxa za Inštitut za napredne študije pri MSTU in ga poučujem sam.

Znanstveno delo

Zgodnja dela
Problemi načrtovanja hoje pri oblikovanju sistemov štirinožne hoje na primeru izvedbe konjske hoje (2010)

K problematiki kinematike in obremenitve nosilnega elementa prednje noge konja v fazi približevanja opori kot komponent delovnega cikla štirinožnega gibalca. (2012)

Od zadnjega
3D aplikacija za simulacijo izdelave zobnikov za poučevanje mehanizmov in strojne teorije (2019)

Metoda za prepoznavanje strukturnih ovir in njena uporaba pri iskanju reliefnih objektov (2018)

Druga dela, ki jih indeksirajo zbirke znanstvenih citatov, si lahko ogledate v mojem profilu na ResearchGate. Večina člankov je posvečenih gibanju strojev, obstajajo dela o inženirski pedagogiki in izobraževalni programski opremi.

Vir: www.habr.com

Dodaj komentar