2- شروع کار با رآس

تا اینجا درباره برنامه‌نویسی ربات‌ها و تفاوت آن با دیگر برنامه­نویسی­ها صحبت کردیم. در این بخش، یک پلتفرم نرم‌افزاری منحصر به فرد برای برنامه‌نویسی ربات‌ها یعنی سیستم‌عامل ربات یا رآس[20] را مرور می‌کنیم.

رآس چارچوب نرم‌افزاری رایگان و متن‌باز است که در کاربردهای تجاری و کاربردهای تحقیقاتی مورد استفاده قرار می‌گیرد. چارچوب رآس قابلیت­هایی برای برنامه‌نویسی ربات فراهم می‌کند که در ادامه می‌آیند:

  • رابطی برای انتقال پیام بین فرآیندها[21]. رآس جهت ارتباط بین دو برنامه یا فرآیند، رابطی برای انتقال پیام بین آنها فراهم می‌کند. به عنوان مثال، دوربین تصویری را پردازش کرده و مختصاتی را در تصویر پیدا می‌کند، سپس این مختصات به فرآیند ردیابی ارسال می‌شود. فرآیند ردیابی با استفاده از موتورها ردیابی تصویر را انجام می‌دهد. همانطور که ذکر شد، این یکی از ویژگی‌های مورد نیاز برای برنامه ربات است که ارتباط پردازش متقابل[22] نامیده می‌شود زیرا دو فرآیند با یکدیگر ارتباط برقرار می‌کنند.
  • قابلیت­هایی همانند سیستم‌عامل[23]. همانطور که می‌دانید رآس یک سیستم‌عامل واقعی نیست. در واقع یک سیستم‌عامل متا است که برخی از قابلیت­های سیستم‌عامل از قبیل چندرشته­ای، کنترل دستگاه سطح پایین، مدیریت بسته، و انتزاع سخت‌افزاری[24] را فراهم می‌کند. لایه انتزاع سخت­افزاری برنامه­نویسان را قادر میسازد تا برای یک دستگاه برنامه بنویسند. مزیتش آن است که می‌توان برای حسگری که در برندهای مختلف به یک شیوه کار می‌کند، یک کد نوشت. بنابراین، در هنگام جایگزینی حسگر فعلی با حسگر جدید از برندی دیگر، نیازی به بازنویسی کد نیست. مدیریت بسته به کاربران کمک می‌کند تا برنامه­شان را در واحدهایی به‌نام بسته[25] دسته­بندی کنند. هر بسته دارای منبع کد، فایل‌های پیکربندی، و فایل­های مختص برنامه­های خاص است. این بسته‌ها می‌توانند روی رایانه‌های دیگر توزیع و نصب شوند.
  • ابزارها و پشتیبانی از زبان برنامه‌نویسی سطح بالا[26]. یکی از مزایای رآس این است که از زبان­های برنامه‌نویسی محبوب مورد استفاده در برنامه­نویسی ربات، از جمله C++، Python و Lisp پشتیبانی می‌کند. پشتیبانی تجربی[27] برای زبان­هایی مانند C#، Java، js و غیره نیز وجود دارد که لیست کاملی از آنها در ویکی رآس[28] موجود است. رآس کتابخانه‌های مشتری برای این زبان‌ها فراهم می‌کند، به این معنی که برنامه‌نویس می‌تواند قابلیت‌های رآس را در زبان‌های ذکر شده بکار گیرد. برای مثال، اگر کاربری بخواهد برنامه اندرویدی که از قابلیت­های رآس استفاده می­کند را اجرا کند، از کتابخانه مشتری rosjava می‌تواند استفاده کند. رآس همچنین ابزارهایی برای ایجاد برنامه‌های کاربردی رباتیک فراهم می‌کند. با استفاده از این ابزارها می‌توانیم بسته‌های زیادی با یک دستور واحد ایجاد کنیم. این انعطاف­پذیری به برنامه‌نویسان کمک می‌کند زمان کمتری برای ایجاد سیستم در برنامه‌های خود صرف کنند.
  • دسترسی کتابخانه‌های شخص ثالث. چارچوب رآس با محبوب­ترین کتابخانه‌های شخص ثالث ادغام شده است؛ برای مثال با OpenCV[29] در بینایی رباتیک ادغام شده است، همچنین با PCL[30] در درک سه بعدی ربات[31] ادغام شده است. این کتابخانه‌ها رآس را قوی تر می‌کنند و برنامه‌نویس می‌تواند برنامه­های کاربردی قدرتمندی بر مبنای آنها ایجاد کند.
  • الگوریتم‌های خارج از قفسه[32]. رآس از الگوریتم‌های رباتیک محبوبی مانند PID[33] ؛ SLAM[34] ؛ و تولیدکننده­های مسیر مانند A *، Dijkstra[35] و AMCL[36] بهره می­برد. فهرست الگوریتم­های به­کارگیری شده در رآس در حال توسعه است. استفاده از الگوریتم‌های خارج از قفسه، زمان توسعه برای نمونه­سازی یک ربات را کاهش می‌دهد.
  • سهولت در نمونه­سازی. یکی از مزایای رآس الگوریتم‌های خارج از قفسه است. در کنار آن، رآس دارای بسته‌هایی است که می‌توانند مجددا به راحتی با هر ربات استفاده شوند؛ برای مثال، ما می‌توانیم موبایل ربات‌های خود را به راحتی با سفارشی کردن یک بسته موبایل ربات موجود در مخزن رآس نمونه­سازی کنیم. به راحتی می‌توان از مخزن رآس دوباره استفاده کرد، زیرا بیشتر بسته‌ها متن­باز هستند و برای اهداف تجاری و تحقیقاتی قابل استفاده مجدد هستند. بنابراین، این قابلیت می‌تواند زمان توسعه نرم‌افزار ربات را کاهش دهد.
  • اکوسیستم/ جامعه­ی پشتیبان[37]. دلیل اصلی محبوبیت و توسعه رآس، جامعه­ی پشتیبان آن است. توسعه­دهندگان رآس در سراسر جهان وجود دارند. آنها فعالانه بسته‌های رآس را توسعه داده و از آنها نگه­داری می‌کنند. جامعه­ی بزرگ پشتیبان شامل پاسخ به سوالات توسعه­دهندگان مرتبط با رآس می­شود. پلتفرمی ‌برای پرسشهای مربوط به رآس به‌نام ROS Answers[38] وجود دارد. همچنین انجمن آنلاین ROS Discourse[39] موجود است که در آن کاربران رآس در مورد موضوعات مختلف بحث کرده و اخبار مربوط به رآس را منتشر می‌کنند.
  • ‌شبیه‌ساز‌ها و ابزاری گسترده[40]. رآس دارای ابزارهای گرافیکی GUI و دستورات خط­فرمان برای خطایابی، تجسم و شبیه­سازی برنامه‌های کاربردی رباتیک است. این ابزارها برای کار با ربات بسیار مفید هستند. برای مثال، ابزار Rviz[41] برای تجسم داده­های دوربین‌ها، اسکنرهای لیزری، واحدهای اندازه­گیری اینرسی و غیره استفاده می‌شود. برای کار با ‌شبیه‌ساز‌های ربات، ‌شبیه‌ساز‌هایی مانند گزبو وجود دارند.

[20] www.ros.org

[21] Message passing interface between processes

[22] Interprocess communication

[23] Operating system-like features

[24] hardware abstraction

[25] package

[26] High-level programming language support and tools

[27] Experimental supports

[28] http://wiki.ros.org/Client%20Libraries

[29] https://opencv.org

[30] http://pointclouds.org

[31] 3D robot perception

[32] Off-the-shelf algorithms: الگوریتم‌هایی که توسط شخص دیگری توسعه یافته و در دسترس است

[33] http://wiki.ros.org/pid

[34] Simultaneous Localization and Mapping : http://wiki.ros.org/gmapping

[35] http://wiki.ros.org/global_planner

[36] Adaptive Monte Carlo Localization : http://wiki.ros.org/amcl

[37] Ecosystem/community support

[38] https://answers.ros.org/questions

[39] https://discourse.ros.org

[40] Extensive tools and simulators

[41] http://wiki.ros.org/rviz