شبیه ساز گزبو Gazebo : گزبو نرمافزار شبیهسازی در ROS است. شبیهسازی ربات ابزاری اساسی در هر نرمافزار رباتیک است. یک شبیهساز خوب، امکان آزمایش سریع الگوریتمها ، طراحی رباتها ، انجام تست رگرسیون و آموزش هوشمصنوعی را با استفاده از سناریوهای واقعگرایانه فراهم میآورد. Gazebo با دراختیار داشتن این قابلیتها، امکان شبیهسازی دقیق و کارآمد انواع رباتها در محیطهای پیچیده داخلی و خارجی را فراهم میکند.
خلاصه اینکه یک موتور فیزیک قوی ، گرافیک باکیفیت بالا و رابطهای مناسب برنامهنویسی و گرافیکی در شبیه ساز گزبو Gazebo در اختیار شما قرار دارد. تا ربات خودتان را با شرایطی نزدیک به واقعیت مدلسازی و تست کنید. از همه بهتر اینکه، شبیه ساز گزبو Gazebo کاملاً رایگان بوده است. Gazebo یک جامعه از کاربران پرجنبوجوش را در اختیار دارد که همواره در تلاشند تا آن را ارتقا دهند. همچنین مشکلات احتمالی آن را رفع کنند. (برگرفته از سایت رسمی گزبو )
شبیه ساز گزبو Gazebo امکانات متنوعی برای رفتارهای فیزیکی گوناگون دارد. گزبو از دو بخش تشکیل شده است: یک سرور (که با عنوان gzserver اجرا میشود) و یک کلاینت (client) (که با عنوان gzclient اجرا میشود).
gzserver در واقع هسته مرکزی گزبو بوده و محاسبات فیزیکی و تولید دادههای سنسورها را برعهده دارد. در مواردی که نیاز به رابط کاربری نیست میتواند به صورت مستقل اجرا شود. عملکرد بخش کلاینت نیز بهصورت ارائه یک نمایش گرافیکی رابط کاربری است که میتواند تجسم خوبی از شبیهسازی و کنترل راحت بر روی خواص مختلف شبیه سازی را فراهم کند.
یک قابلیت مؤثر و باارزش شبیه ساز گزبو Gazebo به صورت است. میتواند سنسورهایی نظیر سنسورهای نیرو، شتاب سنج، سونار، LIDARs، دوربینهای رنگی، و سنسورهای ابر نقاط را شبیهسازی کند، در نتیجه شما قادر خواهید بود تا در شبیهسازی خودتان به راحتی سنسورهای مورد نیاز را به مدلتان اضافه کنید. با این کار خروجیهایی نزدیک به خروجی سنسورهای واقعی را از آن انتظار داشته باشید.
در صورتیکه شما طبق آموزش نصب رآس، از گزینه نصب کامل استفاده کرده باشید، ورژن۷ گزبو به صورت خودکار بر روی سیستم شما نصب شده است. در غیر اینصورت میتوانید تنها با یک دستور آخرین ورژن گزبو را نصب کنید.
[sourcecode language=”plain”]
curl -sSL http://get.gazebosim.org | sh
[/sourcecode]
در صورتی که در ترمینال دستور زیر را وارد کنید گزبو فرارخوانی میشود و اگر درست نصب شده باشد محیط کاری آن را مشاهده خواهید کرد.
[sourcecode language=”plain”]
gazebo
[/sourcecode]
تذکر: توجه داشته باشید که اولین باری که گزبو را اجرا میکنید، (در صورتی که به اینترنت متصل باشید) گزبو تلاش میکند تا مجموعهای از مدلهای متداول را دانلود کند، لذا ممکن است راهاندازی اولیه آن کمی طول بکشد.
برای اضافه شدن یک یا چند ربات به گزبو به یک محیط نیاز داریم، این محیط ممکن است شامل جزئیات و عوارض زمین، ساختمانها ، دیوار، میز و … و همچنین شامل یک دسته از رباتهای گروهی باشد. یک مدل مرسوم پیشفرض در گزبو شامل فقط یک سطح صاف از زمین با یکجهت عمودی برای بردار جاذبه است.
برای شروع کار با گزبو با این محیط میتوانید از دستور زیر استفاده کنید
[sourcecode language=”plain”]
roslaunch gazebo_ros empty_world.launch
[/sourcecode]
نتیجه اجرای این دستور بهصورت شکل زیر خواهد بود.
در نوار پایینی محیط شبیهسازی گزبو، چند رابط کنترلی و نمایشگر وجود دارد.
در سمت چپ صفحهنمایش گزبو ، دو تب به نامهای “World” و “Insert” وجود دارد. تب World شامل ویژگیهای فیزیکی میباشد. این بخش دربرگیرنده خواص مختلفی ازجمله آیتم جاذبه است. با باز کردن زیر منوی جاذبه مقادیر عددی اجزای آن (x,y,z) مشخص میشود. این مقادیر را میتوان با کلیک کردن بر روی هرکدام تغییر داد.
همچنین توسط تب World میتوان به خصوصیات دینامیکی مدل واردشده نیز دستیافت که در اینجا تنها مدل یک صفحه از زمین در شبیهسازی است.
ما میتوانیم به روشهای گوناگونی مدلهای دیگر را وارد شبیهساز بکنیم. با استفاده از تب Insert میتوان هر مدل از قبل تعریفشدهای در لیست مدلها را اضافه کرد. لیست مدلهای قابلدسترس، شامل مدلهای آنلاین موجود در پایگاه دادههای گزبو و همچنین مدلهای محلی تعریفشده که در مسیر (مخفی) ~/.gazebo میباشد.
*** مسیر ~/.gazebo بهصورت پیشفرض مخفی (Hidden) است، برای نمایش آن از کلیدهای ctrl+H در صفحه Home استفاده کنید.*****
علاوه براین میتوان یک مدل را بهصورت دستی با فراخوانی یک نود گزبو به همراه مسیری که مدل مربوطه در آن قرار دارد را فراخوانی کرد. در ادامه نحوه وارد کردن یک مدل در گزبو را آموزش میدهیم.
همانطور که گفته شد شبیه ساز گزبو Gazebo برای راهاندازی یک ربات نیاز به یک محیط و مدل آن ربات دارد. بیایید به عنوان مثال یک ربات را در گزبو فراخوانی کنیم.
یک ترمینال جدید باز کنید و دستور زیر را در آن واردکنید.
[sourcecode language=”plain”]
gazebo worlds/pioneer2dx.world
[/sourcecode]
با اجرای دستور فوق شما محیط مربوط به ربات pioneer2dx را فراخوانی میکنید. از آنجایی که احتمالاً شما مدل مربوط به این ربات را به صورت محلی در سیستم خودتان ندارید گزبو مدل آن را از دیتابیس آنلاین خود دانلود میکند (بسته به سرعت اینترنت شما، ممکن است این کار کمی طول بکشد). در نهایت مدل مربوطه را مطابق شکل زیر مشاهده خواهید کرد.
خب حالا شما یک ربات را در صفحه گزبو خودتون مشاهده میکنید که بی حرکت ایستاده!
اگه به اندازه کافی از مشاهده اولین رباتتون در گزبو لذت بردید، گزبو رو ببندید تا به ادامه مبحث بپردازیم.
خب شاید براتون این سوال پیش اومده باشه که فایلهای مربوط به این محیطی که ما فراخوانی کردیم، کجا قرار داره؟
در جواب باید شما رو به مسیر زیر راهنمایی کنم: میتونید به مسیر /usr/share/gazebo-7/worlds برید و فایلهای world رو اونجا مشاهده کنید. همچنین میتونید با زدن دستور زیر در ترمینال محتویات این پوشه رو مشاهده کنید. توجه داشته باشید که با توجه به ورژن گزبو شما، ” gazebo-7″میتونه متفاوت باشه.
[sourcecode language=”plain”]
ls /usr/share/gazebo-7/worlds
[/sourcecode]
خب حالا میتونید هر کدوم از این محیطها رو اجرا کنید و اونها رو در گزبو مشاهده کنید، البته باز هم باید یادآوری کنم که چون شما مدلها رو به صورت محلی ندارید گزبو اونها رو از مخازن آنلاین خودش دانلود میکنه.
البته نگران نباشید در ادامه نحوه اجرای مدلهای محلی رو هم توضیح میدهیم.
یه نمونه جالب دیگه از مدلهای موجود رو میتونید با این دستور ببینید.
[sourcecode language=”plain”]
gazebo worlds/mud.world
[/sourcecode]
همونطور که اشاره شد شما میتوانید مدلهای دلخواه خودتان را در گزبو فراخوانی کنید. برای این کار باید ابتدا فایلهای مربوط به مدل را مطابق استاندارد ایجاد و یا مدل مورد نظر را از دیتابیس گزبو دانلود کنید.
ابتدا یک توضیحی از ساختار پوشه مدل ارائه میکنیم. در حالت کلی یک مدل شامل فایلها و پوشههایی به صورت زیر است:
model :پوشه با نام model
برای اجرای یک مدل در گزبو به حداقل دو فایل model.config و model.sdf نیاز داریم. به عنوان نمونه کدهای مربوط به ایجاد یک مکعب به صورت زیر است.
<?xml version="1.0"?> <model> <name>box</name> <version>1.0</version> <sdf version="1.4">model.sdf</sdf> <author> <name>IRANROS.COM</name> </author> <description> A box </description> </model
<?xml version='1.0'?> <sdf version='1.4'> <model name="box"> <link name='link'> <inertial> <mass>2000</mass> <inertia> <ixx>3000</ixx> <ixy>0</ixy> <ixz>0</ixz> <iyy>3000</iyy> <iyz>0</iyz> <izz>1000</izz> </inertia> </inertial> <collision name='collision'> <geometry> <box> <size> 2 2 4 </size> </box> </geometry> </collision> <visual name='visual'> <geometry> <box> <size> 2 2 4 </size> </box> </geometry> </visual> </link> </model> </sdf>
کدهای بالا بیانگر خصوصیات فیزیکی و هندسی مکعب است که میتوانید به راحتی آنها را تغییر دهید. دقت کنید که در تگ <pose> شش مولفه وضعیت فضایی اولیه مکعب در اختیار شماست.
برای اجرای این مدل در گزبو ابتدا یک پوشه به نام box ایجاد کنید، سپس درون این پوشه یک فایل با نام model.config ایجاد کرده و کدهای قسمت ۱ را درآن قرار دهید، به همین ترتیب یک فایل با نام model.sdf ایجاد کرده و کدهای قسمت ۲ را در آن قرار دهید.
حالا به مسیر ~/.gazebo/models
رفته و پوشه خودتان را در آن قرار دهید.
حالا گزبو را باز کنید و از تب insert مدل box را انتخاب کنید، با کلیک موس در محیط گزبو، مکعب شما بارگذاری میشود.
همچنین شما میتوانستید با ایجاد یک پکیج و قرار دادن فایلهای مدل خودتان در آن و با فراخوانی نود spawn_model پکیج گزبو نیز مدل خودتان را فراخوانی کنید. در ادامه این فرآیند را توضیح میدهیم.
ابتدا در پوشه src فضای کاری موردنظر خودتان یک پکیج ایجاد کنید.( برای اطلاعات بیشتر به ایجاد فضای کاری و ساخت پکیج مراجعه کنید.)
در اینجا ما یک بسته به نام add_model ایجاد میکنیم.
[sourcecode language=”plain”]
cd ~/catkin_ws/src
catkin_create_pkg add_model
cd ..
catkin_make
source devel/setup.bash
[/sourcecode]
سپس پوشه مدل خودتان را در این بسته قرار دهید.
حالا میخواهیم یک فایل لانچ ایجاد کنیم (اطلاعات بیشتر) و در آن gazebo و مدل خودمان را همزمان فراخوانی کنیم. برای این کار یک فایل با نام add_box.launch درون بستهای که ساختید ایجاد کنید و کدهای زیر را درآن قرار دهید.
<launch> <include file="$(find gazebo_ros)/launch/empty_world.launch"/> <node name="spawn_sdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find add_model)/box/model.sdf -sdf -model box -x 0 -y 0 -z 4" /> </launch>
پس از ساخت فایل لانچ با دستور زیر میتوانید مدل مربوطه را از هر مسیری بهصورت زیر فراخوانی کنید. دقت کنید که در این روش نیازی به قرار دادن فایل مدل در مسیر پوشه .gazebo/models نیست.
[sourcecode language=”plain”]
roslaunch add_modell add_box.launch
[/sourcecode]