Fra raketter til roboter og hva har Python med det å gjøre. GeekBrains Alumni-historie

Fra raketter til roboter og hva har Python med det å gjøre. GeekBrains Alumni-historie
I dag publiserer vi historien om Andrey Vukolovs overgang til IT. Hans barndoms lidenskap for verdensrommet førte til at han en gang studerte rakettvitenskap ved MSTU. Den harde virkeligheten fikk meg til å glemme drømmen, men alt ble enda mer interessant. Å studere C++ og Python tillot meg å gjøre like spennende arbeid: programmere logikken til robotkontrollsystemer.

begynner

Jeg var heldig som fantes med verdensrommet hele barndommen. Derfor, etter skolen, tvilte jeg ikke et minutt på hvor jeg skulle gå for å studere, og jeg begynte på MSTU. Bauman, til Institutt for rakettfremdriftsteknikk. Selve grenen av kurset - pulver- eller væskemotorer av romraketter - trengte imidlertid ikke å velges i det hele tatt: i 2001 fordelte en spesiell fakultetskommisjon fortsatt målgruppene av søkere. Jeg ble fanget i en tønne med krutt.

På den tiden eksisterte "rakettboomen" bare i planer; ingeniører mottok magre lønn og jobbet i spesielle lukkede designbyråer og forskningsinstitutter med praktisk talt ingen utsikter til karriere og profesjonell vekst. Likevel er pulverraketter i Russland rene militære produkter.

Nå er dette området etterspurt, men allerede under studiene innså jeg at i rakettvitenskap er enhver aktivitet på eget initiativ nesten umulig. Faktisk er dette militærtjeneste. For eksempel, når jeg jobber i rakettindustrien, ville jeg bli fullstendig fratatt muligheten til å utvikle programvare selvstendig, selv for meg selv, siden denne aktiviteten er strengt regulert.

Alle programvareprodukter er utviklet eksklusivt på spesialbestilling og med godkjenning av sekretesskommisjonen (nå en avdeling av FSTEC). Utvikleren der er pålagt å registrere og lisensiere bokstavelig talt hver linje med kode. All programvare er i utgangspunktet hemmelig på oppgavenivå. Dette forklarer delvis hvorfor programvaren som nå brukes til å trene rakettvitenskapsstudenter ble utviklet senest på 90-tallet.

Da jeg ble uteksaminert fra instituttet, klarte jeg å jobbe ved avdelingen for mekanismeteori og begynte å utvikle en pedagogisk prosesssimulator i C++, så jeg hadde et eksempel til sammenligning og kunne veie fordeler og ulemper. Valget var åpenbart, og jeg begynte gradvis å drive mot IT og robotikk. Anvendt mekanikk var mye morsommere enn rakettvitenskap: mange uløste problemer, et åpent miljø, mangel på utviklingsindustri, et presserende behov for simuleringsprogramvare. I robotikk er det en ustabil arkitektur med vanlig programvare og behovet for gjentatte ganger å implementere komplekse algoritmer, inkludert uklar logikk og begynnelsen av AI. Derfor, etter mine første programmer for behandling av eksperimentelle data, kom jeg nesten aldri tilbake til raketter (med unntak av eksamensprosjektet mitt).

Som et resultat hadde jeg muligheten til å jobbe i spesialiteten min i bare fire måneder før jeg ble uteksaminert ved et anlegg nær Moskva for komposittstrukturer for romfartsindustrien. Etter å ha fullført studiene trengte jeg ikke engang å søke jobb – jeg kom umiddelbart for å undervise i anvendt mekanikk ved robotavdelingen.

Fra undervisning til programmering

Fra raketter til roboter og hva har Python med det å gjøre. GeekBrains Alumni-historie
På IFTOMM verdenskongress med studentmedlemmer av forskningsgruppen (meg til høyre)

Jeg jobbet ved MSTU i prøvetakingsavdelingen i 10 år, og underviste i et kurs i teori om mekanismer. Han publiserte vitenskapelige arbeider (se slutten av artikkelen), beveget seg gradvis fra mekanikk mot CAD og robotikk. Og til slutt bestemte han seg for å forlate undervisningen. For å tydeligst illustrere årsakene til denne beslutningen, vil jeg si at på ti år har studieløpet jeg underviste ikke endret seg med én desimal. Selv om anvendt mekanikk, etter publikasjonene å dømme, gikk videre veldig, veldig vellykket.

I tillegg lignet arbeidet mer og mer på byråkratisk arbeid - rapporter, programmer, standarder og tonnevis med papir. Under slike forhold ble gleden ved å undervise erstattet av rapportering ved mottak av denne gleden, og dette er mer enn ubehagelig for en praktiserende spesialist.

Og til slutt kom jeg til robotikk som dette: i 2007-2009, sammen med professorene A. Golovin og N. Umnov, begynte vi å forberede de første vitenskapelige arbeidene. Der måtte jeg bruke algoritmer for å bestemme banene til objekter fra strobefotografering. Fra dette emnet er det ett steg til maskinsyn, OpenCV og Robotic Operating System (selv om jeg på den tiden ikke engang tenkte på en slik skala). Etter det fokuserte jeg endelig på anvendt mekanikk og robotikk i forskning, og utvikling ble en støtteaktivitet.

For å finne en ny jobb innen robotikk var det imidlertid nødvendig å forbedre og supplere min programmeringskunnskap. Tross alt studerte jeg aldri IT spesifikt, bortsett fra et år langt universitetskurs (ObjectPascal og Borland VCL i C++), og stolte på matematikk for de teoretiske aspektene ved utvikling.

Først vurderte jeg alternativer for heltidskurs ved mitt hjemlige institutt. Riktignok ble det raskt klart at det ville være nesten umulig å kombinere slike studier med arbeid ved instituttet på grunn av uregelmessig timeplan og hyppig arbeid utenfor egen timeplan (substitusjon osv.). Så jeg kom gradvis til ideen om å fullføre betalte kurs eksternt. Jeg kom til GeekBrains etter anbefaling fra professorer fra Mail.ru Technopark treningssenter, som ligger i Baumanka, og meldte meg på Python Programmer-kurset.

Kursene skapte ingen vanskeligheter, problemet var bare at jeg hele tiden måtte kombinere dem med arbeid ved instituttet, vitenskapelige arbeider og arrangementer. Tiden var så knapp at de fleste sosiale forbindelser utenfor hjemmet måtte ofres (heldigvis midlertidig).

Slik taklet jeg arbeidsmengden: Jeg løste problemer på veien. Denne ferdigheten, utviklet gjennom en rekke forretningsreiser, viste seg å være veldig nyttig, siden uten den ville jeg ikke engang kunne fullføre alle leksene mine (og den erstatter også meditasjon...). Jeg lærte å kode mens jeg var på farten ved å bruke den bærbare datamaskinen, smarttelefonen og trådløse smarttelefontastaturene.

Den bærbare datamaskinen min er en Dell Latitude 3470, og enhver smarttelefon med en diagonal på 5.5 tommer eller mer sammenkoblet med et Logitech K 810 BT-tastatur vil gjøre det. Generelt anbefaler jeg Logitech-produkter til alle; de ​​er veldig pålitelige og tåler svært tøffe bruksforhold (og dette er aldri en reklame).

Fra raketter til roboter og hva har Python med det å gjøre. GeekBrains Alumni-historie
Tastatur Logitech K810

Python er svært gunstig for slikt arbeid - hvis du har en god redaktør. Et annet programmeringshack: bruk eksterne tilkoblinger til skrivebordet eller kjøretidsmiljøet. Jeg fullførte flere oppgaver ved å bruke en sikker webserver som kjører Django på hjemmedatamaskinen min. Jeg jobbet fra toget ved å bruke programvaren PyDroid, DroidEdit, Maxima.

Hvorfor Python?

Det tok ikke lang tid før jeg prøvde å bruke PHP som systemskriptspråk. Jeg studerte først Python på egen hånd og litt etter litt "for meg selv." Jeg bestemte meg for å studere seriøst etter at jeg lærte om eksistensen av en effektiv forbindelse mellom Python og C++ på modulnivå - det virket interessant å dele optimaliserte algoritmer og dataforberedelsesprosedyrer på samme språk.

Det enkleste eksemplet: det er et kontrollsystem for en ikke-standard kraftig stasjon, implementert på en innebygd maskin med en RISC-prosessor, i C++. Styring skjer gjennom en ekstern maskinavhengig API, som støtter for eksempel kommunikasjon mellom delsystemer over et nettverk. På et høyt nivå blir ikke drivoperasjonsalgoritmen feilsøkt eller er ikke konstant (det er nødvendig å laste forskjellige algoritmer avhengig av arbeidsprosessen).

En av de beste måtene å oppnå et slikt system på er å bruke det maskinspesifikke C++-undersystemet API som grunnlag for et sett med Python-klasser som kjører på en kryssplattformtolk. Dermed trenger ikke toppnivåutvikleren å ta hensyn til funksjonene til den innebygde maskinen og dens OS; han vil ganske enkelt jobbe med Python-klasser som fungerer som "innpakninger" av lavnivå-API.

Jeg måtte lære meg C++ og Python-binding nesten fra bunnen av. Det ble raskt klart at objektorienterte evner på høyt nivå var mye viktigere enn på lavt nivå. På grunn av dette måtte vi fullstendig endre tilnærmingen til å designe og implementere API, velge klasser på Python-nivå og delte globale data i C/C++. Bli vant til kodegenerering: for eksempel genererer selve ROS-rammeverket navn og objekter i Python, så du må ta hensyn til språkforskjeller, spesielt ved skriving, når du designer grensesnittene dine.

Arbeid i nåtiden: Python og robotkontrolllogikk

Nå jobber jeg som Python- og C++-programmerer ved Robotics Research and Education Center ved Moscow State Technical University. Vi implementerer forskningsprosjekter og programvareverktøy på oppdrag fra offentlige avdelinger: vi utvikler manipulatorer med innebygde tekniske synssystemer og automatiske kontrollalgoritmer på høyt nivå som er uavhengige av systemer.

For tiden programmerer jeg høynivålogikk for robotkontrollsystemer i Python; dette språket kobler sammen svært optimaliserte moduler skrevet i C++, assembler og Go.

Ved programmering av robotkontrollalgoritmer brukes to store grupper av algoritmer. Den første av dem er implementert direkte på utstyret, på et lavt nivå - dette er den innebygde programvaren til drivkontrollere, kommunikasjonslinjekonsentratorer og operatørinteraksjonsundersystemer.

Algoritmene her er designet for kontrollert utførelseshastighet og pålitelighet som overgår ytelsen til roboten som helhet. Sistnevnte er obligatorisk, siden sikkerheten til hele systemet avhenger av kontrollprogramvare på lavt nivå.

Den andre gruppen av algoritmer bestemmer driften av roboten som helhet. Dette er programmer på høyt nivå, hvor vekten i utviklingen er klarhet og hastighet på implementeringen av algoritmen, ofte ganske komplisert. I tillegg er høynivåprogramvare på roboten svært ofte gjenstand for endringer under oppsett- og testprosessen. For en slik utvikling er tolkede språk for generelle formål uunnværlige.

Hvilken kunnskap trengs for slikt arbeid?

Det vil være obligatorisk å studere C++-malspråket og de objektorienterte egenskapene til Python. En nesten uerstattelig ferdighet er evnen til å designe og dokumentere APIer. Det ville være en god idé å utforske mulighetene til spesialiserte biblioteker som Boost::Python. De som jobber med lavnivåprogramvare vil definitivt måtte forholde seg til multithreading (på kjernenivå) og Linux/UNIX/QNX-systemanrop. For å forbedre forståelsen av prinsippene for robotikk, er det veldig nyttig å gjøre deg kjent med rammeverket for robotisk operativsystem.

Jeg prøver å ha minst ett kompilert og ett tolket programmeringsspråk som er i utvikling og etterspørsel. Dette er en vinnende strategi for å jobbe innen ingeniørfag, der det er et konstant behov for å utvikle høyt spesialiserte (les: uvanlige) algoritmer og implementere dem i kompileringsspråk. Oppgaven med å forberede data for slik programvare er mye mer behagelig å løse ved å bruke tolkede språk. Opprinnelig inkluderte settet mitt C++, Pascal og BASIC, senere ble PHP og BASH lagt til.

Hvordan utviklingsverktøy kan være nyttige i undervisningen av elever

Hovedplanen for fagutvikling nå er å forsøke å gi et vitenskapelig grunnlag for bruk av profesjonelle programvareutviklingsverktøy i pedagogikk, for å utvikle og teste undervisningsmetoder.

Siden 2016 startet jeg et stort eksperiment med å introdusere utviklingsverktøy – programmeringsspråk, IDE-er, dokumentasjonsgeneratorer, versjonskontrollsystemer – i undervisningspraksis i høyere utdanning. Vi har nå lykkes med å få resultater som kan generaliseres kvalitativt.

For eksempel forbedrer introduksjonen av versjonering av materialer i utdanningsprosessen kvaliteten på studentarbeid betydelig, men bare under en obligatorisk betingelse: studenter som jobber sammen om delte prosjekter. Utviklingen av metoder for undervisning i tekniske disipliner ved hjelp av profesjonelle programvareutviklingsverktøy utføres nå aktivt av min forskningsgruppe, bestående av studenter, søkere og studenter ved tilleggsutdanningsprogram ved MSTU.

Forresten, jeg forlot ikke undervisningspraksisen min - jeg utviklet mitt eget dyptgående heltidskurs i design og administrasjon av Linux for Institute of Advanced Studies ved MSTU, og jeg underviser i det selv.

Vitenskapelig arbeid

Tidlige arbeider
Problemer med gangplanlegging ved utforming av firbeinte gangsystemer ved å bruke eksemplet med en hests gangimplementering (2010)

Om spørsmålet om kinematikk og belastning av støtteelementet til hestens fremre ben i stadiet av å nærme seg støtten som komponenter i arbeidssyklusen til den firbeinte bevegelsen (2012)

Fra sist
Simuleringsapplikasjon for 3D-utstyrsproduksjon for undervisning i mekanisme og maskinteori (2019)

Metode for å gjenkjenne strukturelle hindringer og dens anvendelse ved søk etter avlastningsobjekter (2018)

Andre arbeider indeksert av vitenskapelige siteringsdatabaser kan sees i profilen min på Research. De fleste av artiklene er viet til bevegelse av maskiner, det er arbeider med ingeniørpedagogikk og pedagogisk programvare.

Kilde: www.habr.com

Legg til en kommentar