Від ракет до робот і до чого тут Python. Історія випускника GeekBrains

Від ракет до робот і до чого тут Python. Історія випускника GeekBrains
Сьогодні ми публікуємо історію переходу до ІТ Андрія Вуколова. Дитяче захоплення космосом колись привело його до ракетобудування в МДТУ. Сувора реальність змусила забути про мрію, але все обернулося ще цікавіше. Вивчення 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 дюймів у парі з клавіатурою Logitech K 810 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

Додати коментар або відгук