Raketlərdən robotlara və Python-un bununla nə əlaqəsi var. GeekBrains Məzunlarının Hekayəsi

Raketlərdən robotlara və Python-un bununla nə əlaqəsi var. GeekBrains Məzunlarının Hekayəsi
Bu gün biz Andrey Vukolovun İT-yə keçidinin hekayəsini dərc edirik. Uşaqlıqdan kosmosa olan həvəsi bir dəfə onu MSTU-da raket elmini öyrənməyə vadar etdi. Sərt reallıq mənə yuxunu unutdurdu, amma hər şey daha da maraqlı oldu. C++ və Python dilini öyrənmək mənə eyni dərəcədə maraqlı iş görmək imkanı verdi: robot idarəetmə sistemlərinin məntiqini proqramlaşdırma.

Start

Bütün uşaqlığım boyu kosmosla məşğul olduğum üçün şanslı idim. Buna görə də, məktəbdən sonra hara oxuyacağımdan bir dəqiqə belə şübhə etmədim və MSTU-ya daxil oldum. Bauman, Raket hərəkəti mühəndisliyi şöbəsinə. Bununla belə, kursun özünün filialı - kosmik raketlərin toz və ya maye mühərrikləri - ümumiyyətlə seçilməli deyildi: 2001-ci ildə xüsusi bir fakültə komissiyası hələ də müraciət edənlərin hədəf qruplarını payladı. Məni barıt çəlləyində tutdular.

O dövrdə "raket bumu" yalnız planlarda mövcud idi; mühəndislər cüzi maaşlar aldılar və karyera və peşəkar yüksəliş üçün praktiki olaraq heç bir perspektivi olmayan xüsusi qapalı dizayn bürolarında və tədqiqat institutlarında işləyirdilər. Yenə də Rusiyadakı toz raketlər sırf hərbi məhsullardır.

İndi bu sahə tələb olunur, amma artıq təhsilim zamanı anladım ki, raket elmində öz təşəbbüsü ilə hər hansı bir fəaliyyət demək olar ki, mümkün deyil. Əslində bu, hərbi xidmətdir. Məsələn, raket sənayesində işləyərkən, bu fəaliyyət ciddi şəkildə tənzimləndiyi üçün, hətta özüm üçün də müstəqil proqram hazırlamaq imkanından tamamilə məhrum olardım.

Bütün proqram məhsulları yalnız xüsusi sifariş əsasında və məxfilik komissiyasının (indiki FSTEC bölməsi) təsdiqi ilə hazırlanır. Oradakı tərtibatçıdan hər bir kod sətirinin sözün əsl mənasında qeydiyyatdan keçməsi və lisenziyası tələb olunur. Bütün proqram təminatı əvvəlcə tapşırıq səviyyəsində gizlidir. Bu, hazırda raket elmi tələbələri hazırlamaq üçün istifadə olunan proqram təminatının nə üçün ən gec 90-cı illərdə işlənib hazırlandığını qismən izah edir.

İnstitutu bitirəndə mən mexanizm nəzəriyyəsi şöbəsində işləməyi bacardım və C++ dilində tədris prosesinin simulyatorunu hazırlamağa başladım, ona görə də müqayisə üçün bir nümunəm var idi və müsbət və mənfi cəhətləri çəkə bildim. Seçim göz qabağında idi və mən yavaş-yavaş İT və robototexnikaya doğru irəliləməyə başladım. Tətbiqi mexanika raket elmindən daha əyləncəli idi: bir çox həll edilməmiş problemlər, açıq mühit, inkişaf sənayesinin olmaması, simulyasiya proqramına təcili ehtiyac. Robot texnikasında ümumi proqram təminatının qeyri-sabit arxitekturası və qeyri-səlis məntiq və süni intellektin başlanğıcları daxil olmaqla mürəkkəb alqoritmlərin dəfələrlə həyata keçirilməsinə ehtiyac var. Buna görə də, eksperimental məlumatların işlənməsi üçün ilk proqramlarımdan sonra, demək olar ki, heç vaxt raketlərə qayıtmadım (məzuniyyət layihəm istisna olmaqla).

Nəticədə Moskva yaxınlığındakı aerokosmik sənaye üçün kompozit konstruksiyalar üzrə zavodda məzun olana qədər cəmi dörd ay öz ixtisasım üzrə işləmək imkanı qazandım. Təhsilimi başa vurduqdan sonra iş axtarmağa belə ehtiyac qalmadı - dərhal robot texnikası şöbəsinə tətbiqi mexanikadan dərs deməyə gəldim.

Tədrisdən proqramlaşdırmaya qədər

Raketlərdən robotlara və Python-un bununla nə əlaqəsi var. GeekBrains Məzunlarının Hekayəsi
IFTOMM Dünya Konqresində tədqiqat qrupunun tələbə üzvləri ilə (sağda mən)

10 il MSTU-da nümunə götürmə şöbəsində çalışmışam, mexanizmlər nəzəriyyəsi kursunu tədris etmişəm. Elmi əsərlər nəşr etdi (məqalənin sonuna baxın), tədricən mexanikadan CAD və robototexnikaya keçdi. Və sonda müəllimliyi tərk etmək qərarına gəldi. Bu qərarın səbəblərini ən aydın şəkildə göstərmək üçün deyim ki, on il ərzində mənim öyrətdiyim təhsil kursu bir onluq yerini dəyişməyib. Tətbiqi mexanika, nəşrlərə görə, çox, çox uğurla irəlilədi.

Bundan əlavə, iş getdikcə daha çox bürokratik işə - hesabatlara, proqramlara, standartlara və tonlarla kağıza bənzəyirdi. Belə bir şəraitdə müəllimlik həzzini bu həzzin alınması haqqında məlumat verməklə əvəz etdi və bu, praktik mütəxəssis üçün daha çox xoşagəlməz haldır.

Və nəhayət, robot texnikasına belə gəldim: 2007-2009-cu illərdə professorlar A. Qolovin və N. Umnovla birlikdə ilk elmi işləri hazırlamağa başladıq. Orada strob fotoqrafiyasından obyektlərin yollarını müəyyən etmək üçün alqoritmlərdən istifadə etməli oldum. Bu mövzudan maşın görmə, OpenCV və Robotik Əməliyyat Sisteminə bir addımdır (baxmayaraq ki, o zaman belə bir miqyas haqqında düşünmürdüm). Bundan sonra mən nəhayət tədqiqatda tətbiqi mexanika və robototexnikaya diqqət yetirdim və inkişaf dəstəkləyici fəaliyyətə çevrildi.

Bununla belə, robototexnika sahəsində yeni bir iş tapmaq üçün proqramlaşdırma biliklərimi təkmilləşdirmək və əlavə etmək lazım idi. Axı mən bir illik universitet kursu (C++-da ObjectPascal və Borland VCL) istisna olmaqla, heç vaxt İT sahəsini xüsusi olaraq öyrənməmişəm və inkişafın nəzəri aspektləri üçün riyaziyyata istinad etmişəm.

Əvvəlcə doğma institutumda əyani kurslar üçün variantları nəzərdən keçirdim. Düzdür, tez bir zamanda aydın oldu ki, qeyri-müntəzəm iş qrafiki və öz cədvəlindən kənar tez-tez işləmək (əvəzetmə və s.) səbəbindən bu cür tədqiqatları kafedradakı işlə birləşdirmək demək olar ki, mümkün olmayacaqdır. Beləliklə, mən tədricən pullu kursları uzaqdan bitirmək fikrinə gəldim. GeekBrains-ə Baumankada yerləşən Mail.ru Texnopark tədris mərkəzinin professorlarının tövsiyəsi ilə gəldim və Python Proqramçısı kursuna yazıldım.

Kurslar heç bir çətinlik yaratmadı, yeganə problem o idi ki, onları daim kafedrada işlə, elmi işlərlə, tədbirlərlə birləşdirməli olurdum. Zaman o qədər sıx idi ki, evdən kənarda olan əksər sosial əlaqələri (xoşbəxtlikdən, müvəqqəti olaraq) qurban vermək lazım idi.

İş yükünün öhdəsindən belə gəldim: yolda problemləri həll etdim. Çoxsaylı işgüzar səfərlər nəticəsində inkişaf etdirilən bu bacarıq çox faydalı oldu, çünki onsuz mən bütün ev tapşırıqlarımı belə yerinə yetirə bilməzdim (və o, həm də meditasiyanı əvəz edir...). Noutbuk, smartfon və simsiz smartfon klaviaturalarından istifadə edərək yolda kodlamağı öyrəndim.

Mənim laptopum Dell Latitude 3470-dir və Logitech K 5.5 BT klaviaturası ilə birləşdirilmiş diaqonalı 810 düym və ya daha çox olan istənilən smartfon bunu edəcək. Ümumiyyətlə, Logitech məhsullarını hər kəsə tövsiyə edirəm, onlar çox etibarlıdırlar və çox sərt istifadə şərtlərinə tab gətirə bilirlər (və bu heç vaxt reklam deyil).

Raketlərdən robotlara və Python-un bununla nə əlaqəsi var. GeekBrains Məzunlarının Hekayəsi
Klaviatura Logitech K810

Python belə iş üçün çox əlverişlidir - əgər yaxşı redaktorunuz varsa. Başqa bir proqramlaşdırma hiyləsi: masa üstü və ya iş vaxtı mühitinə uzaqdan bağlantılardan istifadə edin. Ev kompüterimdə Django ilə işləyən təhlükəsiz veb serverdən istifadə edərək bir neçə tapşırığı yerinə yetirdim. PyDroid, DroidEdit, Maxima proqramlarından istifadə edərək qatardan işlədim.

Niyə Python?

Çox keçmədi ki, PHP-dən sistem skript dili kimi istifadə etməyə çalışdım. Əvvəlcə Python dilini təkbaşına və yavaş-yavaş “özüm üçün” öyrəndim. Python və C++ arasında modul səviyyəsində effektiv əlaqənin mövcudluğunu öyrəndikdən sonra ciddi şəkildə öyrənməyə qərar verdim - optimallaşdırılmış alqoritmləri və məlumatların hazırlanması prosedurlarını eyni dildə paylaşmaq maraqlı görünürdü.

Ən sadə misal: C++ dilində RISC prosessoru ilə quraşdırılmış maşında həyata keçirilən qeyri-standart güclü sürücü üçün idarəetmə sistemi mövcuddur. İdarəetmə, məsələn, şəbəkə üzərindən alt sistemlər arasında əlaqəni dəstəkləyən xarici maşından asılı API vasitəsilə baş verir. Yüksək səviyyədə sürücünün əməliyyat alqoritmi düzəldilmir və ya sabit deyil (iş prosesindən asılı olaraq müxtəlif alqoritmləri yükləmək lazımdır).

Belə bir sistemə nail olmağın ən yaxşı yollarından biri platformalar arası tərcüməçidə işləyən Python sinifləri dəsti üçün əsas kimi maşın üçün xüsusi C++ altsistem API-dən istifadə etməkdir. Beləliklə, yüksək səviyyəli tərtibatçı quraşdırılmış maşının və onun ƏS-nin xüsusiyyətlərini nəzərə almaq məcburiyyətində qalmayacaq, o, sadəcə olaraq aşağı səviyyəli API-nin “sarğıları” kimi çıxış edən Python sinifləri ilə işləyəcək.

C++ və Python bağlamalarını demək olar ki, sıfırdan öyrənməli oldum. Tezliklə aydın oldu ki, yüksək səviyyədə obyekt yönümlü imkanlar aşağı səviyyədən daha vacibdir. Bu səbəbdən biz API-nin dizaynı və tətbiqi yanaşmasını tamamilə dəyişməli, Python səviyyəsində dərsləri seçməli və C/C++-da qlobal məlumatları paylaşmalı olduq. Kod yaratmağa alışın: məsələn, ROS çərçivəsi Python-da adlar və obyektlər yaradır, ona görə də interfeyslərinizi tərtib edərkən dil fərqlərini, xüsusən də yazarkən nəzərə almalısınız.

Hazırda iş: Python və Robot İdarəetmə Məntiqi

İndi mən Moskva Dövlət Texniki Universitetində Robototexnika Tədqiqat və Təhsil Mərkəzində Python və C++ proqramçısı kimi çalışıram. Biz dövlət idarələrinin sifarişi ilə tədqiqat layihələri və proqram vasitələrini həyata keçiririk: biz sistemlərdən asılı olmayan daxili texniki görmə sistemləri və yüksək səviyyəli avtomatik idarəetmə alqoritmləri olan manipulyatorlar hazırlayır.

Hazırda mən Python-da robot idarəetmə sistemləri üçün yüksək səviyyəli məntiq proqramlaşdırıram; bu dil C++, assembler və Go-da yazılmış yüksək optimallaşdırılmış modulları birləşdirir.

Robot idarəetmə alqoritmlərinin proqramlaşdırılmasında iki böyük qrup alqoritmdən istifadə olunur. Onlardan birincisi birbaşa avadanlıqda, aşağı səviyyədə həyata keçirilir - bu, sürücü nəzarətçiləri, rabitə xətti konsentratorları və operatorla qarşılıqlı əlaqə alt sistemlərinin daxili proqram təminatıdır.

Buradakı alqoritmlər idarə olunan icra sürəti və bütövlükdə robotun performansını üstələyən etibarlılıq üçün nəzərdə tutulub. Sonuncu məcburidir, çünki bütün sistemin təhlükəsizliyi aşağı səviyyəli idarəetmə proqramından asılıdır.

İkinci qrup alqoritmlər bütövlükdə robotun işini müəyyən edir. Bunlar yüksək səviyyəli proqramlardır, onların işlənib hazırlanmasında alqoritmin aydınlığı və həyata keçirilməsi sürətinə diqqət yetirilir, çox vaxt olduqca mürəkkəbdir. Bundan əlavə, robotun yüksək səviyyəli proqram təminatı quraşdırma və sınaq prosesində çox vaxt dəyişikliyə məruz qalır. Belə inkişaf üçün ümumi təyinatlı tərcümə dilləri əvəzolunmazdır.

Belə iş üçün hansı bilik lazımdır?

C++ şablon dilini və Python-un obyekt yönümlü imkanlarını öyrənmək məcburi olacaq. Demək olar ki, əvəzolunmaz bacarıq API-ləri dizayn etmək və sənədləşdirmək bacarığıdır. Boost::Python kimi ixtisaslaşmış kitabxanaların imkanlarını araşdırmaq yaxşı olardı. Aşağı səviyyəli proqram təminatı ilə işləyənlər mütləq multithreading (kernel səviyyəsində) və Linux/UNIX/QNX sistem zəngləri ilə məşğul olmalı olacaqlar. Robot texnikasının prinsiplərini başa düşmək üçün Robotik Əməliyyat Sistemi çərçivəsi ilə tanış olmaq çox faydalıdır.

Mən çalışıram ki, inkişaf edən və tələbat olan ən azı bir tərtib edilmiş və tərcümə edilmiş bir proqramlaşdırma dilim olsun. Bu, yüksək ixtisaslaşmış (oxu: qeyri-adi) alqoritmlərin işlənib hazırlanmasına və dillərin tərtibində tətbiqinə daimi ehtiyac olduğu mühəndislik sahəsində işləmək üçün qalib strategiyadır. Bu cür proqram təminatı üçün məlumat hazırlamaq vəzifəsi tərcümə edilmiş dillərdən istifadə etməklə həll etmək üçün daha xoşdur. Əvvəlcə mənim dəstimə C++, Pascal və BASIC daxil idi, daha sonra PHP və BASH əlavə edildi.

İnkişaf vasitələrinin tələbələrin tədrisində necə faydalı ola biləcəyi

Hazırda peşəkar inkişafın əsas planı pedaqogikada peşəkar proqram təminatının işlənib hazırlanması vasitələrinin istifadəsinin elmi əsaslarla təmin edilməsinə çalışmaq, tədris metodlarının işlənib hazırlanması və sınaqdan keçirilməsidir.

2016-cı ildən mən inkişaf vasitələrinin - proqramlaşdırma dillərinin, İDE-lərin, sənədləşmə generatorlarının, versiyaya nəzarət sistemlərinin - ali təhsildə tədris təcrübəsinə daxil edilməsində böyük təcrübəyə başladım. İndi biz keyfiyyətcə ümumiləşdirilə bilən nəticələr əldə etməyə müvəffəq olduq.

Məsələn, tədris prosesinə materialların versiyalaşdırılmasının tətbiqi tələbə işinin keyfiyyətini əhəmiyyətli dərəcədə artırır, lakin yalnız məcburi bir şərtlə: ortaq layihələrdə birlikdə işləyən tələbələr. Peşəkar proqram təminatı alətlərindən istifadə etməklə texniki fənlərin tədrisi metodlarının hazırlanması hazırda MSTU-nun tələbələrindən, abituriyentlərindən və əlavə təhsil proqramlarının tələbələrindən ibarət tədqiqat qrupum tərəfindən fəal şəkildə həyata keçirilir.

Yeri gəlmişkən, mən müəllimlik təcrübəmi tərk etmədim - MSTU-da Təkmilləşdirmələr İnstitutu üçün Linux-un dizaynı və idarə edilməsi üzrə öz dərin tam ştat kursumu hazırladım və onu özüm öyrədirəm.

Elmi iş

Erkən əsərlər
Bir atın yerişinin həyata keçirilməsi nümunəsindən istifadə edərək dörd ayaqlı gəzinti sistemlərinin layihələndirilməsi zamanı yerişin planlaşdırılması məsələləri. (2010)

Dörd ayaqlı hərəkətvericinin iş dövrünün komponentləri kimi dayağa yaxınlaşma mərhələsində atın ön ayağının dayaq elementinin kinematikası və yüklənməsi məsələsinə dair (2012)

Sonuncudan
Mexanizmi və maşın nəzəriyyəsini öyrətmək üçün 3D dişli istehsal simulyasiya tətbiqi (2019)

Struktur maneələrin tanınması üsulu və onun relyef obyektlərinin axtarışında tətbiqi (2018)

Elmi sitat bazaları ilə indeksləşdirilmiş digər işlərə profilimdə baxa bilərsiniz ResearchGate. Məqalələrin əksəriyyəti maşınların hərəkətinə həsr olunub, mühəndis pedaqogikasına və tədris proqramlarına dair əsərlər var.

Mənbə: www.habr.com

Добавить комментарий