Raketeista robotteihin ja mitä tekemistä Pythonilla on sen kanssa. GeekBrainsin alumnien tarina

Raketeista robotteihin ja mitä tekemistä Pythonilla on sen kanssa. GeekBrainsin alumnien tarina
Tänään julkaisemme tarinan Andrei Vukolovin siirtymisestä IT-alalle. Hänen lapsuuden intohimonsa avaruuteen johti hänet opiskelemaan rakettitiedettä MSTU:hun. Karu todellisuus sai minut unohtamaan unen, mutta kaikki muuttui vielä mielenkiintoisemmaksi. C++:n ja Pythonin opiskelu antoi minulle mahdollisuuden tehdä yhtä jännittävää työtä: ohjelmoida robottien ohjausjärjestelmien logiikkaa.

alku

Olin onnekas saadessani raivota avaruudesta koko lapsuuteni. Siksi koulun jälkeen en epäillyt hetkeäkään, minne minun pitäisi mennä opiskelemaan, ja astuin MSTU:hun. Bauman, rakettien propulsiotekniikan laitokselle. Itse kurssin haaraa - avaruusrakettien jauhe- tai nestemoottorit - ei kuitenkaan tarvinnut valita ollenkaan: vielä vuonna 2001 tiedekunnan erityistoimikunta jakoi hakijoiden kohderyhmät. Jouduin ruutitynnyriin.

Tuolloin "rakettibuumi" oli olemassa vain suunnitelmissa; insinöörit saivat niukkoja palkkoja ja työskentelivät erityisissä suljetuissa suunnittelutoimistoissa ja tutkimuslaitoksissa, joilla ei käytännössä ollut mahdollisuuksia ura- ja ammatilliseen kasvuun. Silti jauheraketit Venäjällä ovat puhtaasti sotilaallisia tuotteita.

Nyt tälle alueelle on kysyntää, mutta jo opintojeni aikana tajusin, että rakettitiedettä oma-aloitteinen toiminta on lähes mahdotonta. Itse asiassa tämä on asepalvelusta. Esimerkiksi rakettiteollisuudessa työskennellessäni olisin täysin vailla mahdollisuus kehittää itsenäisesti ohjelmistoja, jopa itselleni, koska tämä toiminta on tiukasti säänneltyä.

Kaikki ohjelmistotuotteet kehitetään yksinomaan erikoistilauksesta ja salassapitotoimikunnan (nykyisin FSTEC:n jaosto) luvalla. Siellä olevan kehittäjän on rekisteröitävä ja lisensoitava kirjaimellisesti jokainen koodirivi. Kaikki ohjelmistot ovat aluksi salaisia ​​tehtävätasolla. Tämä selittää osaltaan, miksi rakettitieteen opiskelijoiden kouluttamiseen nykyään käytetty ohjelmisto kehitettiin viimeistään 90-luvulla.

Valmistuttuani instituutista onnistuin työskentelemään mekanismiteorian osastolla ja aloin kehittää koulutusprosessisimulaattoria C++:lla, joten minulla oli vertailuesimerkki ja pystyin punnitsemaan hyviä ja huonoja puolia. Valinta oli ilmeinen, ja aloin vähitellen ajautua IT-alaan ja robotiikkaan. Soveltava mekaniikka oli paljon hauskempaa kuin rakettitiedettä: monia ratkaisemattomia ongelmia, avoin ympäristö, kehitysteollisuuden puute, simulaatioohjelmistojen kiireellinen tarve. Robotiikassa on yleisten ohjelmistojen epävakaa arkkitehtuuri ja tarve toteuttaa toistuvasti monimutkaisia ​​algoritmeja, mukaan lukien sumea logiikka ja tekoälyn alku. Siksi ensimmäisten kokeellisten tietojen käsittelyohjelmieni jälkeen en melkein koskaan palannut raketteihin (lukuun ottamatta valmistumisprojektiani).

Tämän seurauksena minulla oli mahdollisuus työskennellä erikoisalallani vain neljä kuukautta ennen kuin valmistuin Moskovan lähellä sijaitsevassa lentokoneteollisuuden komposiittirakenteiden tehtaassa. Opintojeni jälkeen minun ei tarvinnut edes etsiä töitä – tulin heti opettamaan soveltavaa mekaniikkaa robotiikan osastolle.

Opetuksesta ohjelmointiin

Raketeista robotteihin ja mitä tekemistä Pythonilla on sen kanssa. GeekBrainsin alumnien tarina
IFTOMM-maailmankongressissa tutkimusryhmän opiskelijajäsenten kanssa (minä oikealla)

Työskentelin MSTU:ssa näytteenottoosastolla 10 vuotta ja opetin mekanismien teoriakurssia. Hän julkaisi tieteellisiä teoksia (katso artikkelin loppu), siirtyi vähitellen mekaniikasta kohti CAD:tä ja robotiikkaa. Ja lopulta hän päätti jättää opettamisen. Selvimmin havainnollistaakseni tämän päätöksen syitä totean, että kymmenen vuoden aikana opettamani opintojakso ei ole muuttunut desimaalilla. Vaikka sovellettu mekaniikka eteni julkaisuista päätellen erittäin, erittäin menestyksekkäästi.

Lisäksi työ muistutti yhä enemmän byrokraattista työtä - raportteja, ohjelmia, standardeja ja paperitonnia. Tällaisissa olosuhteissa opettamisen ilo korvattiin tämän ilon saamisesta raportoimalla, ja tämä on enemmän kuin epämiellyttävää harjoittelevalle asiantuntijalle.

Ja lopulta tulin robotiikkaan näin: vuosina 2007-2009 aloimme yhdessä professorien A. Golovinin ja N. Umnovin kanssa valmistella ensimmäisiä tieteellisiä töitä. Siellä minun piti määrittää algoritmien avulla objektien polut strobovalokuvauksesta. Tästä aiheesta on yksi askel konenäköön, OpenCV:hen ja Robotic Operating Systemiin (tosin silloin en edes ajatellut tuollaista mittakaavaa). Sen jälkeen keskityin vihdoin soveltavaan mekaniikkaan ja robotiikkaan tutkimuksessa, ja kehittämisestä tuli tukitoimintaa.

Kuitenkin löytääkseni uuden työpaikan robotiikasta oli tarpeen parantaa ja täydentää ohjelmointitietoani. En loppujen lopuksi koskaan opiskellut tietotekniikkaa erityisesti, lukuun ottamatta vuoden mittaista yliopistokurssia (ObjectPascal ja Borland VCL C++:ssa), ja luotin matematiikkaan kehityksen teoreettisissa näkökohdissa.

Aluksi pohdin vaihtoehtoja kokopäiväisille kursseille kotimaassani. Totta, nopeasti kävi selväksi, että tällaisten opintojen yhdistäminen laitoksen työskentelyyn olisi lähes mahdotonta epäsäännöllisen aikataulun ja toistuvan oman aikataulun ulkopuolisen työskentelyn (sisäinen jne.) vuoksi. Joten vähitellen tulin ajatukseen suorittaa maksulliset kurssit etänä. Tulin GeekBrainsiin Baumankassa sijaitsevan Mail.ru Technopark -koulutuskeskuksen professorien suosituksesta ja ilmoittautuin Python Programmer -kurssille.

Kurssit eivät aiheuttaneet vaikeuksia, ainoa ongelma oli se, että jouduin jatkuvasti yhdistämään niitä laitoksen työhön, tieteellisiin töihin ja tapahtumiin. Aika oli niin tiukka, että suurin osa kodin ulkopuolisista sosiaalisista yhteyksistä jouduttiin uhraamaan (onneksi väliaikaisesti).

Näin selvisin työtaakasta: ratkaisin ongelmia tien päällä. Tämä lukuisten työmatkojen kautta kehitetty taito osoittautui erittäin hyödylliseksi, sillä ilman sitä en edes pystyisi tekemään kaikkia läksyjäni (ja se korvaa myös meditaation...). Opin koodaamaan tien päällä kannettavan tietokoneen, älypuhelimen ja langattoman älypuhelimen näppäimistön avulla.

Kannettavani on Dell Latitude 3470, ja mikä tahansa älypuhelin, jonka lävistäjä on vähintään 5.5 tuumaa, ja joka on yhdistetty Logitech K 810 BT -näppäimistöön, käy. Yleisesti ottaen suosittelen Logitechin tuotteita kaikille, ne ovat erittäin luotettavia ja kestävät erittäin ankaria käyttöolosuhteita (eikä tämä ole koskaan mainos).

Raketeista robotteihin ja mitä tekemistä Pythonilla on sen kanssa. GeekBrainsin alumnien tarina
Näppäimistö Logitech K810

Python on erittäin suotuisa tällaiseen työhön - jos sinulla on hyvä editori. Toinen ohjelmointihakkerointi: käytä etäyhteyksiä työpöydälle tai ajonaikaiseen ympäristöön. Suoritin useita tehtäviä käyttämällä suojattua verkkopalvelinta, jossa oli Django kotitietokoneellani. Työskentelin junasta käyttäen ohjelmistoja PyDroid, DroidEdit, Maxima.

Miksi Python?

Ei kestänyt kauan, kun yritin käyttää PHP:tä järjestelmän komentosarjakielenä. Opiskelin Pythonia aluksi yksin ja pikkuhiljaa "itselleni". Päätin opiskella vakavasti kuultuani tehokkaan yhteyden olemassaolon Pythonin ja C++:n välillä moduulitasolla – vaikutti mielenkiintoiselta jakaa optimoituja algoritmeja ja tietojen valmistelumenettelyjä samalla kielellä.

Yksinkertaisin esimerkki: on olemassa ohjausjärjestelmä epätyypilliselle tehokkaalle asemalle, joka on toteutettu sulautettuun koneeseen, jossa on RISC-prosessori, C++-kielellä. Hallinta tapahtuu ulkoisen koneriippuvaisen API:n kautta, joka tukee esimerkiksi alijärjestelmien välistä viestintää verkon yli. Korkealla tasolla taajuusmuuttajan toiminta-algoritmia ei korjata tai se ei ole vakio (työprosessista riippuen on tarpeen ladata erilaisia ​​​​algoritmeja).

Yksi parhaista tavoista saavuttaa tällainen järjestelmä on käyttää konekohtaista C++-alijärjestelmän API:ta perustana Python-luokille, jotka toimivat useilla eri alustoilla. Siten huipputason kehittäjän ei tarvitse ottaa huomioon sulautetun koneen ja sen käyttöjärjestelmän ominaisuuksia, hän yksinkertaisesti työskentelee Python-luokkien kanssa, jotka toimivat matalan tason API:n "kääreinä".

Minun piti opetella C++- ja Python-sidonta melkein tyhjästä. Nopeasti kävi selväksi, että korkean tason olio-ominaisuudet olivat paljon tärkeämpiä kuin matalalla tasolla. Tästä johtuen meidän oli muutettava täysin lähestymistapaa API:n suunnitteluun ja toteuttamiseen, valittava Python-tason luokat ja jaettu globaali data C/C++:ssa. Totu koodin luomiseen: esimerkiksi ROS-kehys itse luo nimiä ja objekteja Pythonissa, joten kielierot on otettava huomioon, erityisesti kirjoituksessa, kun suunnitellaan käyttöliittymiä.

Työskentely nykyhetkellä: Python ja robotin ohjauslogiikka

Nyt työskentelen Python- ja C++-ohjelmoijana Moskovan osavaltion teknillisen yliopiston robotiikan tutkimus- ja koulutuskeskuksessa. Toteutamme ministeriöiden tilaamia tutkimusprojekteja ja ohjelmistotyökaluja: kehitämme manipulaattoreita, joissa on sisäänrakennetut tekniset visiojärjestelmät ja korkean tason automaattiset ohjausalgoritmit, jotka ovat järjestelmistä riippumattomia.

Tällä hetkellä ohjelmoin korkean tason logiikkaa robottiohjausjärjestelmille Pythonissa; tämä kieli yhdistää erittäin optimoidut C++-, assembler- ja Go-kielellä kirjoitetut moduulit.

Robotin ohjausalgoritmien ohjelmoinnissa käytetään kahta suurta algoritmiryhmää. Ensimmäinen niistä on toteutettu suoraan laitteisiin, matalalla tasolla - tämä on sisäänrakennettu ohjelmisto taajuusmuuttajaohjaimille, tietoliikennelinjakeskittimille ja operaattorin vuorovaikutusalijärjestelmille.

Tässä olevat algoritmit on suunniteltu ohjattuun suoritusnopeuteen ja luotettavuuteen, joka ylittää robotin suorituskyvyn kokonaisuutena. Jälkimmäinen on pakollinen, koska koko järjestelmän turvallisuus riippuu matalan tason ohjausohjelmistosta.

Toinen algoritmien ryhmä määrittää robotin toiminnan kokonaisuutena. Nämä ovat korkean tason ohjelmia, joiden kehittämisessä painotetaan algoritmin selkeyttä ja toteutusnopeutta, usein varsin monimutkaisia. Lisäksi robotin korkeatasoinen ohjelmisto muuttuu hyvin usein asennuksen ja testauksen aikana. Tällaista kehitystä varten yleiskäyttöiset tulkitut kielet ovat välttämättömiä.

Mitä tietoa tällaiseen työhön tarvitaan?

C++-pohjakielen ja Pythonin olio-ominaisuuksien opiskelu on pakollista. Lähes korvaamaton taito on kyky suunnitella ja dokumentoida API. Olisi hyvä idea tutkia erikoiskirjastojen, kuten Boost::Pythonin, ominaisuuksia. Ne, jotka työskentelevät matalan tason ohjelmistojen kanssa, joutuvat varmasti käsittelemään monisäikeistystä (ytimen tasolla) ja Linux/UNIX/QNX-järjestelmäkutsuja. Robotiikan periaatteiden ymmärtämisen parantamiseksi on erittäin hyödyllistä tutustua Robotic Operating System -kehykseen.

Pyrin siihen, että minulla on vähintään yksi käännetty ja yksi tulkittu ohjelmointikieli, joka on kehittyvä ja kysytty. Tämä on menestyvä strategia insinöörityössä, jossa on jatkuva tarve kehittää pitkälle erikoistuneita (lue: epätavallisia) algoritmeja ja toteuttaa niitä käännöskielillä. Tällaisten ohjelmistojen tietojen valmistelutehtävä on paljon miellyttävämpi ratkaista tulkkailla kielillä. Aluksi sarjani sisälsi C++, Pascal ja BASIC, myöhemmin PHP ja BASH lisättiin.

Miten kehitystyökalut voivat olla hyödyllisiä opiskelijoiden opetuksessa

Ammatillisen kehityksen pääsuunnitelmana on nyt yrittää luoda tieteellistä perustaa ammattimaisten ohjelmistokehitystyökalujen käytölle pedagogiikassa, kehittää ja testata opetusmenetelmiä.

Vuodesta 2016 lähtien aloitin laajan kokeilun kehitystyökalujen - ohjelmointikielet, IDE:t, dokumentaatiogeneraattorit, versionhallintajärjestelmät - tuomiseksi korkeakouluopetuksen käytäntöön. Olemme nyt onnistuneet saamaan laadullisesti yleistettäviä tuloksia.

Esimerkiksi materiaalien versioinnin käyttöönotto koulutusprosessissa parantaa merkittävästi opiskelijatyön laatua, mutta vain pakollisessa ehdossa: opiskelijat työskentelevät yhdessä yhteisissä projekteissa. MSTU:n opiskelijoista, hakijoista ja lisäkoulutusohjelmien opiskelijoista koostuva tutkimusryhmäni tekee nyt aktiivisesti menetelmien kehittämistä teknisten tieteenalojen opettamiseen ammattimaisilla ohjelmistokehitystyökaluilla.

Muuten, en jättänyt opetuskäytäntöäni - kehitin oman syvällisen kokopäiväisen kurssin Linuxin suunnittelusta ja hallinnosta MSTU:n Advanced Studies -instituutille ja opetan sitä itse.

Tieteellinen työ

Aikainen työ
Kävelysuunnittelun ongelmat suunniteltaessa nelijalkaisia ​​kävelyjärjestelmiä hevosen kävelyn toteutuksen esimerkillä (2010 g.)

Kysymys hevosen etujalan tukielementin kinematiikasta ja kuormituksesta tuen lähestymisvaiheessa nelijalkaisen liikkujan työsyklin komponentteina (2012 g.)

Viimeiseltä
3D-vaihteiston valmistussimulaatiosovellus mekanismien ja koneteorian opettamiseen (2019 g.)

Menetelmä rakenteellisten esteiden tunnistamiseen ja sen käyttökohteiden etsinnässä (2018 g.)

Muut tieteellisten viittaustietokantojen indeksoimat teokset näkyvät profiilissani osoitteessa ResearchGate. Suurin osa artikkeleista on omistettu koneiden liikkeille, on teoksia insinööripedagogiikasta ja opetusohjelmistoista.

Lähde: will.com

Lisää kommentti