Raketalardan robotlargacha va Pythonning bunga nima aloqasi bor. GeekBrains bitiruvchilari hikoyasi

Raketalardan robotlargacha va Pythonning bunga nima aloqasi bor. GeekBrains bitiruvchilari hikoyasi
Bugun biz Andrey Vukolovning IT-ga o'tishi haqidagi hikoyani nashr etamiz. Uning bolalikdagi koinotga bo'lgan ishtiyoqi uni MSTUda raketa fanini o'rganishga olib keldi. Qattiq haqiqat meni tushni unutishga majbur qildi, lekin hamma narsa yanada qiziqarli bo'ldi. C++ va Python tilini o'rganish menga xuddi shunday qiziqarli ishni bajarishga imkon berdi: robotlarni boshqarish tizimlarining mantig'ini dasturlash.

start

Bolaligim davomida kosmos haqida maqtanish baxtiga muyassar bo'ldim. Shuning uchun, maktabdan keyin men qaerga o'qishim kerakligi haqida bir daqiqa shubhalanmadim va MSTUga o'qishga kirdim. Bauman, raketa qo'zg'alish muhandisligi bo'limiga. Biroq, kursning o'zi - kosmik raketalarning kukunli yoki suyuq dvigatellari - umuman tanlanishi shart emas edi: 2001 yilda maxsus fakultet komissiyasi hali ham abituriyentlarning maqsadli guruhlarini taqsimlagan. Men porox solingan bochkaga ilindim.

O'sha paytda "raketa portlashi" faqat rejalarda mavjud edi; muhandislar kam maosh oldilar va maxsus yopiq konstruktorlik byurolari va ilmiy-tadqiqot institutlarida ishladilar, mansab va kasbiy o'sish uchun deyarli istiqbollari yo'q edi. Shunga qaramay, Rossiyadagi kukunli raketalar faqat harbiy mahsulotlardir.

Hozir bu soha talabga ega, ammo o'qish paytida men raketa fanida o'z tashabbusi bilan har qanday faoliyat deyarli mumkin emasligini angladim. Aslida, bu harbiy xizmat. Masalan, raketa sanoatida ishlayotgan bo'lsam, men o'zim uchun dasturiy ta'minotni mustaqil ravishda ishlab chiqish imkoniyatidan butunlay mahrum bo'lardim, chunki bu faoliyat qat'iy tartibga solinadi.

Barcha dasturiy mahsulotlar faqat maxsus buyurtma asosida va maxfiylik komissiyasi (hozirgi FSTEC bo'limi) roziligi bilan ishlab chiqilgan. U erda ishlab chiquvchi kodning har bir qatorini ro'yxatdan o'tkazishi va litsenziyalashi kerak. Barcha dasturiy ta'minot dastlab vazifa darajasida maxfiydir. Bu qisman nega endi raketa fanlari bo'yicha talabalarni o'qitish uchun foydalaniladigan dasturiy ta'minot oxirgi 90-yillarda ishlab chiqilganligini tushuntiradi.

Institutni tugatganimda, men mexanizmlar nazariyasi kafedrasida ishlashga muvaffaq bo'ldim va C++ tilida o'quv jarayoni simulyatorini ishlab chiqishni boshladim, shuning uchun menda taqqoslash uchun misol bor edi va ijobiy va salbiy tomonlarini ko'rib chiqa oldim. Tanlov aniq edi va men asta-sekin IT va robototexnika sohasiga o'ta boshladim. Amaliy mexanika raketa fanidan ko'ra qiziqarliroq edi: ko'plab hal qilinmagan muammolar, ochiq muhit, rivojlanish sanoatining etishmasligi, simulyatsiya dasturiga shoshilinch ehtiyoj. Robototexnika sohasida umumiy dasturiy ta'minotning beqaror arxitekturasi va murakkab algoritmlarni, shu jumladan loyqa mantiq va AI boshlanishini qayta-qayta amalga oshirish zarurati mavjud. Shuning uchun, eksperimental ma'lumotlarni qayta ishlash bo'yicha birinchi dasturlarimdan so'ng, men deyarli hech qachon raketalarga qaytmadim (bitiruv loyiham bundan mustasno).

Natijada, Moskva yaqinidagi aviatsiya sanoati uchun kompozit konstruksiyalar ishlab chiqaruvchi zavodda o‘qishni tugatgunga qadar atigi to‘rt oy o‘z mutaxassisligim bo‘yicha ishlash imkoniyatiga ega bo‘ldim. O'qishni tugatgandan so'ng, men ish qidirishga ham hojat qolmadi - men darhol robototexnika bo'limiga amaliy mexanikadan dars berish uchun keldim.

O'qitishdan dasturlashgacha

Raketalardan robotlargacha va Pythonning bunga nima aloqasi bor. GeekBrains bitiruvchilari hikoyasi
IFTOMM Jahon Kongressida tadqiqot guruhining talaba a'zolari bilan (men o'ngda)

Men MSTUda namuna olish bo'limida 10 yil ishladim, mexanizmlar nazariyasi kursidan dars berdim. U ilmiy ishlarni nashr etdi (maqolaning oxiriga qarang), asta-sekin mexanikadan SAPR va robototexnikaga o'tdi. Va oxirida u o'qituvchilikni tark etishga qaror qildi. Ushbu qarorning sabablarini aniqroq ko'rsatish uchun aytamanki, o'n yil ichida men o'qigan o'quv kursi bitta kasrni o'zgartirmagan. Garchi amaliy mexanika, nashrlarga ko'ra, juda va juda muvaffaqiyatli oldinga siljishdi.

Bundan tashqari, ish ko'proq byurokratik ish - hisobotlar, dasturlar, standartlar va tonna qog'ozlarga o'xshardi. Bunday sharoitda o'qitish zavqi bu zavqni olish to'g'risida xabar berish bilan almashtirildi va bu amaliyotchi mutaxassis uchun ko'proq yoqimsizdir.

Va nihoyat robototexnikaga shunday keldim: 2007-2009 yillarda professorlar A.Golovin va N.Umnov bilan birgalikda ilk ilmiy ishlarni tayyorlay boshladik. U erda men strob fotosuratidan ob'ektlarning yo'llarini aniqlash uchun algoritmlardan foydalanishim kerak edi. Ushbu mavzudan mashina ko'rish, OpenCV va Robotik operatsion tizimga bir qadam (garchi o'sha paytda men bunday miqyos haqida o'ylamagan edim). Shundan so'ng, men nihoyat tadqiqotda amaliy mexanika va robototexnikaga e'tibor qaratdim va rivojlanish yordamchi faoliyatga aylandi.

Biroq, robototexnika bo'yicha yangi ish topish uchun dasturlash bo'yicha bilimimni yaxshilash va to'ldirish kerak edi. Axir men hech qachon ITni maxsus o'rganmaganman, bir yillik universitet kursidan tashqari (C++ da ObjectPascal va Borland VCL) va rivojlanishning nazariy jihatlari uchun matematikaga tayanganman.

Avvaliga men tug'ilgan institutimda kunduzgi kurslar variantlarini ko'rib chiqdim. To'g'ri, tartibsiz jadval va o'z jadvalidan tashqari tez-tez ishlash (almashtirish va boshqalar) tufayli bunday o'qishni kafedradagi ish bilan birlashtirish deyarli mumkin emasligi tezda ma'lum bo'ldi. Shunday qilib, men asta-sekin pullik kurslarni masofadan turib tugatish fikriga keldim. Men GeekBrains-ga Baumanka shahrida joylashgan Mail.ru Texnopark o'quv markazi professorlari tavsiyasiga binoan keldim va Python dasturchisi kursiga yozildim.

Kurslar hech qanday qiyinchilik tug'dirmadi, yagona muammo shundaki, men ularni doimiy ravishda kafedradagi ish, ilmiy ishlar va tadbirlar bilan birlashtirishga majbur bo'ldim. Vaqt shunchalik qattiq ediki, uydan tashqaridagi ko'pchilik ijtimoiy aloqalarni qurbon qilish kerak edi (xayriyatki, vaqtincha).

Ish yukini shunday yengdim: yo‘lda muammolarni hal qildim. Ko'p sonli ish safarlarida rivojlangan bu mahorat juda foydali bo'lib chiqdi, chunki usiz men barcha uy vazifalarimni bajara olmas edim (va u meditatsiya o'rnini ham egallaydi ...). Men noutbuk, smartfon va simsiz smartfon klaviaturalari yordamida yo‘lda kodlashni o‘rgandim.

Mening noutbukim Dell Latitude 3470 bo'lib, Logitech K 5.5 BT klaviaturasi bilan bog'langan diagonali 810 dyuym yoki undan ortiq bo'lgan har qanday smartfon mos keladi. Umuman olganda, men Logitech mahsulotlarini hammaga tavsiya qilaman, ular juda ishonchli va juda og'ir foydalanish sharoitlariga bardosh bera oladi (va bu hech qachon reklama emas).

Raketalardan robotlargacha va Pythonning bunga nima aloqasi bor. GeekBrains bitiruvchilari hikoyasi
Logitech K810 klaviaturasi

Python bunday ish uchun juda qulay - agar sizda yaxshi muharrir bo'lsa. Yana bir dasturni buzish: ish stoli yoki ish vaqti muhitiga masofaviy ulanishlardan foydalaning. Men uy kompyuterimda Django bilan ishlaydigan xavfsiz veb-server yordamida bir nechta vazifalarni bajardim. Men PyDroid, DroidEdit, Maxima dasturlari yordamida poezddan ishladim.

Nima uchun Python?

Ko'p o'tmay, men PHP dan tizim skript tili sifatida foydalanishga harakat qildim. Men dastlab Python-ni o'zim va asta-sekin "o'zim uchun" o'rgandim. Python va C++ o‘rtasida modul darajasida samarali aloqa mavjudligini bilganimdan so‘ng jiddiy o‘rganishga qaror qildim – optimallashtirilgan algoritmlar va ma’lumotlarni tayyorlash tartiblarini bir tilda almashish qiziq tuyuldi.

Eng oddiy misol: C++ tilida RISC protsessorli o'rnatilgan mashinada amalga oshirilgan nostandart kuchli diskni boshqarish tizimi mavjud. Boshqaruv, masalan, tarmoq orqali quyi tizimlar o'rtasidagi aloqani qo'llab-quvvatlaydigan tashqi mashinaga bog'liq API orqali amalga oshiriladi. Yuqori darajada, haydovchining ishlash algoritmi tuzatilmagan yoki doimiy emas (ish jarayoniga qarab turli xil algoritmlarni yuklash kerak).

Bunday tizimga erishishning eng yaxshi usullaridan biri platformalararo tarjimonda ishlaydigan Python sinflari to'plami uchun asos sifatida mashinaga xos C++ quyi tizimi API dan foydalanishdir. Shunday qilib, yuqori darajadagi ishlab chiquvchi o'rnatilgan mashina va uning OS xususiyatlarini hisobga olishi shart emas, u oddiygina past darajadagi API "o'rashlari" vazifasini bajaradigan Python sinflari bilan ishlaydi.

Men C++ va Python bog'lashni deyarli noldan o'rganishim kerak edi. Yuqori darajadagi ob'ektga yo'naltirilgan imkoniyatlar past darajaga qaraganda ancha muhimroq ekanligi tezda ma'lum bo'ldi. Shu sababli, biz APIni loyihalash va amalga oshirishga yondashuvni butunlay o'zgartirishimiz, Python darajasidagi sinflarni tanlashimiz va C/C++ da global ma'lumotlarni almashishimiz kerak edi. Kod yaratishga odatlaning: masalan, ROS ramkasining o'zi Python-da nomlar va ob'ektlarni yaratadi, shuning uchun siz interfeyslarni loyihalashda til farqlarini, ayniqsa yozishda hisobga olishingiz kerak.

Hozirgi vaqtda ishlash: Python va Robot Control Logic

Hozir men Moskva davlat texnika universiteti qoshidagi Robototexnika tadqiqot va o‘quv markazida Python va C++ dasturchisi bo‘lib ishlayman. Biz davlat idoralari tomonidan buyurtma qilingan tadqiqot loyihalari va dasturiy vositalarni amalga oshiramiz: biz tizimlardan mustaqil boʻlgan texnik koʻrish tizimlari va yuqori darajadagi avtomatik boshqaruv algoritmlariga ega manipulyatorlarni ishlab chiqamiz.

Hozirda men Python-da robotlarni boshqarish tizimlari uchun yuqori darajadagi mantiqni dasturlayman; bu til C++, assembler va Go-da yozilgan yuqori darajada optimallashtirilgan modullarni birlashtiradi.

Robotlarni boshqarish algoritmlarini dasturlashda algoritmlarning ikkita katta guruhidan foydalaniladi. Ulardan birinchisi to'g'ridan-to'g'ri uskunada, past darajada amalga oshiriladi - bu haydovchi boshqaruvchilari, aloqa liniyasi kontsentratorlari va operatorlarning o'zaro ta'siri quyi tizimlarining o'rnatilgan dasturiy ta'minoti.

Bu erda algoritmlar boshqariladigan bajarilish tezligi va ishonchliligi uchun mo'ljallangan, bu umuman robotning ishlashidan yuqori. Ikkinchisi majburiydir, chunki butun tizimning xavfsizligi past darajadagi boshqaruv dasturiga bog'liq.

Algoritmlarning ikkinchi guruhi robotning butun ishlashini aniqlaydi. Bular yuqori darajadagi dasturlar bo'lib, ularni ishlab chiqishda asosiy e'tibor algoritmni amalga oshirishning ravshanligi va tezligiga qaratiladi, ko'pincha juda murakkab. Bundan tashqari, robotning yuqori darajadagi dasturiy ta'minoti sozlash va sinov jarayonida juda tez-tez o'zgarishi mumkin. Bunday rivojlanish uchun umumiy maqsadli talqin qilingan tillar ajralmas hisoblanadi.

Bunday ish uchun qanday bilim kerak?

C++ shablon tilini va Pythonning ob'ektga yo'naltirilgan imkoniyatlarini o'rganish majburiy bo'ladi. Deyarli almashtirib bo'lmaydigan mahorat - bu API-larni loyihalash va hujjatlash qobiliyati. Boost::Python kabi ixtisoslashgan kutubxonalarning imkoniyatlarini o'rganish yaxshi fikr bo'lar edi. Past darajadagi dasturiy ta'minot bilan ishlaydiganlar, albatta, multithreading (yadro darajasida) va Linux/UNIX/QNX tizim qo'ng'iroqlari bilan shug'ullanishlari kerak. Robot texnikasi tamoyillarini tushunishingizni yaxshilash uchun Robotik operatsion tizim asoslari bilan tanishish juda foydali.

Rivojlanayotgan va talab qilinadigan kamida bitta kompilyatsiya qilingan va talqin qilingan dasturlash tiliga ega bo'lishga harakat qilaman. Bu muhandislik sohasida ishlash uchun g'olib strategiya bo'lib, u erda yuqori darajada ixtisoslashgan (o'qing: noodatiy) algoritmlarni ishlab chiqish va ularni tillarni kompilyatsiya qilishda amalga oshirish zarurati mavjud. Bunday dasturiy ta'minot uchun ma'lumotlarni tayyorlash vazifasini tarjima qilingan tillar yordamida hal qilish ancha yoqimli. Dastlab, mening to'plamim C++, Pascal va BASICni o'z ichiga olgan, keyinchalik PHP va BASH qo'shilgan.

Rivojlanish vositalari talabalarni o'qitishda qanday foydali bo'lishi mumkin

Hozirda kadrlar malakasini oshirishning asosiy rejasi pedagogikada professional dasturiy ta’minot ishlab chiqish vositalaridan foydalanishning ilmiy asoslarini ta’minlashga harakat qilish, o‘qitish metodlarini ishlab chiqish va sinovdan o‘tkazishdan iborat.

2016 yildan boshlab men oliy taʼlimdagi oʻquv amaliyotiga ishlab chiqish vositalari – dasturlash tillari, IDElar, hujjat generatorlari, versiyalarni boshqarish tizimlarini joriy etish boʻyicha katta tajriba boshladim. Endi biz sifat jihatidan umumlashtirilishi mumkin bo'lgan natijalarga erishdik.

Masalan, o'quv jarayoniga materiallarni versiyalashtirishni joriy etish talabalar ishining sifatini sezilarli darajada yaxshilaydi, ammo faqat majburiy shart: talabalar birgalikdagi loyihalarda birgalikda ishlaydilar. Professional dasturiy ta'minotni ishlab chiqish vositalaridan foydalangan holda texnik fanlarni o'qitish usullarini ishlab chiqish hozirda MSTU qo'shimcha ta'lim dasturlari talabalari, abituriyentlari va talabalaridan iborat ilmiy guruhim tomonidan faol ravishda olib borilmoqda.

Aytgancha, men o'qituvchilik amaliyotimni tark etmadim - men MSTU Malaka oshirish instituti uchun Linuxni loyihalash va boshqarish bo'yicha o'zimning chuqurlashtirilgan kunduzgi kursimni ishlab chiqdim va uni o'zim o'qidim.

Tadqiqot ishlari

Dastlabki ishlar
Otning yurishini amalga oshirish misolida to'rt oyoqli yurish tizimini loyihalashda yurishni rejalashtirish masalalari. (2010)

To'rt oyoqli harakatlanuvchining ish tsiklining tarkibiy qismlari sifatida tayanchga yaqinlashish bosqichida otning old oyog'ining tayanch elementining kinematikasi va yuklanishi masalasi bo'yicha. (2012)

Oxirgidan
Mexanizm va mashina nazariyasini o'rgatish uchun 3D tishli ishlab chiqarish simulyatsiyasi ilovasi (2019)

Strukturaviy to'siqlarni aniqlash usuli va uni relyef ob'ektlarini qidirishda qo'llash (2018)

Ilmiy iqtiboslar ma'lumotlar bazalari tomonidan indekslangan boshqa ishlarni mening profilimda ko'rish mumkin ResearchGate. Maqolalarning aksariyati mashinalar harakatiga bag'ishlangan, muhandislik pedagogikasi va o'quv dasturlari bo'yicha ishlar mavjud.

Manba: www.habr.com

a Izoh qo'shish