من الصواريخ إلى الروبوتات وما علاقة بايثون بها. قصة خريجي GeekBrains

من الصواريخ إلى الروبوتات وما علاقة بايثون بها. قصة خريجي GeekBrains
ننشر اليوم قصة انتقال أندريه فوكولوف إلى تكنولوجيا المعلومات. قاده شغفه بالفضاء في طفولته إلى دراسة علوم الصواريخ في جامعة MSTU. الواقع القاسي جعلني أنسى الحلم، لكن كل شيء أصبح أكثر إثارة للاهتمام. أتاحت لي دراسة لغة C++ وPython القيام بعمل مثير بنفس القدر: برمجة منطق أنظمة التحكم في الروبوتات.

بداية

لقد كنت محظوظًا لأنني كنت مهتمًا بالفضاء طوال طفولتي. لذلك، بعد المدرسة، لم أشك لمدة دقيقة في المكان الذي يجب أن أذهب إليه للدراسة، ودخلت جامعة MSTU. بومان، إلى قسم هندسة الدفع الصاروخي. ومع ذلك، لم يكن من الضروري اختيار فرع الدورة نفسها - المحركات المسحوقة أو السائلة للصواريخ الفضائية - على الإطلاق: في عام 2001، لا تزال لجنة هيئة التدريس الخاصة توزع المجموعات المستهدفة من المتقدمين. لقد تم القبض علي في برميل من البارود.

في ذلك الوقت، كانت "الطفرة الصاروخية" موجودة فقط في الخطط؛ وكان المهندسون يتقاضون رواتب هزيلة ويعملون في مكاتب تصميم خاصة مغلقة ومعاهد بحثية مع عدم وجود أي احتمالات للنمو الوظيفي والمهني. ومع ذلك، فإن الصواريخ المسحوقة في روسيا هي منتجات عسكرية بحتة.

الآن هناك طلب على هذا المجال، ولكن بالفعل أثناء دراستي أدركت أنه في علم الصواريخ، فإن أي نشاط بمبادرة شخصية يكاد يكون مستحيلاً. في الواقع، هذه هي الخدمة العسكرية. على سبيل المثال، العمل في صناعة الصواريخ، سأكون محرومًا تمامًا من فرصة تطوير البرامج بشكل مستقل، حتى لنفسي، حيث يتم تنظيم هذا النشاط بشكل صارم.

يتم تطوير جميع المنتجات البرمجية حصريًا بناءً على طلب خاص وبموافقة لجنة السرية (التي أصبحت الآن أحد أقسام FSTEC). مطلوب من المطور التسجيل والترخيص حرفيًا لكل سطر من التعليمات البرمجية. تكون جميع البرامج سرية في البداية على مستوى المهمة. وهذا ما يفسر جزئيًا سبب تطوير البرنامج المستخدم الآن لتدريب طلاب علوم الصواريخ في التسعينيات على أبعد تقدير.

بحلول الوقت الذي تخرجت فيه من المعهد، تمكنت من العمل في قسم نظرية الآليات وبدأت في تطوير جهاز محاكاة للعملية التعليمية بلغة C++، لذلك كان لدي مثال للمقارنة ويمكنني الموازنة بين الإيجابيات والسلبيات. كان الاختيار واضحًا، وبدأت تدريجيًا في الانجراف نحو تكنولوجيا المعلومات والروبوتات. كانت الميكانيكا التطبيقية أكثر متعة من علم الصواريخ: العديد من المشكلات التي لم يتم حلها، والبيئة المفتوحة، والافتقار إلى صناعة التطوير، والحاجة الملحة لبرامج المحاكاة. في مجال الروبوتات، هناك بنية غير مستقرة للبرمجيات المشتركة والحاجة إلى تنفيذ خوارزميات معقدة بشكل متكرر، بما في ذلك المنطق الغامض وبدايات الذكاء الاصطناعي. لذلك، بعد برامجي الأولى لمعالجة البيانات التجريبية، لم أعود أبدًا إلى الصواريخ (باستثناء مشروع التخرج).

ونتيجة لذلك، أتيحت لي الفرصة للعمل في تخصصي لمدة أربعة أشهر فقط قبل التخرج في مصنع بالقرب من موسكو للهياكل المركبة لصناعة الطيران. بعد الانتهاء من دراستي، لم أضطر حتى إلى البحث عن وظيفة، فقد جئت على الفور لتدريس الميكانيكا التطبيقية في قسم الروبوتات.

من التدريس إلى البرمجة

من الصواريخ إلى الروبوتات وما علاقة بايثون بها. قصة خريجي GeekBrains
في مؤتمر IFTOMM العالمي مع الطلاب الأعضاء في مجموعة البحث (أنا على اليمين)

عملت في جامعة MSTU في قسم أخذ العينات لمدة 10 سنوات، حيث قمت بتدريس دورة حول نظرية الآليات. قام بنشر أعمال علمية (انظر نهاية المقال)، وانتقل تدريجياً من الميكانيكا إلى التصميم بمساعدة الكمبيوتر (CAD) والروبوتات. وفي النهاية قرر ترك التدريس. لتوضيح أسباب هذا القرار بشكل أوضح، سأقول أنه خلال عشر سنوات، لم يتغير مسار الدراسة الذي قمت بتدريسه بمنزلة عشرية واحدة. على الرغم من أن الميكانيكا التطبيقية، وفقًا للمنشورات، قد تقدمت بنجاح كبير جدًا.

بالإضافة إلى ذلك، أصبح العمل يشبه العمل البيروقراطي بشكل متزايد - التقارير والبرامج والمعايير وأطنان من الورق. في مثل هذه الظروف، تم استبدال متعة التدريس بالإبلاغ عن استلام هذه المتعة، وهذا أكثر من غير سارة للمتخصص الممارس.

وأخيرا جئت إلى الروبوتات مثل هذا: في 2007-2009، جنبا إلى جنب مع الأستاذين أ. جولوفين و N. Umnov، بدأنا في إعداد الأعمال العلمية الأولى. هناك اضطررت إلى استخدام الخوارزميات لتحديد مسارات الأشياء من التصوير الفوتوغرافي القوي. من هذا الموضوع، إنها خطوة واحدة نحو رؤية الآلة وOpenCV ونظام التشغيل الآلي (على الرغم من أنني لم أفكر في مثل هذا النطاق في ذلك الوقت). بعد ذلك، ركزت أخيرًا على الميكانيكا التطبيقية والروبوتات في الأبحاث، وأصبح التطوير نشاطًا داعمًا.

ومع ذلك، للعثور على وظيفة جديدة في مجال الروبوتات، كان من الضروري تحسين معرفتي بالبرمجة واستكمالها. ففي نهاية المطاف، لم أدرس تكنولوجيا المعلومات على وجه التحديد قط، باستثناء دورة جامعية لمدة عام (ObjectPascal وBorland VCL في لغة C++)، واعتمدت على الرياضيات في الجوانب النظرية للتنمية.

في البداية فكرت في خيارات الدورات بدوام كامل في المعهد الأصلي الخاص بي. صحيح أنه سرعان ما أصبح من الواضح أنه سيكون من المستحيل تقريبًا الجمع بين هذه الدراسات والعمل في القسم بسبب الجدول الزمني غير المنتظم والعمل المتكرر خارج الجدول الزمني الخاص بالفرد (الاستبدال، وما إلى ذلك). لذلك توصلت تدريجياً إلى فكرة إكمال الدورات المدفوعة عن بعد. جئت إلى GeekBrains بناءً على توصية من أساتذة مركز تدريب Mail.ru Technopark الموجود في Baumanka، وقمت بالتسجيل في دورة Python Programmer.

لم تسبب الدورات أي صعوبات، المشكلة الوحيدة هي أنني اضطررت باستمرار إلى دمجها مع العمل في القسم والأعمال والفعاليات العلمية. كان الوقت ضيقًا جدًا لدرجة أنه كان لا بد من التضحية بمعظم الروابط الاجتماعية خارج المنزل (لحسن الحظ، مؤقتًا).

هذه هي الطريقة التي تعاملت بها مع عبء العمل: لقد قمت بحل المشكلات على الطريق. لقد تبين أن هذه المهارة، التي تم تطويرها من خلال العديد من رحلات العمل، مفيدة جدًا، لأنه بدونها لن أتمكن حتى من إكمال جميع واجباتي المنزلية (وهي أيضًا تحل محل التأمل...). لقد تعلمت البرمجة أثناء التنقل باستخدام لوحات مفاتيح الكمبيوتر المحمول والهاتف الذكي والهواتف الذكية اللاسلكية.

جهاز الكمبيوتر المحمول الخاص بي هو Dell Latitude 3470، وأي هاتف ذكي بقطر 5.5 بوصة أو أكثر مقترنًا بلوحة مفاتيح Logitech K 810 BT سيفي بالغرض. بشكل عام، أوصي بمنتجات Logitech للجميع، فهي موثوقة جدًا ويمكنها تحمل ظروف الاستخدام القاسية جدًا (وهذا ليس إعلانًا أبدًا).

من الصواريخ إلى الروبوتات وما علاقة بايثون بها. قصة خريجي GeekBrains
لوحة المفاتيح Logitech K810

تعتبر Python مفيدة جدًا لمثل هذا العمل - إذا كان لديك محرر جيد. اختراق برمجة آخر: استخدم الاتصالات عن بعد بسطح المكتب أو بيئة وقت التشغيل. لقد أكملت العديد من المهام باستخدام خادم ويب آمن يقوم بتشغيل Django على جهاز الكمبيوتر المنزلي الخاص بي. عملت من القطار باستخدام برامج PyDroid وDroidEdit وMaxima.

لماذا بايثون؟

لم يمض وقت طويل قبل أن أحاول استخدام PHP كلغة برمجة نصية للنظام. لقد قمت في البداية بدراسة بايثون بمفردي، ثم شيئًا فشيئًا "لنفسي". قررت الدراسة بجدية بعد أن علمت بوجود اتصال فعال بين Python وC++ على مستوى الوحدة - بدا من المثير للاهتمام مشاركة الخوارزميات المحسنة وإجراءات إعداد البيانات داخل نفس اللغة.

أبسط مثال: يوجد نظام تحكم لمحرك أقراص قوي غير قياسي، يتم تنفيذه على جهاز مدمج مزود بمعالج RISC، بلغة C++. تتم الإدارة من خلال واجهة برمجة تطبيقات خارجية تعتمد على الجهاز، والتي تدعم، على سبيل المثال، الاتصال بين الأنظمة الفرعية عبر الشبكة. على مستوى عالٍ، لا يتم تصحيح أخطاء خوارزمية تشغيل محرك الأقراص أو أنها ليست ثابتة (من الضروري تحميل خوارزميات مختلفة اعتمادًا على عملية العمل).

إحدى أفضل الطرق لتحقيق مثل هذا النظام هي استخدام واجهة برمجة تطبيقات النظام الفرعي C++ الخاصة بالجهاز كأساس لمجموعة من فئات Python التي تعمل على مترجم عبر الأنظمة الأساسية. وبالتالي، لن يتعين على مطور المستوى الأعلى أن يأخذ في الاعتبار ميزات الجهاز المضمن ونظام التشغيل الخاص به، بل سيعمل ببساطة مع فئات Python التي تعمل بمثابة "مغلفات" لواجهة برمجة التطبيقات (API) ذات المستوى المنخفض.

كان عليّ أن أتعلم ربط C++ وPython من الصفر تقريبًا. وسرعان ما أصبح من الواضح أن القدرات الموجهة للكائنات على مستوى عالٍ كانت أكثر أهمية بكثير منها على مستوى منخفض. ولهذا السبب، كان علينا تغيير النهج المتبع في تصميم وتنفيذ واجهة برمجة التطبيقات (API) تمامًا، واختيار الفئات على مستوى Python والبيانات العالمية المشتركة في C/C++. التعود على إنشاء التعليمات البرمجية: على سبيل المثال، يقوم إطار عمل ROS نفسه بإنشاء أسماء وكائنات في Python، لذلك عليك أن تأخذ في الاعتبار الاختلافات اللغوية، خاصة في الكتابة، عند تصميم واجهاتك.

العمل في الوقت الحاضر: منطق التحكم في بايثون والروبوت

أعمل الآن كمبرمج Python وC++ في مركز أبحاث وتعليم الروبوتات في جامعة موسكو التقنية الحكومية. نقوم بتنفيذ مشاريع بحثية وأدوات برمجية بتكليف من الإدارات الحكومية: نقوم بتطوير أجهزة مناولة مزودة بأنظمة رؤية تقنية مدمجة وخوارزميات تحكم أوتوماتيكية عالية المستوى مستقلة عن الأنظمة.

حاليًا، أقوم ببرمجة منطق عالي المستوى لأنظمة التحكم في الروبوتات بلغة بايثون، وتربط هذه اللغة معًا وحدات محسنة للغاية مكتوبة بلغة C++، والمجمع، وGo.

في برمجة خوارزميات التحكم في الروبوت، يتم استخدام مجموعتين كبيرتين من الخوارزميات. يتم تنفيذ أولها مباشرة على الجهاز، على مستوى منخفض - وهذا هو البرنامج المدمج لوحدات تحكم محرك الأقراص، ومكثفات خط الاتصال، والأنظمة الفرعية لتفاعل المشغل.

تم تصميم الخوارزميات هنا للتحكم في سرعة التنفيذ والموثوقية التي تتجاوز أداء الروبوت ككل. وهذا الأخير إلزامي، لأن أمان النظام بأكمله يعتمد على برامج التحكم ذات المستوى المنخفض.

تحدد المجموعة الثانية من الخوارزميات عمل الروبوت ككل. هذه برامج عالية المستوى، يتم التركيز في تطويرها على وضوح وسرعة تنفيذ الخوارزمية، وغالبًا ما تكون معقدة للغاية. بالإضافة إلى ذلك، غالبًا ما تكون البرامج عالية المستوى الموجودة على الروبوت عرضة للتغيير أثناء عملية الإعداد والاختبار. ولتحقيق هذا التطور، لا غنى عن اللغات المترجمة للأغراض العامة.

ما هي المعرفة اللازمة لمثل هذا العمل؟

سيكون من الضروري دراسة لغة قالب C++ وإمكانيات Python الموجهة للكائنات. إحدى المهارات التي لا يمكن الاستغناء عنها تقريبًا هي القدرة على تصميم وتوثيق واجهات برمجة التطبيقات. ستكون فكرة جيدة استكشاف إمكانيات المكتبات المتخصصة مثل Boost::Python. من المؤكد أن أولئك الذين يعملون مع برامج منخفضة المستوى سيتعين عليهم التعامل مع تعدد مؤشرات الترابط (على مستوى النواة) واستدعاءات نظام Linux/UNIX/QNX. لتحسين فهمك لمبادئ الروبوتات، من المفيد جدًا التعرف على إطار عمل نظام التشغيل الروبوتي.

أحاول أن يكون لدي على الأقل لغة برمجة واحدة مترجمة ومترجمة واحدة قيد التطوير والطلب. هذه استراتيجية ناجحة للعمل في مجال الهندسة، حيث توجد حاجة مستمرة لتطوير خوارزميات متخصصة للغاية (اقرأ: غير عادية) وتنفيذها في تجميع اللغات. تعد مهمة إعداد البيانات لمثل هذه البرامج أكثر متعة في حلها باستخدام اللغات المترجمة. في البداية، كانت مجموعتي تتضمن C++، وPascal، وBASIC، ثم تمت إضافة PHP وBASH لاحقًا.

كيف يمكن أن تكون أدوات التطوير مفيدة في تعليم الطلاب

الخطة الرئيسية للتطوير المهني الآن هي محاولة توفير أساس علمي لاستخدام أدوات تطوير البرمجيات المهنية في أصول التدريس، لتطوير واختبار أساليب التدريس.

منذ عام 2016، بدأت تجربة كبيرة في إدخال أدوات التطوير - لغات البرمجة، وIDEs، ومولدات التوثيق، وأنظمة التحكم في الإصدارات - في ممارسة التدريس في التعليم العالي. لقد نجحنا الآن في الحصول على نتائج يمكن تعميمها نوعيا.

على سبيل المثال، يؤدي إدخال إصدارات المواد في العملية التعليمية إلى تحسين جودة عمل الطلاب بشكل كبير، ولكن فقط في ظل شرط إلزامي: عمل الطلاب معًا في مشاريع مشتركة. يتم الآن تطوير طرق تدريس التخصصات الفنية باستخدام أدوات تطوير البرمجيات الاحترافية من قبل مجموعة البحث الخاصة بي، والتي تتكون من الطلاب والمتقدمين وطلاب برامج التعليم الإضافي في جامعة MSTU.

بالمناسبة، لم أترك ممارستي التعليمية - لقد طورت دورة تدريبية متعمقة بدوام كامل حول تصميم وإدارة Linux لمعهد الدراسات المتقدمة بجامعة MSTU، وأقوم بتدريسها بنفسي.

العمل العلمي

الأعمال المبكرة
قضايا تخطيط المشية عند تصميم أنظمة المشي ذات الأربع أرجل باستخدام مثال تنفيذ مشية الحصان (2010 g.)

في موضوع حركيات وتحميل العنصر الداعم لرجل الحصان الأمامية في مرحلة الاقتراب من المسند كمكونات دورة عمل المحرك رباعي الأرجل (2012 g.)

من الماضي
تطبيق محاكاة تصنيع العتاد ثلاثي الأبعاد لآلية التدريس ونظرية الآلة (2019 g.)

طريقة التعرف على العوائق الهيكلية وتطبيقها في البحث عن الأشياء الإغاثة (2018 g.)

يمكن الاطلاع على الأعمال الأخرى المفهرسة بواسطة قواعد بيانات الاستشهاد العلمي في ملفي الشخصي على ResearchGate. معظم المقالات مخصصة لحركة الآلات، وهناك أعمال حول أصول التدريس الهندسية والبرامج التعليمية.

المصدر: www.habr.com

إضافة تعليق