از موشک گرفته تا روبات و پایتون چه ربطی به آن دارد. داستان فارغ التحصیلان GeekBrains

از موشک گرفته تا روبات و پایتون چه ربطی به آن دارد. داستان فارغ التحصیلان GeekBrains
امروز ما داستان انتقال آندری ووکولوف به فناوری اطلاعات را منتشر می کنیم. اشتیاق دوران کودکی او به فضا، او را به تحصیل در رشته علوم موشکی در MSTU سوق داد. واقعیت تلخ باعث شد رویا را فراموش کنم، اما همه چیز جالب تر شد. مطالعه ++C و Python به من اجازه داد تا کار به همان اندازه هیجان انگیز انجام دهم: برنامه نویسی منطق سیستم های کنترل ربات.

شروع

من خوش شانس بودم که در تمام دوران کودکی ام در مورد فضا هیجان زده بودم. بنابراین، بعد از مدرسه، برای یک دقیقه شک نکردم که کجا باید بروم و وارد MSTU شدم. باومن، به دپارتمان مهندسی نیروی محرکه موشک. با این حال، شاخه خود دوره - موتورهای پودری یا مایع موشک های فضایی - اصلاً لازم نیست انتخاب شود: در سال 2001، یک کمیسیون ویژه دانشکده هنوز گروه های هدف متقاضیان را توزیع می کرد. گرفتار بشکه باروت شدم.

در آن زمان، "رونق موشک" فقط در برنامه ها وجود داشت؛ مهندسان حقوق ناچیزی دریافت می کردند و در دفاتر طراحی بسته خاص و موسسات تحقیقاتی بدون چشم اندازی برای رشد شغلی و حرفه ای کار می کردند. با این حال، موشک های پودری در روسیه محصولات صرفا نظامی هستند.

اکنون این منطقه مورد تقاضا است ، اما قبلاً در طول تحصیلاتم متوجه شدم که در علم موشک هر گونه فعالیت به ابتکار شخص تقریباً غیرممکن است. در واقع این خدمت سربازی است. به عنوان مثال، با کار در صنعت موشک، من از این فرصت برای توسعه مستقل نرم افزار، حتی برای خودم، کاملا محروم خواهم بود، زیرا این فعالیت به شدت تنظیم شده است.

همه محصولات نرم افزاری منحصراً بر اساس سفارش خاص و با تأیید کمیسیون رازداری (در حال حاضر یک بخش از FSTEC) توسعه می یابند. توسعه دهنده در آنجا باید به معنای واقعی کلمه هر خط کد را ثبت و مجوز کند. همه نرم افزارها در ابتدا در سطح کار مخفی هستند. این تا حدی توضیح می‌دهد که چرا نرم‌افزاری که اکنون برای آموزش دانشجویان علوم موشکی استفاده می‌شود، در ابتدایی‌ترین زمان در دهه 90 توسعه یافت.

زمانی که از موسسه فارغ التحصیل شدم، موفق به کار در بخش تئوری مکانیسم شدم و شروع به توسعه یک شبیه ساز فرآیند آموزشی در C++ کردم، بنابراین مثالی برای مقایسه داشتم و می توانستم مزایا و معایب را بسنجیم. انتخاب واضح بود و من کم کم به سمت فناوری اطلاعات و روباتیک حرکت کردم. مکانیک کاربردی بسیار سرگرم کننده تر از علم موشک بود: بسیاری از مشکلات حل نشده، محیط باز، فقدان صنعت توسعه، نیاز فوری به نرم افزار شبیه سازی. در رباتیک، معماری ناپایدار نرم افزارهای رایج و نیاز به پیاده سازی مکرر الگوریتم های پیچیده، از جمله منطق فازی و آغاز هوش مصنوعی وجود دارد. بنابراین، پس از اولین برنامه هایم برای پردازش داده های تجربی، تقریباً هرگز به موشک بازگشتم (به استثنای پروژه فارغ التحصیلی).

در نتیجه، قبل از فارغ التحصیلی در کارخانه ای در نزدیکی مسکو برای سازه های کامپوزیتی برای صنعت هوافضا، تنها چهار ماه فرصت کار در تخصص خود را داشتم. پس از اتمام تحصیلاتم، حتی نیازی به جستجوی شغل نداشتم - بلافاصله برای تدریس مکانیک کاربردی در بخش رباتیک آمدم.

از آموزش تا برنامه نویسی

از موشک گرفته تا روبات و پایتون چه ربطی به آن دارد. داستان فارغ التحصیلان GeekBrains
در کنگره جهانی IFTOMM با اعضای دانشجویان گروه تحقیقاتی (من سمت راست)

من به مدت 10 سال در MSTU در بخش نمونه گیری کار کردم و دوره ای را در مورد تئوری مکانیسم ها تدریس کردم. او آثار علمی منتشر کرد (به پایان مقاله مراجعه کنید)، به تدریج از مکانیک به سمت CAD و رباتیک حرکت کرد. و در نهایت تصمیم گرفت تدریس را ترک کند. برای اینکه دلایل این تصمیم را به وضوح نشان دهم، می گویم که طی ده سال دوره تحصیلی که من تدریس کردم یک رقم اعشار تغییر نکرده است. اگرچه مکانیک کاربردی، با قضاوت بر اساس نشریات، بسیار بسیار موفق پیش رفت.

علاوه بر این، کار بیشتر و بیشتر شبیه کار بوروکراتیک - گزارش ها، برنامه ها، استانداردها و تن ها کاغذ بود. در چنین شرایطی، لذت تدریس جای خود را به گزارش از دریافت این لذت می داد و این برای یک متخصص شاغل بیش از آن ناخوشایند است.

و سرانجام به این شکل به رباتیک رسیدم: در سالهای 2007-2009، به همراه اساتید A. Golovin و N. Umnov، شروع به تهیه اولین آثار علمی کردیم. در آنجا مجبور شدم از الگوریتم هایی برای تعیین مسیر اجسام از عکاسی بارق استفاده کنم. از این مبحث، یک قدم تا بینایی ماشین، OpenCV و سیستم عامل رباتیک است (اگرچه در آن زمان من حتی به چنین مقیاسی فکر نمی کردم). پس از آن، در نهایت روی مکانیک کاربردی و رباتیک در تحقیق متمرکز شدم و توسعه به یک فعالیت حمایتی تبدیل شد.

با این حال، برای یافتن شغل جدید در رباتیک، نیاز به بهبود و تکمیل دانش برنامه نویسی ام بود. از این گذشته، من هرگز به طور خاص IT مطالعه نکردم، به جز یک دوره دانشگاهی یک ساله (ObjectPascal و Borland VCL در C++)، و برای جنبه های نظری توسعه به ریاضیات تکیه کردم.

در ابتدا گزینه هایی را برای دوره های تمام وقت در موسسه بومی خود در نظر گرفتم. درست است، به سرعت مشخص شد که ترکیب چنین مطالعاتی با کار در بخش به دلیل برنامه نامنظم و کار مکرر خارج از برنامه خود (تعویض و غیره) تقریبا غیرممکن است. بنابراین به تدریج به این ایده رسیدم که دوره های پولی را از راه دور به پایان برسانم. من به توصیه اساتید مرکز آموزشی Mail.ru Technopark واقع در Baumanka به GeekBrains آمدم و در دوره برنامه نویس پایتون ثبت نام کردم.

دوره ها هیچ مشکلی ایجاد نکردند، تنها مشکل این بود که من دائماً مجبور بودم آنها را با کار در بخش، کارهای علمی و رویدادها ترکیب کنم. زمان آنقدر تنگ بود که بیشتر ارتباطات اجتماعی خارج از خانه باید قربانی می شد (خوشبختانه، به طور موقت).

اینگونه با حجم کار کنار آمدم: مشکلات را در جاده حل کردم. این مهارت که از طریق سفرهای کاری متعدد ایجاد شد، بسیار مفید بود، زیرا بدون آن من حتی نمی توانم تمام تکالیف خود را انجام دهم (و همچنین جایگزین مراقبه می شود ...). من یاد گرفتم که در حال حرکت با استفاده از لپ‌تاپ، تلفن هوشمند و صفحه‌کلیدهای تلفن هوشمند بی‌سیم کدنویسی کنم.

لپ تاپ من Dell Latitude 3470 است و هر گوشی هوشمندی با قطر 5.5 اینچ یا بیشتر که با صفحه کلید Logitech K 810 BT جفت شده باشد، این کار را انجام می دهد. به طور کلی، من محصولات لاجیتک را به همه توصیه می کنم؛ آنها بسیار قابل اعتماد هستند و می توانند در شرایط استفاده بسیار سخت مقاومت کنند (و این هرگز یک تبلیغ نیست).

از موشک گرفته تا روبات و پایتون چه ربطی به آن دارد. داستان فارغ التحصیلان GeekBrains
صفحه کلید Logitech K810

پایتون برای چنین کاری بسیار مفید است - اگر ویرایشگر خوبی دارید. یکی دیگر از هک های برنامه نویسی: از اتصالات راه دور به محیط دسکتاپ یا زمان اجرا استفاده کنید. من چندین کار را با استفاده از یک وب سرور امن که Django را روی رایانه خانگی خود اجرا می کند، انجام دادم. من با استفاده از نرم افزار PyDroid، DroidEdit، Maxima از قطار کار کردم.

چرا پایتون؟

طولی نکشید که سعی کردم از PHP به عنوان یک زبان برنامه نویسی سیستم استفاده کنم. من در ابتدا پایتون را به تنهایی و کم کم برای خودم مطالعه کردم. من تصمیم گرفتم به طور جدی مطالعه کنم پس از اینکه در مورد وجود یک ارتباط موثر بین پایتون و ++C در سطح ماژول مطلع شدم - به نظر می رسید که به اشتراک گذاشتن الگوریتم های بهینه و روش های آماده سازی داده ها در همان زبان جالب باشد.

ساده ترین مثال: یک سیستم کنترل برای یک درایو قدرتمند غیر استاندارد وجود دارد که بر روی یک ماشین تعبیه شده با پردازنده RISC در C++ پیاده سازی شده است. مدیریت از طریق یک API خارجی وابسته به ماشین انجام می شود، که برای مثال از ارتباط بین زیرسیستم ها از طریق یک شبکه پشتیبانی می کند. در سطح بالا، الگوریتم عملیات درایو اشکال زدایی نمی شود یا ثابت نیست (لازم است الگوریتم های مختلف بسته به فرآیند کار بارگیری شود).

یکی از بهترین راه‌ها برای دستیابی به چنین سیستمی، استفاده از API زیرسیستم C++ مخصوص ماشین به‌عنوان پایه مجموعه‌ای از کلاس‌های پایتون است که بر روی یک مفسر کراس پلتفرم اجرا می‌شوند. بنابراین، توسعه‌دهنده سطح بالا نیازی به در نظر گرفتن ویژگی‌های ماشین تعبیه‌شده و سیستم‌عامل آن نخواهد داشت؛ او به سادگی با کلاس‌های Python که به‌عنوان «پوشش‌دهنده» API سطح پایین عمل می‌کنند، کار می‌کند.

من باید C++ و Python binding را تقریباً از ابتدا یاد می گرفتم. به سرعت مشخص شد که قابلیت های شی گرا در سطح بالا بسیار مهمتر از سطح پایین هستند. به همین دلیل، ما مجبور شدیم رویکرد طراحی و پیاده‌سازی API را تغییر دهیم، کلاس‌هایی را در سطح پایتون انتخاب کنیم و داده‌های جهانی را در C/C++ به اشتراک بگذاریم. به تولید کد عادت کنید: به عنوان مثال، چارچوب ROS خود نام ها و اشیاء را در پایتون تولید می کند، بنابراین هنگام طراحی رابط های خود باید تفاوت های زبانی، به خصوص در تایپ را در نظر بگیرید.

کار در زمان حال: پایتون و منطق کنترل ربات

اکنون به عنوان برنامه نویس پایتون و C++ در مرکز تحقیقات و آموزش رباتیک در دانشگاه فنی دولتی مسکو کار می کنم. ما پروژه‌های تحقیقاتی و ابزارهای نرم‌افزاری را به سفارش ادارات دولتی اجرا می‌کنیم: ما دستکاری‌کننده‌ها را با سیستم‌های دید فنی داخلی و الگوریتم‌های کنترل خودکار سطح بالا که مستقل از سیستم‌ها هستند، توسعه می‌دهیم.

در حال حاضر، من منطق سطح بالا را برای سیستم‌های کنترل ربات در پایتون برنامه‌ریزی می‌کنم؛ این زبان ماژول‌های بسیار بهینه‌شده نوشته شده در C++، اسمبلر و Go را به هم پیوند می‌دهد.

در برنامه نویسی الگوریتم های کنترل ربات از دو گروه بزرگ الگوریتم استفاده می شود. اولین آنها به طور مستقیم روی تجهیزات، در سطح پایین اجرا می شود - این نرم افزار داخلی کنترل کننده های درایو، متمرکز کننده های خطوط ارتباطی و زیرسیستم های تعامل اپراتور است.

الگوریتم های اینجا برای سرعت اجرای کنترل شده و قابلیت اطمینان طراحی شده اند که از عملکرد ربات به عنوان یک کل بیشتر است. مورد دوم اجباری است، زیرا امنیت کل سیستم به نرم افزار کنترل سطح پایین بستگی دارد.

گروه دوم الگوریتم ها عملکرد ربات را به عنوان یک کل تعیین می کند. اینها برنامه های سطح بالایی هستند که تأکید در توسعه آنها بر وضوح و سرعت اجرای الگوریتم است که اغلب بسیار پیچیده است. علاوه بر این، نرم‌افزار سطح بالا روی ربات اغلب در طول فرآیند راه‌اندازی و آزمایش تغییر می‌کند. برای چنین توسعه ای، زبان های تفسیری همه منظوره ضروری هستند.

چه دانشی برای چنین کاری لازم است؟

مطالعه زبان قالب C++ و قابلیت های شی گرا پایتون الزامی خواهد بود. یک مهارت تقریبا غیرقابل جایگزین، توانایی طراحی و مستندسازی APIها است. ایده خوبی است که قابلیت های کتابخانه های تخصصی مانند Boost::Python را بررسی کنید. کسانی که با نرم افزارهای سطح پایین کار می کنند، قطعاً باید با تماس های سیستمی چند رشته ای (در سطح هسته) و Linux/UNIX/QNX سروکار داشته باشند. برای بهبود درک خود از اصول رباتیک، آشنایی با چارچوب سیستم عامل روباتیک بسیار مفید است.

من سعی می کنم حداقل یک زبان برنامه نویسی کامپایل شده و تفسیر شده داشته باشم که در حال توسعه و تقاضا باشد. این یک استراتژی برنده برای کار در مهندسی است، جایی که نیاز دائمی به توسعه الگوریتم‌های بسیار تخصصی (بخوانید: غیرمعمول) و پیاده‌سازی آنها در زبان‌های کامپایل وجود دارد. کار آماده سازی داده برای چنین نرم افزارهایی برای حل با استفاده از زبان های تفسیر شده بسیار دلپذیرتر است. در ابتدا مجموعه من شامل C++، Pascal و BASIC بود، بعداً PHP و BASH اضافه شدند.

چگونه ابزار توسعه می تواند در آموزش دانش آموزان مفید باشد

برنامه اصلی توسعه حرفه ای در حال حاضر تلاش برای ارائه یک مبنای علمی برای استفاده از ابزارهای حرفه ای توسعه نرم افزار در آموزش، توسعه و آزمایش روش های تدریس است.

از سال 2016، من آزمایش بزرگی را در معرفی ابزارهای توسعه - زبان های برنامه نویسی، IDE ها، تولیدکنندگان اسناد، سیستم های کنترل نسخه - در تمرین آموزش در آموزش عالی آغاز کردم. ما اکنون موفق به دستیابی به نتایجی شده‌ایم که از نظر کیفی قابل تعمیم هستند.

به عنوان مثال، معرفی نسخه‌سازی مواد در فرآیند آموزشی به طور قابل توجهی کیفیت کار دانش‌آموز را بهبود می‌بخشد، با این حال، تنها تحت یک شرط اجباری: دانش‌آموزان با هم در پروژه‌های مشترک کار می‌کنند. توسعه روش‌هایی برای آموزش رشته‌های فنی با استفاده از ابزارهای حرفه‌ای توسعه نرم‌افزار اکنون به طور فعال توسط گروه تحقیقاتی من متشکل از دانشجویان، متقاضیان و دانشجویان برنامه‌های آموزشی تکمیلی در MSTU انجام می‌شود.

به هر حال، من تمرین تدریس خود را رها نکردم - دوره عمیق تمام وقت خود را در مورد طراحی و مدیریت لینوکس برای مؤسسه مطالعات پیشرفته در MSTU ایجاد کردم و خودم آن را تدریس می کنم.

کارهای علمی

اوایل کار
مسائل برنامه ریزی راه رفتن در طراحی سیستم های راه رفتن چهار پا با استفاده از مثال پیاده سازی راه رفتن اسب (2010/XNUMX/XNUMX)

در مورد موضوع سینماتیک و بارگذاری عنصر نگهدارنده پای جلویی اسب در مرحله نزدیک شدن به تکیه گاه به عنوان اجزای چرخه کاری چهارپای متحرک (2012/XNUMX/XNUMX)

از آخرین
برنامه شبیه سازی ساخت چرخ دنده سه بعدی برای آموزش مکانیزم و تئوری ماشین (2019/XNUMX/XNUMX)

روش شناخت موانع سازه ای و کاربرد آن در جستجوی اجسام امدادی (2018/XNUMX/XNUMX)

سایر آثار نمایه شده توسط پایگاه های استنادی علمی را می توان در نمایه من مشاهده کرد در ResearchGate. بیشتر مقالات به حرکت ماشین ها اختصاص داده شده است، آثاری در مورد آموزش مهندسی و نرم افزار آموزشی وجود دارد.

منبع: www.habr.com

اضافه کردن نظر