Från raketer till robotar och vad har Python med det att göra. GeekBrains Alumni Story

Från raketer till robotar och vad har Python med det att göra. GeekBrains Alumni Story
Idag publicerar vi historien om Andrey Vukolovs övergång till IT. Hans barndoms passion för rymden ledde en gång till att han studerade raketvetenskap vid MSTU. Den hårda verkligheten fick mig att glömma drömmen, men allt blev ännu mer intressant. Att studera C++ och Python gjorde det möjligt för mig att göra lika spännande arbete: programmera logiken i robotstyrsystem.

börjar

Jag hade turen att ha tjatat om rymden hela min barndom. Därför, efter skolan, tvivlade jag inte en minut på var jag skulle gå för att studera, och jag gick in på MSTU. Bauman, till Institutionen för raketframdrivningsteknik. Men grenen av själva kursen - pulver- eller vätskemotorer av rymdraketer - behövde inte alls väljas: 2001 fördelade en särskild fakultetskommission fortfarande målgrupperna för sökande. Jag blev fångad i en krutkrut.

På den tiden existerade "raketboomen" bara i planer, ingenjörer fick magra löner och arbetade i särskilda slutna designbyråer och forskningsinstitut med praktiskt taget inga utsikter till karriär och professionell tillväxt. Ändå är krutraketer i Ryssland rent militära produkter.

Nu är detta område efterfrågat, men redan under mina studier insåg jag att inom raketvetenskap är all aktivitet på eget initiativ nästan omöjlig. I själva verket är detta militärtjänst. Till exempel, när jag arbetar i raketindustrin, skulle jag helt berövas möjligheten att självständigt utveckla programvara, även för mig själv, eftersom denna verksamhet är strikt reglerad.

Alla mjukvaruprodukter utvecklas exklusivt på specialbeställning och med godkännande av sekretesskommissionen (nu en avdelning av FSTEC). Utvecklaren där måste registrera och licensiera bokstavligen varje rad kod. All mjukvara är initialt hemlig på uppgiftsnivå. Detta förklarar delvis varför programvaran som nu används för att utbilda raketvetenskapsstudenter utvecklades senast på 90-talet.

När jag tog examen från institutet lyckades jag jobba på institutionen för mekanismteori och började utveckla en pedagogisk processsimulator i C++, så jag hade ett exempel för jämförelse och kunde väga för- och nackdelar. Valet var självklart och jag började så småningom glida mot IT och robotik. Tillämpad mekanik var mycket roligare än raketvetenskap: många olösta problem, en öppen miljö, brist på utvecklingsindustri, ett akut behov av simuleringsprogram. Inom robotteknik finns det en orolig arkitektur av vanlig programvara och behovet av att upprepade gånger implementera komplexa algoritmer, inklusive fuzzy logic och början av AI. Därför, efter mina första program för att bearbeta experimentell data, återvände jag nästan aldrig till raketer (med undantag för mitt examensprojekt).

Som ett resultat fick jag möjligheten att arbeta inom min specialitet i endast fyra månader innan jag tog examen på en fabrik nära Moskva för kompositstrukturer för flygindustrin. Efter att ha avslutat mina studier behövde jag inte ens söka jobb – jag kom direkt för att undervisa i tillämpad mekanik på robotavdelningen.

Från undervisning till programmering

Från raketer till robotar och vad har Python med det att göra. GeekBrains Alumni Story
På IFTOMM World Congress med studentmedlemmar i forskargruppen (jag till höger)

Jag arbetade på MSTU på provtagningsavdelningen i 10 år och undervisade i en kurs om mekanismteori. Han publicerade vetenskapliga arbeten (se slutet av artikeln), gick gradvis från mekanik till CAD och robotik. Och till slut bestämde han sig för att lämna undervisningen. För att tydligast illustrera skälen till detta beslut kommer jag att säga att på tio år har den studiegång jag undervisade inte ändrats med en decimal. Även om tillämpad mekanik, att döma av publikationerna, gick framåt mycket, mycket framgångsrikt.

Dessutom liknade arbetet mer och mer byråkratiskt arbete - rapporter, program, standarder och massor av papper. Under sådana förhållanden ersattes nöjet att undervisa med att rapportera om mottagandet av detta nöje, och detta är mer än obehagligt för en praktiserande specialist.

Och till sist kom jag till robotik så här: 2007-2009 började vi tillsammans med professorerna A. Golovin och N. Umnov att förbereda de första vetenskapliga arbetena. Där var jag tvungen att använda algoritmer för att bestämma vägarna för objekt från stroboskopfotografering. Från detta ämne är det ett steg till maskinseende, OpenCV och Robotic Operating System (även om jag vid den tiden inte ens tänkte på en sådan skala). Efter det fokuserade jag äntligen på tillämpad mekanik och robotik inom forskning och utveckling blev en stödjande verksamhet.

Men för att hitta ett nytt jobb inom robotik var det nödvändigt att förbättra och komplettera mina programmeringskunskaper. Jag har trots allt aldrig studerat IT specifikt, förutom en årslång universitetskurs (ObjectPascal och Borland VCL i C++), och förlitade mig på matematik för de teoretiska aspekterna av utveckling.

Först övervägde jag alternativ för heltidskurser vid mitt hemland. Visserligen stod det snabbt klart att det skulle vara nästan omöjligt att kombinera sådana studier med arbete på institutionen på grund av det oregelbundna schemat och frekventa arbeten utanför det egna schemat (vikariat etc.). Så jag kom gradvis på idén att slutföra betalda kurser på distans. Jag kom till GeekBrains på rekommendation av professorer från Mail.ru Technoparks utbildningscenter, beläget i Baumanka, och anmälde mig till Python Programmer-kursen.

Kurserna orsakade inga svårigheter, problemet var bara att jag hela tiden fick kombinera dem med arbete på institutionen, vetenskapliga arbeten och evenemang. Tiden var så knapp att de flesta sociala kontakter utanför hemmet måste offras (lyckligtvis tillfälligt).

Så här klarade jag arbetsbördan: Jag löste problem på vägen. Denna färdighet, utvecklad genom många affärsresor, visade sig vara mycket användbar, eftersom utan den skulle jag inte ens kunna slutföra alla mina läxor (och den ersätter också meditation...). Jag lärde mig att koda när jag var på språng med hjälp av en bärbar dator, en smartphone och trådlösa smartphonetangentbord.

Min bärbara dator är en Dell Latitude 3470, och alla smartphones med en diagonal på 5.5 tum eller mer parat med ett Logitech K 810 BT-tangentbord duger. Generellt rekommenderar jag Logitech-produkter till alla, de är mycket pålitliga och tål mycket tuffa användningsförhållanden (och det här är aldrig en reklam).

Från raketer till robotar och vad har Python med det att göra. GeekBrains Alumni Story
Tangentbord Logitech K810

Python är mycket gynnsam för sådant arbete - om du har en bra redaktör. Ett annat programmeringshack: använd fjärranslutningar till skrivbordet eller runtime-miljön. Jag slutförde flera uppgifter med en säker webbserver som körde Django på min hemdator. Jag arbetade från tåget och använde programvaran PyDroid, DroidEdit, Maxima.

Varför Python?

Det dröjde inte länge innan jag försökte använda PHP som ett systemskriptspråk. Jag studerade till en början Python på egen hand och lite i taget "för mig själv". Jag bestämde mig för att studera på allvar efter att jag fick reda på att det finns en effektiv koppling mellan Python och C++ på modulnivå - det verkade intressant att dela optimerade algoritmer och databeredningsprocedurer inom samma språk.

Det enklaste exemplet: det finns ett styrsystem för en icke-standardiserad kraftfull enhet, implementerad på en inbäddad maskin med en RISC-processor, i C++. Hanteringen sker genom ett externt maskinberoende API, som stödjer till exempel kommunikation mellan delsystem över ett nätverk. På en hög nivå är drivoperationsalgoritmen inte felsökt eller är inte konstant (det är nödvändigt att ladda olika algoritmer beroende på arbetsprocessen).

Ett av de bästa sätten att uppnå ett sådant system är att använda det maskinspecifika C++-undersystemet API som grund för en uppsättning Python-klasser som körs på en plattformsoberoende tolk. Således kommer toppnivåutvecklaren inte att behöva ta hänsyn till funktionerna i den inbäddade maskinen och dess OS; han kommer helt enkelt att arbeta med Python-klasser som fungerar som "omslag" av lågnivå-API:et.

Jag var tvungen att lära mig C++ och Python-bindning nästan från början. Det stod snabbt klart att objektorienterade förmågor på hög nivå var mycket viktigare än på låg nivå. På grund av detta var vi tvungna att helt ändra tillvägagångssättet för att designa och implementera API:t, välja klasser på Python-nivå och dela globala data i C/C++. Vänj dig vid kodgenerering: till exempel genererar själva ROS-ramverket namn och objekt i Python, så du måste ta hänsyn till språkskillnader, särskilt när du skriver, när du designar dina gränssnitt.

Arbeta i nuet: Python och Robot Control Logic

Nu jobbar jag som Python- och C++-programmerare vid Robotics Research and Education Center vid Moscow State Technical University. Vi implementerar forskningsprojekt och mjukvaruverktyg på uppdrag av statliga myndigheter: vi utvecklar manipulatorer med inbyggda tekniska visionsystem och automatiska styralgoritmer på hög nivå som är oberoende av system.

För närvarande programmerar jag högnivålogik för robotstyrsystem i Python; detta språk länkar samman högoptimerade moduler skrivna i C++, assembler och Go.

Vid programmering av robotstyrningsalgoritmer används två stora grupper av algoritmer. Den första av dem är implementerad direkt på utrustningen, på en låg nivå - detta är den inbyggda programvaran för drivkontroller, kommunikationslinjekoncentratorer och operatörsinteraktionsdelsystem.

Algoritmerna här är designade för kontrollerad exekveringshastighet och tillförlitlighet som överstiger robotens prestanda som helhet. Det senare är obligatoriskt, eftersom säkerheten för hela systemet beror på kontrollprogramvara på låg nivå.

Den andra gruppen av algoritmer bestämmer hur roboten fungerar som helhet. Dessa är högnivåprogram, vars tyngdpunkt i utvecklingen ligger på klarheten och hastigheten för implementeringen av algoritmen, ofta ganska komplex. Dessutom är högnivåmjukvara på roboten mycket ofta föremål för förändringar under installations- och testprocessen. För sådan utveckling är allmänt tolkade språk oumbärliga.

Vilken kunskap behövs för ett sådant arbete?

Det kommer att vara obligatoriskt att studera mallspråket C++ och de objektorienterade funktionerna i Python. En nästan oersättlig färdighet är förmågan att designa och dokumentera API:er. Det skulle vara en bra idé att utforska kapaciteten hos specialiserade bibliotek som Boost::Python. De som arbetar med mjukvara på låg nivå kommer definitivt att behöva hantera multithreading (på kärnnivå) och Linux/UNIX/QNX-systemanrop. För att förbättra din förståelse för robotteknikens principer är det mycket användbart att bekanta dig med ramverket för robotoperativsystem.

Jag försöker ha minst ett kompilerat och ett tolkat programmeringsspråk som är utvecklande och efterfrågat. Detta är en vinnande strategi för att arbeta inom teknik, där det finns ett ständigt behov av att utveckla högspecialiserade (läs: ovanliga) algoritmer och implementera dem i kompileringsspråk. Uppgiften att förbereda data för sådan programvara är mycket trevligare att lösa med hjälp av tolkade språk. Från början inkluderade min uppsättning C++, Pascal och BASIC, senare lades PHP och BASH till.

Hur utvecklingsverktyg kan vara användbara för att undervisa elever

Huvudplanen för professionell utveckling nu är att försöka ge en vetenskaplig grund för användning av professionella mjukvaruutvecklingsverktyg inom pedagogik, för att utveckla och testa undervisningsmetoder.

Sedan 2016 påbörjade jag ett stort experiment med att introducera utvecklingsverktyg – programmeringsspråk, IDE:er, dokumentationsgeneratorer, versionskontrollsystem – i undervisningspraktik inom högre utbildning. Vi har nu lyckats få resultat som kan generaliseras kvalitativt.

Till exempel förbättrar införandet av versionsversion av material i utbildningsprocessen avsevärt kvaliteten på studentarbetet, dock endast under ett obligatoriskt villkor: studenter som arbetar tillsammans i delade projekt. Utvecklingen av metoder för att undervisa i tekniska discipliner med hjälp av professionella mjukvaruutvecklingsverktyg bedrivs nu aktivt av min forskargrupp, bestående av studenter, sökande och studenter på ytterligare utbildningsprogram vid MSTU.

Förresten, jag lämnade inte min lärarpraktik - jag utvecklade min egen djupgående heltidskurs om design och administration av Linux för Institutet för avancerade studier vid MSTU, och jag undervisar i det själv.

Vetenskapligt arbete

Tidigt arbete
Frågor om gångplanering vid design av fyrbenta gångsystem med hjälp av exemplet med en hästs gångimplementering (2010 g)

Om frågan om kinematik och belastning av det stödjande elementet på hästens framben i fasen av att närma sig stödet som komponenter i arbetscykeln för den fyrbenta föraren (2012 g)

Från sist
3D-tillverkningssimuleringsapplikation för att lära ut mekanismer och maskinteori (2019 g)

Metod för att känna igen strukturella hinder och dess tillämpning vid sökning efter reliefföremål (2018 g)

Andra verk indexerade av vetenskapliga referensdatabaser kan ses i min profil på Researchgate. De flesta av artiklarna ägnas åt förflyttning av maskiner, det finns arbeten om ingenjörspedagogik och pedagogisk programvara.

Källa: will.com

Lägg en kommentar