لوگوی سیستم عامل ربات (رآس)

چرا رآس؟

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

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

رآس چیست؟

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

این توصیف دقیق است و کاملاْ بیان می کند که رآس جایگزینی برای بقیه سیستم عامل ها نیست بلکه در کنار آنها کار می کند. پس مزیت اصلی رآس چیست؟ یادگرفتن رآس به زمان و انرژی زیادی نیاز دارد پس باید مطمئن باشیم که ارزش سرمایه گذاری این را دارد. در ادامه فواید توسعه نرم افزارهای رباتیک که رآس می تواند در این زمینه به ما کمک کند را بررسی می کنیم:

محاسبات توزیع یافته ی رآس

 امروزه بسیاری از ربات ها بر اساس نرم افزارهایی هستند که به وسیله ی چند کامپیوتر اجرا می شود. برای مثال:

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

مسئله ی مشترک در همه ی موارد بالا ایجاد ارتباط بین نرم افزار های مختلف است که ممکن است در یک کامپیوتر یا چند کامپیوتر اجرا شوند. رآس دو مکانیزم ساده برای این نوع ارتباط ها فراهم می کند که در بخش های بعدی به آن می پردازیم.

استفاده دوباره از کدها در رآس

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

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

تست سریع در رآس

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

  • سیستم های خوب طراحی شده رآس کنترل مستقیم سطح پایین سخت افزار را از پردازش سطح بالا و بخش تصمیم گیری جدا می کند. به دلیل این جدایی ما می توانیم به صورت موقت کنترل های سطح پایین و سخت افزارهای مرتبط با آن را با وسیله شبیه ساز جایگزین کنیم تا الگوریتم های سطح بالا را تست کنیم.
  • رآس همچنین امکان ذخیره کردن و بازپخش کردن داده های سنسورها و پیام ها را فراهم می کند. این امکانات یعنی ما می توانیم از زمان بهره ی بیشتری ببریم چون با ثبت کردن داده های سنسور می توانیم آنها را بارها دوباره اجرا کنیم و با روش های مختلف آنها را پردازش کنیم. به این ابزار در رآس بگ (bag) می گوییم و در واقع رآس بگ (rosbag) ابزاری است برای رکورد و دوباره اجرا کردن که در بخش های بعدی به آن می پردازیم.
اطلاعات ذخیره شده و واقعی

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

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

رآس چه چیزهایی نیست

در ادامه مواردی که در مورد رآس درست نیست را بیان می کنیم.

  • رآس یک زبان برنامه نویسی نیست. بلکه در این آموزش توضیح می دهیم چگونه به زبان ++C در رآس برنامه نویسی کنیم. گرچه می توان به زبان های پایتون ،جاوا و لی سپ و دیگر زبان ها هم می توان در این محیط برنامه نویسی کرد.
  • رآس فقط یک کتابخانه نیست. بلکه سرویس های مرکزی و ابزار دستور (command-line) و گرافیکی و ساختن (build) را هم فراهم می کند.
  • رآس یک محیط توسعه مجتمع (Integrated Development Environment) نیست. اگرچه رآس هیچ محیط توسعه ای را تجویز نمی کند اما می تواند با بیشتر IDEهای معمول استفاده شود. البته به نظر شخصی نویسنده استقاده از دستورات command line بدون IDE کاملا منطقی است.

چه انتظاری از رآس داریم

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

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

فصل های رآس و ارتباط آنها

 شکل ارتباط بین فصل های رآس ساختار مجموعه را نشان می دهد. فصل ها با مستطیل و ارتباط بین فصول با بردار نشان داده شده اند. مطالعه این مجموعه با هر ترتیبی که با محدودیت های ذیل هماهنگی داشته باشد منطقی است. خواندن  این مجموعه برای دانشجویان و محققان و علاقه مندان که می خواهند سریع با رآس آشنا بشوند مفید است. ما فرض کرده ایم که شما با محیط لینوکس آشنا هستید و با ++C برای نوشتن نرم افزار و کنترل ربات آشنا هستید و به طور کلی فرض بر این است که شما از اوبونتو 14.04 و bash فایل ها استفاده می کنید.

قراردادها

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

این کادر نشان دهنده ی یک منبع مشکل متداول است.

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

کادر آبی و خط چین شامل توضیحاتی است که می توان به سرعت از آنها گذر کرد، به ویژه در دور اول مطالعه

برای اطلاعات بیشتر

همان طور که در بالا اشاره شد این مجموعه سعی ندارد یک مرجع جامع برای رآس باشد. شما برای انجام کارهای دلخواهتان حتما به اطلاعات جزیی تری نیاز دارید. خوشبختانه اطلاعات آنلاین زیادی برای رآس وجود دارد.

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

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

توزیع های رآس

ویرایش های رآس، توزیع های رآس نامیده می شوند، و با صفاتی که به ترتیب الفبای انگلیسی هستند نام گذاری می شوند. (این اسم گذاری مانند بقیه پروژه های بزرگ نرم افزاری مانند ابونتو و اندروید است). در حال حاضر ویرایش طولانی مدت ایندیگو (indigo) است. نسخه بعدی jade است که در ماه می 2015 منتشر شده است. نسخه های قبلی شامل Indigo, hydro, groovy, fuerte electric, diamondback, C turtle, box Turtle می باشد. نام این توزیع ها در این آموزش بارها در جاهای مختلف استفاده خواهد شد. برای مشاهده ی آخرین توزیع ها به Distributions مراجعه فرمایید.

 در این آموزش فرض شده است شما از نسخه indigo استفاده می کنید. البته می توانید نسخه های جدید تر را انتخاب کنید.
اگر به هر دلیلی شما از نسخه ی قدیمی تر hydro استفاده می کنید، تقریبا همه ی محتوی این آموزش بدون تغییر قابل تعمیم است.

این مورد در مورد ویرایش groovy هم صادق است. به جز یک مورد مهم: در توزیع های جدیدتر از groovy و (در نتیجه در این آموزش) دستورهای سرعت برای trutle-sim به صورت یک پیام استاندارد و یک نام تاپیک استاندارد برای استفاده دیگر ربات ها تعریف شده است.

در واقع اگر از نسخه ی groovy استفاده می کنید باید تغییرات کوچکی را اعمال کنید:

☜ وقتی پکیج های پیش نیاز را اضاافه می کنید، شما به پکیج turtlesim به جای geometry_msgs نیاز دارید.

☜ سربرگ فایل مرتبط turtlesim/Velocity.h است به جای geometry_msgs/Twist.h.

☜ نوع پیام turtlesim/Velocity دارای دو فیلد است که linear و angular است. این فیلدها مانند فیلدهای linear.x و angular.z در geometry_msgs/Twist است. این تغییرات باید در command line و کد ++C اعمال شود.

ساختن سیستم ها در رآس

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

در ادامه

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

دانلود آموزش رآس

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

کتاب فارسی رآس

ﻧﺴﺨﻪ ﻓﺎﺭﺳﯽ کتاب رآس “ورودی آسان به رآس” (ﺗﺮﺟﻤﻪ ﯼ ﺯﻫﺮﺍ ﺑﺮﻭﺟﻨﯽ)

کتاب انگلیسی رآس

  1. Front matter
  2. Chapter 1. Introduction
  3. Chapter 2. Getting started
  4. Chapter 3. Writing ROS programs
  5. Chapter 4. Log messages
  6. Chapter 5. Graph resource names
  7. Chapter 6. Launch files
  8. Chapter 7. Parameters
  9. Chapter 8. Services
  10. Chapter 9. Recording and replaying messages
  11. Chapter 10. Conclusion
  12. Back matter

کتاب انگلیسی رآس (موبایل)

  1. Front matter
  2. Chapter 1. Introduction
  3. Chapter 2. Getting started
  4. Chapter 3. Writing ROS programs
  5. Chapter 4. Log messages
  6. Chapter 5. Graph resource names
  7. Chapter 6. Launch files
  8. Chapter 7. Parameters
  9. Chapter 8. Services
  10. Chapter 9. Recording and replaying messages
  11. Chapter 10. Conclusion
  12. Back matter

نمونه کدهای رآس

6 پاسخ
  1. محمد تقی
    محمد تقی گفته:

    سلام و خسته نباشید. از مطالب قابل استفاده ای که در سایت قرار دادین جدا تشکر می کنم،بخصوص تشکر دارم از خانم زهرا بروجنی بابت ترجمه ی “ورودی آسان به رآس” و قرار دادن آن در اختیار عموم.

    پاسخ
  2. شيدا
    شيدا گفته:

    سلام
    خيلي از شما ممنونم كه اين آموزش ها رو به اشتراك گذاشتيد، من خيلي استفاده كردم.

    پاسخ
  3. امیر محمد
    امیر محمد گفته:

    بسیار عالی. در ضمن کتاب فارسی آموزش راس هم در سایت نگارنده دانش موجود است

    پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *