چرا رآس؟ (۱)
در ابتدای ورود رباتها به زندگی بشر، برنامهریزی آنها صرفا برای محیطهای خاص انجام میگرفت. در چنین شرایطی با فراهم کردن محیطی کنترلشده و شناختهشده ربات به خوبی از پس فعالیتهای محوله بر میآمد. با پیشرفت علم رباتیک و پیدایش تفکر رباتهای سیارخودمختار مشکلات جدی در توانمندی رباتها احساس میشد، چرا که در این موارد لازم بود ربات در شرایطی ناشناخته کار کند.
رباتیک در سالهای اخیر پیشرفت شگرفی داشته است. سختافزارهای قابلاعتماد و ارزان رباتیک ، از رباتهای متحرک بر زمین تا کوادروتور و رباتهای انساننما، بهصورت گسترده در دسترس هستند. و البته محققین رباتیک الگوریتمهای زیادی برای خودمختار نمودن رباتها توسعه دادهاند. بااینوجود این پیشرفت سریع، درزمینه نرمافزار چالشهای زیادی در رباتیک وجود دارد.
هدف از رآس در سایت رسمیاش بهصورت زیر عنوان شده است:
“رآس یک سیستمعامل رایگان باقابلیت کاربر روی چند سیستمعامل برای ربات است و سرویسهایی که شما از یک سیستمعامل انتظار دارید را فراهم میکند. رآس شامل شبیهساز سختافزار، کنترل سطح پایین، انتقال پیامهای بین پردازشها و مدیریت پکیجها میباشد. بعلاوه رآس شامل ابزارها و کتابخانههایی برای کمپایل کردن و نوشتن و اجرا کردن کد در چند کامپیوتر است”.
این توصیف دقیق است و کاملاً بیان میکند که رآس جایگزینی برای بقیه سیستمعاملها نیست بلکه در کنار آنها کار میکند. پس فایدهی واقعی رآس چیست؟ یادگرفتن رآس به زمان و انرژی زیادی نیاز دارد پس باید مطمئن باشیم که ارزش سرمایهگذاری را دارد. در ادامه فواید توسعه نرمافزارهای رباتیک که رآس میتواند در این زمینه به ما کمک کند را بیان میکنیم.
توزیع محاسبه : امروزه بسیاری از رباتها بر اساس نرمافزارهایی هستند که بهوسیلهی چند کامپیوتر اجرا میشود. برای مثال:
بعضی از رباتها چند کامپیوتر را حمل میکنند که هرکدام یکی از محرکها یا سانسورهای ربات را کنترل میکند.
این ایدهی بسیار خوبی است که حتی با یک کامپیوتر، نرمافزار به بخشهای کوچک و مستقلی،که با همکاری یکدیگر هدف نهایی را تحقق ببخشند، تقسیم شود. این روش “پیچیدگی در ترکیب” (complexity via composition) خوانده میشود.
وقتی چند ربات برای انجام کاری مشترک با هم همکاری میکنند اغلب لازم است که برای راهبری کارهایشان باهم ارتباط برقرار کنند.
انسانها معمولاً دستوری را بهوسیله کامپیوتر، لپتاپ یا موبایل به رباتها میفرستند در این مورد میتوان ارتباط انسان را نیز بهعنوان یک نرمافزار ربات در نظر گرفت. مسئله مشترک در همهی موارد بالا ایجاد ارتباط بین نرمافزارهای مختلف است که ممکن است در یک کامپیوتر یا چند کامپیوتر اجرا شوند. رآس دو مکانیزم ساده برای این نوع ارتباطها فراهم میکند.
استفاده دوباره از کدها: توسعه سریع رباتیک به دلیل جمعآوری الگوریتمهای خوب برای وظایف معمول رباتها مانند جهتیابی، مسیریابی و نقشهکشی و… است. درواقع وجود چنین الگوریتمهایی زمانی مفید خواهد بود که راهی برای پیادهسازی آنها با مفهوم جدید- بدون نیاز به پیادهسازی هر الگوریتم برای هر سیستم جدید – وجود داشته باشد. رآس برای جلوگیری از چنین مشقتی میتواند حداقل از دو راه زیر کمک نماید.
- پکیجهای استاندارد رآس الگوریتمهای رباتیک مهم زیادی که پایدار و قابل عیبیابی و رفع عیب هستند را فراهم میکند.
- پیامهای رآس درواقع استانداری برای ارتباط بین نرمافزارها هستند – یعنی ارتباط رآس با هر دو طرف سختافزار و نرمافزارهایی که الگوریتمهای پیشرفته را پیادهسازی کردهاند، کاملاً فراهمشده است. برای مثال در سایت رآس لیست صدها پکیج وجود دارد. این نوع ارتباطهای استانداردشده نیاز به کدهای
کمکی برای مرتبط کردن قسمت ای مختلف نرمافزار را بسیار کاهش میدهد. بهاینترتیب بعد از یادگرفتن رآس میتوان بیشتر روی ایدههای جدید تمرکز کرد تا اینکه چرخ را دوباره بسازیم.
- تست سریع: یکی از دلایلی که گسترش نرمافزار رباتیک از گسترش بقیه قسمتها چالشبرانگیزتر است، وقتگیر بودن تست و پیدا کردن خطاهاست. ربات واقعی ممکن است همیشه در دسترس نباشد، و وقتی در دسترس است پردازشها بسیار کند و خستهکننده هستند. رآس دو ابزار مؤثر برای این مشکل فراهم میکند.
☜ دستگاههای خوب طراحیشده رآس کنترل مستقیم سطح پایین سختافزار را از پردازش سطح بالا و بخش تصمیمگیری جدا میکند. به دلیل این جدایی ما میتوانیم بهصورت موقت کنترلهای سطح پایین و سختافزارهای مرتبط با آن را بهوسیله شبیهساز جایگزین کنیم تا الگوریتمهای سطح بالا را تست کنیم.
☜ رآس همچنین امکان ذخیره کردن و بازپخش کردن دادههای سنسورها و پیامها را فراهم میکند. این امکانات یعنی ما میتوانیم از زمان بهره بیشتری ببریم چون با ثبت کردن دادههای سنسور میتوانیم آنها را بارها دوباره اجرا کنیم و با روشهای مختلف آنها را پردازش کنیم. به این ابزار در رآس بگ (bag)میگوییم و درواقع رآس بگ (rosbag) ابزاری است برای رکورد کردن و دوباره اجرا کردن. مسئله مهم اینجاست که تفاوت اطلاعات ذخیره شده و سنسور واقعی ناچیز است. چون ربات واقعی، شبیهساز، و دوباره اجرا کردن بگ فایل، هر سه یک نوع دیتای ارتباطی ایجاد میکند. و کدتان لازم نیست در دو مد مختلف کار کند و حتی لازم نیست مشخص کنیم با ربات واقعی در ارتباط است یا با دیتای ذخیرهشده )بگ(. البته رآس تنها پلت فرمی نیست که این قابلیتها را فراهم میکند. اما آنچه را رآس را متمایز میکند جامعه گسترده رباتیکی است که از آن استفاده میکند و آن را پشتیبانی میکند. این پشتیبانی وسیع منطق رآس را ادامهدار، گسترشپذیر و قابلبهبود در آینده نشان میدهد.
رآس چه چیزهایی نیست :
در ادامه مواردی که در مورد رآس درست نیست را بیان میکنیم.
☜ رآس یک زبان برنامهنویسی نیست. بلکه توضیح میدهیم چگونه به زبان C++ در رآس برنامهنویسی کنیم. گرچه میتوان به زبانهای پایتون ، جاوا و لیسپ و دیگر زبانها هم میتوان در این محیط برنامهنویسی کرد.
رآس فقط یک کتابخانه نیست. بلکه سرویسهای مرکزی و ابزار دستوری (command-line )و گرافیکی و ساختن (build) را هم فراهم میکند.
☜ رآس یک محیط توسعه مجتمع (Integrated Development Environment) نیست. اگرچه رآس هیچ محیطی را تجویز نمیکند اما میتواند با بیشتر IDE معمول استفاده شود. البته به نظر شخصی نویسنده ا استفاده از دستورات command line بدون IDE کاملاً منطقی است.
(۱) برگرفته از کتاب ورودی آسان به رآس، ترجمه زهرا بروجنی