De la rachete la roboți și ce legătură are Python cu el. Povestea absolvenților GeekBrains

De la rachete la roboți și ce legătură are Python cu el. Povestea absolvenților GeekBrains
Astăzi publicăm povestea tranziției lui Andrey Vukolov la IT. Pasiunea sa din copilărie pentru spațiu l-a determinat cândva să studieze știința rachetelor la MSTU. Realitatea dură m-a făcut să uit de vis, dar totul s-a dovedit și mai interesant. Studierea C++ și Python mi-a permis să fac o muncă la fel de interesantă: programarea logicii sistemelor de control al roboților.

Home

Am fost norocos să mă bucur de spațiu toată copilăria mea. Prin urmare, după școală, nu m-am îndoit nici un minut unde ar trebui să merg să studiez și am intrat în MSTU. Bauman, la Departamentul de Inginerie Propulsie Rachete. Cu toate acestea, ramura cursului în sine - motoarele cu pulbere sau lichide ale rachetelor spațiale - nu trebuia deloc aleasă: în 2001, o comisie specială a facultății distribuia în continuare grupurile țintă de solicitanți. Am fost prins într-un butoi de praf de pușcă.

La acea vreme, „boom-ul rachetei” exista doar în planuri; inginerii primeau salarii slabe și lucrau în birouri speciale de proiectare închise și institute de cercetare, practic fără perspective de carieră și creștere profesională. Cu toate acestea, rachetele cu pulbere din Rusia sunt produse pur militare.

Acum această zonă este la cerere, dar deja în timpul studiilor mele am realizat că în știința rachetelor orice activitate din proprie inițiativă este aproape imposibilă. De fapt, acesta este serviciul militar. De exemplu, lucrând în industria rachetelor, aș fi complet lipsit de oportunitatea de a dezvolta software independent, chiar și pentru mine, deoarece această activitate este strict reglementată.

Toate produsele software sunt dezvoltate exclusiv la comandă specială și cu aprobarea comisiei de secretizare (acum o divizie a FSTEC). Dezvoltatorul de acolo trebuie să înregistreze și să licențieze literalmente fiecare linie de cod. Tot software-ul este inițial secret la nivel de sarcină. Acest lucru explică parțial de ce software-ul folosit acum pentru a instrui studenții în domeniul rachetelor a fost dezvoltat cel mai târziu în anii 90.

Până la absolvirea institutului, am reușit să lucrez la catedra de teorie a mecanismelor și am început să dezvolt un simulator de proces educațional în C++, așa că am avut un exemplu pentru comparație și am putut cântări argumentele pro și contra. Alegerea a fost evidentă și am început treptat să merg în derivă către IT și robotică. Mecanica aplicată a fost mult mai distractivă decât știința rachetelor: multe probleme nerezolvate, un mediu deschis, lipsa unei industrii de dezvoltare, o nevoie urgentă de software de simulare. În robotică, există o arhitectură nestabilită a software-ului comun și necesitatea de a implementa în mod repetat algoritmi complecși, inclusiv logica fuzzy și începuturile AI. Prin urmare, după primele mele programe de prelucrare a datelor experimentale, aproape niciodată nu m-am întors la rachete (cu excepția proiectului meu de absolvire).

Ca urmare, am avut ocazia să lucrez în specialitatea mea doar patru luni înainte de a absolvi o fabrică de structuri compozite pentru industria aerospațială din apropiere de Moscova. După ce am terminat studiile, nici nu a trebuit să-mi caut un loc de muncă – am venit imediat să predau mecanică aplicată la departamentul de robotică.

De la predare la programare

De la rachete la roboți și ce legătură are Python cu el. Povestea absolvenților GeekBrains
La Congresul Mondial IFTOMM cu membri studenți ai grupului de cercetare (eu în dreapta)

Am lucrat la MSTU în departamentul de eșantionare timp de 10 ani, predând un curs de teoria mecanismelor. A publicat lucrări științifice (vezi sfârșitul articolului), a trecut treptat de la mecanică la CAD și robotică. Și până la urmă s-a hotărât să renunțe la predare. Pentru a ilustra cel mai clar motivele acestei decizii, voi spune că în zece ani cursul pe care l-am predat nu s-a schimbat cu o zecimală. Deși mecanica aplicată, judecând după publicații, a avansat cu foarte, foarte mult succes.

În plus, munca semăna din ce în ce mai mult cu munca birocratică - rapoarte, programe, standarde și tone de hârtie. În asemenea condiții, plăcerea de a preda a fost înlocuită cu raportarea la primirea acestei plăceri, iar acest lucru este mai mult decât neplăcut pentru un specialist practicant.

Și în sfârșit am ajuns la robotică așa: în 2007-2009, împreună cu profesorii A. Golovin și N. Umnov, am început pregătirea primelor lucrări științifice. Acolo a trebuit să folosesc algoritmi pentru a determina traseele obiectelor din fotografia stroboscopică. Din acest subiect este un pas către viziunea artificială, OpenCV și Sistemul de operare robotizat (deși la acea vreme nici măcar nu mă gândeam la o asemenea scară). După aceea, m-am concentrat în cele din urmă pe mecanica aplicată și robotică în cercetare, iar dezvoltarea a devenit o activitate de susținere.

Cu toate acestea, pentru a găsi un nou loc de muncă în robotică, a fost necesar să îmi îmbunătățesc și să-mi completez cunoștințele de programare. La urma urmei, nu am studiat niciodată IT în mod specific, cu excepția unui curs universitar de un an (ObjectPascal și Borland VCL în C++) și m-am bazat pe matematică pentru aspectele teoretice ale dezvoltării.

La început am luat în considerare opțiuni pentru cursuri cu normă întreagă la institutul meu natal. Adevărat, a devenit rapid clar că ar fi aproape imposibil să combinați astfel de studii cu munca la catedră din cauza programului neregulat și a muncii frecvente în afara programului propriu (înlocuire etc.). Așa că am ajuns treptat la ideea de a finaliza cursuri plătite de la distanță. Am venit la GeekBrains la recomandarea profesorilor de la centrul de instruire Mail.ru Technopark, situat în Baumanka, și m-am înscris la cursul Python Programmer.

Cursurile nu au provocat dificultăți, singura problemă a fost că a trebuit constant să le îmbin cu munca la catedră, lucrări științifice și evenimente. Timpul era atât de strâns încât majoritatea legăturilor sociale din afara casei au trebuit să fie sacrificate (din fericire, temporar).

Așa am făcut față volumului de muncă: am rezolvat probleme pe drum. Această abilitate, dezvoltată prin numeroase călătorii de afaceri, s-a dovedit a fi foarte utilă, deoarece fără ea nici măcar nu mi-aș putea duce la bun sfârșit toate temele (și înlocuiește și meditația...). Am învățat să codific din mers folosind laptopul, smartphone-ul și tastaturile wireless pentru smartphone.

Laptopul meu este un Dell Latitude 3470 și orice smartphone cu o diagonală de 5.5 inchi sau mai mult asociat cu o tastatură Logitech K 810 BT va face bine. În general, recomand tuturor produselor Logitech; acestea sunt foarte fiabile și pot rezista la condiții foarte dure de utilizare (și aceasta nu este niciodată o reclamă).

De la rachete la roboți și ce legătură are Python cu el. Povestea absolvenților GeekBrains
Tastatură Logitech K810

Python este foarte propice pentru o astfel de muncă - dacă aveți un editor bun. Un alt hack de programare: utilizați conexiuni la distanță la desktop sau mediul de rulare. Am finalizat mai multe sarcini folosind un server web securizat care rulează Django pe computerul meu de acasă. Am lucrat din tren, folosind software-ul PyDroid, DroidEdit, Maxima.

De ce Python?

Nu a trecut mult până când am încercat să folosesc PHP ca limbaj de scripting de sistem. Inițial am studiat Python pe cont propriu și încetul cu încetul „pentru mine”. Am decis să studiez serios după ce am aflat despre existența unei conexiuni eficiente între Python și C++ la nivel de modul - mi s-a părut interesant să împărtășesc algoritmi optimizați și proceduri de pregătire a datelor în cadrul aceluiași limbaj.

Cel mai simplu exemplu: există un sistem de control pentru o unitate puternică non-standard, implementat pe o mașină încorporată cu procesor RISC, în C++. Managementul are loc printr-un API extern dependent de mașină, care acceptă, de exemplu, comunicarea între subsisteme printr-o rețea. La un nivel înalt, algoritmul de funcționare a unității nu este depanat sau nu este constant (este necesar să se încarce diferiți algoritmi în funcție de procesul de lucru).

Una dintre cele mai bune modalități de a realiza un astfel de sistem este utilizarea API-ului subsistemului C++ specific mașinii ca bază pentru un set de clase Python care rulează pe un interpret multiplatformă. Astfel, dezvoltatorul de nivel superior nu va trebui să țină cont de caracteristicile mașinii încorporate și ale sistemului de operare al acesteia; el va lucra pur și simplu cu clase Python care acționează ca „înveliș” ale API-ului de nivel scăzut.

A trebuit să învăț legarea C++ și Python aproape de la zero. A devenit rapid clar că capabilitățile orientate pe obiecte la un nivel înalt sunt mult mai importante decât la un nivel scăzut. Din această cauză, a trebuit să schimbăm complet abordarea pentru proiectarea și implementarea API-ului, optând pentru clase la nivel Python și partajarea datelor globale în C/C++. Obișnuiți-vă cu generarea de coduri: de exemplu, cadrul ROS în sine generează nume și obiecte în Python, așa că trebuie să țineți cont de diferențele de limbă, în special la tastare, atunci când vă proiectați interfețele.

Lucrul în prezent: Python și Robotul Control Logic

Acum lucrez ca programator Python și C++ la Centrul de Cercetare și Educație în Robotică de la Universitatea Tehnică de Stat din Moscova. Implementăm proiecte de cercetare și instrumente software comandate de departamentele guvernamentale: dezvoltăm manipulatoare cu sisteme tehnice de viziune încorporate și algoritmi de control automat la nivel înalt care sunt independenți de sisteme.

În prezent, programez logica de nivel înalt pentru sistemele de control al roboților în Python; acest limbaj leagă împreună module extrem de optimizate scrise în C++, assembler și Go.

În programarea algoritmilor de control al roboților, sunt utilizate două grupuri mari de algoritmi. Primul dintre ele este implementat direct pe echipament, la un nivel scăzut - acesta este software-ul încorporat al controlerelor de acționare, concentratoarelor de linie de comunicație și subsistemelor de interacțiune cu operatorul.

Algoritmii de aici sunt proiectați pentru o viteză de execuție controlată și o fiabilitate care depășește performanța robotului în ansamblu. Acesta din urmă este obligatoriu, deoarece securitatea întregului sistem depinde de software-ul de control de nivel scăzut.

Al doilea grup de algoritmi determină funcționarea robotului în ansamblu. Acestea sunt programe de nivel înalt, al căror accent în dezvoltare este pus pe claritatea și viteza de implementare a algoritmului, adesea destul de complex. În plus, software-ul de nivel înalt de pe robot este foarte adesea supus modificărilor în timpul procesului de configurare și testare. Pentru o astfel de dezvoltare, limbile interpretate de uz general sunt indispensabile.

Ce cunoștințe sunt necesare pentru o astfel de muncă?

Va fi obligatoriu să studiați limbajul șablon C++ și capacitățile orientate pe obiecte ale lui Python. O abilitate aproape de neînlocuit este abilitatea de a proiecta și documenta API-uri. Ar fi o idee bună să explorați capacitățile bibliotecilor specializate precum Boost::Python. Cei care lucrează cu software de nivel scăzut vor trebui cu siguranță să se ocupe de multithreading (la nivel de kernel) și apeluri de sistem Linux/UNIX/QNX. Pentru a vă îmbunătăți înțelegerea principiilor roboticii, este foarte util să vă familiarizați cu cadrul Sistemului de operare robotizat.

Încerc să am cel puțin un limbaj de programare compilat și interpretat care este în curs de dezvoltare și este solicitat. Aceasta este o strategie câștigătoare pentru lucrul în inginerie, unde există o nevoie constantă de a dezvolta algoritmi foarte specializați (a se citi: neobișnuiți) și de a le implementa în limbaje de compilare. Sarcina de a pregăti date pentru un astfel de software este mult mai plăcut de rezolvat folosind limbaje interpretate. Inițial, setul meu includea C++, Pascal și BASIC, ulterior au fost adăugate PHP și BASH.

Cum instrumentele de dezvoltare pot fi utile în predarea studenților

Principalul plan de dezvoltare profesională este acum să încercăm să ofere o bază științifică pentru utilizarea instrumentelor profesionale de dezvoltare software în pedagogie, să dezvolte și să testeze metode de predare.

Din 2016, am început un amplu experiment de introducere a instrumentelor de dezvoltare - limbaje de programare, IDE-uri, generatoare de documentație, sisteme de control al versiunilor - în practica didactică din învățământul superior. Am reușit acum să obținem rezultate care pot fi generalizate calitativ.

De exemplu, introducerea versiunilor materialelor în procesul educațional îmbunătățește semnificativ calitatea muncii elevilor, totuși, numai cu o condiție obligatorie: studenții să lucreze împreună la proiecte comune. Dezvoltarea metodelor de predare a disciplinelor tehnice folosind instrumente profesionale de dezvoltare software este acum realizată în mod activ de grupul meu de cercetare, format din studenți, solicitanți și studenți ai programelor de învățământ suplimentar la MSTU.

Apropo, nu mi-am părăsit practica didactică - mi-am dezvoltat propriul curs aprofundat cu normă întreagă despre proiectarea și administrarea Linux pentru Institutul de Studii Avansate de la MSTU și îl predau eu.

Lucrări științifice

Munca timpurie
Probleme de planificare a mersului la proiectarea sistemelor de mers cu patru picioare folosind exemplul implementării mersului unui cal (2010)

Cu privire la problematica cinematicii și încărcarea elementului de susținere al piciorului din față al calului în etapa abordării suportului ca componente ale ciclului de lucru al motorului cu patru picioare (2012)

Din ultimul
Aplicație de simulare a producției de angrenaje 3D pentru predarea teoriei mecanismelor și a mașinilor (2019)

Metodă de recunoaștere a obstacolelor structurale și aplicarea acesteia în căutarea obiectelor în relief (2018)

Alte lucrări indexate de baze de date științifice de citare pot fi văzute în profilul meu pe ResearchGate. Majoritatea articolelor sunt dedicate mișcării mașinilor, există lucrări despre pedagogia ingineriei și software educațional.

Sursa: www.habr.com

Adauga un comentariu