Fan raketten oant robots en wat hat Python dermei te krijen. GeekBrains Alumni Ferhaal

Fan raketten oant robots en wat hat Python dermei te krijen. GeekBrains Alumni Ferhaal
Hjoed publisearje wy it ferhaal fan Andrey Vukolov's oergong nei IT. Syn jeugdpassy foar romte late him ienris om raketwittenskip te studearjen oan MSTU. De hurde realiteit makke my de dream te ferjitten, mar alles waard noch ynteressanter. It studearjen fan C++ en Python liet my like spannend wurk dwaan: de logika fan robotkontrôlesystemen programmearje.

Thús

Ik hie gelok te wêzen raving oer romte al myn bernetiid. Dêrom, nei skoalle, ik twifele gjin minút wêr't ik soe gean om te studearjen, en ik kaam yn MSTU. Bauman, oan 'e ôfdieling Rocket Propulsion Engineering. De tûke fan de kursus sels - poeder- of floeistofmotoren fan romteraketten - hoegde lykwols hielendal net te kiezen: yn 2001 ferdielde noch in spesjale fakulteitskommisje de doelgroepen fan oanfregers. Ik waard fongen yn in keg mei buskruit.

Op dat stuit bestie de "raketboom" allinich yn plannen; yngenieurs krigen magere salarissen en wurken yn spesjale sletten ûntwerpburo's en ûndersyksynstituten mei praktysk gjin perspektyf foar karriêre en profesjonele groei. Dochs binne poederraketten yn Ruslân suver militêre produkten.

No is dit gebiet yn fraach, mar al yn myn stúdzje realisearre ik dat yn raketwittenskip elke aktiviteit op eigen inisjatyf hast ûnmooglik is. Yn feite is dit militêre tsjinst. Bygelyks, wurkje yn 'e raket yndustry, ik soe hielendal ûntnommen fan de kâns om selsstannich te ûntwikkeljen software, sels foar mysels, sûnt dizze aktiviteit is strang regele.

Alle softwareprodukten wurde eksklusyf ûntwikkele op spesjale oarder en mei de goedkarring fan 'e geheimhâldingskommisje (no in ôfdieling fan FSTEC). De ûntwikkelder dêr is ferplichte om letterlik elke rigel koade te registrearjen en te lisinsje. Alle software is yn earste ynstânsje geheim op it taaknivo. Dit ferklearret foar in part wêrom't de software dy't no brûkt wurdt om studinten fan raketwittenskippen op te trenen, op it lêst yn 'e jierren '90 ûntwikkele is.

Tsjin 'e tiid dat ik ôfstudearre oan it ynstitút, slagge ik om te wurkjen by de ôfdieling meganisme teory en begûn te ûntwikkeljen in edukative proses simulator yn C ++, dus ik hie in foarbyld foar ferliking en koe weagje de foar- en neidielen. De kar wie fanselssprekkend, en ik begon stadichoan te driuwen nei IT en robotika. Tapaste meganika wie folle leuker dan raketwittenskip: in protte ûnoploste problemen, in iepen omjouwing, gebrek oan in ûntwikkelingssektor, in driuwend ferlet fan simulaasjesoftware. Yn robotika is d'r in ûnrêstige arsjitektuer fan mienskiplike software en de needsaak om komplekse algoritmen hieltyd wer te ymplementearjen, ynklusyf fuzzy logika en it begjin fan AI. Dêrom, nei myn earste programma's foar it ferwurkjen fan eksperimintele gegevens, kaam ik hast noait werom nei raketten (mei útsûndering fan myn ôfstudearprojekt).

As gefolch hie ik de kâns om mar fjouwer moannen yn myn spesjaliteit te wurkjen foardat ik ôfstudearre oan in plant by Moskou foar gearstalde struktueren foar de loftfeartyndustry. Nei it foltôgjen fan myn stúdzje hoegde ik net iens nei in baan te sykjen - ik kaam daliks om tapaste meganika by de ôfdieling robotika te learen.

Fan lesjaan oant programmearring

Fan raketten oant robots en wat hat Python dermei te krijen. GeekBrains Alumni Ferhaal
Op it IFTOMM-wrâldkongres mei studinteleden fan 'e ûndersyksgroep (my rjochts)

Ik wurke by MSTU yn 'e sampling-ôfdieling foar 10 jier, learde in kursus oer de teory fan meganismen. Hy publisearre wittenskiplike wurken (sjoch oan 'e ein fan it artikel), stadichoan ferhuze fan meganika nei CAD en robotika. En op it lêst besleat hy om it ûnderwiis te ferlitten. Om de redenen foar dit beslút it dúdlikst te yllustrearjen, sil ik sizze dat yn tsien jier de stúdzje dy't ik learde net ien desimaal feroare is. Hoewol't tapaste meganika, nei de publikaasjes te oardieljen, tige, heul suksesfol foarút kaam.

Boppedat like it wurk mear en mear op burokratysk wurk - rapporten, programma's, noarmen en tonnen papier. Yn sokke betingsten waard it wille fan it learen ferfongen troch it rapportearjen fan 'e ûntfangst fan dizze wille, en dit is mear dan onaangenaam foar in praktisearjend spesjalist.

En úteinlik kaam ik sa by robotika: yn 2007-2009, tegearre mei heechleararen A. Golovin en N. Umnov, begûnen wy de earste wittenskiplike wurken te meitsjen. Dêr moast ik algoritmen brûke om de paden fan objekten út strobefotografy te bepalen. Fan dit ûnderwerp is it ien stap nei masinefisy, OpenCV en Robotic Operating System (hoewol't ik op dat stuit net iens oer sa'n skaal tocht). Dêrnei rjochte ik my úteinlik op tapaste meganika en robotika yn ûndersyk, en ûntwikkeling waard in stypjende aktiviteit.

Om in nije baan yn robotika te finen, wie it lykwols nedich om myn programmearringkennis te ferbetterjen en oan te foljen. Ik haw ommers noait spesifyk IT studearre, útsein in jierlange universitêre kursus (ObjectPascal en Borland VCL yn C++), en fertroude op wiskunde foar de teoretyske aspekten fan ûntwikkeling.

Yn it earstoan tocht ik opsjes foar folsleine kursussen by myn memmetaal ynstitút. Wier, it waard al gau dúdlik dat it troch it ûnregelmjittige skema en faak wurk bûten it eigen skema (ferfanging ensfh.) hast ûnmooglik wêze soe om sokke stúdzjes te kombinearjen mei wurk by de ôfdieling. Dat ik kaam stadichoan op it idee om betelle kursussen op ôfstân te foltôgjen. Ik kaam nei GeekBrains op oanbefelling fan heechleararen fan it Mail.ru Technopark training sintrum, leit yn Baumanka, en ynskreaun yn de Python Programmer kursus.

De kursussen soarge foar gjin swierrichheden, it ienige probleem wie dat ik se hieltyd kombinearje moast mei wurk by de ôfdieling, wittenskiplike wurken en eveneminten. De tiid wie sa krap dat de measte sosjale ferbiningen bûten it hûs opoffere wurde moasten (gelokkich tydlik).

Dit is hoe't ik omgean mei de wurkdruk: ik haw problemen op 'e dyk oplost. Dizze feardigens, ûntwikkele troch in protte saaklike reizen, die bliken heul nuttich te wêzen, om't sûnder it ik net iens al myn húswurk kin foltôgje (en it ferfangt ek meditaasje ...). Ik learde te koade ûnderweis mei in laptop, in smartphone en draadloze smartphone-toetseboerden.

Myn laptop is in Dell Latitude 3470, en elke smartphone mei in diagonaal fan 5.5 inch of mear keppele mei in Logitech K 810 BT-toetseboerd sil dwaan. Yn 't algemien advisearje ik Logitech-produkten oan elkenien; se binne heul betrouber en kinne heul drege gebrûksbetingsten ferneare (en dit is noait in advertinsje).

Fan raketten oant robots en wat hat Python dermei te krijen. GeekBrains Alumni Ferhaal
Toetseboerd Logitech K810

Python is tige befoarderlik foar sa'n wurk - as jo in goede bewurker hawwe. In oare programmearhack: brûk ferbiningen op ôfstân nei it buroblêd of runtime-omjouwing. Ik foltôge ferskate taken mei in feilige webserver dy't Django draait op myn thúskomputer. Ik wurke út 'e trein, mei help fan de software PyDroid, DroidEdit, Maxima.

Wêrom Python?

It duorre net lang foardat ik besocht PHP te brûken as in systeemskripttaal. Ik studearre earst Python op myn eigen en stadichoan "foar mysels." Ik besleat om serieus te studearjen nei't ik learde oer it bestean fan in effektive ferbining tusken Python en C++ op modulenivo - it like nijsgjirrich om optimalisearre algoritmen en gegevenstariedingsprosedueres te dielen binnen deselde taal.

It ienfâldichste foarbyld: d'r is in kontrôlesysteem foar in net-standert krêftige stasjon, ymplementearre op in ynbêde masine mei in RISC-prosessor, yn C ++. Behear bart troch in eksterne masine-ôfhinklike API, dy't stipet bygelyks kommunikaasje tusken subsystemen oer in netwurk. Op in heech nivo is it algoritme fan 'e stasjonsoperaasje net debuggen of is net konstant (it is nedich om ferskate algoritmen te laden ôfhinklik fan it wurkproses).

Ien fan 'e bêste manieren om sa'n systeem te berikken is it masinespesifike C ++ subsysteem API te brûken as basis foar in set fan Python-klassen dy't rinne op in cross-platform-tolk. Sa sil de ûntwikkelder op boppeste nivo net rekken hâlde mei de funksjes fan 'e ynbêde masine en har OS; hy sil gewoan wurkje mei Python-klassen dy't fungearje as "wrappers" fan 'e leech-nivo API.

Ik moast C ++ en Python-bining hast fanôf it begjin leare. Al gau waard dúdlik dat objektrjochte mooglikheden op heech nivo folle wichtiger wiene as op leech nivo. Hjirtroch moasten wy de oanpak foar it ûntwerpen en ymplementearjen fan de API folslein feroarje, kieze foar klassen op Python-nivo en dielde globale gegevens yn C / C ++. Wenje oan koadegeneraasje: bygelyks it ROS-ramt sels genereart nammen en objekten yn Python, dus jo moatte rekken hâlde mei taalferskillen, benammen yn typen, by it ûntwerpen fan jo ynterfaces.

Wurkje yn it hjoeddeiske: Python en Robot Control Logic

No wurkje ik as Python- en C++-programmeur by it Robotics Research and Education Centre by Moskou State Technical University. Wy realisearje ûndersyksprojekten en software-ark yn opdracht fan regearingsôfdielingen: wy ûntwikkelje manipulators mei ynboude technyske fisysystemen en automatyske kontrôlealgoritmen op hege nivo dy't ûnôfhinklik binne fan systemen.

Op it stuit programmearje ik logika op heech nivo foar robotkontrôlesystemen yn Python; dizze taal ferbynt heul optimalisearre modules skreaun yn C ++, assembler, en Go.

By it programmearjen fan robotkontrôlealgoritmen wurde twa grutte groepen algoritmen brûkt. De earste fan harren wurdt útfierd direkt op 'e apparatuer, op in leech nivo - dit is de ynboude software fan drive controllers, kommunikaasje line concentrators, en operator ynteraksje subsystemen.

De algoritmen hjir binne ûntworpen foar kontroleare útfieringssnelheid en betrouberens dy't de prestaasjes fan 'e robot as gehiel grutter binne. Dat lêste is ferplichte, om't de feiligens fan it hiele systeem hinget ôf fan software foar kontrôle op leech nivo.

De twadde groep algoritmen bepaalt de wurking fan 'e robot as gehiel. Dit binne programma's op heech nivo, wêrfan de klam yn 'e ûntwikkeling leit op' e dúdlikens en snelheid fan ymplemintaasje fan it algoritme, faaks frij kompleks. Derneist is software op heech nivo op 'e robot heul faak ûnderwurpen oan feroaring tidens it opset- en testproses. Foar sa'n ûntwikkeling binne ynterpretearre talen foar algemiene doelen ûnmisber.

Hokker kennis is nedich foar sa'n wurk?

It sil ferplicht wêze om de C ++-sjabloantaal en de objekt-oriïntearre mooglikheden fan Python te studearjen. In hast ûnferfangbere feardigens is de mooglikheid om API's te ûntwerpen en te dokumintearjen. It soe in goed idee om te ferkennen de mooglikheden fan spesjalisearre biblioteken lykas Boost :: Python. Dejingen dy't wurkje mei software op leech nivo sille grif te krijen hawwe mei multithreading (op it kernelnivo) en Linux / UNIX / QNX-systeemoproppen. Om jo begryp fan 'e prinsipes fan robotika te ferbetterjen, is it heul nuttich om josels fertroud te meitsjen mei it Robotic Operating System-ramt.

Ik besykje op syn minst ien gearstalde en ien ynterpretearre programmeartaal te hawwen dy't ûntwikkele en yn fraach is. Dit is in winnende strategy foar wurkjen yn technyk, wêr't d'r in konstante need is om heul spesjalisearre (lês: ûngewoane) algoritmen te ûntwikkeljen en te ymplementearjen yn kompilaasjetalen. De taak fan it tarieden fan gegevens foar sokke software is folle nofliker om op te lossen mei ynterpretearre talen. Yn it earstoan omfette myn set C ++, Pascal en BASIC, letter waarden PHP en BASH tafoege.

Hoe ûntwikkelingsynstruminten nuttich kinne wêze by it ûnderwizen fan studinten

It haadplan foar profesjonele ûntwikkeling is no om te besykjen in wittenskiplike basis te jaan foar it brûken fan profesjonele softwareûntwikkelingsynstruminten yn pedagogyk, om learmetoaden te ûntwikkeljen en te testen.

Sûnt 2016 bin ik begûn mei in grut eksperimint yn it yntrodusearjen fan ûntwikkelingsark - programmeartalen, IDE's, dokumintaasjegenerators, ferzjekontrôlesystemen - yn de learpraktyk yn it heger ûnderwiis. It is ús no slagge om resultaten te krijen dy't kwalitatyf generalisearre wurde kinne.

Bygelyks, de ynfiering fan ferzje fan materialen yn it edukative proses gâns ferbettert de kwaliteit fan it wurk fan studinten, mar allinnich ûnder in ferplichte betingst: studinten wurkje gear oan dielde projekten. De ûntwikkeling fan metoaden foar it ûnderwizen fan technyske dissiplines mei help fan profesjonele softwareûntwikkelingsynstruminten wurdt no aktyf útfierd troch myn ûndersyksgroep, besteande út studinten, oanfregers en studinten fan ekstra opliedingsprogramma's oan MSTU.

Trouwens, ik haw myn learpraktyk net ferlitten - ik ûntwikkele myn eigen yngeande folsleine kursus oer it ûntwerp en administraasje fan Linux foar it Institute of Advanced Studies by MSTU, en ik lear it sels.

Wittenskiplik wurk

Iere wurken
Kwesties fan gaitplanning by it ûntwerpen fan fjouwer-legged kuiersystemen mei it foarbyld fan in hynder's gait-ymplemintaasje (2010)

Oer it probleem fan kinematyk en laden fan it stypjende elemint fan 'e foarste skonk fan it hynder yn' e poadium fan it benaderjen fan 'e stipe as ûnderdielen fan' e wurksyklus fan 'e fjouwer-legged mover (2012)

Fan de lêste
3D gear manufacturing simulaasje applikaasje foar learmeganisme en masine teory (2019)

Metoade foar it erkennen fan strukturele obstakels en har tapassing by it sykjen nei reliëfobjekten (2018)

Oare wurken yndeksearre troch wittenskiplike sitaatdatabases kinne wurde sjoen yn myn profyl op ResearchGate. De measte fan 'e artikels binne wijd oan' e beweging fan masines, der binne wurken op engineering pedagogyk en edukative software.

Boarne: www.habr.com

Add a comment