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

ROS + Docker
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
نصب داکر docs.docker.com
نکته: از اونجایی که داکرهاب کشور مارو تحریم کرده باید برای اینکه بتونین وارد سایتشون بشین یا از سایتشون دانلود کنین باید از وی پی ان یا از دی ان اس های شکن استفاده کنین.

بعد از دانلود داکر باید نرم افزار Xlaunch رو هم دانلود کنین.(برای اجرای GUIها در محیط داکر به این نرم افزار نیاز هست.)

https://sourceforge.net/projects/vcxsrv/
نصب Xlaunch
نصب 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-full
Docker pull osrf/ros:noetic-desktop
نکته: فرق نسخه های full و معمولی اینه که خیلی از پکیج ها مثل Gazebo ، Moveit و این قبیل قسمت ها در نسخه full نصب هست ولی در نسخه معمولی این پکیج ها نیستن و باید دستی نصب بشه من با این دو نسخه میرم جلو و در جلو هر کدوم از قسمت هایی که نیازه رو نصب میکنم.
پیشنهاد من اینه اگر برای اولین بار هست و میخواین چیزهای مختلف رو امتحان کنین نسخه full رو نصب کنین. البته من تو این آموزش نصب قسمت­های مختلف رو توضیح میدم.

پس از pull کردن این دو ایمیج میتونین اونارو داخل قسمت ایمیج­ های docker desktop بینین.

ایمیج ها داخل docker desktop
ایمیج ها داخل docker desktop

شما میتونین این کار ور از طریق CMD هم انجام بدین با تایپ دستور docker images

ایمیج ها با استفاده دستور docker images  در ترمینال ویندوز
ایمیج ها با استفاده دستور docker images در ترمینال ویندوز
docker run –it osrf/ros:noetic-desktop bash

تبریک شما یک کانتینر توزیع noetic داخل ویندوز خودتون دارین و میتونین داخلش برنامه های ROS رو اجرا کنین.

ROS Noetic
ROS Noetic

بعد از وارد شدن به کانتینر راس Noetic میتونین با دستور lsb_release –a ورژن لینوکس اجرا که روش نصب هست رو ببینین و با زدن دستور roscore میبینین roscore اجرا میشه و ورژن راس رو بهتون نشون میده برای من noetic ورژن 1.16.0 هست.



حالا میریم سراغ اجرای توزیع humble، با اجرای دستور زیر داخل محیط cmd این توزیع رو اجرا کنین.

docker run –it osrf/ros:humble-desktop-full bash
ROS Humble
ROS Humble

میتونین با همون دستور lsb_release –a ورژن لینوکس این توزیع رو ببینین که اوبونتو 22.04 هست و برای دیدن اطلاعات ROS نصب شده من از دستور ros2 doctor –r استفاده کردم و میتونین نتیجه رو تو تصویر بالا ببینین.

اجرای RViz داخل داکر ویندوز


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

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 bash
ROS Noetic and RViz
ROS 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 bash
Ros Humble and RViz2
Ros Humble and RViz2

امیدوارم این اموزش براتون مفید بوده باشه.

لطفا اگر نکته ای در مورد نحوه نگارش یا حتی بقیه راه اموزش به نظرتون میاد بهم بگین.

https://neonicx.com/