Ракеталардан роботторго чейин жана Pythonдун ага кандай тиешеси бар. GeekBrains бүтүрүүчүлөрүнүн окуясы

Ракеталардан роботторго чейин жана Pythonдун ага кандай тиешеси бар. GeekBrains бүтүрүүчүлөрүнүн окуясы
Бүгүн биз Андрей Вуколовдун IT тармагына өтүү тарыхын жарыялап жатабыз. Бала кездеги космоско болгон ышкысы аны бир жолу МСТУнун ракета илимине окууга алып келген. Катуу чындык түшүмдү унуттум, бирок баары андан да кызыктуу болуп чыкты. C++ жана Python тилин үйрөнүү мага бирдей кызыктуу иштерди аткарууга мүмкүндүк берди: роботту башкаруу системаларынын логикасын программалоо.

баштап

Мен бала кезимде космос жөнүндө сүйүнгөнүм үчүн бактылуу болдум. Ошондуктан, мектептен кийин, мен кайда окууга барам деп бир мүнөткө да күмөн санабай, МСТУга кирдим. Бауман, ракеталык двигательд! Бирок, курстун өзүнчө тармагы - космостук ракеталардын порошок же суюк кыймылдаткычтары - такыр тандалган эмес: 2001-жылы атайын факультеттик комиссия дагы эле талапкерлердин максаттуу топторун бөлүштүрдү. Мени мылтык куюлган челекке кармадым.

Ал кезде «ракета буму» пландарда гана болгон, инженерлер анча-мынча маяна алып, атайын жабык конструктордук бюролордо жана илимий-изилдөө институттарында мансаптык жана профессионалдык өсүш үчүн дээрлик эч кандай келечеги жок иштешкен. Ошентсе да, Россияда порошок ракеталар таза аскердик продукция болуп саналат.

Азыр бул аймак суроо-талапка ээ, бирок менин окуум учурунда мен ракета илиминде өз демилгеси боюнча кандайдыр бир иш-аракет дээрлик мүмкүн эмес экенин түшүндүм. Чындыгында бул аскердик кызмат. Мисалы, ракета тармагында иштеп, мен өз алдынча программалык камсыздоону иштеп чыгуу мүмкүнчүлүгүнөн таптакыр ажырап калмакмын, ал тургай, бул иш катуу жөнгө салынгандыктан.

Бардык программалык продуктылар атайын заказ боюнча жана жашыруун комиссиянын (азыр FSTEC бөлүмү) макулдугу менен иштелип чыккан. Ал жерде иштеп чыгуучу коддун ар бир сабын түзмө-түз каттоодон өткөрүүгө жана лицензиялоого милдеттүү. Бардык программалык камсыздоо алгач тапшырма деңгээлинде жашыруун болот. Бул жарым-жартылай эмне үчүн азыр ракета илиминин студенттерин окутуу үчүн колдонулган программалык камсыздоо 90-жылдары иштелип чыкканын түшүндүрөт.

Институтту аяктаганда мен механизм теориясы кафедрасында иштөөгө жетиштим жана C++ тилинде окуу процессинин симуляторун иштеп чыгууну баштадым, ошондуктан менде салыштыруу үчүн үлгү бар болчу жана жакшы жана жаман жактарын таразалай алчумун. Тандоо ачык эле, мен акырындык менен IT жана робототехникага ыктай баштадым. Колдонмо механика ракета илимине караганда алда канча кызыктуу болду: көптөгөн чечилбеген көйгөйлөр, ачык чөйрө, өнүктүрүү индустриясынын жоктугу, симуляциялык программалык камсыздоонун чукул муктаждыгы. Робототехникада жалпы программалык камсыздоонун туруксуз архитектурасы жана татаал алгоритмдерди, анын ичинде бүдөмүк логиканы жана AI башталышын кайра-кайра ишке ашыруу зарылдыгы бар. Ошондуктан, эксперименталдык маалыматтарды иштеп чыгуу боюнча биринчи программаларымдан кийин, мен дээрлик эч качан ракеталарга кайтып келген жокмун (дипломдук долбоорду кошпогондо).

Натыйжада мен Москванын жанындагы аэрокосмостук енер жайы учун композиттик конструкцияларды чыгаруучу заводдо окууну аяктаганга чейин терт ай гана адистигим боюнча иштееге мумкунчулук алдым. Окууну аяктагандан кийин жумуш издегендин деле кереги жок болчу — мен дароо эле робототехника факультетине прикладдык механикадан сабак берүүгө келдим.

Окутуудан баштап программалоого чейин

Ракеталардан роботторго чейин жана Pythonдун ага кандай тиешеси бар. GeekBrains бүтүрүүчүлөрүнүн окуясы
IFTOMM Дүйнөлүк Конгрессинде изилдөө тобунун студент мүчөлөрү менен (оң жакта мен)

Мен 10 жыл МСТУнун үлгү алуу бөлүмүндө иштеп, механизмдердин теориясы боюнча курстан окудум. Ал илимий эмгектерди жарыялаган (макаланын акырын караңыз), акырындык менен механикадан CAD жана робототехникага өткөн. Анан акырында ал мугалимдикти таштап кетүүнү чечти. Бул чечимдин себептерин ачык-айкын көрсөтүү үчүн, мен үйрөткөн окуу курсу он жыл ичинде бир дааналык белгини алмаштырган жок деп айтайын. Колдонмо механика, басылмаларга караганда, абдан ийгиликтүү алдыга жылды.

Мындан тышкары, иш барган сайын бюрократиялык жумушка - отчетторго, программаларга, стандарттарга жана тонналаган кагаздарга окшошуп кетти. Мындай шарттарда окутуунун ырахаты бул ырахатты алганы тууралуу кабарлоо менен алмашты, бул практикалык адис үчүн жагымсыз көрүнүш.

Акыры робототехникага минтип келдим: 2007-2009-жылдары профессорлор А.Головин жана Н.Умнов менен биргеликте алгачкы илимий иштерди даярдай баштадык. Ал жерде мен стробофотографиядан объекттердин жолун аныктоо үчүн алгоритмдерди колдонууга туура келди. Бул темадан машина көрүү, OpenCV жана робототикалык операциялык тутумга бир кадам (ошол кезде мен мындай масштаб жөнүндө ойлогон эмесмин). Ошондон кийин мен илимий изилдөөдө прикладдык механикага жана робототехникага басым жасадым жана иштеп чыгуу көмөкчү иш болуп калды.

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

Адегенде мен туулуп-өскөн институтумда күндүзгү курстардын варианттарын карап чыктым. Ырас, тартипсиз графиктен жана өз графигинен тышкары көп иштөөдөн (алмаштыруу ж. Ошентип, акырындык менен мен акы төлөнүүчү курстарды аралыктан бүтүрүү идеясына келдим. Мен GeekBrains компаниясына Бауманкада жайгашкан Mail.ru Технопарк окуу борборунун профессорлорунун сунушу менен келип, Python программист курсуна жазылдым.

Курстар эч кандай кыйынчылыктарды туудурган жок, бир гана көйгөй аларды кафедрадагы иш, илимий иштер жана иш-чаралар менен дайыма айкалыштырууга туура келди. Убакыт ушунчалык тар болгондуктан, үйдөн тышкаркы социалдык байланыштардын көбүн курмандыкка чалууга туура келген (бактыга жараша, убактылуу).

Мен жумуштун оорчулугун ушинтип көтөрдүм: жолдогу көйгөйлөрдү чечтим. Көптөгөн командировкаларда калыптанган бул чеберчилик абдан пайдалуу болуп чыкты, анткени ансыз мен үй тапшырмамды бүтүрө албайм (жана ал медитацияны да алмаштырат...). Мен ноутбук, смартфон жана зымсыз смартфондун клавиатуралары аркылуу баратып коддоону үйрөндүм.

Менин ноутбугум Dell Latitude 3470 жана Logitech K 5.5 BT клавиатурасы менен жупташтырылган диагоналы 810 дюйм же андан көп болгон каалаган смартфон жасайт. Жалпысынан, мен Logitech өнүмдөрүн баарына сунуштайм, алар абдан ишенимдүү жана колдонуунун өтө катаал шарттарына туруштук бере алат (жана бул эч качан жарнак эмес).

Ракеталардан роботторго чейин жана Pythonдун ага кандай тиешеси бар. GeekBrains бүтүрүүчүлөрүнүн окуясы
Баскычтоп Logitech K810

Python мындай жумушка абдан ыңгайлуу - эгер сизде жакшы редактор болсо. Дагы бир программалоочу бузукулук: иш тактасына же иштөө чөйрөсүнө алыскы байланыштарды колдонуңуз. Мен үйдөгү компьютеримде Django иштеткен коопсуз веб-серверди колдонуу менен бир нече тапшырмаларды аткардым. Мен PyDroid, DroidEdit, Maxima программаларын колдонуп, поездден иштедим.

Эмне үчүн Python?

Мен PHPди системалык скрипт тили катары колдонууга аракет кылганыма көп убакыт болгон жок. Мен алгач Pythonду өз алдынча жана акырындык менен "өзүм үчүн" үйрөндүм. Мен Python жана C++ ортосунда модулдун деңгээлинде эффективдүү байланыш бар экенин билгенден кийин олуттуу изилдөөнү чечтим - бир тилде оптималдаштырылган алгоритмдерди жана маалыматтарды даярдоо процедураларын бөлүшүү кызыктуу көрүндү.

Эң жөнөкөй мисал: C++ тилинде RISC процессору менен орнотулган машинада ишке ашырылган стандарттуу эмес күчтүү дискти башкаруу системасы бар. Башкаруу, мисалы, тармак аркылуу подсистемалардын ортосундагы байланышты колдогон тышкы машинага көз каранды API аркылуу ишке ашат. Жогорку деңгээлде дисктин иштөө алгоритми мүчүлүштүктөрүн оңдоого болбойт же туруктуу эмес (иш процессине жараша ар кандай алгоритмдерди жүктөө керек).

Мындай системага жетүүнүн эң жакшы жолдорунун бири - платформалар аралык интерпретатордо иштеген Python класстарынын жыйындысы үчүн негиз катары машинага тиешелүү C++ субсистемасынын API'син колдонуу. Ошентип, жогорку деңгээлдеги иштеп чыгуучу орнотулган машинанын жана анын OS өзгөчөлүктөрүн эске алуунун кажети жок, ал жөн гана төмөнкү деңгээлдеги API'нин "ороочу" ролун аткарган Python класстары менен иштейт.

Мен C++ жана Python байланышын дээрлик нөлдөн баштап үйрөнүшүм керек болчу. Жогорку деңгээлдеги объектиге багытталган мүмкүнчүлүктөр төмөнкү деңгээлге караганда алда канча маанилүү экени тез эле айкын болду. Ушундан улам, биз APIди иштеп чыгууга жана ишке ашырууга болгон мамилени толугу менен өзгөртүшүбүз керек болчу, Python деңгээлиндеги класстарды тандап, C/C++ тилинде глобалдык маалыматтарды бөлүшүүгө туура келди. Кодду жаратууга көнүп калыңыз: мисалы, ROS алкагы Pythonдо аталыштарды жана объекттерди жаратат, андыктан интерфейсиңизди долбоорлоодо тил айырмачылыктарын, айрыкча терүүдө эске алышыңыз керек.

Азыркы учурда иштөө: Python жана роботту башкаруу логикасы

Азыр мен Москва мамлекеттик техникалык университетинин робототехника изилдөө жана билим берүү борборунда Python жана C++ программисти болуп иштейм. Биз илимий долбоорлорду жана мамлекеттик органдардын тапшыруусу боюнча программалык каражаттарды ишке ашырабыз: биз орнотулган техникалык көрүү системалары жана системалардан көз карандысыз жогорку деңгээлдеги автоматтык башкаруу алгоритмдери бар манипуляторлорду иштеп чыгабыз.

Учурда мен Pythonдо роботту башкаруу системалары үчүн жогорку деңгээлдеги логиканы программалайм; бул тил C++, ассемблер жана Go тилдеринде жазылган жогорку оптималдаштырылган модулдарды бириктирет.

Роботту башкаруу алгоритмдерин программалоодо алгоритмдердин эки чоң тобу колдонулат. Алардын биринчиси түздөн-түз жабдууларда, төмөнкү деңгээлде ишке ашырылат - бул диск контроллерлорунун, байланыш линиясынын концентраторлорунун жана операторлордун өз ара аракеттенүү подсистемаларынын орнотулган программалык камсыздоосу.

Бул жерде алгоритмдер контролдонуучу аткаруу ылдамдыгы жана бүтүндөй роботтун көрсөткүчтөрүнөн ашкан ишенимдүүлүк үчүн иштелип чыккан. Акыркысы милдеттүү, анткени бүт системанын коопсуздугу төмөнкү деңгээлдеги башкаруу программалык камсыздоосунан көз каранды.

Алгоритмдердин экинчи тобу роботтун бүтүндөй иштешин аныктайт. Бул жогорку деңгээлдеги программалар, аларды иштеп чыгууда алгоритмди ишке ашыруунун тактыгына жана ылдамдыгына басым жасалат, көбүнчө бир топ татаал. Мындан тышкары, роботтун жогорку деңгээлдеги программалык камсыздоосу орнотуу жана тестирлөө процессинде көп учурда өзгөрүп турат. Мындай өнүгүү үчүн жалпы максаттагы чечмеленген тилдер зарыл.

Мындай иш үчүн кандай билим керек?

C++ шаблон тилин жана Pythonдун объектиге багытталган мүмкүнчүлүктөрүн үйрөнүү милдеттүү болот. Дээрлик алмаштырылгыс чеберчилик - бул API'лерди долбоорлоо жана документтештирүү. Boost::Python сыяктуу адистештирилген китепканалардын мүмкүнчүлүктөрүн изилдөө жакшы идея болмок. Төмөнкү деңгээлдеги программалык камсыздоо менен иштегендер сөзсүз түрдө multithreading (ядро деңгээлинде) жана Linux/UNIX/QNX тутумдук чалуулары менен күрөшүүгө туура келет. Робототехниканын принциптерин түшүнүү үчүн, робототикалык операциялык системанын негизи менен таанышуу абдан пайдалуу.

Мен өнүгүп келе жаткан жана суроо-талапка ээ болгон жок дегенде бир компиляцияланган жана бир интерпретацияланган программалоо тилине ээ болууга аракет кылам. Бул жогорку адистештирилген (оку: адаттан тыш) алгоритмдерди иштеп чыгууга жана тилдерди компиляциялоодо ишке ашырууга дайыма муктаждык бар инженерияда иштөө үчүн жеңүүчү стратегия. Мындай программалык камсыздоо үчүн маалыматтарды даярдоо милдети чечмеленүүчү тилдерди колдонуу менен чечүү үчүн алда канча жагымдуу. Башында менин комплектимде C++, Паскаль жана BASIC, кийинчерээк PHP жана BASH кошулду.

Өнүктүрүү куралдары окуучуларды окутууда кандайча пайдалуу болушу мүмкүн

Азыр квалификацияны жогорулатуунун негизги планы – педагогикада профессионалдык программалык камсыздоону иштеп чыгуу куралдарын колдонуунун илимий негиздерин берүүгө аракет кылуу, окутуунун ыкмаларын иштеп чыгуу жана сыноо.

2016-жылдан баштап мен жогорку окуу жайлардын окутуу практикасына өнүктүрүү куралдарын - программалоо тилдерин, IDEлерди, документация генераторлорун, версияларды башкаруу системаларын киргизүү боюнча чоң экспериментти баштадым. Биз азыр сапаттык жактан жалпылоого боло турган натыйжаларды алууга жетиштик.

Мисалы, окуу процессине материалдарды версиялоону киргизүү студенттин ишинин сапатын бир топ жакшыртат, бирок милдеттүү шартта гана: студенттер биргелешкен долбоорлор боюнча чогуу иштешет. Профессионалдык программалык камсыздоону иштеп чыгуу инструменттерин колдонуу менен техникалык дисциплиналарды окутуунун усулдарын иштеп чыгууну азыр МГУнун студенттеринен, абитуриенттеринен жана кошумча билим берүү программаларынын студенттеринен турган менин илимий тобум активдүү жүргүзүп жатат.

Баса, мен мугалимдик практикамды калтырган жокмун - мен MSTUдагы Квалификацияны жогорулатуу институту үчүн Linuxту долбоорлоо жана башкаруу боюнча өзүмдүн тереңдетилген күндүзгү курсумду иштеп чыктым жана аны өзүм окутам.

илимий иш

Алгачкы иштер
Ат басууну ишке ашыруунун мисалында төрт буттуу басуу системасын долбоорлоодо басууну пландаштыруу маселелери (2010 г)

Төрт буттуу кыймылдаткычтын жумушчу циклинин компоненттери катары таянычка жакындоо стадиясында аттын алдыңкы бутунун таяныч элементинин кинематикасы жана жүктөө маселеси боюнча (2012 г)

Акыркысынан
Механизмди жана машина теориясын үйрөтүү үчүн 3D тиштүү өндүрүш симуляциясы (2019 г)

Структуралык тоскоолдуктарды таануу ыкмасы жана аны рельефтик объекттерди издөөдө колдонуу (2018 г)

Илимий цитаталар базасы тарабынан индекстелген башка эмгектерди менин профилимден көрүүгө болот Жорж. Макалалардын басымдуу бөлүгү машиналардын кыймылына арналган, инженердик педагогика жана окуу программалары боюнча эмгектер бар.

Source: www.habr.com

Комментарий кошуу