Van raketten tot robots en wat heeft Python ermee te maken. GeekBrains Alumni-verhaal

Van raketten tot robots en wat heeft Python ermee te maken. GeekBrains Alumni-verhaal
Vandaag publiceren we het verhaal van Andrej Vukolovs transitie naar IT. Zijn passie voor de ruimte uit zijn jeugd bracht hem er ooit toe raketwetenschappen te studeren aan de MSTU. De harde realiteit deed me de droom vergeten, maar alles werd nog interessanter. Door C++ en Python te studeren, kon ik net zo spannend werk doen: het programmeren van de logica van robotbesturingssystemen.

begin

Ik had het geluk dat ik mijn hele jeugd enthousiast was over de ruimte. Daarom twijfelde ik na school geen minuut waar ik moest gaan studeren, en ging ik naar MSTU. Bauman, aan de afdeling Raketaandrijving. De tak van de cursus zelf – poeder- of vloeistofmotoren van ruimteraketten – hoefde echter helemaal niet te worden gekozen: in 2001 verdeelde een speciale facultaire commissie nog de doelgroepen van de aanvragers. Ik zat gevangen in een vat buskruit.

In die tijd bestond de 'raketboom' alleen in plannen; ingenieurs ontvingen schamele salarissen en werkten in speciale gesloten ontwerpbureaus en onderzoeksinstituten met vrijwel geen vooruitzichten op carrière en professionele groei. Toch zijn kruitraketten in Rusland puur militaire producten.

Nu is er veel vraag naar dit gebied, maar al tijdens mijn studie besefte ik dat in de raketwetenschap elke activiteit op eigen initiatief vrijwel onmogelijk is. In feite is dit militaire dienst. Als ik bijvoorbeeld in de raketindustrie werk, zou ik volledig de mogelijkheid worden ontnomen om zelfstandig software te ontwikkelen, zelfs voor mezelf, aangezien deze activiteit strikt gereguleerd is.

Alle softwareproducten worden uitsluitend op speciale bestelling en met goedkeuring van de geheimhoudingscommissie (nu een divisie van FSTEC) ontwikkeld. De ontwikkelaar daar moet letterlijk elke regel code registreren en licentiëren. Alle software is in eerste instantie geheim op taakniveau. Dit verklaart gedeeltelijk waarom de software die nu wordt gebruikt om raketwetenschapstudenten op te leiden, uiterlijk in de jaren negentig werd ontwikkeld.

Tegen de tijd dat ik afstudeerde aan het instituut, slaagde ik erin om op de afdeling mechanismetheorie te werken en begon ik een educatieve processimulator in C++ te ontwikkelen, zodat ik een voorbeeld ter vergelijking had en de voor- en nadelen kon afwegen. De keuze lag voor de hand en geleidelijk begon ik richting IT en robotica te evolueren. Toegepaste mechanica was veel leuker dan rocket science: veel onopgeloste problemen, een open omgeving, gebrek aan een ontwikkelingsindustrie, een dringende behoefte aan simulatiesoftware. In de robotica is er sprake van een onzekere architectuur van gewone software en de noodzaak om herhaaldelijk complexe algoritmen te implementeren, inclusief vage logica en het begin van AI. Daarom ben ik na mijn eerste programma's voor het verwerken van experimentele data vrijwel nooit meer teruggekeerd naar raketten (met uitzondering van mijn afstudeerproject).

Als gevolg hiervan kreeg ik de kans om slechts vier maanden in mijn specialiteit te werken voordat ik afstudeerde in een fabriek in de buurt van Moskou voor composietconstructies voor de lucht- en ruimtevaartindustrie. Na mijn studie hoefde ik niet eens op zoek naar een baan, ik kwam meteen toegepaste mechanica doceren op de afdeling robotica.

Van lesgeven tot programmeren

Van raketten tot robots en wat heeft Python ermee te maken. GeekBrains Alumni-verhaal
Op het IFTOMM Wereldcongres met studentleden van de onderzoeksgroep (ik rechts)

Ik heb 10 jaar bij MSTU op de afdeling monsterneming gewerkt, waar ik een cursus gaf over de theorie van mechanismen. Hij publiceerde wetenschappelijke werken (zie het einde van het artikel) en stapte geleidelijk over van mechanica naar CAD en robotica. En uiteindelijk besloot hij het onderwijs te verlaten. Om de redenen voor deze beslissing zo duidelijk mogelijk te illustreren, zal ik zeggen dat de studie die ik heb gegeven in tien jaar tijd geen decimaal is veranderd. Hoewel de toegepaste mechanica, te oordelen naar de publicaties, zeer succesvol vooruitging.

Bovendien ging het werk steeds meer op bureaucratisch werk lijken: rapporten, programma's, standaarden en tonnen papier. Onder dergelijke omstandigheden werd het plezier van lesgeven vervangen door het rapporteren over de ontvangst van dit plezier, en dit is meer dan onaangenaam voor een praktiserend specialist.

En uiteindelijk kwam ik als volgt bij robotica terecht: in 2007-2009 begonnen we samen met de professoren A. Golovin en N. Umnov met de voorbereiding van de eerste wetenschappelijke werken. Daar moest ik algoritmen gebruiken om de paden van objecten uit stroboscoopfotografie te bepalen. Vanuit dit onderwerp is het één stap naar machine vision, OpenCV en Robotic Operating System (hoewel ik destijds niet eens aan zo’n schaal dacht). Daarna heb ik mij in het onderzoek uiteindelijk toegelegd op toegepaste mechanica en robotica, en werd ontwikkeling een ondersteunende activiteit.

Om een ​​nieuwe baan in de robotica te vinden, was het echter noodzakelijk om mijn programmeerkennis te verbeteren en aan te vullen. Ik heb tenslotte nooit specifiek IT gestudeerd, behalve een jaar durende universitaire opleiding (ObjectPascal en Borland VCL in C++), en vertrouwde op wiskunde voor de theoretische aspecten van ontwikkeling.

In eerste instantie overwoog ik opties voor voltijdse cursussen aan mijn geboorteinstituut. Toegegeven, het werd al snel duidelijk dat het vrijwel onmogelijk zou zijn om dergelijke studies te combineren met werk op de afdeling vanwege het onregelmatige rooster en het veelvuldig werken buiten het eigen rooster (vervanging etc.). Zo kwam ik langzamerhand op het idee om betaalde cursussen op afstand te volgen. Ik kwam naar GeekBrains op aanbeveling van professoren van het trainingscentrum Mail.ru Technopark, gevestigd in Baumanka, en schreef me in voor de cursus Python Programmer.

De cursussen leverden geen problemen op, het enige probleem was dat ik ze voortdurend moest combineren met werk op de afdeling, wetenschappelijke werken en evenementen. De tijd was zo krap dat de meeste sociale verbindingen buitenshuis moesten worden opgeofferd (gelukkig tijdelijk).

Zo ging ik om met de werkdruk: ik loste problemen onderweg op. Deze vaardigheid, ontwikkeld tijdens talloze zakenreizen, bleek erg nuttig, want zonder deze vaardigheid zou ik niet eens al mijn huiswerk kunnen maken (en het vervangt ook meditatie...). Ik leerde onderweg coderen met behulp van mijn laptop, smartphone en draadloze smartphonetoetsenborden.

Mijn laptop is een Dell Latitude 3470, en elke smartphone met een diagonaal van 5.5 inch of meer in combinatie met een Logitech K 810 BT-toetsenbord is voldoende. Over het algemeen raad ik iedereen Logitech-producten aan; ze zijn zeer betrouwbaar en bestand tegen zeer zware gebruiksomstandigheden (en dit is nooit een reclame).

Van raketten tot robots en wat heeft Python ermee te maken. GeekBrains Alumni-verhaal
Toetsenbord Logitech K810

Python is erg bevorderlijk voor dergelijk werk - als je een goede editor hebt. Nog een programmeerhack: gebruik externe verbindingen met de desktop- of runtime-omgeving. Ik heb verschillende taken uitgevoerd met behulp van een beveiligde webserver met Django op mijn thuiscomputer. Ik werkte vanuit de trein, met behulp van de software PyDroid, DroidEdit, Maxima.

Waarom Python?

Het duurde niet lang voordat ik PHP probeerde te gebruiken als systeemscripttaal. Aanvankelijk bestudeerde ik Python alleen en beetje bij beetje ‘voor mezelf’. Ik besloot serieus te gaan studeren nadat ik hoorde over het bestaan ​​van een effectieve verbinding tussen Python en C++ op moduleniveau. Het leek mij interessant om geoptimaliseerde algoritmen en datavoorbereidingsprocedures binnen dezelfde taal te delen.

Het eenvoudigste voorbeeld: er is een besturingssysteem voor een niet-standaard krachtige schijf, geïmplementeerd op een embedded machine met een RISC-processor, in C++. Het beheer vindt plaats via een externe machine-afhankelijke API, die bijvoorbeeld de communicatie tussen subsystemen via een netwerk ondersteunt. Op een hoog niveau wordt het algoritme voor de werking van de schijf niet gedebugd of is het niet constant (het is noodzakelijk om verschillende algoritmen te laden, afhankelijk van het werkproces).

Een van de beste manieren om een ​​dergelijk systeem te realiseren is door de machinespecifieke C++-subsysteem-API te gebruiken als basis voor een reeks Python-klassen die op een platformonafhankelijke tolk draaien. De ontwikkelaar op het hoogste niveau hoeft dus geen rekening te houden met de kenmerken van de ingebedde machine en het besturingssysteem; hij zal eenvoudigweg werken met Python-klassen die fungeren als “wrappers” van de low-level API.

Ik moest C++ en Python-binding bijna helemaal opnieuw leren. Het werd al snel duidelijk dat objectgeoriënteerde capaciteiten op een hoog niveau veel belangrijker waren dan op een laag niveau. Daarom moesten we de aanpak voor het ontwerpen en implementeren van de API volledig veranderen, door te kiezen voor klassen op Python-niveau en gedeelde globale gegevens in C/C++. Wen aan het genereren van code: het ROS-framework genereert bijvoorbeeld zelf namen en objecten in Python, dus je moet bij het ontwerpen van je interfaces rekening houden met taalverschillen, vooral bij het typen.

Werken in het heden: Python en Robot Control Logic

Nu werk ik als Python- en C++-programmeur bij het Robotics Research and Education Center van de Technische Staatsuniversiteit van Moskou. We implementeren onderzoeksprojecten en softwaretools in opdracht van overheidsdiensten: we ontwikkelen manipulatoren met ingebouwde technische visiesystemen en automatische besturingsalgoritmen op hoog niveau die systeemonafhankelijk zijn.

Momenteel programmeer ik logica op hoog niveau voor robotbesturingssystemen in Python; deze taal koppelt zeer geoptimaliseerde modules geschreven in C++, assembler en Go aan elkaar.

Bij het programmeren van robotbesturingsalgoritmen worden twee grote groepen algoritmen gebruikt. De eerste wordt rechtstreeks op de apparatuur geïmplementeerd, op een laag niveau: dit is de ingebouwde software van aandrijfcontrollers, communicatielijnconcentrators en subsystemen voor operatorinteractie.

De algoritmen hier zijn ontworpen voor een gecontroleerde uitvoeringssnelheid en betrouwbaarheid die de prestaties van de robot als geheel overtreffen. Dit laatste is verplicht, omdat de veiligheid van het hele systeem afhankelijk is van besturingssoftware op laag niveau.

De tweede groep algoritmen bepaalt de werking van de robot als geheel. Dit zijn programma's van hoog niveau, waarvan de nadruk bij de ontwikkeling ligt op de duidelijkheid en snelheid van implementatie van het algoritme, vaak behoorlijk complex. Bovendien is de hoogwaardige software op de robot heel vaak onderhevig aan veranderingen tijdens het installatie- en testproces. Voor een dergelijke ontwikkeling zijn tolktalen voor algemeen gebruik onmisbaar.

Welke kennis is nodig voor dergelijk werk?

Het zal verplicht zijn om de C++-sjabloontaal en de objectgeoriënteerde mogelijkheden van Python te bestuderen. Een vrijwel onvervangbare vaardigheid is het vermogen om API’s te ontwerpen en te documenteren. Het zou een goed idee zijn om de mogelijkheden van gespecialiseerde bibliotheken zoals Boost::Python te verkennen. Degenen die met software op een laag niveau werken, zullen zeker te maken krijgen met multithreading (op kernelniveau) en Linux/UNIX/QNX-systeemaanroepen. Om uw begrip van de principes van robotica te verbeteren, is het erg nuttig om vertrouwd te raken met het Robotic Operating System-framework.

Ik probeer ten minste één gecompileerde en één geïnterpreteerde programmeertaal te hebben die in ontwikkeling is en waar veel vraag naar is. Dit is een winnende strategie voor het werken in de techniek, waar er een constante behoefte is om zeer gespecialiseerde (lees: ongebruikelijke) algoritmen te ontwikkelen en deze te implementeren in compileertalen. De taak van het voorbereiden van gegevens voor dergelijke software is veel prettiger om op te lossen met behulp van geïnterpreteerde talen. Aanvankelijk bevatte mijn set C++, Pascal en BASIC, later kwamen daar PHP en BASH bij.

Hoe ontwikkelingstools nuttig kunnen zijn bij het lesgeven aan studenten

Het belangrijkste plan voor professionele ontwikkeling is nu om te proberen een wetenschappelijke basis te bieden voor het gebruik van professionele software-ontwikkeltools in de pedagogiek, om lesmethoden te ontwikkelen en te testen.

Sinds 2016 ben ik begonnen met een groot experiment met het introduceren van ontwikkeltools – programmeertalen, IDE’s, documentatiegeneratoren, versiebeheersystemen – in de onderwijspraktijk in het hoger onderwijs. We zijn er nu in geslaagd resultaten te verkrijgen die kwalitatief generaliseerbaar zijn.

De introductie van versiebeheer van materialen in het onderwijsproces verbetert bijvoorbeeld aanzienlijk de kwaliteit van het werk van leerlingen, maar alleen onder een verplichte voorwaarde: leerlingen die samenwerken aan gedeelde projecten. De ontwikkeling van methoden voor het onderwijzen van technische disciplines met behulp van professionele softwareontwikkeltools wordt nu actief uitgevoerd door mijn onderzoeksgroep, bestaande uit studenten, aanvragers en studenten van aanvullende onderwijsprogramma's aan MSTU.

Overigens heb ik mijn lespraktijk niet verlaten - ik heb mijn eigen diepgaande voltijdse cursus over het ontwerp en beheer van Linux ontwikkeld voor het Institute of Advanced Studies aan de MSTU, en ik geef er zelf les in.

Onderzoeksartikelen

Vroeg werk
Kwesties van loopplanning bij het ontwerpen van viervoetige loopsystemen aan de hand van het voorbeeld van de implementatie van de gang van een paard (2010)

Over de kwestie van de kinematica en belasting van het ondersteunende element van het voorbeen van het paard in de fase van het naderen van de steun als componenten van de werkcyclus van de viervoetige beweger (2012)

Van de laatste
3D-simulatietoepassing voor tandwielproductie voor het onderwijzen van mechanismen en machinetheorie (2019)

Methode voor het herkennen van structurele obstakels en de toepassing ervan bij het zoeken naar reliëfobjecten (2018)

Andere werken geïndexeerd door wetenschappelijke citatiedatabanken zijn te zien in mijn profiel op Researchgate. De meeste artikelen zijn gewijd aan de beweging van machines, er zijn werken over technische pedagogiek en educatieve software.

Bron: www.habr.com

Voeg een reactie