Roketlerden robotlara ve Python'un bununla ne ilgisi var? GeekBrains Mezun Hikayesi

Roketlerden robotlara ve Python'un bununla ne ilgisi var? GeekBrains Mezun Hikayesi
Bugün Andrey Vukolov'un BT'ye geçiş hikayesini yayınlıyoruz. Çocukluğunda uzaya olan tutkusu bir zamanlar onu MSTU'da roket bilimi okumaya yöneltmişti. Acı gerçek bana rüyayı unutturdu ama her şey daha da ilginçleşti. C++ ve Python öğrenmek bana eşit derecede heyecan verici işler yapma olanağı verdi: robot kontrol sistemlerinin mantığını programlamak.

başlangıç

Çocukluğum boyunca uzaya övgüler yağdırdığım için şanslıydım. Bu nedenle okuldan sonra nerede eğitim almam gerektiği konusunda bir an bile şüphe duymadım ve MSTU'ya girdim. Bauman, Roket İtki Mühendisliği Bölümü'ne. Bununla birlikte, kursun kendisinin (uzay roketlerinin toz veya sıvı motorları) dalının seçilmesine hiç gerek yoktu: 2001 yılında, özel bir fakülte komisyonu hâlâ başvuranların hedef gruplarını dağıtıyordu. Bir barut fıçısının içinde yakalandım.

O zamanlar, "roket patlaması" yalnızca planlarda mevcuttu; mühendisler yetersiz maaşlar alıyorlardı ve özel kapalı tasarım bürolarında ve araştırma enstitülerinde neredeyse hiçbir kariyer ve mesleki gelişim beklentisi olmadan çalışıyorlardı. Yine de Rusya'daki barut roketleri tamamen askeri ürünlerdir.

Şimdi bu alan talep görüyor, ancak çalışmalarım sırasında roket biliminde kişinin kendi inisiyatifiyle herhangi bir faaliyetin neredeyse imkansız olduğunu fark ettim. Aslında bu askerliktir. Örneğin, roket endüstrisinde çalışırken, bu faaliyet sıkı bir şekilde düzenlendiğinden, kendim için bile bağımsız olarak yazılım geliştirme fırsatından tamamen mahrum kalacağım.

Tüm yazılım ürünleri yalnızca özel sipariş üzerine ve gizlilik komisyonunun (şu anda FSTEC'in bir bölümü) onayıyla geliştirilmektedir. Buradaki geliştiricinin kelimenin tam anlamıyla her kod satırını kaydetmesi ve lisanslaması gerekiyor. Tüm yazılımlar başlangıçta görev düzeyinde gizlidir. Bu, günümüzde roket bilimi öğrencilerini eğitmek için kullanılan yazılımın neden en geç 90'larda geliştirildiğini kısmen açıklıyor.

Enstitüden mezun olduğumda mekanizma teorisi bölümünde çalışmayı başardım ve C++ dilinde bir eğitim süreci simülatörü geliştirmeye başladım, böylece karşılaştırma için bir örneğim oldu ve artıları ve eksileri tartabildim. Seçim açıktı ve yavaş yavaş BT ve robot bilimine doğru kaymaya başladım. Uygulamalı mekanik, roket biliminden çok daha eğlenceliydi: birçok çözülmemiş problem, açık bir ortam, geliştirme endüstrisinin eksikliği, simülasyon yazılımına acil ihtiyaç. Robotikte, ortak yazılımın belirsiz bir mimarisi ve bulanık mantık ve yapay zekanın başlangıçları da dahil olmak üzere karmaşık algoritmaların tekrar tekrar uygulanması ihtiyacı vardır. Bu nedenle deneysel verileri işlemeye yönelik ilk programlarımdan sonra neredeyse hiç roketlere geri dönmedim (mezuniyet projem hariç).

Sonuç olarak, Moskova yakınlarındaki havacılık ve uzay endüstrisi için kompozit yapılar üreten bir fabrikadan mezun olmadan önce sadece dört ay uzmanlık alanımda çalışma fırsatı buldum. Eğitimimi tamamladıktan sonra iş aramama bile gerek kalmadı; hemen robot bilimi bölümünde uygulamalı mekanik dersi vermeye geldim.

Öğretmenlikten programlamaya

Roketlerden robotlara ve Python'un bununla ne ilgisi var? GeekBrains Mezun Hikayesi
IFTOMM Dünya Kongresi'nde araştırma grubunun öğrenci üyeleriyle (sağdaki ben)

MSTU'da örnekleme bölümünde 10 yıl çalıştım ve mekanizmalar teorisi üzerine bir ders verdim. Bilimsel çalışmalar yayınladı (makalenin sonuna bakın), yavaş yavaş mekanikten CAD ve robotiğe geçti. Ve sonunda öğretmenliği bırakmaya karar verdi. Bu kararın nedenlerini en açık şekilde göstermek için, öğrettiğim eğitimin on yıl içinde tek bir ondalık basamak bile değişmediğini söyleyeceğim. Her ne kadar uygulamalı mekanik, yayınlara bakılırsa çok ama çok başarılı bir şekilde ilerledi.

Buna ek olarak, iş giderek daha fazla bürokratik çalışmaya benziyordu - raporlar, programlar, standartlar ve tonlarca kağıt. Bu gibi durumlarda, öğretme zevkinin yerini bu zevkin alındığını bildirmek aldı ve bu, pratik yapan bir uzman için fazlasıyla tatsız bir durum.

Ve sonunda robotiğe şu şekilde ulaştım: 2007-2009'da profesörler A. Golovin ve N. Umnov ile birlikte ilk bilimsel çalışmaları hazırlamaya başladık. Orada, flaşlı fotoğrafçılıktan nesnelerin yollarını belirlemek için algoritmalar kullanmak zorunda kaldım. Bu konudan makine görüşüne, OpenCV'ye ve Robotik İşletim Sistemine bir adım kaldı (gerçi o zamanlar böyle bir ölçek aklıma bile gelmemişti). Bundan sonra nihayet araştırmada uygulamalı mekanik ve robotiğe odaklandım ve geliştirme, destekleyici bir faaliyet haline geldi.

Ancak robotik alanında yeni bir iş bulmak için programlama bilgimi geliştirmem ve tamamlamam gerekiyordu. Sonuçta, bir yıllık üniversite kursu (C++'da ObjectPascal ve Borland VCL) dışında hiçbir zaman özel olarak BT eğitimi almadım ve gelişimin teorik yönleri için matematiğe güvendim.

İlk başta kendi enstitümde tam zamanlı kurs seçeneklerini değerlendirdim. Doğru, düzensiz program ve kişinin kendi programının dışında sık sık çalışması (ikame vb.) nedeniyle bu tür çalışmaları departmandaki çalışmayla birleştirmenin neredeyse imkansız olacağı kısa sürede anlaşıldı. Böylece yavaş yavaş ücretli kursları uzaktan tamamlama fikrine vardım. Baumanka'da bulunan Mail.ru Teknopark eğitim merkezinden profesörlerin tavsiyesi üzerine GeekBrains'e geldim ve Python Programcı kursuna kaydoldum.

Dersler hiçbir zorluk yaratmadı, tek sorun onları sürekli bölümdeki çalışmalarla, bilimsel çalışmalarla ve etkinliklerle birleştirmek zorunda kalmamdı. Zaman o kadar kısıtlıydı ki ev dışındaki çoğu sosyal bağlantının (neyse ki geçici olarak) feda edilmesi gerekti.

İş yüküyle şu şekilde başa çıktım: Yoldaki sorunları çözdüm. Çok sayıda iş gezisi sırasında geliştirilen bu becerinin çok faydalı olduğu ortaya çıktı, çünkü o olmasaydı tüm ödevlerimi bile tamamlayamazdım (ve aynı zamanda meditasyonun da yerini alıyor...). Dizüstü bilgisayarımı, akıllı telefonumu ve kablosuz akıllı telefon klavyelerimi kullanarak hareket halindeyken kodlamayı öğrendim.

Dizüstü bilgisayarım bir Dell Latitude 3470'tir ve Logitech K 5.5 BT klavyeyle eşleştirilmiş, diyagonal 810 inç veya daha fazla olan herhangi bir akıllı telefon işini görecektir. Genel olarak Logitech ürünlerini herkese tavsiye ediyorum, oldukça güvenilirdirler ve çok zorlu kullanım koşullarına dayanabilirler (ve bu asla bir reklam değildir).

Roketlerden robotlara ve Python'un bununla ne ilgisi var? GeekBrains Mezun Hikayesi
Klavye Logitech K810

İyi bir editörünüz varsa, Python bu tür çalışmalara çok yardımcı olur. Başka bir programlama hilesi: masaüstüne veya çalışma zamanı ortamına uzaktan bağlantılar kullanın. Ev bilgisayarımda Django çalıştıran güvenli bir web sunucusunu kullanarak çeşitli görevleri tamamladım. PyDroid, DroidEdit ve Maxima yazılımlarını kullanarak trende çalıştım.

Neden Python?

PHP'yi sistem kodlama dili olarak kullanmaya başlamam çok uzun sürmedi. Başlangıçta Python'u kendi başıma ve yavaş yavaş "kendim için" çalıştım. Python ve C++ arasında modül düzeyinde etkili bir bağlantının varlığını öğrendikten sonra ciddi bir şekilde çalışmaya karar verdim - optimize edilmiş algoritmaları ve veri hazırlama prosedürlerini aynı dilde paylaşmak ilginç geldi.

En basit örnek: C++ dilinde, RISC işlemcili gömülü bir makinede uygulanan, standart dışı güçlü bir sürücü için bir kontrol sistemi vardır. Yönetim, örneğin bir ağ üzerinden alt sistemler arasındaki iletişimi destekleyen, makineye bağımlı harici bir API aracılığıyla gerçekleşir. Yüksek düzeyde, sürücü çalışma algoritmasında hata ayıklanmaz veya sabit değildir (iş sürecine bağlı olarak farklı algoritmaların yüklenmesi gerekir).

Böyle bir sistemi elde etmenin en iyi yollarından biri, platformlar arası yorumlayıcıda çalışan bir dizi Python sınıfının temeli olarak makineye özgü C++ alt sistemi API'sini kullanmaktır. Böylece, üst düzey geliştiricinin gömülü makinenin ve işletim sisteminin özelliklerini dikkate alması gerekmeyecek; yalnızca düşük düzeyli API'nin "sarmalayıcıları" olarak görev yapan Python sınıflarıyla çalışacaktır.

C++ ve Python bağlamayı neredeyse sıfırdan öğrenmek zorunda kaldım. Yüksek düzeydeki nesne yönelimli yeteneklerin düşük düzeydeki yeteneklerden çok daha önemli olduğu kısa sürede anlaşıldı. Bu nedenle, API'yi tasarlama ve uygulama yaklaşımını tamamen değiştirmek zorunda kaldık, Python düzeyinde sınıfları ve C/C++'da paylaşılan küresel verileri tercih ettik. Kod oluşturmaya alışın: örneğin, ROS çerçevesinin kendisi Python'da adlar ve nesneler oluşturur, bu nedenle arayüzlerinizi tasarlarken özellikle yazmada dil farklılıklarını hesaba katmanız gerekir.

Şimdiki Zamanda Çalışmak: Python ve Robot Kontrol Mantığı

Şu anda Moskova Devlet Teknik Üniversitesi Robotik Araştırma ve Eğitim Merkezi'nde Python ve C++ programcısı olarak çalışıyorum. Devlet daireleri tarafından görevlendirilen araştırma projelerini ve yazılım araçlarını uyguluyoruz: Yerleşik teknik görüş sistemlerine ve sistemlerden bağımsız üst düzey otomatik kontrol algoritmalarına sahip manipülatörler geliştiriyoruz.

Şu anda Python'da robot kontrol sistemleri için üst düzey mantık programlıyorum; bu dil, C++, assembler ve Go ile yazılmış yüksek düzeyde optimize edilmiş modülleri birbirine bağlar.

Robot kontrol algoritmalarının programlanmasında iki büyük algoritma grubu kullanılır. Bunlardan ilki doğrudan ekipman üzerinde düşük düzeyde uygulanır - bu, sürücü kontrolörlerinin, iletişim hattı yoğunlaştırıcılarının ve operatör etkileşim alt sistemlerinin yerleşik yazılımıdır.

Buradaki algoritmalar, robotun bir bütün olarak performansını aşan kontrollü yürütme hızı ve güvenilirliği için tasarlanmıştır. Tüm sistemin güvenliği düşük seviyeli kontrol yazılımına bağlı olduğundan ikincisi zorunludur.

İkinci algoritma grubu robotun bir bütün olarak çalışmasını belirler. Bunlar, geliştirilmesinde algoritmanın netliği ve uygulama hızına odaklanan, genellikle oldukça karmaşık olan üst düzey programlardır. Ayrıca robottaki üst düzey yazılım, kurulum ve test süreci sırasında sıklıkla değişikliğe uğrar. Böyle bir gelişme için genel amaçlı yorumlanan diller vazgeçilmezdir.

Böyle bir iş için hangi bilgiye ihtiyaç vardır?

C++ şablon dilini ve Python'un nesne yönelimli yeteneklerini incelemek zorunlu olacaktır. Neredeyse yeri doldurulamaz bir beceri, API'leri tasarlama ve belgeleme yeteneğidir. Boost::Python gibi özel kütüphanelerin yeteneklerini keşfetmek iyi bir fikir olabilir. Düşük seviyeli yazılımlarla çalışanlar kesinlikle çoklu iş parçacıklı (çekirdek düzeyinde) ve Linux/UNIX/QNX sistem çağrılarıyla uğraşmak zorunda kalacaklar. Robotik ilkelerine ilişkin anlayışınızı geliştirmek için Robotik İşletim Sistemi çerçevesine aşina olmanız çok faydalıdır.

Gelişmekte olan ve talep gören en az bir derlenmiş ve bir yorumlanmış programlama diline sahip olmaya çalışıyorum. Bu, son derece uzmanlaşmış (okuma: olağandışı) algoritmalar geliştirmeye ve bunları derleme dillerinde uygulamaya sürekli ihtiyaç duyulan mühendislik alanında çalışmak için kazanan bir stratejidir. Bu tür yazılımlar için veri hazırlama görevinin yorumlanmış diller kullanılarak çözülmesi çok daha keyiflidir. Başlangıçta setimde C++, Pascal ve BASIC vardı, daha sonra PHP ve BASH eklendi.

Geliştirme araçları öğrencilere öğretimde nasıl faydalı olabilir?

Mesleki gelişim için artık ana plan, profesyonel yazılım geliştirme araçlarının pedagojide kullanımına bilimsel bir temel sağlamaya çalışmak, öğretim yöntemlerini geliştirmek ve test etmektir.

2016'dan bu yana, programlama dilleri, IDE'ler, belge oluşturucular, sürüm kontrol sistemleri gibi geliştirme araçlarını yüksek öğrenimdeki öğretim uygulamalarına dahil etme konusunda büyük bir deneye başladım. Artık niteliksel olarak genelleştirilebilecek sonuçlar elde etmeyi başardık.

Örneğin, materyallerin versiyonlanmasının eğitim sürecine dahil edilmesi, öğrenci çalışmasının kalitesini önemli ölçüde artırır, ancak bu yalnızca zorunlu bir koşul altında: öğrencilerin ortak projeler üzerinde birlikte çalışması. Profesyonel yazılım geliştirme araçlarını kullanarak teknik disiplinleri öğretme yöntemlerinin geliştirilmesi, şu anda MSTU'daki ek eğitim programlarının öğrencileri, başvuru sahipleri ve öğrencilerinden oluşan araştırma grubum tarafından aktif olarak yürütülmektedir.

Bu arada, öğretmenlik mesleğimi bırakmadım - MSTU İleri Araştırmalar Enstitüsü için Linux tasarımı ve yönetimi üzerine kendi derinlemesine tam zamanlı kursumu geliştirdim ve bunu kendim öğretiyorum.

Araştırma makaleleri

Erken iş
Atın yürüyüş uygulaması örneğini kullanarak dört ayaklı yürüme sistemleri tasarlarken yürüyüş planlaması sorunları (2010 g)

Dört ayaklı hareket ettiricinin çalışma döngüsünün bileşenleri olarak desteğe yaklaşma aşamasında atın ön bacağındaki destek elemanının kinematik ve yüklenmesi konusu hakkında (2012 g)

Sondan itibaren
Mekanizma ve makine teorisinin öğretilmesi için 3 boyutlu dişli imalat simülasyon uygulaması (2019 g)

Yapısal engelleri tanıma yöntemi ve yardım nesnelerinin aranmasında uygulanması (2018 g)

Bilimsel atıf veritabanları tarafından indekslenen diğer çalışmalarımı profilimde görebilirsiniz. Araştırma kapısı. Makalelerin çoğu makinelerin hareketine ayrılmış, mühendislik pedagojisi ve eğitim yazılımı üzerine çalışmalar var.

Kaynak: habr.com

Yorum ekle