1-1- چرا برنامه‌نویسی ربات­ها متفاوت است؟

برنامه‌نویسی ربات زیر مجموعه­ای از برنامه‌نویسی رایانه است. اکثر ربات­ها “مغزی” دارند که می‌تواند تصمیم بگیرد. این مغز می‌تواند یک میکروکنترلر یا یک رایانه باشد. تفاوت برنامه­نویسی ربات و برنامه‌نویسی معمولی، دستگاه­های ورودی و خروجی است. دستگاه­های ورودی شامل حسگرهای ربات، دسته­ی آموزش، و صفحه نمایش لمسی هستند، و دستگاه­های خروجی شامل صفحه نمایش LCD و عملگرها است.

هر یک از زبان­های برنامه­نویسی می­توانند در برنامه­نویسی ربات­ها استفاده شوند، اما فاکتورهایی نظیر پشتیبانی خوب، عملکرد و زمان نمونه برداری پایتون و C++ را از همه رایج­تر کرده است.

در زیر برخی از ویژگی­های ضروری برای برنامه­نویسی ربات آمده­اند.

  • رشته­کشی[7]: همان طور که در بلوک دیاگرام ربات دیده می‌شود، تعدادی حسگر و عملگر در یک ربات وجود دارد. بنابراین به یک زبان برنامه‌نویسی سازگار چندرشته­ای[8] نیاز داریم تا با حسگرها و عملگرهای مختلف در رشته­های مختلف کار کنیم. به این کار چندوظیفه­ای[9] گفته می‌شود. رشته­ها می‌توانند با یکدیگر ارتباط برقرار کرده و داده­ها را مبادله کنند.
  • برنامه‌نویسی شیءگرا سطح بالا[10] : همانطور که از قبل می‌دانید، یکی از خصوصیات بارز زبان­های برنامه­نویسی شیءگرا مدولار بودن آنها است که سبب می‌شود به راحتی بتوان از قطعات کد استفاده مجدد کرد. در مقایسه با زبان­های برنامه­نویسی غیر شیءگرا نگهداری کد نیز آسانتر است. این ویژگی­ها نرم­افزار بهتری برای ربات­ها ایجاد می­کند.
  • کنترل دستگاه سطح پایین[11] : زبان­های برنامه­نویسی سطح بالا می­توانند به دستگاه­های سطح پایین مانند پین­های GPIO[12] (ورودی/ خروجی­هایی با مقاصد عمومی)، پورت­های سریال، پورت‌های موازی، USB، SPI و I2C دسترسی داشته باشند. زبان­های برنامه­نویسی مانند C/C++ و پایتون می­توانند با دستگاه­های سطح پایین کار کنند، به همین دلیل این زبان­ها در رایانه­های تک بوردی مانند رزبری­پای و آردوینو ترجیح داده می‌شوند.
  • سهولت نمونه­سازی[13] : سادگی نمونه­سازی الگوریتم ربات قطعا یکی از معیارهای انتخاب زبان برنامه­نویسی ربات است. پایتون انتخاب خوبی برای نمونه­سازی سریع الگوریتم‌های ربات است.
  • ارتباط پردازش متقابل[14] : یک ربات دارای حسگرها و عملگرهای زیادی است. می‌توانیم از معماری چندتایی استفاده کرده و یا یک برنامه مستقل برای انجام هر کاری بنویسیم؛ به عنوان مثال، یک برنامه تصاویر دوربین را گرفته و تشخیص چهره می­دهد و برنامه­ای دیگر، داده­ها را به بورد امبدد می‌فرستد. این دو برنامه می‌توانند برای تبادل اطلاعات با یکدیگر ارتباط برقرار کنند. این ویژگی به جای یک سیستم چندرشته­ای، برنامه­های چندگانه ایجاد می‌کند. سیستم چندرشته­ای از اجرای برنامه­های چندگانه موازی پیچیده­تر است. برنامه­نویسی سوکت[15] نمونه­ای از ارتباطات پردازش­ متقابل است.
  • کارایی[16] : اگر با حسگرهای پهنای باند بالا مانند دوربین­های عمق[17] و اسکنرهای لیزری کار کنیم، مشخصا به دستگاه محاسباتی قدرتمندی برای پردازش داده­ها نیاز است. یک زبان برنامه­نویسی خوب بدون بارگذاری دستگاه محاسباتی، تنها دستگاه محاسباتی مناسب را اختصاص دهد. زبان برنامه­نویسی C++ انتخاب خوبی در اینگونه موارد است.
  • جامعه­ی پشتیبان[18] : هنگام انتخاب هر زبان برنامه­نویسی برای برنامه­نویسی ربات اطمینان حاصل کنید که به اندازه کافی جامعه­ی پشتیبان از جمله انجمن­ها و وبلاگ­ها برای آن زبان وجود دارد.
  • دسترسی به کتابخانه­های شخص ثالث[19] : در دسترس بودن کتابخانه­های شخص ثالث می­تواند توسعه را آسان کند؛ برای مثال، اگر بخواهیم پردازش تصویر انجام دهیم، می‌توانیم از کتابخانه‌هایی مانند OpenCV استفاده کنیم. اگر زبان برنامه‌نویسی شما از OpenCV پشتیبانی کند، نوشتن برنامه‌های کاربردی پردازش تصویر ساده تر می‌شود.
  • پشتیبانی از چارچوب نرم‌افزار رباتیک موجود: چارچوب­های‌ نرم‌افزاری مانند رآس برای نوشتن برنامه­های ربات وجود دارند. اگر زبان برنامه‌نویسی انتخابی از رآس پشتیبانی کند، نمونه سازی اولیه برنامه ربات ساده تر می‌شود.

[7] threading

[8] Multithreaded compatible programming language

[9] multitasking

[10] High-level object-oriented programming

[11] Low-level device control

[12] General purpose input/output

[13] Ease of prototyping

[14] Interprocess communication

[15] Socket programming

[16] performance

[17] Depth camera

[18] Community support

[19] Availability of third-party library