راه اندازی ROS با استفاده از داکر (بخش اول)

ROS + Dockerمقدمهبرای اونایی که با ROS (Robot Operation System) سر و کار دارن صد در صد با این مشکل روبرو شدن که کدوم سیستم عامل رو برای کارشون انتخاب کنن: ویندوز، لینوکس یا مکینتاش. تنها گزینه­ای که جلو روی ما لینوکس است ( البته در این چند سال آخیر به ما رحم کردن و ویندوز 10 رو هم قابل دونستن که بشه روش نصب کرد) دومین مشکلی که باهاش مواجه میشیم اینکه کدوم توزیع از ROS رو استفاده کنیم. که هر توزیع ROS روی یک سیستم عامل خاص نصب می­شود یا اینکه باید برای کار روی پروژه­های مختلفی ورژن های مختلفی را باهاش کار کرد. مثلا توزیع Noetic بر روی اوبونتو های 20.04 یا مثلا توزیع Melodic بر روی اوبونتوی 18.04 نصب می­شود یا توزیع Kinetic روی اوبونتوی 16.04 نصب می­شود. بیشتر این توزیع ها در ویندوز نصب نمی­شند و اگر هم نصب شوند فقط درون ویندوز 10 هستند با تازه هفت تا خان.من دیگه توضیح مشکلات توزیع های مختلف ROS2 در ورژن های مختلف اوبونتو رو نمیدم.برای خیلی از برنامه نویس هایی که تازه وارد این شاخه میشن این دوتا سوال پیش میاد چه سیسیتم عاملی و چه ورژنی از ROS.راه حل این مشکل Docker است.من قبل از اینکه با داکر برای حوزه ی رباتیک آشنا بشم فکر می­کردم داکر فقط برای حوزه­های تحت وب و آنلاین است اما فهمیدم که میشه با استفاده از داکر توزیع های مختلف ROS رو درون هر سیستم عاملی به راحتی اجرا کرد.مختصری در مورد ROSساختن یک ربات، کار دشواری است. موتورها، سنسورها، نرم افزار و باطری ها، همشون باید با هم به طوری یکدست برای انجام یه کاری کار کنند. یک راه برای اینکه بتونیم این روند رو ساده کنیم استفاده از Robot Operating System یا به اختصار ROS است، ROS یک نرم افزار رایگان و متن باز است که شامل یک تعداد ابزار و رابط های کاربری برای ساخت ربات های پیشرفته است. بیشتر ربات ها از قسمت های قابل حرکت که بیشتر موتور و مفصل ها هستند، سنسور ها که اطلاعات را از محیط میگیرند و سیستم کنترلی تشکیل شده اند. ROS این امکان رو به برنامه نویس ها میده که سریع وساده این بخش ها رو درست کنند و خیلی راحت با استفاده از Topic ها و massage ها که از ابزارهای ROS هستند ارتباط برقرار کنند. با استفاده از ROS شما می تونین با ربات شبیه سازی شده کار کنین به جای ربات واقعی این ویژگی تست و اموزش رو هم ساده تر و هم کارآمدتر می کند. اگه یه موقع همت کنم یه پست کامل در موردش میذارم.تو این دوره آموزش­ها میخوام چند تا بخشو تو داکر توضیح بدم: دانلود ایمیچ ها­ی راس و راه اندازی اونا و راه اندازی محیط گرافیکی برای محیط ویندوز نصب و راه اندازی محیط گرافیکی داخل لینوکس و نوشتن یک بش فایلنوشتن یک داکر فایل و ایجاد ایمیج اختصاصی و بیان فرق های هر کدوم از دیسترو هانوشتن داکر کامپوز و استفاده از داکر کمپوزدر آخر اجرای یه پروژه داخل ویندوز به وسیله داکراگر وقت کنم یه توضیحاتی در مورد نحوه وصل کردن سخت افزارها هم به داکر میگم.نصب داکر و Xlaunchپس میریم سراغ بخش اول، محیط ROS رو داخل ویندوز نصب می­کنیم البته داخل داکر و برای این کار من از دوتا توزیع Noetic و Humble که هر دوشون از توزیع های پشتیبانی طولانی مدت (LTS) هستند استفاده می­کنم.نکته: اگر با داکر آشنا نیستین میتونین در موردش گوگل کنین چندین دوره آموزشی تو یوتیوب به زبان فارسی هست. اما کلی بخواین بدونین اینه که مثل یک ماشین مجازی می­مونه و میشه یک سیستم عامل کامل رو روش نصب کرد. اما به اندازه یک ماشین مجازی سنگین نیست.اولین قدم برای کار با استفاده از داکر نصب آن روی ویندوز است. میتونین فایل نصب آن را داخل سایت docker.com دانلود کنین و نصب کنین. ( در گوگل docker install windows رو سرچ کیند.)https://docs.docker.com/desktop/install/windows-install/نصب داکر docs.docker.com نکته: از اونجایی که داکرهاب کشور مارو تحریم کرده باید برای اینکه بتونین وارد سایتشون بشین یا از سایتشون دانلود کنین باید از وی پی ان یا از دی ان اس های شکن استفاده کنین.بعد از دانلود داکر باید نرم افزار Xlaunch رو هم دانلود کنین.(برای اجرای GUIها در محیط داکر به این نرم افزار نیاز هست.)https://sourceforge.net/projects/vcxsrv/نصب Xlaunchبعد از نصب داکر و Xlaunch میتونین با استفاده از دستور docker داخل CMD(command prompt) نصب بودن داکر را چک کنین.با استفاده از docker desktop شما میتوانین ایمیج های موجود، کانتینرها و ولیوم هاتونو مدیریت کنین. ممکن است در اولین اجرا یا درون نصب از شما بخواهد wsl 2 را نصب کنین که پس از نصب و ریستارت دوباره بتونین به راحتی با docker desktop کار کنین.اولین قدم برای استفاده از داکر، ایمیج­های ROS هست. من از ایمیج های ROS که توسط osrf در داخل داکرهاب قرار داده شده اند استفاده می­کنم. شما می­توانین توزیع های مختلف با ویژگی­های مختلف رو از داخل داکر هاب این گروه دانلود و استفاده کنین.https://hub.docker.com/r/osrf/ros/tagsاین یکی هم ایمیج های Official رو میذاره.https://hub.docker.com/_/ros/tagsنصب و کار با ROS در ویندوزما کارمونو با نصب توزیع های Noetic و Humble روی ویندوز ادامه می­دهیم.در قسمت CMD دو دستور زیر رو بزنین و ایمیج های این دوتا توزیع رو دانلود کنین.Docker pull osrf/ros:humble-desktop-fullDocker pull osrf/ros:noetic-desktopنکته: فرق نسخه های full و معمولی اینه که خیلی از پکیج ها مثل Gazebo ، Moveit و این قبیل قسمت ها در نسخه full نصب هست ولی در نسخه معمولی این پکیج ها نیستن و باید دستی نصب بشه من با این دو نسخه میرم جلو و در جلو هر کدوم از قسمت هایی که نیازه رو نصب میکنم.پیشنهاد من اینه اگر برای اولین بار هست و میخواین چیزهای مختلف رو امتحان کنین نسخه full رو نصب کنین. البته من تو این آموزش نصب قسمت­های مختلف رو توضیح میدم.پس از pull کردن این دو ایمیج میتونین اونارو داخل قسمت ایمیج­ های docker desktop بینین.ایمیج ها داخل docker desktopشما میتونین این کار ور از طریق CMD هم انجام بدین با تایپ دستور docker imagesایمیج ها با استفاده دستور docker images در ترمینال ویندوز docker run –it osrf/ros:noetic-desktop bashتبریک شما یک کانتینر توزیع noetic داخل ویندوز خودتون دارین و میتونین داخلش برنامه های ROS رو اجرا کنین.ROS Noetic بعد از وارد شدن به کانتینر راس Noetic میتونین با دستور lsb_release –a ورژن لینوکس اجرا که روش نصب هست رو ببینین و با زدن دستور roscore میبینین roscore اجرا میشه و ورژن راس رو بهتون نشون میده برای من noetic ورژن 1.16.0 هست.حالا میریم سراغ اجرای توزیع humble، با اجرای دستور زیر داخل محیط cmd این توزیع رو اجرا کنین.docker run –it osrf/ros:humble-desktop-full bashROS Humbleمیتونین با همون دستور lsb_release –a ورژن لینوکس این توزیع رو ببینین که اوبونتو 22.04 هست و برای دیدن اطلاعات ROS نصب شده من از دستور ros2 doctor –r استفاده کردم و میتونین نتیجه رو تو تصویر بالا ببینین.اجرای RViz داخل داکر ویندوزحالا میریم سراغ بخش جالب محیط­های گرافیکی داخل داکراگه یادتون باشه من گفتم نرم افزار Xlaunch رو نصب کنین اون نرم افزار برای نمایش قسمت های گرافیکی داخل ویندوز استفاده می­شه، وقتی بازش می­کنین با این صفحه روبرو میشین.Xlaunchشما میتونین قسمت display number رو صفر یا هر عددی بدین فقط یادتون باشه چه عددی دادین که بعدا نیازه به این شماره دارین. البته اگر 1- بذارینش خودش میاد اتوماتیک به اولین شماره که آزاده میده که بیشتر مواقع صفر هست. بعدش چندتا next میزنین و تمام برای اجرای یک محیط گرافیکی اماده ست. پس میریم برای اجرای یک محیط گرافیکی داخل Noetic و Humble.من برای اینکار اومدم و RViz رو داخل هر دوش اجرا کردم خب برای Noetic اول اینکه باید roscore اجرا باشه برای اینکار ما یه کانتینر میسازیم و بعدش داخلش roscore رو اجرا می کنیم و بعدش داخل یه ترمینال دیگه به اون کانتینر وصل می شیم و اونجا RViz رو اجرا میکنیم.ساخت کانتیرنر که مثل بالا هست و توضیحشو دادم اما برای اینکه بخوایم به کانتنر وصل بشیم یه اپشن دیگه باید بهش اضافه کنیم که به اون ترمینال بگیم که از این طریق با نرم افزار Xluanch رابطه برقرار کنه.docker exec -e DISPALY=host.docker.internal:0.0 -it ros-container-noetic bashROS Noetic and RVizبرای توزیع humble کار راحت تر است چون نیازی به راه اندازی roscore نیست. با دستور زیر کانتینر رو اجرا میکنیم و بعدش RViz2 را راه اندازی می کنیم.docker run --name ros-container-humble -e DISPALY=host.docker.internal:0.0 -it osrf/ros:humble-desktop-full bashRos Humble and RViz2امیدوارم این اموزش براتون مفید بوده باشه.لطفا اگر نکته ای در مورد نحوه نگارش یا حتی بقیه راه اموزش به نظرتون میاد بهم بگین.https://neonicx.com/