Daripada roket kepada robot dan apa kaitan Python dengannya. Kisah Alumni GeekBrains

Daripada roket kepada robot dan apa kaitan Python dengannya. Kisah Alumni GeekBrains
Hari ini kami menerbitkan kisah peralihan Andrey Vukolov kepada IT. Keghairahan zaman kanak-kanaknya terhadap ruang angkasa pernah membawanya belajar sains roket di MSTU. Realiti yang pahit membuatkan saya lupa tentang mimpi itu, tetapi semuanya ternyata lebih menarik. Mempelajari C++ dan Python membolehkan saya melakukan kerja yang sama menarik: memprogramkan logik sistem kawalan robot.

bermula

Saya bernasib baik kerana meracau tentang ruang sepanjang zaman kanak-kanak saya. Oleh itu, selepas sekolah, saya tidak meragui seminit di mana saya harus pergi belajar, dan saya memasuki MSTU. Bauman, kepada Jabatan Kejuruteraan Pendorong Roket. Walau bagaimanapun, cawangan kursus itu sendiri - serbuk atau enjin cecair roket angkasa - tidak perlu dipilih sama sekali: pada tahun 2001, suruhanjaya fakulti khas masih mengedarkan kumpulan sasaran pemohon. Saya terperangkap dalam tong serbuk mesiu.

Pada masa itu, "ledakan roket" hanya wujud dalam rancangan; jurutera menerima gaji yang tidak seberapa dan bekerja di biro reka bentuk tertutup khas dan institut penyelidikan yang hampir tiada prospek untuk pertumbuhan kerjaya dan profesional. Namun, roket serbuk di Rusia adalah produk ketenteraan semata-mata.

Sekarang kawasan ini dalam permintaan, tetapi sudah semasa pengajian saya, saya menyedari bahawa dalam sains roket, sebarang aktiviti atas inisiatif sendiri hampir mustahil. Sebenarnya, ini adalah perkhidmatan tentera. Sebagai contoh, bekerja dalam industri roket, saya akan kehilangan peluang untuk membangunkan perisian secara bebas, walaupun untuk diri saya sendiri, kerana aktiviti ini dikawal ketat.

Semua produk perisian dibangunkan secara eksklusif atas perintah khas dan dengan kelulusan suruhanjaya kerahsiaan (kini bahagian FSTEC). Pembangun di sana dikehendaki mendaftar dan melesenkan secara literal setiap baris kod. Semua perisian pada mulanya adalah rahsia di peringkat tugas. Ini sebahagiannya menjelaskan mengapa perisian yang kini digunakan untuk melatih pelajar sains roket telah dibangunkan selewat-lewatnya pada 90-an.

Pada masa saya lulus dari institut, saya berjaya bekerja di jabatan teori mekanisme dan mula membangunkan simulator proses pendidikan dalam C++, jadi saya mempunyai contoh untuk perbandingan dan boleh menimbang kebaikan dan keburukan. Pilihannya jelas, dan saya secara beransur-ansur mula hanyut ke arah IT dan robotik. Mekanik gunaan jauh lebih menyeronokkan daripada sains roket: banyak masalah yang tidak dapat diselesaikan, persekitaran terbuka, kekurangan industri pembangunan, keperluan mendesak untuk perisian simulasi. Dalam robotik, terdapat seni bina perisian biasa yang tidak diselesaikan dan keperluan untuk melaksanakan berulang kali algoritma kompleks, termasuk logik kabur dan permulaan AI. Oleh itu, selepas program pertama saya untuk memproses data eksperimen, saya hampir tidak pernah kembali ke roket (kecuali projek pengijazahan saya).

Hasilnya, saya berpeluang bekerja dalam kepakaran saya selama empat bulan sahaja sebelum menamatkan pengajian di sebuah kilang berhampiran Moscow untuk struktur komposit untuk industri aeroangkasa. Selepas menamatkan pengajian saya, saya tidak perlu mencari pekerjaan punβ€”saya segera datang untuk mengajar mekanik gunaan di jabatan robotik.

Dari pengajaran kepada pengaturcaraan

Daripada roket kepada robot dan apa kaitan Python dengannya. Kisah Alumni GeekBrains
Di Kongres Dunia IFTOMM bersama ahli pelajar kumpulan penyelidikan (saya di sebelah kanan)

Saya bekerja di MSTU di jabatan persampelan selama 10 tahun, mengajar kursus mengenai teori mekanisme. Beliau menerbitkan karya saintifik (lihat akhir artikel), secara beransur-ansur beralih dari mekanik ke arah CAD dan robotik. Dan pada akhirnya dia memutuskan untuk meninggalkan pengajaran. Untuk menggambarkan dengan jelas sebab-sebab keputusan ini, saya akan mengatakan bahawa dalam sepuluh tahun kursus pengajian yang saya ajar tidak mengubah satu tempat perpuluhan. Walaupun mekanik gunaan, berdasarkan penerbitan, bergerak ke hadapan dengan sangat, sangat berjaya.

Di samping itu, kerja lebih dan lebih menyerupai kerja birokrasi - laporan, program, piawaian dan banyak kertas. Dalam keadaan sedemikian, keseronokan mengajar digantikan dengan melaporkan penerimaan keseronokan ini, dan ini lebih daripada tidak menyenangkan bagi pakar yang mengamalkan.

Dan akhirnya saya datang ke robotik seperti ini: pada 2007-2009, bersama-sama dengan profesor A. Golovin dan N. Umnov, kami mula menyediakan karya saintifik yang pertama. Di sana saya terpaksa menggunakan algoritma untuk menentukan laluan objek daripada fotografi strob. Daripada topik ini, ia adalah satu langkah kepada penglihatan mesin, OpenCV dan Sistem Operasi Robotik (walaupun pada masa itu saya tidak memikirkan skala sedemikian). Selepas itu, saya akhirnya memberi tumpuan kepada mekanik gunaan dan robotik dalam penyelidikan, dan pembangunan menjadi aktiviti sokongan.

Walau bagaimanapun, untuk mencari pekerjaan baharu dalam robotik, adalah perlu untuk menambah baik dan menambah pengetahuan pengaturcaraan saya. Lagipun, saya tidak pernah belajar IT secara khusus, kecuali untuk kursus universiti selama setahun (ObjectPascal dan Borland VCL dalam C++), dan bergantung pada matematik untuk aspek teori pembangunan.

Pada mulanya saya mempertimbangkan pilihan untuk kursus sepenuh masa di institut asal saya. Benar, dengan cepat menjadi jelas bahawa hampir mustahil untuk menggabungkan pengajian sedemikian dengan kerja di jabatan kerana jadual yang tidak teratur dan kerja yang kerap di luar jadual sendiri (penggantian, dll.). Jadi saya secara beransur-ansur mendapat idea untuk menyelesaikan kursus berbayar dari jauh. Saya datang ke GeekBrains atas cadangan profesor dari pusat latihan Mail.ru Technopark, yang terletak di Baumanka, dan mendaftar dalam kursus Python Programmer.

Kursus-kursus itu tidak menyebabkan sebarang kesulitan, satu-satunya masalah ialah saya sentiasa perlu menggabungkannya dengan kerja di jabatan, kerja saintifik dan acara. Masa sangat sempit sehingga kebanyakan hubungan sosial di luar rumah terpaksa dikorbankan (mujurlah, buat sementara waktu).

Beginilah cara saya mengatasi beban kerja: Saya menyelesaikan masalah di jalan raya. Kemahiran ini, yang dibangunkan melalui banyak perjalanan perniagaan, ternyata sangat berguna, kerana tanpanya saya tidak akan dapat menyelesaikan semua kerja rumah saya (dan ia juga menggantikan meditasi...). Saya belajar mengekod semasa dalam perjalanan menggunakan komputer riba, telefon pintar dan papan kekunci telefon pintar wayarles saya.

Komputer riba saya ialah Dell Latitud 3470, dan mana-mana telefon pintar dengan pepenjuru 5.5 inci atau lebih dipasangkan dengan papan kekunci Logitech K 810 BT akan berfungsi. Secara umum, saya mengesyorkan produk Logitech kepada semua orang; mereka sangat boleh dipercayai dan boleh menahan keadaan penggunaan yang sangat keras (dan ini bukan iklan).

Daripada roket kepada robot dan apa kaitan Python dengannya. Kisah Alumni GeekBrains
Papan kekunci Logitech K810

Python sangat sesuai untuk kerja sedemikian - jika anda mempunyai editor yang baik. Satu lagi penggodaman pengaturcaraan: gunakan sambungan jauh ke desktop atau persekitaran masa jalan. Saya menyelesaikan beberapa tugas menggunakan pelayan web selamat yang menjalankan Django pada komputer rumah saya. Saya bekerja dari kereta api, menggunakan perisian PyDroid, DroidEdit, Maxima.

Mengapa Python?

Tidak lama kemudian saya cuba menggunakan PHP sebagai bahasa skrip sistem. Saya pada mulanya belajar Python sendiri dan sedikit demi sedikit "untuk diri saya sendiri." Saya memutuskan untuk belajar dengan serius selepas saya mengetahui tentang kewujudan sambungan yang berkesan antara Python dan C++ pada peringkat modul - nampaknya menarik untuk berkongsi algoritma yang dioptimumkan dan prosedur penyediaan data dalam bahasa yang sama.

Contoh paling mudah: terdapat sistem kawalan untuk pemacu berkuasa bukan standard, dilaksanakan pada mesin terbenam dengan pemproses RISC, dalam C++. Pengurusan berlaku melalui API yang bergantung kepada mesin luaran, yang menyokong, sebagai contoh, komunikasi antara subsistem melalui rangkaian. Pada tahap yang tinggi, algoritma operasi pemacu tidak dinyahpepijat atau tidak tetap (ia perlu memuatkan algoritma yang berbeza bergantung pada proses kerja).

Salah satu cara terbaik untuk mencapai sistem sedemikian ialah menggunakan API subsistem C++ khusus mesin sebagai asas untuk satu set kelas Python yang dijalankan pada penterjemah merentas platform. Oleh itu, pembangun peringkat atas tidak perlu mengambil kira ciri mesin terbenam dan OSnya; dia hanya akan bekerja dengan kelas Python yang bertindak sebagai "pembungkus" API peringkat rendah.

Saya terpaksa belajar C++ dan Python mengikat hampir dari awal. Ia dengan cepat menjadi jelas bahawa keupayaan berorientasikan objek pada tahap tinggi adalah lebih penting daripada pada tahap rendah. Oleh sebab itu, kami terpaksa mengubah sepenuhnya pendekatan untuk mereka bentuk dan melaksanakan API, memilih kelas di peringkat Python dan berkongsi data global dalam C/C++. Biasakan penjanaan kod: contohnya, rangka kerja ROS itu sendiri menjana nama dan objek dalam Python, jadi anda perlu mengambil kira perbezaan bahasa, terutamanya dalam menaip, semasa mereka bentuk antara muka anda.

Bekerja pada Masa Kini: Python dan Logik Kawalan Robot

Sekarang saya bekerja sebagai pengaturcara Python dan C++ di Pusat Penyelidikan dan Pendidikan Robotik di Universiti Teknikal Negeri Moscow. Kami melaksanakan projek penyelidikan dan alatan perisian yang ditugaskan oleh jabatan kerajaan: kami membangunkan manipulator dengan sistem penglihatan teknikal terbina dalam dan algoritma kawalan automatik peringkat tinggi yang bebas daripada sistem.

Pada masa ini, saya memprogramkan logik peringkat tinggi untuk sistem kawalan robot dalam Python; bahasa ini menghubungkan bersama modul yang sangat dioptimumkan yang ditulis dalam C++, assembler dan Go.

Dalam algoritma kawalan robot pengaturcaraan, dua kumpulan besar algoritma digunakan. Yang pertama dilaksanakan secara langsung pada peralatan, pada tahap yang rendah - ini adalah perisian terbina dalam pengawal pemacu, penumpu talian komunikasi, dan subsistem interaksi pengendali.

Algoritma di sini direka untuk kelajuan pelaksanaan terkawal dan kebolehpercayaan yang melebihi prestasi robot secara keseluruhan. Yang terakhir adalah wajib, kerana keselamatan keseluruhan sistem bergantung pada perisian kawalan peringkat rendah.

Kumpulan kedua algoritma menentukan operasi robot secara keseluruhan. Ini adalah program peringkat tinggi, penekanan dalam pembangunannya adalah pada kejelasan dan kelajuan pelaksanaan algoritma, selalunya agak rumit. Di samping itu, perisian peringkat tinggi pada robot selalunya tertakluk kepada perubahan semasa proses persediaan dan ujian. Untuk perkembangan sedemikian, bahasa yang ditafsirkan untuk tujuan umum sangat diperlukan.

Apakah pengetahuan yang diperlukan untuk kerja sedemikian?

Ia adalah wajib untuk mengkaji bahasa templat C++ dan keupayaan berorientasikan objek Python. Kemahiran yang hampir tidak boleh digantikan ialah keupayaan untuk mereka bentuk dan mendokumentasikan API. Adalah idea yang baik untuk menerokai keupayaan perpustakaan khusus seperti Boost::Python. Mereka yang bekerja dengan perisian peringkat rendah pasti perlu berurusan dengan multithreading (di peringkat kernel) dan panggilan sistem Linux/UNIX/QNX. Untuk meningkatkan pemahaman anda tentang prinsip robotik, adalah sangat berguna untuk membiasakan diri anda dengan rangka kerja Sistem Pengendalian Robotik.

Saya cuba untuk mempunyai sekurang-kurangnya satu tersusun dan satu bahasa pengaturcaraan yang ditafsirkan yang sedang membangun dan dalam permintaan. Ini adalah strategi kemenangan untuk bekerja dalam kejuruteraan, di mana terdapat keperluan berterusan untuk membangunkan algoritma (baca: luar biasa) yang sangat khusus dan melaksanakannya dalam menyusun bahasa. Tugas menyediakan data untuk perisian sedemikian adalah lebih menyenangkan untuk diselesaikan menggunakan bahasa yang ditafsirkan. Pada mulanya, set saya termasuk C++, Pascal dan BASIC, kemudian PHP dan BASH telah ditambah.

Bagaimana alat pembangunan boleh berguna dalam mengajar pelajar

Pelan utama untuk pembangunan profesional sekarang adalah untuk cuba menyediakan asas saintifik untuk penggunaan alat pembangunan perisian profesional dalam pedagogi, untuk membangunkan dan menguji kaedah pengajaran.

Sejak 2016, saya memulakan percubaan besar dalam memperkenalkan alat pembangunan - bahasa pengaturcaraan, IDE, penjana dokumentasi, sistem kawalan versi - ke dalam amalan pengajaran di pendidikan tinggi. Kami kini telah berjaya memperoleh keputusan yang boleh digeneralisasikan secara kualitatif.

Sebagai contoh, pengenalan versi bahan ke dalam proses pendidikan meningkatkan kualiti kerja pelajar dengan ketara, walau bagaimanapun, hanya di bawah syarat wajib: pelajar bekerja bersama dalam projek kongsi. Pembangunan kaedah untuk mengajar disiplin teknikal menggunakan alat pembangunan perisian profesional kini giat dijalankan oleh kumpulan penyelidik saya, yang terdiri daripada pelajar, pemohon dan pelajar program pendidikan tambahan di MSTU.

Ngomong-ngomong, saya tidak meninggalkan amalan mengajar saya - saya membangunkan kursus sepenuh masa mendalam saya sendiri tentang reka bentuk dan pentadbiran Linux untuk Institut Pengajian Lanjutan di MSTU, dan saya mengajarnya sendiri.

Kerja saintifik

Kerja awal
Isu perancangan gaya berjalan apabila mereka bentuk sistem berjalan kaki empat menggunakan contoh pelaksanaan gaya berjalan kuda (2010)

Mengenai isu kinematik dan memuatkan elemen sokongan kaki hadapan kuda dalam peringkat mendekati sokongan sebagai komponen kitaran kerja penggerak berkaki empat (2012)

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

Kaedah untuk mengenal pasti halangan struktur dan aplikasinya dalam mencari objek pelepasan (2018)

Karya lain yang diindeks oleh pangkalan data petikan saintifik boleh dilihat dalam profil saya di ResearchGate. Kebanyakan artikel dikhaskan untuk pergerakan mesin, terdapat karya mengenai pedagogi kejuruteraan dan perisian pendidikan.

Sumber: www.habr.com

Tambah komen