Dari roket hingga robot dan apa hubungannya dengan Python. Kisah Alumni GeekBrains

Dari roket hingga robot dan apa hubungannya dengan Python. Kisah Alumni GeekBrains
Hari ini kami menerbitkan kisah transisi Andrey Vukolov ke TI. Kecintaan masa kecilnya terhadap luar angkasa pernah membawanya untuk belajar ilmu roket di MSTU. Kenyataan pahit membuatku melupakan mimpi itu, namun semuanya menjadi lebih menarik. Mempelajari C++ dan Python memungkinkan saya melakukan pekerjaan yang sama menariknya: memprogram logika sistem kendali robot.

awal

Saya beruntung bisa mengoceh tentang luar angkasa sepanjang masa kecil saya. Oleh karena itu, sepulang sekolah, saya tidak ragu sedikit pun kemana saya harus melanjutkan studi, dan saya masuk MSTU. Bauman, ke Departemen Teknik Penggerak Roket. Namun, cabang kursus itu sendiri - mesin roket luar angkasa bubuk atau cair - tidak harus dipilih sama sekali: pada tahun 2001, komisi fakultas khusus masih mendistribusikan kelompok sasaran pelamar. Saya terjebak dalam tong mesiu.

Pada saat itu, “ledakan roket” hanya ada dalam rencana; para insinyur menerima gaji yang sedikit dan bekerja di biro desain dan lembaga penelitian tertutup khusus yang hampir tidak memiliki prospek karir dan pertumbuhan profesional. Meski begitu, roket bubuk di Rusia hanyalah produk militer.

Sekarang bidang ini diminati, tetapi selama masa studi saya, saya menyadari bahwa dalam ilmu roket, aktivitas apa pun atas inisiatif sendiri hampir mustahil. Sebenarnya, ini adalah dinas militer. Misalnya, ketika bekerja di industri roket, saya akan kehilangan kesempatan untuk mengembangkan perangkat lunak secara mandiri, bahkan untuk diri saya sendiri, karena aktivitas ini diatur secara ketat.

Semua produk perangkat lunak dikembangkan secara eksklusif berdasarkan pesanan khusus dan dengan persetujuan komisi kerahasiaan (sekarang merupakan divisi dari FSTEC). Pengembang di sana diwajibkan untuk mendaftar dan melisensikan setiap baris kode. Semua perangkat lunak pada awalnya dirahasiakan pada tingkat tugas. Hal ini sebagian menjelaskan mengapa perangkat lunak yang sekarang digunakan untuk melatih siswa ilmu roket dikembangkan paling awal pada tahun 90an.

Pada saat saya lulus dari institut tersebut, saya berhasil bekerja di departemen teori mekanisme dan mulai mengembangkan simulator proses pendidikan dalam C++, sehingga saya memiliki contoh untuk perbandingan dan dapat mempertimbangkan pro dan kontra. Pilihannya sudah jelas, dan saya secara bertahap mulai beralih ke IT dan robotika. Mekanika terapan jauh lebih menyenangkan daripada ilmu roket: banyak masalah yang belum terpecahkan, lingkungan terbuka, kurangnya industri pengembangan, kebutuhan mendesak akan perangkat lunak simulasi. Dalam robotika, terdapat arsitektur perangkat lunak umum yang belum terselesaikan dan kebutuhan untuk berulang kali mengimplementasikan algoritma yang kompleks, termasuk logika fuzzy dan permulaan AI. Oleh karena itu, setelah program pertama saya untuk memproses data eksperimen, saya hampir tidak pernah kembali ke roket (kecuali proyek kelulusan saya).

Hasilnya, saya memiliki kesempatan untuk bekerja di bidang spesialisasi saya hanya selama empat bulan sebelum lulus di sebuah pabrik dekat Moskow untuk struktur komposit untuk industri dirgantara. Setelah menyelesaikan studi, saya bahkan tidak perlu mencari pekerjaan—saya langsung datang untuk mengajar mekanika terapan di jurusan robotika.

Mulai dari pengajaran hingga pemrograman

Dari roket hingga robot dan apa hubungannya dengan Python. Kisah Alumni GeekBrains
Pada Kongres Dunia IFTOMM bersama mahasiswa anggota kelompok penelitian (saya di sebelah kanan)

Saya bekerja di MSTU di departemen pengambilan sampel selama 10 tahun, mengajar mata kuliah teori mekanisme. Ia menerbitkan karya ilmiah (lihat akhir artikel), secara bertahap beralih dari mekanika ke CAD dan robotika. Dan pada akhirnya dia memutuskan untuk berhenti mengajar. Untuk menggambarkan dengan jelas alasan keputusan ini, saya akan mengatakan bahwa selama sepuluh tahun program studi yang saya ajar tidak mengubah satu tempat desimal pun. Meskipun mekanika terapan, dilihat dari publikasinya, bergerak maju dengan sangat, sangat sukses.

Selain itu, pekerjaannya semakin menyerupai pekerjaan birokrasi - laporan, program, standar, dan berton-ton kertas. Dalam kondisi seperti itu, kesenangan mengajar digantikan dengan pelaporan penerimaan kesenangan tersebut, dan ini lebih dari tidak menyenangkan bagi seorang spesialis yang berpraktik.

Dan akhirnya saya sampai pada robotika seperti ini: pada 2007-2009, bersama profesor A. Golovin dan N. Umnov, kami mulai mempersiapkan karya ilmiah pertama. Di sana saya harus menggunakan algoritma untuk menentukan jalur objek dari fotografi strobo. Dari topik ini satu langkah menuju visi mesin, OpenCV dan Sistem Operasi Robot (meskipun pada saat itu saya bahkan tidak memikirkan skala seperti itu). Setelah itu, saya akhirnya fokus pada bidang mekanika dan robotika terapan dalam penelitian, dan pengembangan menjadi kegiatan penunjang.

Namun, untuk mendapatkan pekerjaan baru di bidang robotika, saya perlu meningkatkan dan menambah pengetahuan pemrograman saya. Lagi pula, saya tidak pernah mempelajari TI secara khusus, kecuali untuk kursus universitas selama setahun (ObjectPascal dan Borland VCL dalam C++), dan mengandalkan matematika untuk aspek teoritis pengembangan.

Awalnya saya mempertimbangkan pilihan untuk kursus penuh waktu di institut asal saya. Benar, dengan cepat menjadi jelas bahwa hampir tidak mungkin untuk menggabungkan studi semacam itu dengan pekerjaan di departemen karena jadwal yang tidak teratur dan seringnya bekerja di luar jadwal sendiri (penggantian, dll.). Jadi lambat laun saya mendapat ide untuk menyelesaikan kursus berbayar dari jarak jauh. Saya datang ke GeekBrains atas rekomendasi profesor dari pusat pelatihan Mail.ru Technopark, yang berlokasi di Baumanka, dan mendaftar di kursus Python Programmer.

Kursus-kursus tersebut tidak menimbulkan kesulitan, satu-satunya masalah adalah saya harus terus-menerus menggabungkannya dengan pekerjaan di departemen, karya ilmiah, dan acara. Waktu sangat sempit sehingga sebagian besar hubungan sosial di luar rumah harus dikorbankan (untungnya, untuk sementara).

Beginilah cara saya mengatasi beban kerja: Saya memecahkan masalah di jalan. Keterampilan ini, yang dikembangkan melalui berbagai perjalanan bisnis, ternyata sangat berguna, karena tanpanya saya bahkan tidak akan bisa menyelesaikan semua pekerjaan rumah saya (dan juga menggantikan meditasi...). Saya belajar coding saat bepergian menggunakan laptop, ponsel cerdas, dan keyboard ponsel pintar nirkabel.

Laptop saya adalah Dell Latitude 3470, dan ponsel cerdas apa pun dengan diagonal 5.5 inci atau lebih yang dipasangkan dengan keyboard Logitech K 810 BT bisa digunakan. Secara umum, saya merekomendasikan produk Logitech kepada semua orang; produk ini sangat andal dan tahan terhadap kondisi penggunaan yang sangat keras (dan ini bukanlah sebuah iklan).

Dari roket hingga robot dan apa hubungannya dengan Python. Kisah Alumni GeekBrains
KeyboardLogitech K810

Python sangat kondusif untuk pekerjaan seperti itu - jika Anda memiliki editor yang baik. Peretasan pemrograman lainnya: gunakan koneksi jarak jauh ke desktop atau lingkungan runtime. Saya menyelesaikan beberapa tugas menggunakan server web aman yang menjalankan Django di komputer rumah saya. Saya bekerja dari kereta, menggunakan software PyDroid, DroidEdit, Maxima.

Mengapa Python?

Tidak lama kemudian saya mencoba menggunakan PHP sebagai bahasa scripting sistem. Saya awalnya mempelajari Python sendiri dan sedikit demi sedikit “untuk diri saya sendiri”. Saya memutuskan untuk belajar dengan serius setelah saya mengetahui adanya koneksi efektif antara Python dan C++ pada level modul - sepertinya menarik untuk berbagi algoritma yang dioptimalkan dan prosedur persiapan data dalam bahasa yang sama.

Contoh paling sederhana: terdapat sistem kontrol untuk drive kuat non-standar, yang diimplementasikan pada mesin tertanam dengan prosesor RISC, dalam C++. Manajemen terjadi melalui API eksternal yang bergantung pada mesin, yang mendukung, misalnya, komunikasi antar subsistem melalui jaringan. Pada tingkat tinggi, algoritma operasi drive tidak di-debug atau tidak konstan (perlu memuat algoritma yang berbeda tergantung pada proses kerja).

Salah satu cara terbaik untuk mencapai sistem seperti itu adalah dengan menggunakan API subsistem C++ khusus mesin sebagai dasar untuk serangkaian kelas Python yang berjalan pada penerjemah lintas platform. Dengan demikian, pengembang tingkat atas tidak perlu memperhitungkan fitur-fitur mesin yang tertanam dan OS-nya; ia hanya akan bekerja dengan kelas Python yang bertindak sebagai “pembungkus” API tingkat rendah.

Saya harus mempelajari pengikatan C++ dan Python hampir dari awal. Dengan cepat menjadi jelas bahwa kemampuan berorientasi objek pada tingkat tinggi jauh lebih penting dibandingkan pada tingkat rendah. Oleh karena itu, kami harus mengubah sepenuhnya pendekatan dalam mendesain dan mengimplementasikan API, memilih kelas di level Python, dan berbagi data global dalam C/C++. Biasakan diri dengan pembuatan kode: misalnya, kerangka ROS itu sendiri menghasilkan nama dan objek dengan Python, jadi Anda harus mempertimbangkan perbedaan bahasa, terutama dalam pengetikan, saat mendesain antarmuka Anda.

Bekerja di Masa Kini: Logika Kontrol Python dan Robot

Sekarang saya bekerja sebagai programmer Python dan C++ di Pusat Penelitian dan Pendidikan Robotika di Universitas Teknik Negeri Moskow. Kami melaksanakan proyek penelitian dan perangkat lunak yang ditugaskan oleh departemen pemerintah: kami mengembangkan manipulator dengan sistem visi teknis bawaan dan algoritme kontrol otomatis tingkat tinggi yang tidak bergantung pada sistem.

Saat ini, saya memprogram logika tingkat tinggi untuk sistem kontrol robot dengan Python; bahasa ini menghubungkan modul-modul yang sangat optimal yang ditulis dalam C++, assembler, dan Go.

Dalam pemrograman algoritma kendali robot, dua kelompok besar algoritma digunakan. Yang pertama diimplementasikan langsung pada peralatan, pada tingkat rendah - ini adalah perangkat lunak pengontrol penggerak, konsentrator jalur komunikasi, dan subsistem interaksi operator yang ada di dalamnya.

Algoritme di sini dirancang untuk mengontrol kecepatan eksekusi dan keandalan yang melebihi kinerja robot secara keseluruhan. Yang terakhir ini wajib, karena keamanan seluruh sistem bergantung pada perangkat lunak kontrol tingkat rendah.

Kelompok algoritma kedua menentukan pengoperasian robot secara keseluruhan. Ini adalah program tingkat tinggi, yang penekanannya pada pengembangannya adalah pada kejelasan dan kecepatan implementasi algoritma, seringkali cukup rumit. Selain itu, perangkat lunak tingkat tinggi pada robot sering kali mengalami perubahan selama proses penyiapan dan pengujian. Untuk perkembangan seperti itu, bahasa penafsiran untuk tujuan umum sangat diperlukan.

Pengetahuan apa yang dibutuhkan untuk pekerjaan seperti itu?

Wajib mempelajari bahasa template C++ dan kemampuan berorientasi objek Python. Keahlian yang hampir tak tergantikan adalah kemampuan merancang dan mendokumentasikan API. Sebaiknya jelajahi kemampuan perpustakaan khusus seperti Boost::Python. Mereka yang bekerja dengan perangkat lunak tingkat rendah pasti harus berurusan dengan multithreading (di tingkat kernel) dan panggilan sistem Linux/UNIX/QNX. Untuk meningkatkan pemahaman Anda tentang prinsip-prinsip robotika, sangat berguna untuk membiasakan diri Anda dengan kerangka Sistem Operasi Robotik.

Saya mencoba untuk memiliki setidaknya satu bahasa pemrograman yang dikompilasi dan ditafsirkan yang sedang berkembang dan diminati. Ini adalah strategi yang unggul untuk bekerja di bidang teknik, di mana selalu ada kebutuhan untuk mengembangkan algoritme yang sangat terspesialisasi (baca: tidak biasa) dan menerapkannya dalam bahasa kompilasi. Tugas menyiapkan data untuk perangkat lunak semacam itu jauh lebih menyenangkan untuk diselesaikan dengan menggunakan bahasa yang ditafsirkan. Awalnya, set saya menyertakan C++, Pascal dan BASIC, kemudian PHP dan BASH ditambahkan.

Bagaimana alat pengembangan dapat berguna dalam mengajar siswa

Rencana utama pengembangan profesional saat ini adalah mencoba memberikan dasar ilmiah untuk penggunaan alat pengembangan perangkat lunak profesional dalam pedagogi, untuk mengembangkan dan menguji metode pengajaran.

Sejak 2016, saya memulai eksperimen besar dalam memperkenalkan alat pengembangan - bahasa pemrograman, IDE, generator dokumentasi, sistem kontrol versi - ke dalam praktik pengajaran di pendidikan tinggi. Kami kini telah berhasil memperoleh hasil yang dapat digeneralisasikan secara kualitatif.

Misalnya, pengenalan versi materi ke dalam proses pendidikan secara signifikan meningkatkan kualitas pekerjaan siswa, namun hanya dengan syarat wajib: siswa bekerja sama dalam proyek bersama. Pengembangan metode pengajaran disiplin ilmu teknik dengan menggunakan alat pengembangan perangkat lunak profesional kini aktif dilakukan oleh kelompok penelitian saya, yang terdiri dari mahasiswa, pelamar dan mahasiswa program pendidikan tambahan di MSTU.

Ngomong-ngomong, saya tidak meninggalkan praktik mengajar saya - saya mengembangkan kursus penuh waktu saya sendiri yang mendalam tentang desain dan administrasi Linux untuk Institute of Advanced Studies di MSTU, dan saya mengajarnya sendiri.

Karya ilmiah

Pekerjaan awal
Permasalahan perencanaan gaya berjalan pada saat merancang sistem jalan kaki empat dengan menggunakan contoh penerapan gaya berjalan kuda (2010)

Tentang masalah kinematika dan pembebanan elemen pendukung kaki depan kuda pada tahap mendekati tumpuan sebagai komponen siklus kerja penggerak berkaki empat (2012)

Dari yang terakhir
Aplikasi simulasi pembuatan roda gigi 3D untuk mekanisme pengajaran dan teori mesin (2019)

Metode pengenalan hambatan struktur dan penerapannya dalam pencarian objek relief (2018)

Karya lain yang terindeks database sitasi ilmiah dapat dilihat pada profil saya di ResearchGATE. Sebagian besar artikel dikhususkan untuk pergerakan mesin, ada karya tentang pedagogi teknik dan perangkat lunak pendidikan.

Sumber: www.habr.com

Tambah komentar