Rakettidest robotiteni ja mis on Pythonil sellega pistmist. GeekBrainsi vilistlaste lugu

Rakettidest robotiteni ja mis on Pythonil sellega pistmist. GeekBrainsi vilistlaste lugu
Täna avaldame loo Andrei Vukolovi IT-le üleminekust. Lapsepõlve kirg kosmose vastu viis ta kunagi MSTU-sse raketiteadust õppima. Karm reaalsus pani mind unenäo unustama, kuid kõik osutus veelgi huvitavamaks. C++ ja Pythoni õppimine võimaldas mul teha sama põnevat tööd: programmeerida roboti juhtimissüsteemide loogikat.

Algus

Mul vedas, et sain kogu lapsepõlve kosmosest vaimustuda. Seetõttu ei kahelnud ma pärast kooli hetkekski, kuhu peaksin õppima, ja astusin MSTU-sse. Bauman raketi tõukejõutehnika osakonda. Kursuse enda haru - kosmoserakettide pulber- või vedelmootoreid - ei pidanud aga üldse valima: 2001. aastal jagas teaduskonna erikomisjon ikkagi soovijate sihtrühmad. Mind jäi püssirohutünni vahele.

Sel ajal eksisteeris "raketibuum" ainult plaanides, insenerid said nappi palka ja töötasid spetsiaalsetes suletud projekteerimisbüroodes ja uurimisinstituutides, millel polnud praktiliselt mingeid karjääri- ja ametialase kasvu väljavaateid. Sellegipoolest on pulberraketid Venemaal puhtalt sõjalised tooted.

Nüüd on see ala nõutud, kuid juba õpingute ajal mõistsin, et raketiteaduses on igasugune omaalgatuslik tegevus peaaegu võimatu. Tegelikult on see ajateenistus. Näiteks raketitööstuses töötades jääksin täielikult ilma võimalusest iseseisvalt tarkvara arendada, isegi enda jaoks, kuna see tegevus on rangelt reguleeritud.

Kõik tarkvaratooted töötatakse välja eranditult eritellimusel ja salajaste komisjoni (nüüd FSTECi osakond) nõusolekul. Sealne arendaja peab registreerima ja litsentsima sõna otseses mõttes iga koodirea. Kogu tarkvara on algselt ülesande tasemel salajane. See seletab osaliselt, miks praegu raketiteaduse üliõpilaste koolitamiseks kasutatav tarkvara töötati välja hiljemalt 90. aastatel.

Instituudi lõpetamise ajaks jõudsin töötada mehhanismide teooria osakonnas ja hakkasin arendama õppeprotsessi simulaatorit C++ keeles, nii et mul oli võrdluseks näide ja sain kaaluda plusse ja miinuseid. Valik oli ilmne ja hakkasin tasapisi IT ja robootika poole triivima. Rakendusmehaanika oli palju lõbusam kui raketiteadus: palju lahendamata probleeme, avatud keskkond, arendustööstuse puudumine, tungiv vajadus simulatsioonitarkvara järele. Robootikas on levinud tarkvara ebastabiilne arhitektuur ja vajadus korduvalt rakendada keerulisi algoritme, sealhulgas häguloogikat ja AI algust. Seetõttu ei pöördunud ma pärast esimesi katseandmete töötlemise programme peaaegu kunagi tagasi rakettide juurde (välja arvatud minu lõputöö).

Tänu sellele oli mul võimalus töötada oma erialal vaid neli kuud, enne kui lõpetasin Moskva lähedal asuvas kosmosetööstuse komposiitkonstruktsioonide tehases. Pärast õpingute lõpetamist ei pidanud ma isegi tööd otsima – tulin kohe robootikaosakonda rakendusmehaanikat õpetama.

Õpetamisest programmeerimiseni

Rakettidest robotiteni ja mis on Pythonil sellega pistmist. GeekBrainsi vilistlaste lugu
IFTOMM maailmakongressil koos uurimisrühma üliõpilastega (mina paremal)

Töötasin MSTU-s proovivõtuosakonnas 10 aastat, õpetades mehhanismide teooria kursust. Ta avaldas teaduslikke töid (vt artikli lõppu), liikus mehaanikast järk-järgult CAD-i ja robootika poole. Ja lõpuks otsustas ta õpetamise pooleli jätta. Selle otsuse põhjuste ilmekamaks illustreerimiseks ütlen, et kümne aastaga ei ole minu õpetatud õppekäik ühtki komakohta muutunud. Kuigi rakendusmehaanika liikus väljaannete järgi otsustades väga-väga edukalt edasi.

Lisaks meenutas töö üha enam bürokraatlikku tööd – aruanded, programmid, standardid ja tonnid paberit. Sellistes tingimustes asendus õpetamise rõõm selle naudingu saamisest aruandlusega ja see on praktiseerivale spetsialistile enam kui ebameeldiv.

Ja lõpuks jõudsin robootikani nii: aastatel 2007–2009 alustasime koos professorite A. Golovini ja N. Umnoviga esimeste teaduslike tööde ettevalmistamist. Seal tuli kasutada algoritme, et määrata strobofotode järgi objektide teed. Sellest teemast on üks samm masinnägemise, OpenCV ja robotoperatsioonisüsteemini (kuigi tol ajal ma isegi ei mõelnud sellisele mastaabile). Peale seda keskendusin lõpuks teadustöös rakendusmehaanikale ja robootikale ning arendamisest sai toetav tegevus.

Uue töö leidmiseks robootikas oli aga vaja täiendada ja täiendada oma programmeerimisalaseid teadmisi. Lõppude lõpuks ei õppinud ma kunagi spetsiaalselt IT-d, välja arvatud aastane ülikoolikursus (ObjectPascal ja Borland VCL C++ keeles) ja tuginesin arenduse teoreetiliste aspektide osas matemaatikale.

Alguses kaalusin võimalusi täiskoormusega kursusteks oma kodumaises instituudis. Tõsi, kiiresti sai selgeks, et ebaregulaarse graafiku ja sagedase graafikuvälise töötamise (asendus jms) tõttu on selliseid õpinguid osakonnas tööga peaaegu võimatu ühendada. Nii jõudsin tasapisi mõttele tasulised kursused distantsilt läbida. Tulin GeekBrainsi Baumankas asuva Mail.ru Technoparki koolituskeskuse professorite soovitusel ja registreerusin Pythoni programmeerija kursusele.

Kursused raskusi ei valmistanud, ainuke probleem oli see, et pidin neid pidevalt ühildama tööga osakonnas, teadustööde ja üritustega. Aeg oli nii kitsas, et enamik väljaspool kodu sotsiaalseid sidemeid tuli ohverdada (õnneks ajutiselt).

Töökoormusega sain hakkama nii: lahendasin probleeme teel. See arvukate ärireiside käigus välja kujunenud oskus osutus väga kasulikuks, sest ilma selleta ei saaks ma isegi kõiki kodutöid teha (ja see asendab ka meditatsiooni...). Õppisin kodeerima liikvel olles, kasutades oma sülearvutit, nutitelefoni ja juhtmeta nutitelefoni klaviatuure.

Minu sülearvuti on Dell Latitude 3470 ja iga 5.5-tollise või suurema diagonaaliga nutitelefon on ühendatud Logitech K 810 BT klaviatuuriga. Üldiselt soovitan Logitechi tooteid kõigile, need on väga töökindlad ja peavad vastu väga karmides kasutustingimustes (ja see pole kunagi reklaam).

Rakettidest robotiteni ja mis on Pythonil sellega pistmist. GeekBrainsi vilistlaste lugu
Klaviatuur Logitech K810

Python on selliseks tööks väga soodne – kui sul on hea toimetaja. Veel üks programmeerimishäkk: kasutage kaugühendusi töölaua või käituskeskkonnaga. Täitsin mitu ülesannet, kasutades turvalist veebiserverit, kus minu koduarvutis töötab Django. Töötasin rongist, kasutades tarkvara PyDroid, DroidEdit, Maxima.

Miks Python?

Ei läinud kaua aega, kui proovisin kasutada PHP-d süsteemi skriptikeelena. Algselt õppisin Pythonit iseseisvalt ja vähehaaval "enda jaoks". Otsustasin tõsiselt õppida pärast seda, kui sain teada Pythoni ja C++ vahelise tõhusa ühenduse olemasolust mooduli tasemel – tundus huvitav jagada optimeeritud algoritme ja andmete ettevalmistamise protseduure samas keeles.

Lihtsaim näide: mittestandardse võimsa draivi jaoks on olemas juhtimissüsteem, mis on rakendatud RISC-protsessoriga sisseehitatud masinale C++ keeles. Haldamine toimub välise masinast sõltuva API kaudu, mis toetab näiteks alamsüsteemide vahelist suhtlust üle võrgu. Kõrgel tasemel ajami tööalgoritmi ei silu või see ei ole konstantne (olenevalt tööprotsessist on vaja laadida erinevaid algoritme).

Üks parimaid viise sellise süsteemi saavutamiseks on kasutada masinaspetsiifilist C++ alamsüsteemi API-t Pythoni klasside komplekti alusena, mis töötab platvormideülesel tõlgil. Seega ei pea tipptasemel arendaja arvesse võtma manustatud masina ja selle OS-i funktsioone, vaid ta töötab lihtsalt Pythoni klassidega, mis toimivad madala taseme API "ümbristena".

Pidin õppima C++ ja Pythoni köitmist peaaegu nullist. Kiiresti sai selgeks, et objektorienteeritud võimekus kõrgel tasemel on palju olulisem kui madalal tasemel. Seetõttu pidime täielikult muutma lähenemist API kujundamisele ja juurutamisele, valides Pythoni tasemel klassid ja jagades globaalseid andmeid C/C++-s. Harjuge koodi genereerimisega: näiteks ROS-i raamistik ise genereerib Pythonis nimesid ja objekte, seega peate liideste kujundamisel arvestama keeleerinevustega, eriti tippimisel.

Töö praegu: Python ja Robot Control Logic

Nüüd töötan Moskva Riikliku Tehnikaülikooli robootika uurimis- ja hariduskeskuses Pythoni ja C++ programmeerijana. Teostame valitsusasutuste tellitud uurimisprojekte ja tarkvaratööriistu: arendame sisseehitatud tehnilise visioonisüsteemide ja kõrgetasemeliste automaatjuhtimisalgoritmidega manipulaatoreid, mis on süsteemidest sõltumatud.

Praegu programmeerin Pythonis robotite juhtimissüsteemidele kõrgetasemelist loogikat; see keel seob kokku väga optimeeritud moodulid, mis on kirjutatud C++, assembleris ja Go keeles.

Roboti juhtimisalgoritmide programmeerimisel kasutatakse kahte suurt algoritmide rühma. Esimene neist on rakendatud otse seadmetele, madalal tasemel - see on ajamikontrollerite, sideliinide kontsentraatorite ja operaatori interaktsiooni alamsüsteemide sisseehitatud tarkvara.

Siinsed algoritmid on loodud kontrollitud täitmiskiiruseks ja töökindluseks, mis ületab roboti kui terviku jõudlust. Viimane on kohustuslik, kuna kogu süsteemi turvalisus sõltub madala tasemega juhtimistarkvarast.

Teine algoritmide rühm määrab roboti kui terviku töö. Tegemist on kõrgetasemeliste programmidega, mille väljatöötamisel on rõhk algoritmi teostamise selgusel ja kiirusel, sageli üsna keerukas. Lisaks sellele võib roboti kõrgetasemeline tarkvara seadistamise ja testimise käigus väga sageli muutuda. Selliseks arenguks on üldotstarbelised tõlgendatud keeled asendamatud.

Milliseid teadmisi on selliseks tööks vaja?

Kohustuslik on õppida C++ mallikeelt ja Pythoni objektorienteeritud võimalusi. Peaaegu asendamatu oskus on API-de kujundamise ja dokumenteerimise oskus. Hea mõte oleks uurida spetsiaalsete raamatukogude, nagu Boost::Python, võimalusi. Need, kes töötavad madala taseme tarkvaraga, peavad kindlasti tegelema multithreadinguga (kerneli tasemel) ja Linux/UNIX/QNX süsteemikutsega. Robootika põhimõtetest arusaamise parandamiseks on väga kasulik tutvuda robotite operatsioonisüsteemi raamistikuga.

Püüan omada vähemalt ühte koostatud ja tõlgendatud programmeerimiskeelt, mis areneb ja mida nõutakse. See on võidukas strateegia inseneritööks, kus pidevalt on vaja välja töötada väga spetsiifilisi (loe: ebatavalisi) algoritme ja rakendada neid kompileerimiskeeltes. Sellise tarkvara jaoks andmete ettevalmistamise ülesannet on tõlgendatud keeli kasutades palju meeldivam lahendada. Algselt oli minu komplektis C++, Pascal ja BASIC, hiljem lisandusid PHP ja BASH.

Kuidas arendusvahendid võivad õpilaste õpetamisel kasulikud olla

Professionaalse arengu põhiplaan on praegu püüda anda teaduslik alus professionaalsete tarkvaraarendusvahendite kasutamiseks pedagoogikas, arendada ja katsetada õppemeetodeid.

Alates 2016. aastast alustasin ulatuslikku eksperimenti arendusvahendite – programmeerimiskeelte, IDE-de, dokumentatsioonigeneraatorite, versioonikontrollisüsteemide – juurutamiseks kõrghariduse õpetamispraktikasse. Nüüd on meil õnnestunud saada kvalitatiivselt üldistavaid tulemusi.

Näiteks materjalide versioonimise juurutamine õppeprotsessi parandab oluliselt õpilaste töö kvaliteeti, kuid ainult kohustuslikul tingimusel: õpilased töötavad koos ühisprojektide kallal. Tehniliste erialade õpetamise meetodite väljatöötamisega professionaalsete tarkvaraarendusvahendite abil tegeleb praegu aktiivselt minu uurimisrühm, mis koosneb MSTU üliõpilastest, taotlejatest ja täiendõppe programmide üliõpilastest.

Muide, ma ei jätnud oma õpetamispraktikat - töötasin välja oma põhjaliku täiskoormusega kursuse Linuxi disaini ja haldamise kohta MSTU kõrgkoolide instituudi jaoks ja õpetan seda ise.

Teaduslikud tööd

Varased tööd
Kõnni planeerimise probleemid neljajalgsete kõnnisüsteemide kavandamisel hobuse kõnni rakendamise näitel (2010 g.)

Hobuse esijala tugielemendi kinemaatika ja koormamise küsimusest toele lähenemise etapis kui neljajalgse liikuja töötsükli komponentide kohta (2012 g.)

Viimasest
3D hammasrataste valmistamise simulatsioonirakendus mehhanismide ja masinateooria õpetamiseks (2019 g.)

Struktuursete takistuste äratundmise meetod ja selle rakendamine reljeefsete objektide otsimisel (2018 g.)

Teisi teaduslike tsitaatide andmebaaside indekseeritud töid näete minu profiilis aadressil ResearchGate. Enamik artikleid on pühendatud masinate liikumisele, on töid inseneripedagoogikast ja õppetarkvarast.

Allikas: www.habr.com

Lisa kommentaar