Van vuurpyle tot robotte en wat het Python daarmee te doen. GeekBrains Alumni Storie

Van vuurpyle tot robotte en wat het Python daarmee te doen. GeekBrains Alumni Storie
Vandag publiseer ons die storie van Andrey Vukolov se oorgang na IT. Sy kinderjare passie vir ruimte het hom eenkeer gelei om vuurpylwetenskap aan MSTU te studeer. Die harde werklikheid het my van die droom laat vergeet, maar alles het nog interessanter uitgedraai. Die bestudering van C++ en Python het my toegelaat om ewe opwindende werk te doen: programmering van die logika van robotbeheerstelsels.

Begin

Ek was gelukkig om my hele kinderjare oor die ruimte te gaande. Daarom het ek na skool nie vir 'n minuut getwyfel waarheen ek moet gaan studeer nie, en ek het by MSTU ingeskryf. Bauman, aan die departement van vuurpyle-aandrywingsingenieurswese. Die tak van die kursus self - poeier- of vloeistofenjins van ruimtevuurpyle - hoef egter glad nie gekies te word nie: in 2001 het 'n spesiale fakulteitskommissie steeds die teikengroepe van aansoekers versprei. Ek was in 'n kruitvat gevang.

Destyds het die "vuurpylboom" slegs in planne bestaan; ingenieurs het karige salarisse ontvang en in spesiale geslote ontwerpburo's en navorsingsinstitute gewerk met feitlik geen vooruitsigte vir loopbaan en professionele groei nie. Tog is poeiervuurpyle in Rusland suiwer militêre produkte.

Nou is hierdie area in aanvraag, maar ek het reeds tydens my studies besef dat in vuurpylwetenskap enige aktiwiteit op eie inisiatief amper onmoontlik is. Trouens, dit is militêre diens. As ek byvoorbeeld in die vuurpylbedryf werk, sal ek heeltemal die geleentheid ontneem word om sagteware onafhanklik te ontwikkel, selfs vir myself, aangesien hierdie aktiwiteit streng gereguleer word.

Alle sagtewareprodukte word uitsluitlik op spesiale bestelling en met die goedkeuring van die geheimhoudingskommissie (nou 'n afdeling van FSTEC) ontwikkel. Die ontwikkelaar daar is verplig om letterlik elke reël kode te registreer en te lisensieer. Alle sagteware is aanvanklik geheim op die taakvlak. Dit verklaar deels waarom die sagteware wat nou gebruik word om vuurpylwetenskapstudente op te lei op die vroegste in die 90's ontwikkel is.

Teen die tyd dat ek aan die instituut gegradueer het, het ek dit reggekry om by die departement van meganismeteorie te werk en 'n opvoedkundige prosessimulator in C++ begin ontwikkel, so ek het 'n voorbeeld gehad om te vergelyk en kon die voor- en nadele opweeg. Die keuse was voor die hand liggend, en ek het geleidelik na IT en robotika begin dryf. Toegepaste meganika was baie lekkerder as vuurpylwetenskap: baie onopgeloste probleme, 'n oop omgewing, gebrek aan 'n ontwikkelingsbedryf, 'n dringende behoefte aan simulasieprogrammatuur. In robotika is daar 'n onstuimige argitektuur van algemene sagteware en die behoefte om herhaaldelik komplekse algoritmes te implementeer, insluitend fuzzy logika en die begin van AI. Daarom, na my eerste programme vir die verwerking van eksperimentele data, het ek amper nooit teruggekeer na vuurpyle nie (met die uitsondering van my afstudeerprojek).

Gevolglik het ek die geleentheid gehad om vir slegs vier maande in my spesialiteit te werk voordat ek by 'n aanleg naby Moskou vir saamgestelde strukture vir die lugvaartbedryf gegradueer het. Nadat ek my studies voltooi het, hoef ek nie eens werk te soek nie – ek het dadelik toegepaste meganika by die robotika-afdeling kom onderrig.

Van onderrig tot programmering

Van vuurpyle tot robotte en wat het Python daarmee te doen. GeekBrains Alumni Storie
By die IFTOMM Wêreldkongres met studentelede van die navorsingsgroep (ek regs)

Ek het vir 10 jaar by MSTU in die steekproefafdeling gewerk en 'n kursus oor die teorie van meganismes aangebied. Hy het wetenskaplike werke gepubliseer (sien die einde van die artikel), en het geleidelik van meganika na CAD en robotika beweeg. En op die ou end het hy besluit om die onderwys te verlaat. Om die redes vir hierdie besluit die duidelikste te illustreer, sal ek sê dat die kursus wat ek aangebied het in tien jaar nie een desimale plek verander het nie. Alhoewel toegepaste meganika, te oordeel aan die publikasies, baie, baie suksesvol vorentoe beweeg het.

Boonop het die werk meer en meer na burokratiese werk gelyk – verslae, programme, standaarde en tonne papier. In sulke omstandighede is die plesier van onderrig vervang deur verslag te doen oor die ontvangs van hierdie plesier, en dit is meer as onaangenaam vir 'n praktiserende spesialis.

En uiteindelik het ek so by robotika gekom: in 2007-2009, saam met professore A. Golovin en N. Umnov, het ons die eerste wetenskaplike werke begin voorberei. Daar moes ek algoritmes gebruik om die paaie van voorwerpe uit strobefotografie te bepaal. Van hierdie onderwerp af is dit een stap na masjienvisie, OpenCV en Robotiese Bedryfstelsel (hoewel ek destyds nie eers aan so 'n skaal gedink het nie). Daarna het ek uiteindelik op toegepaste meganika en robotika in navorsing gefokus, en ontwikkeling het 'n ondersteunende aktiwiteit geword.

Om 'n nuwe werk in robotika te vind, was dit egter nodig om my programmeringskennis te verbeter en aan te vul. Ek het immers nooit IT spesifiek gestudeer nie, behalwe vir 'n jaarlange universiteitskursus (ObjectPascal en Borland VCL in C++), en het op wiskunde staatgemaak vir die teoretiese aspekte van ontwikkeling.

Ek het eers opsies oorweeg vir voltydse kursusse by my inheemse instituut. Dit het weliswaar vinnig duidelik geword dat dit byna onmoontlik sou wees om sulke studies met werk by die departement te kombineer weens die onreëlmatige skedule en gereelde werk buite jou eie skedule (vervanging, ens.). Ek het dus geleidelik tot die idee gekom om betaalde kursusse op afstand te voltooi. Ek het na GeekBrains gekom op aanbeveling van professore van die Mail.ru Technopark-opleidingsentrum, geleë in Baumanka, en het vir die Python-programmeerderkursus ingeskryf.

Die kursusse het geen probleme veroorsaak nie, die enigste probleem was dat ek dit voortdurend moes kombineer met werk by die departement, wetenskaplike werke en geleenthede. Tyd was so min dat die meeste sosiale verbintenisse buite die huis opgeoffer moes word (gelukkig tydelik).

Dit is hoe ek die werklading hanteer het: Ek het probleme op die pad opgelos. Hierdie vaardigheid, ontwikkel deur talle sakereise, was baie nuttig, want daarsonder sou ek nie eens al my huiswerk kon voltooi nie (en dit vervang ook meditasie...). Ek het geleer om op die pad te kodeer deur my skootrekenaar, slimfoon en draadlose slimfoonsleutelborde te gebruik.

My skootrekenaar is 'n Dell Latitude 3470, en enige slimfoon met 'n diagonaal van 5.5 duim of meer gepaard met 'n Logitech K 810 BT-sleutelbord sal doen. Oor die algemeen beveel ek Logitech-produkte aan vir almal; hulle is baie betroubaar en kan baie strawwe gebruikstoestande weerstaan ​​(en dit is nooit 'n advertensie nie).

Van vuurpyle tot robotte en wat het Python daarmee te doen. GeekBrains Alumni Storie
Sleutelbord Logitech K810

Python is baie bevorderlik vir sulke werk - as jy 'n goeie redigeerder het. Nog 'n programmering hack: gebruik afgeleë verbindings na die lessenaar of runtime omgewing. Ek het verskeie take voltooi met 'n veilige webbediener wat Django op my tuisrekenaar laat loop. Ek het vanaf die trein gewerk en die sagteware PyDroid, DroidEdit, Maxima gebruik.

Hoekom Python?

Dit was nie lank voordat ek PHP as 'n stelselskriftaal probeer gebruik het nie. Ek het aanvanklik Python op my eie bestudeer en bietjie vir bietjie "vir myself." Ek het besluit om ernstig te studeer nadat ek geleer het van die bestaan ​​van 'n effektiewe verband tussen Python en C++ op modulevlak - dit het interessant gelyk om geoptimaliseerde algoritmes en datavoorbereidingsprosedures binne dieselfde taal te deel.

Die eenvoudigste voorbeeld: daar is 'n beheerstelsel vir 'n nie-standaard kragtige aandrywing, geïmplementeer op 'n ingebedde masjien met 'n RISC verwerker, in C++. Bestuur vind plaas deur 'n eksterne masjienafhanklike API, wat byvoorbeeld kommunikasie tussen substelsels oor 'n netwerk ondersteun. Op 'n hoë vlak word die aandrywingsalgoritme nie ontfout nie of is nie konstant nie (dit is nodig om verskillende algoritmes te laai, afhangende van die werkproses).

Een van die beste maniere om so 'n stelsel te bereik, is om die masjienspesifieke C++ substelsel API te gebruik as die basis vir 'n stel Python-klasse wat op 'n kruisplatform-tolk loop. Die topvlak-ontwikkelaar hoef dus nie die kenmerke van die ingebedde masjien en sy bedryfstelsel in ag te neem nie; hy sal eenvoudig met Python-klasse werk wat as "omhulsels" van die laevlak-API optree.

Ek moes amper van voor af leer C++ en Python-binding. Dit het vinnig duidelik geword dat objekgeoriënteerde vermoëns op 'n hoë vlak baie belangriker was as op 'n lae vlak. As gevolg hiervan moes ons die benadering tot die ontwerp en implementering van die API heeltemal verander, kies vir klasse op die Python-vlak en het globale data in C/C++ gedeel. Raak gewoond aan kodegenerering: die ROS-raamwerk genereer byvoorbeeld self name en voorwerpe in Python, so jy moet taalverskille in ag neem, veral in tik, wanneer jy jou koppelvlakke ontwerp.

Werk in die hede: Python en robotbeheerlogika

Nou werk ek as 'n Python- en C++-programmeerder by die Robotikanavorsing- en Onderwyssentrum by Moskou Staats Tegniese Universiteit. Ons implementeer navorsingsprojekte en sagteware-instrumente in opdrag van staatsdepartemente: ons ontwikkel manipuleerders met ingeboude tegniese visiestelsels en hoëvlak outomatiese beheeralgoritmes wat onafhanklik van stelsels is.

Tans programmeer ek hoëvlaklogika vir robotbeheerstelsels in Python; hierdie taal koppel hoogs geoptimaliseerde modules saam wat geskryf is in C++, assembler en Go.

In die programmering van robotbeheeralgoritmes word twee groot groepe algoritmes gebruik. Die eerste daarvan word direk op die toerusting geïmplementeer, op 'n lae vlak - dit is die ingeboude sagteware van dryfbeheerders, kommunikasielynkonsentrators en operateurinteraksiesubstelsels.

Die algoritmes hier is ontwerp vir beheerde uitvoeringspoed en betroubaarheid wat die werkverrigting van die robot as geheel oorskry. Laasgenoemde is verpligtend, aangesien die sekuriteit van die hele stelsel afhang van laevlakbeheersagteware.

Die tweede groep algoritmes bepaal die werking van die robot as geheel. Dit is hoëvlak-programme, die klem in die ontwikkeling daarvan is op die duidelikheid en spoed van implementering van die algoritme, dikwels redelik kompleks. Boonop is hoëvlaksagteware op die robot baie dikwels onderhewig aan verandering tydens die opstel- en toetsproses. Vir sulke ontwikkeling is algemene interpretasietale onontbeerlik.

Watter kennis is nodig vir sulke werk?

Dit sal verpligtend wees om die C++-sjabloontaal en die objekgeoriënteerde vermoëns van Python te bestudeer. 'n Byna onvervangbare vaardigheid is die vermoë om API's te ontwerp en te dokumenteer. Dit sal 'n goeie idee wees om die vermoëns van gespesialiseerde biblioteke soos Boost::Python te verken. Diegene wat met laevlak sagteware werk, sal beslis te doen kry met multithreading (op kernvlak) en Linux/UNIX/QNX-stelseloproepe. Om jou begrip van die beginsels van robotika te verbeter, is dit baie nuttig om jouself vertroud te maak met die Robotiese Bedryfstelsel-raamwerk.

Ek probeer om ten minste een saamgestelde en een geïnterpreteerde programmeertaal te hê wat ontwikkel en in aanvraag is. Dit is 'n wenstrategie om in ingenieurswese te werk, waar daar voortdurend 'n behoefte is om hoogs gespesialiseerde (lees: ongewone) algoritmes te ontwikkel en in samestellingstale te implementeer. Die taak om data vir sulke sagteware voor te berei is baie aangenamer om op te los met behulp van geïnterpreteerde tale. Aanvanklik het my stel C++, Pascal en BASIC ingesluit, later is PHP en BASH bygevoeg.

Hoe ontwikkelingsinstrumente nuttig kan wees om studente te onderrig

Die hoofplan vir professionele ontwikkeling is nou om 'n wetenskaplike basis te probeer verskaf vir die gebruik van professionele sagteware-ontwikkelingsinstrumente in pedagogie, om onderrigmetodes te ontwikkel en te toets.

Sedert 2016 het ek 'n groot eksperiment begin om ontwikkelingshulpmiddels - programmeertale, IDE's, dokumentasie-opwekkers, weergawebeheerstelsels - in die onderwyspraktyk in hoër onderwys in te voer. Ons het nou daarin geslaag om resultate te verkry wat kwalitatief veralgemeen kan word.

Byvoorbeeld, die bekendstelling van weergawes van materiaal in die opvoedkundige proses verbeter die kwaliteit van studentewerk aansienlik, maar slegs onder 'n verpligte voorwaarde: studente werk saam aan gedeelde projekte. Die ontwikkeling van metodes vir die onderrig van tegniese dissiplines deur gebruik te maak van professionele sagteware-ontwikkelingsinstrumente word nou aktief deur my navorsingsgroep, bestaande uit studente, aansoekers en studente van addisionele onderwysprogramme by MSTU, uitgevoer.

Terloops, ek het nie my onderwyspraktyk verlaat nie - ek het my eie in-diepte voltydse kursus oor die ontwerp en administrasie van Linux vir die Instituut vir Gevorderde Studies by MSTU ontwikkel, en ek onderrig dit self.

Wetenskaplike werk

Vroeë werke
Kwessies van loopbeplanning by die ontwerp van vierbeen-stapstelsels deur die voorbeeld van 'n perd se gang-implementering te gebruik (2010)

Oor die kwessie van kinematika en laai van die ondersteunende element van die perd se voorbeen in die stadium van nadering van die ondersteuning as komponente van die werksiklus van die vierbeen-beweger (2012)

Van die laaste
3D rat vervaardiging simulasie toepassing vir onderrig meganisme en masjien teorie (2019)

Metode vir die herkenning van strukturele struikelblokke en die toepassing daarvan in die soeke na reliëfvoorwerpe (2018)

Ander werke wat deur wetenskaplike aanhalingsdatabasisse geïndekseer is, kan in my profiel op gesien word ResearchGate. Die meeste van die artikels word gewy aan die beweging van masjiene, daar is werke oor ingenieurspedagogie en opvoedkundige sagteware.

Bron: will.com

Voeg 'n opmerking