Ад ракет да робатаў і пры чым тут Python. Гісторыя выпускніка GeekBrains

Ад ракет да робатаў і пры чым тут Python. Гісторыя выпускніка GeekBrains
Сёння мы публікуем гісторыю пераходу ў IT Андрэя Вукалова. Дзіцячае захапленне космасам некалі прывяло яго на ракетабудаванне ў МДТУ. Суровая рэальнасць прымусіла забыцца пра мару, але ўсё абярнулася яшчэ цікавей. Вывучэнне C++ і Python дазволіла займацца не меней займальнай працай: праграмаваннем логікі сістэм кіравання робатамі.

Пачатак

Мне пашанцавала ўсё дзяцінства трызніць космасам. Таму пасля школы я ні хвіліны не сумняваўся, куды мне пайсці вучыцца, і паступіў у МДТУ ім. Баўмана, на кафедру ракетнага рухавікабудавання. Зрэшты, саму галіну курса - парахавыя або вадкасныя рухавікі касмічных ракет - выбіраць наогул не даводзілася: па мэтавым групам абітурыентаў у 2001 годзе яшчэ размяркоўвала спецыяльная факультэцкая камісія. Я трапіў "у бочку з порахам".

На той момант "ракетны бум" існаваў толькі ў планах, інжынеры атрымлівалі мізэрныя заробкі і працавалі ў спецыяльных закрытых КБ і НДІ практычна без перспектыў кар'ернага і прафесійнага росту. Усё ж такі, парахавыя ракеты ў Расіі - прадукцыя выключна ваенная.

Цяпер гэты кірунак запатрабаваны, але ўжо падчас вучобы я зразумеў, што ў ракетабудаванні амаль немагчымая любая дзейнасць па ўласнай ініцыятыве. Фактычна, гэта вайсковая служба. Напрыклад, працуючы ў ракетнай галіне, я быў бы цалкам пазбаўлены магчымасці самастойна распрацоўваць ПЗ, нават для сябе, бо гэтая дзейнасць строга рэгламентуецца.

Усе праграмныя прадукты распрацоўваюцца выключна па спецзаказе і з зацвярджэннем камісіі па сакрэтнасці (зараз гэта падраздзяленне ФСТЭК). Распрацоўнік тамака абавязаны рэгістраваць і ліцэнзаваць літаральна кожны радок кода. Усё ПЗ першапачаткова з'яўляецца сакрэтным на ўзроўні задач. Збольшага гэта тлумачыць, чаму ПЗ, выкарыстоўванае зараз для навучання студэнтаў-ракетабудаўнікоў, распрацавана максімум у 90-е гады ХХ стагоддзі.

Да моманту заканчэння інстытута я паспеў папрацаваць на кафедры тэорыі механізмаў і прыступіць да распрацоўкі навучальнага сімулятара тэхпрацэсу на З++, так што меў прыклад для параўнання, і мог узважваць усе "за" і "супраць". Выбар быў відавочны, і я пакрысе пачаў дрэйфаваць у бок IT і робататэхнікі. У прыкладной механіцы было куды весялей, чым у ракетабудаванні: шмат нявырашаных задач, адкрытае асяроддзе, адсутнасць індустрыі распрацоўкі, вострая патрэба ў ПЗ для імітацыйнага мадэлявання. У робататэхніцы - неўстояная архітэктура распаўсюджанага ПЗ і неабходнасць шматкроць рэалізоўваць складаныя алгарытмы, у тым ліку, невыразную логіку і зародкі ІІ. Таму пасля сваіх першых праграм для апрацоўкі эксперыментальных дадзеных, я ўжо амаль не вяртаўся да ракет (за выключэннем дыпломнага праекту).

У выніку, па спецыяльнасці давялося прапрацаваць усяго толькі чатыры месяцы перад дыпломам на падмаскоўным заводзе кампазітных канструкцый для аэракасмічнай галіны. Пасля заканчэння навучання працу нават не давялося шукаць - адразу прыйшоў выкладаць прыкладную механіку на робататэхнічны факультэт.

Ад выкладання да праграмавання

Ад ракет да робатаў і пры чым тут Python. Гісторыя выпускніка GeekBrains
На Сусветным кангрэсе IFTOMM са студэнтамі - членамі даследчай групы (я справа)

У МДТУ на пробататэхнічным факультэце я прапрацаваў 10 гадоў, чытаў курс тэорыі механізмаў. Публікаваў навуковыя працы (гл. у канцы артыкула), паступова рухаўся з механікі ў бок САПР і робататэхнікі. І ў рэшце рэшт прыняў рашэнне пакінуць выкладчыцкую дзейнасць. Каб найбольш яскрава праілюстраваць прычыны такога рашэння, скажу, што за дзясятак гадоў чытаны мной курс навучання не змяніўся ні на коску. Хаця прыкладная механіка, мяркуючы па публікацыях, ішла наперад вельмі і вельмі паспяхова.

Да таго ж, праца ўсё больш нагадвала чыноўніцкую - справаздачы, праграмы, стандарты і тоны паперы. У такіх умовах задавальненне ад выкладчыцкай дзейнасці аказалася заменена справаздачнасцю аб атрыманні гэтага задавальнення, а гэта для практыкуючага спецыяліста больш чым непрыемна.

А канчаткова ў робататэхніку я прыйшоў так: у 2007-2009 гадах сумесна з прафесарамі А. Галавіным і М. Умновым мы пачалі рыхтаваць першыя навуковыя працы. Там мне прыйшлося выкарыстоўваць алгарытмы для вызначэння траекторый руху аб'ектаў па страбаскапічнай фатаграфіі. Ад гэтай тэмы адзін крок да машыннага зроку, OpenCV і Robotic Operating System (праўда, тады я нават не падумваў аб такіх маштабах). Пасля гэтага я ўжо канчаткова засяродзіўся на прыкладной механіцы і робататэхніцы ў даследаваннях, а распрацоўка стала дапаможнай дзейнасцю.

Аднак для пошуку новай працы ў робататэхніцы неабходна было ўдасканальваць і дапоўніць мае веды ў праграмаванні. Бо спецыяльна IT, акрамя гадавога ўніверсітэцкага курса (ObjectPascal і Borland VCL на C ++) нідзе не вывучаў, у тэарэтычных аспектах распрацоўкі належыў на матэматыку.

Спачатку разглядаў варыянты вочных курсаў у родным інстытуце. Праўда, вельмі хутка высветлілася, што сумяшчаць такую ​​вучобу з працай на кафедры будзе практычна немагчыма з-за ірванага графіка і частай працы па-за ўласным раскладам (замены і да т.п.). Так паступова прыйшоў да ідэі скончыць платныя курсы выдалена. На GeekBrains выйшаў па рэкамендацыі прафесараў з навучальнага цэнтра "Тэхнапарк Mail.ru", размешчанага ў Баўманцы, і паступіў на курс "Праграміст Python".

Курсы цяжкасцяў не выклікалі, адна праблема - пастаянна даводзілася сумяшчаць: з працай на кафедры, навуковымі працамі і мерапрыемствамі. Часу не хапала так моцна, што прыйшлося ахвяраваць (на шчасце, часова) большасцю сацыяльных сувязяў па-за домам.

Спраўляўся з нагрузкамі так: вырашаў задачы ў дарозе. Гэты навык, развіты шматлікімі камандзіроўкамі, аказаўся вельмі карысны, бо без яго я нават не змог бы выканаць усе дамашнія заданні (а яшчэ ён замяняе медытацыю…). Я прывучыўся праграмаваць у шляху, выкарыстоўваючы ноўтбук, смартфон і бесправадныя клавіятуры для смартфона.

Наўтбук у мяне Dell Latitude 3470, а смартфон падыдзе любы з дыяганаллю ад 5.5/810 цаляў у пары з клавіятурай Logitech K XNUMX BT. Наогул усім рэкамендую прадукцыю Logitech, яна вельмі надзейная і пераносіць вельмі суровыя ўмовы выкарыстання (і гэта ні разу не рэклама).

Ад ракет да робатаў і пры чым тут Python. Гісторыя выпускніка GeekBrains
Клавіятура Logitech K810

Python да такой працы вельмі размяшчае – пры наяўнасці добрага рэдактара. Яшчэ адзін лайфхак, які тычыцца праграмавання: выкарыстоўваць выдаленыя падлучэнні да працоўнага стала ці асяроддзю выканання. Некалькі заданняў я выканаў, выкарыстоўваючы абаронены вэб-сервер з запушчаным Django на хатнім кампутары. Працаваў пры гэтым з цягніка, праграмнае забеспячэнне выкарыстоўваў PyDroid, DroidEdit, Maxima.

Чаму менавіта Python?

Зусім нядоўга я спрабаваў выкарыстоўваць PHP як сістэмную скрыптовую мову. Python першапачаткова самастойна і пакрысе вывучаў "для сябе". Вучыць сур'ёзна вырашыў пасля таго, як даведаўся пра існаванне эфектыўнай звязкі паміж Python і C++ на ўзроўні модуляў – падалося цікавым падзяліць паміж сабой аптымізаваныя алгарытмы і працэдуры падрыхтоўкі дадзеных у рамках адной мовы.

Самы просты прыклад: ёсць сістэма кіравання нестандартным магутным прывадам, рэалізаваная на ўбудаванай машыне з RISC-працэсарам, на З++. Кіраванне ідзе праз вонкавы машынна-залежны API, які падтрымлівае, напрыклад, сувязь паміж падсістэмамі па сетцы. На высокім узроўні алгарытм працы прывада не адладжаны, альбо не сталы (патрэбна загрузка розных алгарытмаў у залежнасці ад працоўнага працэсу).

Адзін з лепшых спосабаў атрымаць такую ​​сістэму – выкарыстоўваць машынна-спецыфічны API З++-падсістэмы ў якасці асновы набору класаў Python, якія выкарыстоўваюцца на кросплатформавым інтэрпрэтатары. Такім чынам, у распрацоўніка верхняга ўзроўня не паўстане неабходнасці ўлічваць асаблівасці ўбудаванай машыны і яе АС, ён проста будзе працаваць з класамі Python, якія выступаюць абгорткамі нізкаўзроўневага API.

Мне прыйшлося практычна з нуля вывучыць звязванне З і Python. Хутка прыйшло разуменне таго, што аб'ектна-арыентаваныя магчымасці на высокім узроўні значна важней, чым на нізкім. З-за гэтага прыйшлося цалкам змяніць падыход да праектавання і рэалізацыі API, зрабіўшы выбар у карысць класаў на ўзроўні Python і падзяляных глабальных дадзеных на З/З++. Абвыкнуць да кодогенерации: напрыклад, фреймворк ROS сам генеруе імёны і аб'екты на Python, так што даводзіцца ўлічваць адрозненні моў, асабліва ў тыпізацыі, праектуючы свае інтэрфейсы.

Праца ў сучаснасці: Python і логіка сістэм кіравання робатамі

Цяпер я працую праграмістам на Python і C++ у навукова-навучальным цэнтры "Робататэхніка" пры МДТУ. Мы рэалізуем навукова-даследчыя праекты і софтавы інструментарый па заказе дзяржаўных ведамстваў: распрацоўваем маніпулятары з убудаванымі сістэмамі тэхнічнага зроку і высокаўзроўневыя алгарытмы аўтаматычнага кіравання, незалежныя ад сістэм.

Цяпер я праграмую на Python высокаўзроўневую логіку сістэм кіравання робатамі, гэта мова звязвае паміж сабой высокааптымізаваныя модулі, напісаныя на C++, асэмблеры і Go.

У праграмаванні алгарытмаў кіравання робатамі выкарыстоўваюцца дзве вялікія групы алгарытмаў. Першая з іх рэалізуецца непасрэдна на абсталяванні, на нізкім узроўні – гэта убудаванае ПА кантролераў прывада, канцэнтратараў ліній сувязі, падсістэм узаемадзеяння з аператарам.

Алгарытмы тут праектуюцца ў разліку на кантраляваную хуткасць выканання і надзейнасць, якая перавышае паказчыкі робата ў цэлым. Апошняе абавязкова, бо ад ПА нізкаўзроўневага кіравання залежыць бяспека ўсёй сістэмы.

Другая група алгарытмаў вызначае працу робата ў цэлым. Гэта высокаўзроўневыя праграмы, акцэнт у распрацоўцы якіх робіцца на зразумеласць і шпаркасць рэалізацыі алгарытму, часцяком, досыць складанага. Акрамя таго, высокаўзроўневы ПЗ на робаце вельмі часта падвяргаецца змене ў працэсе наладкі і тэсціравання. Для такой распрацоўкі незаменныя інтэрпрэтаваныя мовы агульнага прызначэння.

Якія веды патрэбны для падобнай працы

Абавязковым будзе вывучэнне мовы шаблонаў C++, аб'ектна-арыентаваных магчымасцяў Python. Практычна незаменны навык - уменне праектаваць і дакументаваць API. Не лішнім будзе вывучыць магчымасці спецыялізаваных бібліятэк, накшталт Boost::Python. Тым, хто працуе з нізкаўзроўневым ПА, абавязкова прыйдзецца сутыкнуцца са шматструменнасцю (прычым, на ўзроўні ядра), сістэмнымі выклікамі Linux/UNIX/QNX. Каб падцягнуць разуменне прынцыпаў пабудовы робататэхнікі вельмі карысна азнаёміцца ​​з фрэймворкам Robotic Operating System.

Я стараюся мець у актыве як мінімум адну кампіляцыйную і адну інтэрпрэтаваную мову праграмавання, якая развіваецца і запатрабаваная. Гэта выйгрышная стратэгія для працы ў інжынерыі, дзе ўвесь час патрабуецца распрацоўваць вузкаспецыялізаваныя (чытай: незвычайныя) алгарытмы і рэалізоўваць іх на кампіляцыйных мовах. Задачу ж падрыхтоўкі дадзеных для такога ПЗ значна прыемней вырашаць, выкарыстоўваючы інтэрпрэтаваныя мовы. Першапачаткова ў мой набор уваходзілі З++, Pascal і BASIC, пазней дадаліся PHP і BASH.

Як інструменты распрацоўкі могуць спатрэбіцца ў навучанні студэнтаў

Асноўны план на прафесійнае развіццё цяпер - паспрабаваць падвесці навуковую базу пад прымяненне інструментаў прафесійнай распрацоўкі ПЗ у педагогіцы, распрацаваць і выпрабаваць методыку выкладання.

З 2016 года я пачаў вялікі эксперымент па ўкараненні інструментаў распрацоўкі - моў праграмавання, IDE, генератараў дакументацыі, сістэм кантролю версій - у педагагічную практыку ў вышэйшай школе. Цяпер ужо ўдалося атрымаць вынікі, якія паддаюцца якаснаму абагульненню.

Напрыклад, увядзенне версіявання матэрыялаў у навучальны працэс істотна павышае якасць студэнцкіх работ, аднак, толькі пры абавязковай умове: сумеснай рабоце студэнтаў над праектамі, якія падзяляюцца. Распрацоўка методыкі выкладання тэхнічных дысцыплін з ужываннем інструментаў прафесійнай распрацоўкі ПЗ зараз актыўна вядзецца сіламі маёй даследчай групы, якая складаецца са студэнтаў, абітурыентаў і слухачоў праграм дадатковай адукацыі МДТУ.

Выкладчыцкую практыку я, дарэчы, не пакінуў – распрацаваў аўтарскі паглыблены вочны курс па прыладзе і адміністраванню Linux для інстытута падвышэння кваліфікацыі МДТУ, і сам выкладаю.

Навуковыя працы

Раннія працы
Пытанні планавання хады пры праектаванні чатырохногіх крочачых сістэм на прыкладзе рэалізацыі канём алюра (2010 г.)

Да пытання аб кінематыцы і нагружанні апорнага элемента перадпакоя ногі каня ў стадыі падводу да апоры як складнікаў працоўнага цыклу чатырохногага рухавіка (2012 г.)

З апошняга
3D-дадатак для мадэлявання вытворчасці зубчастых колаў для навучання тэорыі механізмаў і машын (2019 г.)

Метад распазнання структурных перашкод і яго прымяненне пры пошуку аб'ектаў рэльефу (2018 г.)

Іншыя працы, якія індэксуюцца базамі навуковага цытавання, можна ўбачыць у маім профілі на ResearchGate. Большасць артыкулаў прысвечана руху машын, ёсць працы па інжынернай педагогіцы і навучальным ПЗ.

Крыніца: habr.com

Дадаць каментар