De raketoj ĝis robotoj kaj kion Python devas fari kun ĝi. GeekBrains Eks-studenta Rakonto

De raketoj ĝis robotoj kaj kion Python devas fari kun ĝi. GeekBrains Eks-studenta Rakonto
Hodiaŭ ni publikigas la rakonton pri la transiro de Andrey Vukolov al IT. Lia infana pasio por spaco iam igis lin studi raketsciencon ĉe MSTU. La severa realo igis min forgesi pri la sonĝo, sed ĉio fariĝis eĉ pli interesa. Studado de C++ kaj Python permesis al mi fari same ekscitan laboron: programi la logikon de robotaj kontrolsistemoj.

Начало

Mi estis bonŝanca ravi pri spaco dum mia infanaĝo. Tial, post la lernejo, mi ne dubis eĉ unu minuton, kien mi devas studi, kaj mi eniris MSTU. Bauman, al la Sekcio de Rocket Propulsion Engineering. Tamen la branĉo de la kurso mem - pulvoraj aŭ likvaj motoroj de kosmaj raketoj - tute ne devis esti elektita: en 2001, speciala fakkomisiono ankoraŭ disdonis la celgrupojn de kandidatoj. Mi estis kaptita en barelo da pulvo.

En tiu tempo, la "raketeksplodo" ekzistis nur en planoj; inĝenieroj ricevis magrajn salajrojn kaj laboris en specialaj fermitaj dezajnoburooj kaj esplorinstitutoj kun praktike neniuj perspektivoj por kariero kaj profesia kresko. Tamen, pulvoraj raketoj en Rusio estas pure militaj produktoj.

Nun ĉi tiu areo estas postulata, sed jam dum miaj studoj mi konstatis, ke en raketscienco ajna agado meminiciate estas preskaŭ neebla. Fakte, ĉi tio estas militservo. Ekzemple, laborante en la raketo-industrio, mi estus tute senigita je la ŝanco sendepende evoluigi programaron, eĉ por mi, ĉar ĉi tiu agado estas strikte reguligita.

Ĉiuj softvaraĵoj estas evoluigitaj ekskluzive laŭ speciala ordo kaj kun la aprobo de la sekreta komisiono (nun dividado de FSTEC). La programisto tie devas registri kaj licenci laŭvorte ĉiun linion de kodo. Ĉiu programaro estas komence sekreta ĉe la taskonivelo. Ĉi tio parte klarigas, kial la programaro nun uzata por trejni studentojn pri raketscienco estis evoluigita plej malfrue en la 90-aj jaroj.

Kiam mi diplomiĝis ĉe la instituto, mi sukcesis labori ĉe la fako pri mekanismo-teorio kaj komencis evoluigi edukan procezan simulilon en C++, do mi havis ekzemplon por komparo kaj povis pesi la avantaĝojn kaj malavantaĝojn. La elekto estis evidenta, kaj mi iom post iom komencis drivi al IT kaj robotiko. Aplikita mekaniko estis multe pli amuza ol raketscienco: multaj nesolvitaj problemoj, malferma medio, manko de evoluindustrio, urĝa bezono de simuladprogramaro. En robotiko, ekzistas maltrankvila arkitekturo de komuna programaro kaj la bezono plurfoje efektivigi kompleksajn algoritmojn, inkluzive de neklara logiko kaj la komencoj de AI. Tial, post miaj unuaj programoj por prilaborado de eksperimentaj datumoj, mi preskaŭ neniam revenis al raketoj (krom mia diplomiĝa projekto).

Kiel rezulto, mi havis la ŝancon labori en mia fako dum nur kvar monatoj antaŭ diplomiĝi ĉe planto proksime de Moskvo por kunmetitaj strukturoj por la aerspaca industrio. Fininte miajn studojn, mi eĉ ne devis serĉi laboron—mi tuj venis por instrui aplikatan mekanikon ĉe la fako de robotiko.

De instruado ĝis programado

De raketoj ĝis robotoj kaj kion Python devas fari kun ĝi. GeekBrains Eks-studenta Rakonto
En la Monda Kongreso de IFTOMM kun studentaj membroj de la esplorgrupo (mi dekstre)

Mi laboris ĉe MSTU en la specimena fako dum 10 jaroj, instruante kurson pri la teorio de mekanismoj. Li publikigis sciencajn verkojn (vidu la finon de la artikolo), iom post iom moviĝis de mekaniko al CAD kaj robotiko. Kaj fine li decidis forlasi la instruadon. Por plej klare ilustri la kialojn de tiu ĉi decido, mi diros, ke en dek jaroj la studkurso, kiun mi instruis, ne ŝanĝis unu decimalan lokon. Kvankam aplikata mekaniko, se juĝi laŭ la publikaĵoj, antaŭeniris tre, tre sukcese.

Krome, la laboro pli kaj pli similis al burokratia laboro – raportoj, programoj, normoj kaj tunoj da papero. En tiaj kondiĉoj, la plezuro de instruado estis anstataŭigita per raportado pri la ricevo de tiu ĉi plezuro, kaj tio estas pli ol malagrabla por praktikanta specialisto.

Kaj finfine mi venis al robotiko tiel: en 2007-2009, kune kun profesoroj A. Golovin kaj N. Umnov, ni komencis prepari la unuajn sciencajn verkojn. Tie mi devis uzi algoritmojn por determini la vojojn de objektoj el strobofotado. De ĉi tiu temo estas unu paŝo al maŝinvizio, OpenCV kaj Robotika Operaciumo (kvankam tiam mi eĉ ne pensis pri tia skalo). Post tio, mi finfine koncentriĝis pri aplikata mekaniko kaj robotiko en esplorado, kaj evoluo fariĝis subtena agado.

Tamen, por trovi novan laboron en robotiko, necesis plibonigi kaj kompletigi miajn programajn sciojn. Finfine, mi neniam studis IT specife, krom tutjara universitata kurso (ObjectPascal kaj Borland VCL en C++), kaj fidis matematikon por la teoriaj aspektoj de evoluo.

Komence mi pripensis eblojn por plentempaj kursoj en mia denaska instituto. Vere, rapide evidentiĝis, ke estus preskaŭ neeble kombini tiajn studojn kun laboro ĉe la fako pro la malregula horaro kaj ofta laboro ekster la propra horaro (anstataŭigo ktp.). Do mi iom post iom venis al la ideo kompletigi pagitajn kursojn malproksime. Mi venis al GeekBrains laŭ rekomendo de profesoroj de la trejncentro Mail.ru Technopark, situanta en Baumanka, kaj enskribiĝis en la kurso de Python Programmer.

La kursoj ne kaŭzis malfacilaĵojn, la nura problemo estis, ke mi konstante devis kombini ilin kun laboro en la fako, sciencaj verkoj kaj aranĝoj. La tempo estis tiel streĉa, ke la plej multaj sociaj ligoj ekster la hejmo devis esti oferitaj (feliĉe, provizore).

Jen kiel mi traktis la laborŝarĝon: mi solvis problemojn survoje. Ĉi tiu lerteco, disvolvita per multnombraj komercaj vojaĝoj, montriĝis tre utila, ĉar sen ĝi mi eĉ ne povus plenumi ĉiujn miajn hejmtaskojn (kaj ĝi ankaŭ anstataŭas meditadon...). Mi lernis kodi survoje uzante tekkomputilon, inteligentan telefonon kaj sendratajn saĝtelefonajn klavarojn.

Mia tekkomputilo estas Dell Latitude 3470, kaj ĉiu inteligenta telefono kun diagonalo de 5.5 coloj aŭ pli parigita kun klavaro Logitech K 810 BT utilos. Ĝenerale, mi rekomendas Logitech-produktojn al ĉiuj; ili estas tre fidindaj kaj povas elteni tre severajn uzkondiĉojn (kaj ĉi tio neniam estas reklamo).

De raketoj ĝis robotoj kaj kion Python devas fari kun ĝi. GeekBrains Eks-studenta Rakonto
Klavaro Logitech K810

Python estas tre favora al tia laboro - se vi havas bonan redaktilon. Alia programa hako: uzu malproksimajn konektojn al la labortablo aŭ rultempa medio. Mi plenumis plurajn taskojn per sekura retservilo kuranta Django sur mia hejma komputilo. Mi laboris de la trajno, uzante la programaron PyDroid, DroidEdit, Maxima.

Kial Python?

Ne pasis longe antaŭ ol mi provis uzi PHP kiel sisteman skriptlingvon. Mi komence studis Python memstare kaj iom post iom "por mi mem". Mi decidis studi serioze post kiam mi eksciis pri la ekzisto de efika ligo inter Python kaj C++ ĉe la modula nivelo - ŝajnis interese kunhavigi optimumigitajn algoritmojn kaj datumpretigajn procedurojn ene de la sama lingvo.

La plej simpla ekzemplo: ekzistas kontrolsistemo por ne-norma potenca disko, efektivigita sur enigita maŝino kun RISC-procesoro, en C++. Administrado okazas per ekstera maŝin-dependa API, kiu subtenas, ekzemple, komunikadon inter subsistemoj per reto. Je alta nivelo, la veturadopera algoritmo ne estas sencimigita aŭ ne estas konstanta (necesas ŝarĝi malsamajn algoritmojn depende de la laborprocezo).

Unu el la plej bonaj manieroj atingi tian sistemon estas uzi la maŝinspecifan C++-subsistemon API kiel la bazon por aro de Python-klasoj kiuj funkcias per transplatforma interpretisto. Tiel, la altnivela programisto ne devos konsideri la funkciojn de la enigita maŝino kaj ĝia OS; li simple laboros kun Python-klasoj, kiuj funkcias kiel "envolvaĵoj" de la malaltnivela API.

Mi devis lerni C++ kaj Python-ligadon preskaŭ de nulo. Rapide evidentiĝis, ke objekto-orientitaj kapabloj je alta nivelo estas multe pli gravaj ol ĉe malalta nivelo. Pro tio, ni devis tute ŝanĝi la aliron al desegnado kaj efektivigo de la API, elektante klasojn ĉe la Python-nivelo kaj dividis tutmondajn datumojn en C/C++. Kutimiĝu al kodi generado: ekzemple, la kadro ROS mem generas nomojn kaj objektojn en Python, do vi devas konsideri lingvajn diferencojn, precipe en tajpado, kiam vi desegnas viajn interfacojn.

Laborante en la Nuntempo: Python kaj Robota Kontrola Logiko

Nun mi laboras kiel programisto Python kaj C++ ĉe la Robotika Esplora kaj Eduka Centro de Moskva Ŝtata Teknika Universitato. Ni efektivigas esplorprojektojn kaj programajn ilojn komisiitajn de registaraj departementoj: ni disvolvas manipulantojn kun enkonstruitaj teknikaj vidsistemoj kaj altnivelajn aŭtomatajn kontrolalgoritmojn kiuj estas sendependaj de sistemoj.

Nuntempe mi programas altnivelan logikon por robotaj kontrolsistemoj en Python; ĉi tiu lingvo kunligas tre optimumigitajn modulojn skribitajn en C++, asemblero kaj Go.

En programado de robotkontrolalgoritmoj, du grandaj grupoj de algoritmoj estas uzitaj. La unua el ili estas efektivigita rekte sur la ekipaĵo, je malalta nivelo - ĉi tio estas la enkonstruita programaro de stiraj regiloj, komunikaj liniokoncentriloj kaj operaciaj interagaj subsistemoj.

La algoritmoj ĉi tie estas dizajnitaj por kontrolita ekzekutrapideco kaj fidindeco, kiu superas la agadon de la roboto entute. Ĉi-lasta estas deviga, ĉar la sekureco de la tuta sistemo dependas de malaltnivela kontrola programaro.

La dua grupo de algoritmoj determinas la funkciadon de la roboto kiel tutaĵo. Ĉi tiuj estas altnivelaj programoj, kies emfazo en la disvolviĝo estas sur la klareco kaj rapideco de efektivigo de la algoritmo, ofte sufiĉe kompleksa. Krome, altnivela programaro sur la roboto tre ofte estas ŝanĝebla dum la aranĝo kaj testa procezo. Por tia evoluo, ĝeneraluzeblaj interpretitaj lingvoj estas nemalhaveblaj.

Kia scio necesas por tia laboro?

Estos devige studi la C++-ŝablonlingvon kaj la objektorientajn kapablojn de Python. Preskaŭ neanstataŭigebla kapablo estas la kapablo desegni kaj dokumenti APIojn. Estus bona ideo esplori la kapablojn de fakaj bibliotekoj kiel Boost::Python. Tiuj, kiuj laboras kun malaltnivela programaro, certe devos trakti multfadenadon (ĉe la kernelnivelo) kaj sistemvokojn Linukso/UNIX/QNX. Por plibonigi vian komprenon pri la principoj de robotiko, estas tre utile konatiĝi kun la kadro de Robotika Operaciumo.

Mi provas havi almenaŭ unu kompilitan kaj unu interpretitan programlingvon evoluantan kaj postulata. Ĉi tio estas gajna strategio por labori en inĝenieristiko, kie estas konstanta bezono evoluigi tre specialigitajn (legu: nekutimaj) algoritmoj kaj efektivigi ilin en kompilado de lingvoj. La tasko prepari datumojn por tia programaro estas multe pli agrabla solvi uzante interpretitajn lingvojn. Komence, mia aro inkludis C++, Pascal kaj BASIC, poste PHP kaj BASH estis aldonitaj.

Kiel evoluiloj povas esti utilaj en instruado de studentoj

La ĉefa plano por profesia evoluo nun estas provi provizi sciencan bazon por la uzo de profesiaj programaj evoluiloj en pedagogio, evoluigi kaj testi instrumetodojn.

Ekde 2016, mi komencis grandan eksperimenton en enkonduko de evoluiloj - programlingvoj, IDEoj, dokumentgeneriloj, versio-kontrolsistemoj - en instruadpraktikon en supera edukado. Ni nun sukcesis akiri rezultojn kvalite ĝeneraligeblajn.

Ekzemple, la enkonduko de versioj de materialoj en la edukan procezon signife plibonigas la kvaliton de studenta laboro, tamen, nur sub deviga kondiĉo: studentoj kunlaborantaj en komunaj projektoj. La evoluo de metodoj por instruado de teknikaj disciplinoj uzante profesiajn programajn evoluilojn nun aktive estas farata de mia esplorgrupo, konsistanta el studentoj, kandidatoj kaj studentoj de kromedukaj programoj ĉe MSTU.

Cetere, mi ne forlasis mian instruan praktikon - mi ellaboris mian propran profundan plentempan kurson pri la dezajno kaj administrado de Linukso por la Instituto de Altnivelaj Studoj ĉe MSTU, kaj mi mem instruas ĝin.

Scienca laboro

Fruaj verkoj
Temoj de paŝadplanado dum dizajnado de kvarpiedaj marŝsistemoj utiligante la ekzemplon de la paŝad efektivigo de ĉevalo (2010 g.)

Pri la temo de kinematiko kaj ŝarĝo de la subtena elemento de la antaŭa kruro de la ĉevalo en la stadio de alproksimiĝo al la subteno kiel komponantoj de la laborciklo de la kvarpieda movilo (2012 g.)

De la lasta
Apliko de simulado de fabrikado de 3D ilaro por instrumekanismo kaj teorio de maŝinoj (2019 g.)

Metodo por rekoni strukturajn obstaklojn kaj ĝian aplikon en serĉado de reliefaj objektoj (2018 g.)

Aliaj verkoj indeksitaj de sciencaj citdatumbazoj videblas en mia profilo sur Esplorado. La plej multaj el la artikoloj estas dediĉitaj al la movado de maŝinoj, ekzistas verkoj pri inĝenieristiko-pedagogio kaj eduka programaro.

fonto: www.habr.com

Aldoni komenton