آشنایی با افزونه های در Gazebo
در این مقاله قصد داریم تا با افزونهها یا پلاگینها در گزبو آشنا شویم.
در این مقاله قصد داریم تا با افزونهها یا پلاگینها در گزبو آشنا شویم.
افزونه ها به شما امکان می دهند مدل ها ، حسگرها ، خصوصیات جهان و حتی نحوه اجرای Gazebo را کنترل کنید. در آموزش های زیر نحوه ایجاد و بارگذاری افزونه ها برای اهداف مختلف توضیح داده شده است.
افزونه یک قطعه کد است که به عنوان یک کتابخانه اشتراکی کامپایل شده و در شبیه سازی وارد می شود. این افزونه از طریق کلاسهای استاندارد ++ C به کلیه قابلیتهای Gazebo دسترسی مستقیم دارد.
افزونه ها دارای ویژگی های مفید زیر هستند:
نسخه های قبلی Gazebo از کنترلرها استفاده می کردند. رفتار این موارد کاملاً مشابه پلاگین ها بود اما به صورت استاتیک در Gazebo کامپایل می شدند. افزونه ها از انعطاف پذیری بیشتری برخوردار هستند و به کاربران امکان انتخاب و انتخاب ویژگی های شبیه سازی خود را می دهند.
در موارد زیرباید از یک افزونه استفاده کنید:
مثال: انتقال مدل ها ، عکس العمل مناسب در قبال رویدادها ، قرار دادن مدل های جدید با توجه به مجموعه ای از پیش شرط ها
در حال حاضر ۶ نوع پلاگین وجود دارد
هر نوع پلاگین توسط یک بخش متفاوت از Gazebo مدیریت می شود. به عنوان مثال ، یک پلاگین Model به یک مدل خاص در Gazebo متصل شده و آن را کنترل می کند. به همین ترتیب ، یک پلاگین World به یک محیط و یک پلاگین Sensor به یک سنسور خاص متصل است. افزونه System در خط فرمان مشخص شده است و ابتدا در هنگام راه اندازی Gazebo بارگیری می شود. این پلاگین به کاربر امکان کنترل مراحل راه اندازی را می دهد.
نوع پلاگین باید براساس عملکرد دلخواه انتخاب شود. از یک افزونه World برای کنترل خصوصیات جهان مانند موتور فیزیک ، روشنایی محیط و غیره استفاده کنید. برای کنترل مفاصل و حالت های یک مدل از پلاگین Model استفاده کنید. برای به دست آوردن اطلاعات سنسور و کنترل خصوصیات سنسور از یک افزونه Sensor استفاده کنید.
پلاگین ها به صورت ساده طراحی شده اند. یک پلاگین اولیه شامل یک کلاس با چند تابع است. ابتدا ، اگر Gazebo را از طریق debians نصب کرده اید ، مطمئن شوید که پرونده های توسعه Gazebo را نصب کرده اید. اگر Gazebo را از سورس نصب کرده اید ، می توانید این مرحله را نادیده بگیرید. اگر نسخه دیگری به غیر از gazebo6 دارید ، در دستور زیر شماره ۶ را با شماره نسخه خودتان جایگزین کنید.
اگر Gazebo را از سورس نصب کرده اید ، می توانید این مرحله را نادیده بگیرید
[code]sudo apt-get install libgazebo6-dev[/code]
سپس ، یک پوشه و یک پرونده .cc برای افزونه جدید ایجاد کنید:
[code] mkdir ~/gazebo_plugin_tutorial
cd ~/gazebo_plugin_tutorial
gedit hello_world.cc
[/code]
موارد زیر را در hello_world.cc کپی کنید:
[code]#include <gazebo/gazebo.hh>
namespace gazebo
{
class WorldPluginTutorial : public WorldPlugin
{
public: WorldPluginTutorial() : WorldPlugin()
{
printf("Hello World!\n");
}
public: void Load(physics::WorldPtr _world, sdf::ElementPtr _sdf)
{
}
};
GZ_REGISTER_WORLD_PLUGIN(WorldPluginTutorial)
}
[/code]
کد فوق نیز در منابع Gazebo همراه با یک پرونده CMakeLists.txt نیز قرار دارد
[code]#include <gazebo/gazebo.hh>
namespace gazebo
{
[/code]
فایل gazebo/gazebo.hh شامل یک مجموعه اصلی از توابع اساسی gazebo است. البته این شامل gazebo/physics/physics.hh, gazebo/rendering/rendering.hh, یا gazebo/sensors/sensors.hh نمی شود، زیرا آنها باید مورد به مورد اضافه شوند. همه افزونه ها باید در فضای نام gazebo باشند.
[code]class WorldPluginTutorial : public WorldPlugin
{
public: WorldPluginTutorial() : WorldPlugin()
{
printf("Hello World!\n");
}
[/code]
هر پلاگین باید از یک نوع پلاگین ارثبری کند ، که در این مورد کلاس WorldPlugin است.
[code] public: void Load(physics::WorldPtr _world, sdf::ElementPtr _sdf)
{
}
[/code]
تنها تابع الزامی دیگر Load است که یک عنصر SDF دریافت می کند که شامل عناصر و ویژگی های مشخص شده در پرونده SDF بارگذاری شده است.
[code] GZ_REGISTER_WORLD_PLUGIN(WorldPluginTutorial)[/code]
در آخر ، پلاگین باید با استفاده از ماکرو GZ_REGISTER_WORLD_PLUGIN در شبیه ساز ثبت شود.
تنها پارامتر این ماکرو ، نام کلاس پلاگین است. برای هر نوع پلاگین ماکرو ثبت کننده منطبق به صورت زیر وجود دارد:
GZ_REGISTER_MODEL_PLUGIN,
GZ_REGISTER_SENSOR_PLUGIN
GZ_REGISTER_GUI_PLUGIN
GZ_REGISTER_SYSTEM_PLUGIN
GZ_REGISTER_VISUAL_PLUGIN
بخش زیر شامل دستورالعمل هایی در مورد نحوه کامپایل این افزونه است.
لطفاً در ابتدا اطمینان حاصل کنید که gazebo به درستی نصب شده است.
برای کامپایل پلاگین فوق فایل CMakeLists.txt را به صورت زیر ایجاد کنید
[code]gedit ~/gazebo_plugin_tutorial/CMakeLists.txt[/code]
موارد زیر را در CMakeLists.txt کپی کنید:
[code]cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GAZEBO_CXX_FLAGS}")
find_package(gazebo REQUIRED)
include_directories(${GAZEBO_INCLUDE_DIRS})
link_directories(${GAZEBO_LIBRARY_DIRS})
list(APPEND CMAKE_CXX_FLAGS "${GAZEBO_CXX_FLAGS}")
add_library(hello_world SHARED hello_world.cc)
target_link_libraries(hello_world ${GAZEBO_LIBRARIES})
[/code]
یک دایرکتوری برای بیلد کردن ایجادکنید
[code]mkdir ~/gazebo_plugin_tutorial/build
cd ~/gazebo_plugin_tutorial/build[/code]
سپس با دستور زیر کدها را کامپایل کنید.
[code]cmake ../
make
[/code]
کامپایل منجر به ایجاد یک کتابخانه اشتراکی در مسیر~/gazebo_plugin_tutorial/build/libhello_world.so می شود که می تواند به یک شبیه سازی Gazebo اضافه شود.
در آخر ، مسیر کتابخانه خود را به GAZEBO_PLUGIN_PATH اضافه کنید:
[code]export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:~/gazebo_plugin_tutorial/build[/code]
توجه: این دستور، مسیر را فقط برای shell فعلی تغییر می دهد. اگر می خواهید از افزونه خود برای هر تب جدیدی که باز می کنید استفاده کنید ، خط بالا را به فایل ~ / .bashrc اضافه کنید.
هنگامی که افزونه ای را به عنوان کتابخانه اشتراکی وارد کردید (به بالا مراجعه کنید) ، می توانید آن را به یک محیط یا مدل در یک پرونده SDF پیوست کنید (برای اطلاعات بیشتر به اسناد SDF مراجعه کنید). هنگام شروع کار ، Gazebo فایل SDF را تجزیه می کند ، پلاگین را پیدا می کند و کد را بارگیری می کند. مهم است که Gazebo قادر به یافتن پلاگین باشد. یا مسیر کامل به پلاگین مشخص شده است ، یا پلاگین در یکی از مسیرهای متغیر محیط GAZEBO_PLUGIN_PATH وجود دارد.
یک فایل world ایجاد کنید
[code]gedit ~/gazebo_plugin_tutorial/hello.world[/code]
کد زیر را در آن کپی کنید.
[code]<?xml version="1.0"?>
<sdf version="1.4">
<world name="default">
<plugin name="hello_world" filename="libhello_world.so"/>
</world>
</sdf>
[/code]
اکنون آن را با gzserver باز کنید:
[code] gzserver ~/gazebo_plugin_tutorial/hello.world –verbose[/code]
شما باید خروجی مشابه زیر را ببینید:
[code]Gazebo multi-robot simulator, version 6.1.0
Copyright (C) 2012-2015 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 172.23.1.52
Hello World!
[/code]