Plugin'ler, Gazebo'ya özel davranışlar ekler. C++ ile yazılır ve çalışma zamanında yüklenir.
Plugin Tipleri:
World Plugin: Dünya seviyesi davranışlar
Model Plugin: Belirli modele özel
Sensor Plugin: Sensör verileri işleme
Visual Plugin: Görsel efektler
GUI Plugin: Arayüz eklentileri
System Plugin: Gazebo çekirdeği eklentileri
Basit Model Plugin Örneği:
// simple_plugin.cpp
#include <gazebo/gazebo.hh>
#include <gazebo/physics/physics.hh>
namespace gazebo {
class SimplePlugin : public ModelPlugin {
public:
void Load(physics::ModelPtr model,
sdf::ElementPtr sdf) {
this->model = model;
gzwarn << "Plugin loaded!" << std::endl;
}
private:
physics::ModelPtr model;
};
GZ_REGISTER_MODEL_PLUGIN(SimplePlugin)
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.5)
project(simple_plugin)
find_package(gazebo REQUIRED)
include_directories(${GAZEBO_INCLUDE_DIRS})
link_directories(${GAZEBO_LIBRARY_DIRS})
add_library(simple_plugin SHARED simple_plugin.cpp)
target_link_libraries(simple_plugin ${GAZEBO_LIBRARIES})
Plugin'i Model'e Ekleme:
<model name="my_robot">
<!-- links and joints -->
<plugin name="simple_plugin" filename="libsimple_plugin.so">
<!-- Plugin parametreleri -->
</plugin>
</model>
libgazebo_ros_diff_drive.so: Diferansiyel sürüş
libgazebo_ros_camera.so: Kamera sensörü
libgazebo_ros_laser.so: LIDAR sensörü
libgazebo_ros_imu.so: IMU sensörü
libgazebo_ros_p3d.so: 3D konum ground truth
libgazebo_ros_force.so: Kuvvet uygulama
Update Callback: Plugin'inizde UpdateCallback fonksiyonu ekleyerek her simülasyon adımında kod çalıştırabilirsiniz. updateConnection ile bağlayın!