Od raketa do robota i kakve veze Python ima s tim. GeekBrains Alumni priča

Od raketa do robota i kakve veze Python ima s tim. GeekBrains Alumni priča
Danas objavljujemo priču o prelasku Andreja Vukolova na IT. Njegova dječja strast za svemirom jednom ga je navela da studira raketne nauke na MSTU. Surova stvarnost natjerala me da zaboravim na san, ali je sve ispalo još zanimljivije. Studiranje C++ i Pythona omogućilo mi je da radim jednako uzbudljiv posao: programiranje logike sistema upravljanja robotima.

Начало

Imao sam sreće što sam čitavo detinjstvo buncao o svemiru. Stoga, nakon škole, nisam ni trenutka sumnjao gdje da idem da učim i ušao sam u MSTU. Baumana, Odsjeku za raketno pogonsko inženjerstvo. Međutim, grana samog kursa - barutni ili tečni motori svemirskih raketa - uopšte nije morala da se bira: 2001. godine posebna fakultetska komisija je ipak distribuirala ciljne grupe kandidata. Bio sam uhvaćen u buretu baruta.

U to vrijeme, "raketni bum" postojao je samo u planovima; inženjeri su primali slabe plaće i radili su u posebnim zatvorenim projektantskim biroima i istraživačkim institutima gotovo bez izgleda za karijeru i profesionalni rast. Ipak, barutne rakete u Rusiji su isključivo vojni proizvodi.

Sada je ova oblast tražena, ali već tokom studija sam shvatio da je u raketnoj nauci bilo kakva samoinicijativna aktivnost gotovo nemoguća. U stvari, ovo je vojni rok. Na primjer, radeći u raketnoj industriji, bio bih potpuno lišen mogućnosti da samostalno razvijam softver, čak i za sebe, jer je ta djelatnost strogo regulirana.

Svi softverski proizvodi se razvijaju isključivo po posebnoj narudžbi i uz odobrenje komisije za tajnost (sada odjeljenje FSTEC-a). Od tamošnjeg programera se traži da registruje i licencira doslovno svaki red koda. Sav softver je u početku tajan na nivou zadatka. Ovo dijelom objašnjava zašto je softver koji se sada koristi za obuku studenata raketnih nauka razvijen najkasnije 90-ih.

Dok sam diplomirao na institutu, uspio sam da radim na katedri za teoriju mehanizama i počeo da razvijam simulator obrazovnog procesa na C++, tako da sam imao primjer za poređenje i mogao odmjeriti prednosti i nedostatke. Izbor je bio očigledan i postepeno sam počeo da se krećem prema IT-u i robotici. Primijenjena mehanika bila je mnogo zabavnija od raketne nauke: mnogi neriješeni problemi, otvoreno okruženje, nedostatak razvojne industrije, hitna potreba za softverom za simulaciju. U robotici postoji neuređena arhitektura uobičajenog softvera i potreba za stalnom implementacijom složenih algoritama, uključujući fuzzy logiku i početke AI. Stoga se nakon svojih prvih programa za obradu eksperimentalnih podataka gotovo nikad nisam vraćao raketama (s izuzetkom diplomskog projekta).

Kao rezultat toga, imao sam priliku da radim u svojoj specijalnosti samo četiri mjeseca prije nego što sam diplomirao u fabrici kompozitnih konstrukcija za avio-industriju u blizini Moskve. Po završetku studija nisam ni morao da tražim posao – odmah sam došao da predajem primenjenu mehaniku na odseku za robotiku.

Od nastave do programiranja

Od raketa do robota i kakve veze Python ima s tim. GeekBrains Alumni priča
Na Svjetskom kongresu IFTOMM sa studentima članovima istraživačke grupe (ja desno)

Radio sam 10 godina u MSTU na odsjeku za uzorkovanje, predajući kurs o teoriji mehanizama. Objavljivao je naučne radove (vidi kraj članka), postepeno prelazio od mehanike ka CAD-u i robotici. I na kraju je odlučio da napusti predavanje. Da bih što jasnije ilustrovao razloge ove odluke, reći ću da se za deset godina kurs koji sam predavao nije promijenio ni za jednu decimalu. Iako je primijenjena mehanika, sudeći po publikacijama, napredovala vrlo, vrlo uspješno.

Osim toga, posao je sve više ličio na birokratski posao - izvještaji, programi, standardi i tone papira. U ovakvim uslovima zadovoljstvo predavanja zamijenjeno je izvještavanjem o primitku ovog zadovoljstva, a to je više nego neugodno za specijaliste.

I konačno sam došao do robotike ovako: 2007-2009, zajedno sa profesorima A. Golovinom i N. Umnovom, počeli smo da pripremamo prve naučne radove. Tamo sam morao koristiti algoritme za određivanje putanja objekata iz stroboskopa. Od ove teme jedan je korak do mašinskog vida, OpenCV-a i robotskog operativnog sistema (iako tada nisam ni razmišljao o takvoj skali). Nakon toga sam se konačno fokusirao na primijenjenu mehaniku i robotiku u istraživanju, a razvoj je postao prateća aktivnost.

Međutim, da bih pronašao novi posao u robotici, bilo je potrebno unaprijediti i dopuniti svoje znanje programiranja. Na kraju krajeva, nikada nisam posebno studirao IT, osim jednogodišnjeg univerzitetskog kursa (ObjectPascal i Borland VCL u C++), i oslanjao sam se na matematiku za teorijske aspekte razvoja.

U početku sam razmatrao opcije za redovne kurseve na mom rodnom institutu. Istina, vrlo brzo je postalo jasno da bi bilo gotovo nemoguće kombinovati takve studije sa radom na odsjeku zbog neredovnog rasporeda i čestog rada van vlastitog rasporeda (zamjena i sl.). Tako sam postepeno došao na ideju da završim plaćene kurseve na daljinu. U GeekBrains sam došao na preporuku profesora iz trening centra Mail.ru Technopark, koji se nalazi u Baumanki, i upisao kurs Python Programmer.

Kursevi nisu izazivali poteškoće, jedini problem je bio što sam ih stalno morao kombinovati sa radom na katedri, naučnim radovima i događajima. Vrijeme je bilo toliko kratko da je većina društvenih veza izvan kuće morala biti žrtvovana (na sreću, privremeno).

Ovako sam se nosio sa poslom: rješavao sam probleme na putu. Ova vještina, razvijena kroz brojna poslovna putovanja, pokazala se vrlo korisnom, jer bez nje ne bih mogao ni sve svoje domaće zadatke (a zamjenjuje i meditaciju...). Naučio sam da kodiram u pokretu koristeći svoj laptop, pametni telefon i bežične tastature pametnog telefona.

Moj laptop je Dell Latitude 3470, a bilo koji pametni telefon dijagonale od 5.5 inča ili više uparen sa Logitech K 810 BT tastaturom će to učiniti. Općenito, svima preporučujem Logitechove proizvode, vrlo su pouzdani i mogu izdržati vrlo teške uvjete korištenja (a ovo nikad nije reklama).

Od raketa do robota i kakve veze Python ima s tim. GeekBrains Alumni priča
Tastatura Logitech K810

Python je vrlo pogodan za takav rad - ako imate dobar editor. Još jedan programski hak: koristite udaljene veze sa radnom površinom ili runtime okruženjem. Završio sam nekoliko zadataka koristeći siguran web server koji je pokrenuo Django na svom kućnom računaru. Radio sam iz voza, koristeći softver PyDroid, DroidEdit, Maxima.

Zašto Python?

Nije prošlo mnogo vremena pre nego što sam pokušao da koristim PHP kao sistemski skriptni jezik. U početku sam učio Python sam i malo po malo „za sebe“. Odlučio sam da ozbiljno učim nakon što sam saznao za postojanje efikasne veze između Python-a i C++-a na nivou modula – činilo mi se zanimljivim dijeliti optimizirane algoritme i procedure pripreme podataka u okviru istog jezika.

Najjednostavniji primjer: postoji kontrolni sistem za nestandardni moćni pogon, implementiran na ugrađenoj mašini sa RISC procesorom, u C++. Upravljanje se odvija preko vanjskog strojno ovisnog API-ja, koji podržava, na primjer, komunikaciju između podsistema preko mreže. Na visokom nivou, algoritam rada pogona nije debagovan ili nije konstantan (potrebno je učitavati različite algoritme u zavisnosti od procesa rada).

Jedan od najboljih načina da se postigne takav sistem je korištenje API-ja C++ podsistema specifičnog za mašinu kao osnove za skup Python klasa koje se pokreću na višeplatformskom interpretatoru. Dakle, programer najvišeg nivoa neće morati da uzima u obzir karakteristike ugrađene mašine i njenog OS-a; on će jednostavno raditi sa Python klasama koje deluju kao „omotači“ niskorazinskog API-ja.

Morao sam naučiti C++ i Python vezivanje skoro od nule. Brzo je postalo jasno da su objektno orijentisane sposobnosti na visokom nivou mnogo važnije nego na niskom nivou. Zbog toga smo morali u potpunosti promijeniti pristup dizajniranju i implementaciji API-ja, odlučivši se za klase na Python nivou i dijeljene globalne podatke u C/C++. Naviknite se na generiranje koda: na primjer, ROS okvir sam generiše imena i objekte u Pythonu, tako da morate uzeti u obzir jezične razlike, posebno u kucanju, kada dizajnirate svoja sučelja.

Rad u sadašnjosti: Python i logika kontrole robota

Sada radim kao programer za Python i C++ u Istraživačko-obrazovnom centru za robotiku na Moskovskom državnom tehničkom univerzitetu. Implementiramo istraživačke projekte i softverske alate po narudžbi vladinih službi: razvijamo manipulatore sa ugrađenim tehničkim sistemima vizije i algoritmima automatske kontrole visokog nivoa koji su nezavisni od sistema.

Trenutno programiram logiku visokog nivoa za sisteme upravljanja robotima u Pythonu; ovaj jezik povezuje zajedno visoko optimizovane module napisane u C++, asembleru i Go.

U programiranju algoritama upravljanja robotima koriste se dvije velike grupe algoritama. Prvi od njih implementiran je direktno na opremi, na niskom nivou - ovo je ugrađeni softver kontrolera pogona, koncentratora komunikacionih linija i podsistema interakcije operatera.

Ovdje su algoritmi dizajnirani za kontroliranu brzinu i pouzdanost izvršavanja koja prevazilazi performanse robota u cjelini. Ovo posljednje je obavezno, jer sigurnost cijelog sistema zavisi od softvera za kontrolu niskog nivoa.

Druga grupa algoritama određuje rad robota u cjelini. Riječ je o programima visokog nivoa, čiji je naglasak u razvoju na jasnoći i brzini implementacije algoritma, često prilično složenih. Osim toga, softver visokog nivoa na robotu je vrlo često podložan promjenama tokom procesa postavljanja i testiranja. Za takav razvoj neophodni su jezici za tumačenje opšte namene.

Koja znanja su potrebna za takav rad?

Biće obavezno proučiti jezik šablona C++ i objektno orijentisane mogućnosti Pythona. Gotovo nezamjenjiva vještina je sposobnost dizajniranja i dokumentiranja API-ja. Bilo bi dobro istražiti mogućnosti specijalizovanih biblioteka kao što je Boost::Python. Oni koji rade sa softverom niskog nivoa definitivno će morati da se pozabave multithreadingom (na nivou kernela) i sistemskim pozivima Linux/UNIX/QNX. Da biste poboljšali svoje razumijevanje principa robotike, vrlo je korisno upoznati se s okvirom robotskog operativnog sistema.

Trudim se da imam barem jedan kompajlirani i jedan interpretirani programski jezik koji se razvija i traži. Ovo je pobjednička strategija za rad u inženjeringu, gdje postoji stalna potreba za razvojem visoko specijaliziranih (čitaj: neobičnih) algoritama i njihovom implementacijom u jezicima za kompajliranje. Zadatak pripreme podataka za takav softver je mnogo ugodniji za rješavanje korištenjem interpretiranih jezika. U početku je moj set uključivao C++, Pascal i BASIC, kasnije su dodati PHP i BASH.

Kako razvojni alati mogu biti korisni u podučavanju učenika

Glavni plan za profesionalni razvoj sada je pokušaj da se obezbijedi naučna osnova za korištenje profesionalnih alata za razvoj softvera u pedagogiji, da se razviju i testiraju nastavne metode.

Od 2016. godine započeo sam veliki eksperiment uvođenja razvojnih alata - programskih jezika, IDE-a, generatora dokumentacije, sistema kontrole verzija - u nastavnu praksu u visokom obrazovanju. Sada smo uspjeli dobiti rezultate koji se mogu kvalitativno generalizirati.

Na primjer, uvođenje verzionisanja materijala u obrazovni proces značajno poboljšava kvalitetu studentskog rada, ali samo pod obaveznim uslovom: studenti rade zajedno na zajedničkim projektima. Razvoj metoda za nastavu tehničkih disciplina korištenjem profesionalnih alata za razvoj softvera sada aktivno provodi moja istraživačka grupa koju čine studenti, aplikanti i studenti programa dodatnog obrazovanja na MSTU.

Inače, nisam napustio svoju nastavnu praksu - razvio sam svoj detaljni redovni kurs o dizajnu i administraciji Linuxa za Institut za napredne studije MSTU-a i sam ga predajem.

Naučni rad

Rani radovi
Pitanja planiranja hoda pri projektovanju sistema hodanja na četiri noge na primjeru implementacije konja (2010 g.)

O pitanju kinematike i opterećenja potpornog elementa prednje noge konja u fazi približavanja osloncu kao komponenti radnog ciklusa četveronožnog pokretača. (2012 g.)

Od poslednjeg
Aplikacija simulacije 3D proizvodnje zupčanika za nastavu mehanizma i teorije mašina (2019 g.)

Metoda za prepoznavanje strukturnih prepreka i njena primjena u traženju reljefnih objekata (2018 g.)

Ostale radove indeksirane bazama naučnih citata možete pogledati na mom profilu na ResearchGate. Većina članaka posvećena je kretanju mašina, postoje radovi o inženjerskoj pedagogiji i obrazovnom softveru.

izvor: www.habr.com

Dodajte komentar