Od rakiet po roboty i co ma z tym wspólnego Python. Historia absolwentów GeekBrains

Od rakiet po roboty i co ma z tym wspólnego Python. Historia absolwentów GeekBrains
Dziś publikujemy historię przejścia Andreya Vukolova do IT. Jego dziecięca pasja do kosmosu doprowadziła go kiedyś do studiowania nauk o rakietach na MSTU. Surowa rzeczywistość sprawiła, że ​​zapomniałem o śnie, ale wszystko okazało się jeszcze ciekawsze. Studiowanie C++ i Pythona umożliwiło mi wykonywanie równie ekscytującej pracy: programowanie logiki systemów sterowania robotami.

początek

Miałem szczęście, że przez całe dzieciństwo zachwycałem się kosmosem. Dlatego po szkole ani przez chwilę nie wątpiłem, gdzie powinienem iść na studia, i wstąpiłem do MSTU. Baumana do Katedry Inżynierii Napędów Rakietowych. Jednak sama gałąź kursu – prochowe lub płynne silniki rakiet kosmicznych – wcale nie musiała być wybierana: w 2001 roku specjalna komisja wydziałowa nadal rozdzielała grupy docelowe kandydatów. Zostałem złapany w beczce prochu.

W tamtym czasie „boom rakietowy” istniał tylko w planach, inżynierowie otrzymywali skromne pensje i pracowali w specjalnych, zamkniętych biurach projektowych i instytutach badawczych, praktycznie bez perspektyw na karierę i rozwój zawodowy. Mimo to rakiety prochowe w Rosji są produktami czysto wojskowymi.

Teraz jest zapotrzebowanie na tę dziedzinę, ale już podczas studiów zdałem sobie sprawę, że w naukach rakietowych jakiekolwiek działanie z własnej inicjatywy jest prawie niemożliwe. W rzeczywistości jest to służba wojskowa. Na przykład pracując w branży rakietowej byłbym całkowicie pozbawiony możliwości samodzielnego tworzenia oprogramowania, nawet dla siebie, ponieważ ta działalność jest ściśle regulowana.

Wszystkie produkty programowe są opracowywane wyłącznie na specjalne zamówienie i za zgodą komisji ds. zachowania tajemnicy (obecnie oddział FSTEC). Tam programista ma obowiązek zarejestrować i licencjonować dosłownie każdą linijkę kodu. Całe oprogramowanie jest początkowo tajne na poziomie zadania. Częściowo wyjaśnia to, dlaczego oprogramowanie wykorzystywane obecnie do szkolenia studentów nauk o rakietach powstało najpóźniej w latach 90. XX wieku.

Po ukończeniu instytutu zdążyłem już pracować na wydziale teorii mechanizmów i zacząłem opracowywać symulator procesu edukacyjnego w C++, dzięki czemu miałem przykład do porównania i mogłem rozważyć za i przeciw. Wybór był oczywisty i stopniowo zacząłem dryfować w stronę informatyki i robotyki. Mechanika stosowana dawała dużo więcej frajdy niż nauka o rakietach: wiele nierozwiązanych problemów, otwarte środowisko, brak przemysłu deweloperskiego, pilna potrzeba oprogramowania symulacyjnego. W robotyce panuje nieuregulowana architektura wspólnego oprogramowania i konieczność wielokrotnego wdrażania skomplikowanych algorytmów, w tym logiki rozmytej i początków AI. Dlatego po pierwszych programach do przetwarzania danych eksperymentalnych prawie nigdy nie wróciłem do rakiet (z wyjątkiem projektu dyplomowego).

Dzięki temu miałem okazję pracować w swojej specjalności zaledwie przez cztery miesiące, zanim ukończyłem studia w podmoskiewskiej fabryce konstrukcji kompozytowych dla przemysłu lotniczego. Po ukończeniu studiów nie musiałem nawet szukać pracy – od razu przyszedłem uczyć mechaniki stosowanej na wydziale robotyki.

Od nauczania po programowanie

Od rakiet po roboty i co ma z tym wspólnego Python. Historia absolwentów GeekBrains
Na Światowym Kongresie IFTOMM ze studentami z grupy badawczej (ja po prawej)

Przez 10 lat pracowałem w MSTU w dziale pobierania próbek, prowadząc kurs z teorii mechanizmów. Publikował prace naukowe (patrz koniec artykułu), stopniowo odchodząc od mechaniki w stronę CAD i robotyki. I w końcu zdecydował się porzucić nauczanie. Aby jak najdobitniej zobrazować powody tej decyzji, powiem, że przez dziesięć lat kierunek studiów, który prowadziłem, nie zmienił się ani o jedno miejsce po przecinku. Chociaż mechanika stosowana, sądząc po publikacjach, posunęła się do przodu bardzo, bardzo pomyślnie.

Poza tym praca coraz bardziej przypominała pracę biurokratyczną – raporty, programy, standardy i tony papieru. W takich warunkach przyjemność nauczania została zastąpiona raportowaniem o otrzymaniu tej przyjemności, co jest więcej niż nieprzyjemne dla praktykującego specjalisty.

I w końcu doszedłem do robotyki w ten sposób: w latach 2007-2009 wraz z profesorami A. Golovinem i N. Umnovem zaczęliśmy przygotowywać pierwsze prace naukowe. Tam musiałem użyć algorytmów do wyznaczania ścieżek obiektów z fotografii stroboskopowej. Od tego tematu już tylko krok do widzenia maszynowego, OpenCV i Robotic Operating System (choć wtedy nawet nie myślałem o takiej skali). Potem w końcu skupiłem się na mechanice stosowanej i robotyce w badaniach, a rozwój stał się działalnością wspierającą.

Aby jednak znaleźć nową pracę w robotyce, konieczne było udoskonalenie i uzupełnienie mojej wiedzy programistycznej. Przecież nigdy nie studiowałem informatyki, z wyjątkiem rocznych kursów uniwersyteckich (ObjectPascal i Borland VCL w C++) i polegałem na matematyce w teoretycznych aspektach programowania.

Początkowo rozważałem możliwość podjęcia studiów stacjonarnych w moim rodzimym instytucie. Co prawda, szybko okazało się, że łączenie takich studiów z pracą na wydziale będzie prawie niemożliwe ze względu na nieregularny grafik i częstą pracę poza własnym harmonogramem (zastępstwo itp.). Stopniowo więc wpadłem na pomysł ukończenia płatnych kursów zdalnie. Do GeekBrains trafiłem z polecenia profesorów z centrum szkoleniowego Mail.ru Technopark zlokalizowanego w Baumance i zapisałem się na kurs programisty Pythona.

Zajęcia nie sprawiały żadnych trudności, jedynym problemem było to, że ciągle musiałam je łączyć z pracą w katedrze, pracami naukowymi i wydarzeniami. Czasu było tak mało, że większość kontaktów towarzyskich poza domem trzeba było poświęcić (na szczęście tymczasowo).

Tak radziłem sobie z nawałem pracy: rozwiązywałem problemy w drodze. Umiejętność ta, rozwinięta podczas licznych podróży służbowych, okazała się bardzo przydatna, bez niej nie byłabym w stanie nawet odrobić wszystkich zadań domowych (a zastępuje ona też medytację...). Nauczyłem się kodować w drodze, korzystając z laptopa, smartfona i bezprzewodowych klawiatur smartfonów.

Mój laptop to Dell Latitude 3470 i poradzi sobie każdy smartfon o przekątnej 5.5 cala lub większej w połączeniu z klawiaturą Logitech K 810 BT. Generalnie polecam każdemu produkty Logitecha, są bardzo niezawodne i wytrzymują bardzo trudne warunki użytkowania (i to nigdy nie jest reklama).

Od rakiet po roboty i co ma z tym wspólnego Python. Historia absolwentów GeekBrains
Klawiatura Logitech K810

Python bardzo sprzyja takiej pracy - jeśli masz dobrego edytora. Kolejny hack programistyczny: użyj zdalnych połączeń z komputerem stacjonarnym lub środowiskiem wykonawczym. Wykonałem kilka zadań, korzystając z bezpiecznego serwera WWW, na którym działa Django na moim komputerze domowym. Pracowałem z pociągu, korzystając z oprogramowania PyDroid, DroidEdit, Maxima.

Dlaczego Python?

Nie trwało długo, zanim próbowałem używać PHP jako systemowego języka skryptowego. Początkowo uczyłem się Pythona samodzielnie i stopniowo „dla siebie”. Zdecydowałem się na naukę na poważnie po tym, jak dowiedziałem się o istnieniu efektywnego połączenia Pythona z C++ na poziomie modułowym - ciekawe wydało mi się dzielenie zoptymalizowanych algorytmów i procedur przygotowania danych w ramach tego samego języka.

Najprostszy przykład: istnieje system sterowania niestandardowym mocnym dyskiem, zaimplementowany na maszynie wbudowanej z procesorem RISC, w języku C++. Zarządzanie odbywa się poprzez zewnętrzny, zależny od maszyny interfejs API, który obsługuje na przykład komunikację pomiędzy podsystemami poprzez sieć. Na wysokim poziomie algorytm działania napędu nie jest debugowany lub nie jest stały (konieczne jest ładowanie różnych algorytmów w zależności od procesu pracy).

Jednym z najlepszych sposobów osiągnięcia takiego systemu jest użycie specyficznego dla komputera interfejsu API podsystemu C++ jako podstawy dla zestawu klas Pythona działających w wieloplatformowym interpreterze. Tym samym programista najwyższego poziomu nie będzie musiał brać pod uwagę cech wbudowanej maszyny i jej systemu operacyjnego; będzie po prostu pracował z klasami Pythona, które pełnią rolę „opakowania” niskopoziomowego API.

Musiałem nauczyć się wiązania C++ i Pythona niemal od zera. Szybko stało się jasne, że zdolności obiektowe na wysokim poziomie są znacznie ważniejsze niż na niskim poziomie. Z tego powodu musieliśmy całkowicie zmienić podejście do projektowania i wdrażania API, stawiając na zajęcia na poziomie Pythona i udostępnianie danych globalnych w C/C++. Przyzwyczaj się do generowania kodu: na przykład framework ROS sam generuje nazwy i obiekty w Pythonie, więc projektując interfejsy, musisz wziąć pod uwagę różnice językowe, szczególnie w pisaniu.

Praca w teraźniejszości: Python i logika sterowania robotami

Obecnie pracuję jako programista Python i C++ w Centrum Badań i Edukacji Robotyki na Moskiewskim Państwowym Uniwersytecie Technicznym. Realizujemy projekty badawcze i narzędzia programowe na zlecenie ministerstw: opracowujemy manipulatory z wbudowanymi technicznymi systemami wizyjnymi i niezależnymi od systemów algorytmami automatycznego sterowania wysokiego poziomu.

Obecnie programuję logikę wysokiego poziomu dla systemów sterowania robotami w języku Python, który łączy ze sobą wysoce zoptymalizowane moduły napisane w C++, asemblerze i Go.

W programowaniu algorytmów sterowania robotami wykorzystuje się dwie duże grupy algorytmów. Pierwszy z nich realizowany jest bezpośrednio na sprzęcie, na niskim poziomie – jest to wbudowane oprogramowanie sterowników napędów, koncentratorów linii komunikacyjnych i podsystemów interakcji operatorskiej.

Algorytmy zostały zaprojektowane z myślą o kontrolowanej szybkości wykonywania i niezawodności, która przewyższa wydajność robota jako całości. To drugie jest obowiązkowe, ponieważ bezpieczeństwo całego systemu zależy od oprogramowania sterującego niskiego poziomu.

Druga grupa algorytmów determinuje działanie robota jako całości. Są to programy wysokiego poziomu, których rozwój kładzie nacisk na przejrzystość i szybkość implementacji algorytmu, często dość skomplikowanego. Ponadto oprogramowanie wysokiego poziomu robota bardzo często podlega zmianom podczas procesu konfiguracji i testowania. Do takiego rozwoju niezbędne są języki interpretowane ogólnego przeznaczenia.

Jaka wiedza jest potrzebna do takiej pracy?

Obowiązkowe będzie przestudiowanie języka szablonów C++ i obiektowych możliwości Pythona. Niemal niezastąpioną umiejętnością jest umiejętność projektowania i dokumentowania API. Dobrym pomysłem byłoby zbadanie możliwości wyspecjalizowanych bibliotek, takich jak Boost::Python. Ci, którzy pracują z oprogramowaniem niskiego poziomu, z pewnością będą mieli do czynienia z wielowątkowością (na poziomie jądra) i wywołaniami systemowymi Linux/UNIX/QNX. Aby lepiej zrozumieć zasady robotyki, bardzo przydatne jest zapoznanie się ze strukturą Robotic Operating System.

Staram się mieć przynajmniej jeden skompilowany i jeden interpretowany język programowania, który się rozwija i jest na niego popyt. To zwycięska strategia w pracy inżynierskiej, gdzie istnieje ciągła potrzeba opracowywania wysoce wyspecjalizowanych (czytaj: nietypowych) algorytmów i implementowania ich w językach kompilacyjnych. Zadanie przygotowania danych dla takiego oprogramowania jest znacznie przyjemniejsze do rozwiązania przy użyciu języków interpretowanych. Początkowo mój zestaw zawierał C++, Pascal i BASIC, później dodano PHP i BASH.

Jak narzędzia programistyczne mogą być przydatne w nauczaniu uczniów

Głównym planem rozwoju zawodowego jest obecnie próba zapewnienia naukowych podstaw do wykorzystania profesjonalnych narzędzi tworzenia oprogramowania w pedagogice, w celu opracowania i przetestowania metod nauczania.

Od 2016 roku rozpocząłem duży eksperyment we wprowadzaniu narzędzi programistycznych – języków programowania, IDE, generatorów dokumentacji, systemów kontroli wersji – do praktyki pedagogicznej w szkolnictwie wyższym. Udało nam się obecnie uzyskać wyniki, które można jakościowo uogólnić.

Przykładowo wprowadzenie wersjonowania materiałów do procesu edukacyjnego znacząco poprawia jakość pracy uczniów, jednak tylko pod warunkiem obowiązkowym: wspólna praca uczniów nad wspólnymi projektami. Rozwój metod nauczania dyscyplin technicznych z wykorzystaniem profesjonalnych narzędzi do tworzenia oprogramowania jest obecnie aktywnie prowadzony przez moją grupę badawczą, składającą się ze studentów, kandydatów i studentów dodatkowych programów edukacyjnych na MSTU.

Nawiasem mówiąc, nie porzuciłem praktyki nauczycielskiej - opracowałem własny, pogłębiony kurs stacjonarny dotyczący projektowania i administrowania Linuksem dla Instytutu Studiów Zaawansowanych MSTU i sam go uczę.

Prace naukowe

Wczesne prace
Zagadnienia planowania chodu przy projektowaniu czteronożnych systemów chodu na przykładzie realizacji chodu konia (2010 g.)

Zagadnienie kinematyki i obciążenia elementu nośnego przedniej nogi konia w fazie dochodzenia do podpory jako składowe cyklu pracy czworonożnego poruszacza (2012 g.)

Od ostatniego
Aplikacja do symulacji produkcji przekładni 3D do nauczania mechanizmów i teorii maszyn (2019 g.)

Metoda rozpoznawania przeszkód konstrukcyjnych i jej zastosowanie w poszukiwaniu obiektów reliefowych (2018 g.)

Inne prace indeksowane w naukowych bazach cytowań można zobaczyć w moim profilu na ResearchGATE. Większość artykułów poświęcona jest ruchowi maszyn, znajdują się prace z zakresu pedagogiki inżynierskiej i oprogramowania edukacyjnego.

Źródło: www.habr.com

Dodaj komentarz