Mula sa mga rocket hanggang sa mga robot at kung ano ang kinalaman ng Python dito. Kwento ng Alumni ng GeekBrains

Mula sa mga rocket hanggang sa mga robot at kung ano ang kinalaman ng Python dito. Kwento ng Alumni ng GeekBrains
Ngayon ay inilalathala namin ang kuwento ng paglipat ni Andrey Vukolov sa IT. Ang kanyang pagnanasa noong bata pa sa espasyo ay minsang humantong sa kanya na mag-aral ng rocket science sa MSTU. Ang malupit na katotohanan ay nakalimutan ko ang tungkol sa panaginip, ngunit ang lahat ay naging mas kawili-wili. Ang pag-aaral ng C++ at Python ay nagbigay-daan sa akin na gumawa ng parehong kapana-panabik na gawain: pagprograma ng lohika ng mga robot control system.

simula

Ako ay masuwerteng nag-iisip tungkol sa espasyo sa buong pagkabata ko. Samakatuwid, pagkatapos ng paaralan, hindi ako nag-alinlangan ng isang minuto kung saan ako dapat mag-aral, at pumasok ako sa MSTU. Bauman, sa Department of Rocket Propulsion Engineering. Gayunpaman, ang sangay ng kurso mismo - mga pulbos o likidong makina ng mga rocket sa kalawakan - ay hindi kailangang mapili sa lahat: noong 2001, ang isang espesyal na komisyon ng faculty ay ipinamahagi pa rin ang mga target na grupo ng mga aplikante. Napahawak ako sa isang sisidlan ng pulbura.

Sa oras na iyon, ang "rocket boom" ay umiiral lamang sa mga plano; ang mga inhinyero ay nakatanggap ng kaunting suweldo at nagtrabaho sa mga espesyal na saradong tanggapan ng disenyo at mga instituto ng pananaliksik na halos walang mga prospect para sa karera at propesyonal na paglago. Gayunpaman, ang mga powder rocket sa Russia ay puro mga produktong militar.

Ngayon ang lugar na ito ay hinihiling, ngunit sa panahon ng aking pag-aaral napagtanto ko na sa rocket science ang anumang aktibidad sa sariling inisyatiba ay halos imposible. Sa katunayan, ito ay serbisyo militar. Halimbawa, sa pagtatrabaho sa industriya ng rocket, ako ay ganap na mawawalan ng pagkakataon na nakapag-iisa na bumuo ng software, kahit na para sa aking sarili, dahil ang aktibidad na ito ay mahigpit na kinokontrol.

Ang lahat ng mga produkto ng software ay eksklusibong binuo sa espesyal na pagkakasunud-sunod at sa pag-apruba ng komisyon ng lihim (ngayon ay isang dibisyon ng FSTEC). Ang developer doon ay kinakailangang magparehistro at maglisensya nang literal sa bawat linya ng code. Ang lahat ng software ay lihim sa simula sa antas ng gawain. Ito ay bahagyang nagpapaliwanag kung bakit ang software na ginagamit ngayon upang sanayin ang mga mag-aaral ng rocket science ay binuo noong 90s sa pinakamaagang.

Sa oras na nagtapos ako mula sa institute, nagawa kong magtrabaho sa departamento ng teorya ng mekanismo at nagsimulang bumuo ng isang simulator ng proseso ng edukasyon sa C++, kaya nagkaroon ako ng isang halimbawa para sa paghahambing at maaaring timbangin ang mga kalamangan at kahinaan. Ang pagpili ay halata, at unti-unti akong nagsimulang lumipad patungo sa IT at robotics. Ang mga inilapat na mekanika ay mas masaya kaysa sa rocket science: maraming hindi nalutas na mga problema, isang bukas na kapaligiran, kakulangan ng industriya ng pag-unlad, isang kagyat na pangangailangan para sa simulation software. Sa robotics, mayroong isang hindi maayos na arkitektura ng karaniwang software at ang pangangailangan na paulit-ulit na ipatupad ang mga kumplikadong algorithm, kabilang ang fuzzy logic at ang simula ng AI. Samakatuwid, pagkatapos ng aking mga unang programa para sa pagproseso ng pang-eksperimentong data, halos hindi na ako bumalik sa mga rocket (maliban sa aking proyekto sa pagtatapos).

Bilang resulta, nagkaroon ako ng pagkakataong magtrabaho sa aking espesyalidad sa loob lamang ng apat na buwan bago ako nagtapos sa isang planta malapit sa Moscow para sa mga pinagsama-samang istruktura para sa industriya ng aerospace. Pagkatapos kong makumpleto ang aking pag-aaral, hindi ko na kinailangan pang maghanap ng trabahoβ€”agad akong dumating upang magturo ng mga mekanikong inilapat sa departamento ng robotics.

Mula sa pagtuturo hanggang sa programming

Mula sa mga rocket hanggang sa mga robot at kung ano ang kinalaman ng Python dito. Kwento ng Alumni ng GeekBrains
Sa IFTOMM World Congress kasama ang mga miyembro ng estudyante ng research group (ako sa kanan)

Nagtrabaho ako sa MSTU sa sampling department sa loob ng 10 taon, nagtuturo ng kurso sa teorya ng mga mekanismo. Nag-publish siya ng mga siyentipikong gawa (tingnan ang dulo ng artikulo), unti-unting lumipat mula sa mekanika patungo sa CAD at robotics. At sa huli ay nagpasya siyang umalis sa pagtuturo. Upang mas malinaw na mailarawan ang mga dahilan para sa desisyong ito, sasabihin ko na sa loob ng sampung taon ang kurso ng pag-aaral na aking itinuro ay hindi nagbago ng isang decimal na lugar. Bagaman ang mga inilapat na mekanika, sa paghusga sa pamamagitan ng mga publikasyon, ay sumulong nang napaka-matagumpay.

Bilang karagdagan, ang trabaho ay higit at higit na kahawig ng burukratikong gawain - mga ulat, programa, pamantayan at toneladang papel. Sa ganitong mga kondisyon, ang kasiyahan sa pagtuturo ay napalitan ng pag-uulat sa pagtanggap ng kasiyahang ito, at ito ay higit pa sa hindi kasiya-siya para sa isang nagsasanay na espesyalista.

At sa wakas ay dumating ako sa robotics tulad nito: noong 2007-2009, kasama ang mga propesor na sina A. Golovin at N. Umnov, sinimulan naming ihanda ang mga unang gawaing siyentipiko. Doon kailangan kong gumamit ng mga algorithm upang matukoy ang mga landas ng mga bagay mula sa strobe photography. Mula sa paksang ito, ito ay isang hakbang patungo sa machine vision, OpenCV at Robotic Operating System (bagaman sa oras na iyon ay hindi ko naisip ang tungkol sa gayong sukat). Pagkatapos noon, sa wakas ay tumutok ako sa mga inilapat na mekanika at robotics sa pananaliksik, at ang pag-unlad ay naging isang sumusuportang aktibidad.

Gayunpaman, upang makahanap ng bagong trabaho sa robotics, kinakailangan upang mapabuti at madagdagan ang aking kaalaman sa programming. Pagkatapos ng lahat, hindi ako partikular na nag-aral ng IT, maliban sa isang taon na kurso sa unibersidad (ObjectPascal at Borland VCL sa C++), at umasa sa matematika para sa teoretikal na aspeto ng pag-unlad.

Sa una ay isinasaalang-alang ko ang mga opsyon para sa mga full-time na kurso sa aking katutubong institute. Totoo, mabilis na naging malinaw na halos imposible na pagsamahin ang mga naturang pag-aaral sa trabaho sa departamento dahil sa hindi regular na iskedyul at madalas na trabaho sa labas ng sariling iskedyul (pagpapalit, atbp.). Kaya unti-unti akong naisip na kumpletuhin ang mga bayad na kurso nang malayuan. Dumating ako sa GeekBrains sa rekomendasyon ng mga propesor mula sa Mail.ru Technopark training center, na matatagpuan sa Baumanka, at nag-enrol sa kursong Python Programmer.

Ang mga kurso ay hindi nagdulot ng anumang mga paghihirap, ang tanging problema ay ang patuloy kong kailangang pagsamahin ang mga ito sa trabaho sa departamento, mga gawaing pang-agham at mga kaganapan. Napakasikip ng oras kaya ang karamihan sa mga panlipunang koneksyon sa labas ng tahanan ay kailangang isakripisyo (sa kabutihang palad, pansamantala).

Ganito ko nakayanan ang bigat ng trabaho: Nalutas ko ang mga problema sa kalsada. Ang kasanayang ito, na binuo sa pamamagitan ng maraming mga paglalakbay sa negosyo, ay naging lubhang kapaki-pakinabang, dahil kung wala ito ay hindi ko rin makumpleto ang lahat ng aking araling-bahay (at pinapalitan din nito ang pagmumuni-muni...). Natuto akong mag-code on the go gamit ang laptop, smartphone, at mga wireless na keyboard ng smartphone.

Ang aking laptop ay isang Dell Latitude 3470, at magagawa ng anumang smartphone na may dayagonal na 5.5 pulgada o higit pa na ipinares sa isang Logitech K 810 BT na keyboard. Sa pangkalahatan, inirerekumenda ko ang mga produkto ng Logitech sa lahat; ang mga ito ay lubos na maaasahan at makatiis ng napakahirap na kondisyon ng paggamit (at hindi ito kailanman isang ad).

Mula sa mga rocket hanggang sa mga robot at kung ano ang kinalaman ng Python dito. Kwento ng Alumni ng GeekBrains
Keyboard na Logitech K810

Ang Python ay lubos na nakakatulong sa naturang gawain - kung mayroon kang isang mahusay na editor. Isa pang pag-hack ng programming: gumamit ng mga malalayong koneksyon sa desktop o runtime na kapaligiran. Nakumpleto ko ang ilang gawain gamit ang isang secure na web server na nagpapatakbo ng Django sa aking computer sa bahay. Nagtatrabaho ako mula sa tren, gamit ang software na PyDroid, DroidEdit, Maxima.

Bakit Python?

Hindi nagtagal bago ko sinubukang gamitin ang PHP bilang isang system scripting language. Una kong pinag-aralan ang Python sa aking sarili at unti-unti "para sa aking sarili." Nagpasya akong mag-aral nang seryoso pagkatapos kong malaman ang tungkol sa pagkakaroon ng isang epektibong koneksyon sa pagitan ng Python at C++ sa antas ng module - tila kawili-wiling ibahagi ang mga na-optimize na algorithm at mga pamamaraan sa paghahanda ng data sa loob ng parehong wika.

Ang pinakasimpleng halimbawa: mayroong isang control system para sa isang hindi karaniwang makapangyarihang drive, na ipinatupad sa isang naka-embed na makina na may RISC processor, sa C++. Ang pamamahala ay nangyayari sa pamamagitan ng panlabas na machine-dependent na API, na sumusuporta, halimbawa, komunikasyon sa pagitan ng mga subsystem sa isang network. Sa isang mataas na antas, ang algorithm ng pagpapatakbo ng drive ay hindi na-debug o hindi pare-pareho (kinakailangang mag-load ng iba't ibang mga algorithm depende sa proseso ng trabaho).

Isa sa mga pinakamahusay na paraan upang makamit ang ganoong sistema ay ang paggamit ng machine-specific na C++ subsystem API bilang batayan para sa isang hanay ng mga klase ng Python na tumatakbo sa isang cross-platform interpreter. Kaya, hindi na kailangang isaalang-alang ng top-level na developer ang mga feature ng naka-embed na machine at ang OS nito; gagana lang siya sa mga klase ng Python na nagsisilbing "wrappers" ng mababang antas na API.

Kinailangan kong matutunan ang C++ at Python binding halos mula sa simula. Mabilis na naging malinaw na ang mga kakayahan na nakatuon sa bagay sa isang mataas na antas ay mas mahalaga kaysa sa isang mababang antas. Dahil dito, kinailangan naming ganap na baguhin ang diskarte sa pagdidisenyo at pagpapatupad ng API, pag-opt para sa mga klase sa antas ng Python at pagbabahagi ng pandaigdigang data sa C/C++. Masanay sa pagbuo ng code: halimbawa, ang ROS framework mismo ay bumubuo ng mga pangalan at bagay sa Python, kaya kailangan mong isaalang-alang ang mga pagkakaiba ng wika, lalo na sa pag-type, kapag nagdidisenyo ng iyong mga interface.

Nagtatrabaho sa Kasalukuyan: Python at Robot Control Logic

Ngayon ay nagtatrabaho ako bilang isang Python at C++ programmer sa Robotics Research and Education Center sa Moscow State Technical University. Nagpapatupad kami ng mga proyekto sa pagsasaliksik at mga tool sa software na kinomisyon ng mga departamento ng gobyerno: bumuo kami ng mga manipulator na may built-in na mga technical vision system at mga high-level na awtomatikong control algorithm na independiyente sa mga system.

Sa kasalukuyan, pinoprograma ko ang mataas na antas na lohika para sa mga sistema ng pagkontrol ng robot sa Python; ang wikang ito ay nag-uugnay sa mga lubos na na-optimize na mga module na nakasulat sa C++, assembler, at Go.

Sa programming robot control algorithm, dalawang malalaking grupo ng mga algorithm ang ginagamit. Ang una sa kanila ay ipinatupad nang direkta sa kagamitan, sa isang mababang antas - ito ang built-in na software ng mga controllers ng drive, concentrators ng linya ng komunikasyon, at mga subsystem ng pakikipag-ugnayan ng operator.

Ang mga algorithm dito ay idinisenyo para sa kinokontrol na bilis ng pagpapatupad at pagiging maaasahan na lumalampas sa pagganap ng robot sa kabuuan. Ang huli ay sapilitan, dahil ang seguridad ng buong sistema ay nakasalalay sa mababang antas ng control software.

Tinutukoy ng pangalawang pangkat ng mga algorithm ang pagpapatakbo ng robot sa kabuuan. Ang mga ito ay mataas na antas ng mga programa, ang diin sa pagbuo ng kung saan ay sa kalinawan at bilis ng pagpapatupad ng algorithm, kadalasang medyo kumplikado. Bilang karagdagan, ang mataas na antas ng software sa robot ay madalas na napapailalim sa pagbabago sa panahon ng proseso ng pag-setup at pagsubok. Para sa gayong pag-unlad, ang mga wikang binibigyang-kahulugan sa pangkalahatang layunin ay kailangang-kailangan.

Anong kaalaman ang kailangan para sa naturang gawain?

Magiging mandatory na pag-aralan ang C++ template language at ang object-oriented na mga kakayahan ng Python. Ang halos hindi mapapalitang kasanayan ay ang kakayahang magdisenyo at magdokumento ng mga API. Magandang ideya na tuklasin ang mga kakayahan ng mga dalubhasang aklatan tulad ng Boost::Python. Ang mga nagtatrabaho sa mababang antas ng software ay tiyak na kailangang harapin ang multithreading (sa antas ng kernel) at Linux/UNIX/QNX system calls. Upang mapabuti ang iyong pag-unawa sa mga prinsipyo ng robotics, napaka-kapaki-pakinabang na gawing pamilyar ang iyong sarili sa balangkas ng Robotic Operating System.

Sinusubukan kong magkaroon ng kahit isang pinagsama-sama at isang na-interpret na programming language na umuunlad at hinihiling. Ito ay isang panalong diskarte para sa pagtatrabaho sa engineering, kung saan mayroong palaging pangangailangan na bumuo ng mataas na dalubhasa (basahin: hindi pangkaraniwang) mga algorithm at ipatupad ang mga ito sa pag-compile ng mga wika. Ang gawain ng paghahanda ng data para sa naturang software ay higit na kaaya-aya na lutasin gamit ang mga na-interpret na wika. Sa una, kasama sa set ko ang C++, Pascal at BASIC, kalaunan ay idinagdag ang PHP at BASH.

Paano maaaring maging kapaki-pakinabang ang mga tool sa pagpapaunlad sa pagtuturo sa mga mag-aaral

Ang pangunahing plano para sa propesyonal na pag-unlad ngayon ay upang subukang magbigay ng isang siyentipikong batayan para sa paggamit ng mga propesyonal na tool sa pagbuo ng software sa pedagogy, upang bumuo at subukan ang mga pamamaraan ng pagtuturo.

Mula noong 2016, sinimulan ko ang isang malaking eksperimento sa pagpapakilala ng mga tool sa pag-unlad - mga programming language, IDE, mga generator ng dokumentasyon, mga sistema ng pagkontrol ng bersyon - sa pagsasanay sa pagtuturo sa mas mataas na edukasyon. Tayo na ngayon ay nagtagumpay sa pagkuha ng mga resulta na maaaring maging qualitatively generalized.

Halimbawa, ang pagpapakilala ng bersyon ng mga materyales sa proseso ng edukasyon ay makabuluhang nagpapabuti sa kalidad ng gawain ng mag-aaral, gayunpaman, sa ilalim lamang ng isang ipinag-uutos na kondisyon: ang mga mag-aaral na nagtutulungan sa mga nakabahaging proyekto. Ang pagbuo ng mga pamamaraan para sa pagtuturo ng mga teknikal na disiplina gamit ang mga propesyonal na tool sa pagbuo ng software ay aktibong isinasagawa ng aking pangkat ng pananaliksik, na binubuo ng mga mag-aaral, aplikante at mag-aaral ng karagdagang mga programa sa edukasyon sa MSTU.

Siyanga pala, hindi ko iniwan ang aking pagsasanay sa pagtuturo - bumuo ako ng sarili kong malalim na full-time na kurso sa disenyo at pangangasiwa ng Linux para sa Institute of Advanced Studies sa MSTU, at ako mismo ang nagtuturo nito.

Gawaing pang-agham

Mga maagang gawa
Mga isyu sa pagpaplano ng lakad kapag nagdidisenyo ng mga four-legged walking system gamit ang halimbawa ng pagpapatupad ng gait ng kabayo (2010)

Sa isyu ng kinematics at pag-load ng sumusuportang elemento ng front leg ng kabayo sa yugto ng paglapit sa suporta bilang mga bahagi ng working cycle ng four-legged mover (2012)

Mula sa huli
3D gear manufacturing simulation application para sa mekanismo ng pagtuturo at machine theory (2019)

Paraan para sa pagkilala sa mga estruktural na balakid at aplikasyon nito sa paghahanap ng mga relief object (2018)

Ang iba pang mga gawa na na-index ng mga database ng siyentipikong pagsipi ay makikita sa aking profile sa ResearchGate. Karamihan sa mga artikulo ay nakatuon sa paggalaw ng mga makina, mayroong mga gawa sa engineering pedagogy at software na pang-edukasyon.

Pinagmulan: www.habr.com

Magdagdag ng komento