官网教程:http://gazebosim.org/tutorials?cat=guided_i&tut=guided_i5
官网对plugin的介绍:
A plugin is a C++ library that is loaded by Gazebo at runtime. A plugin has access to Gazebo’s API, which allows a plugin to perform a wide variety of tasks including moving objects, adding/removing objects, and accessing sensor data.
step1:下载gazebo的相关支持包
sudo apt-get install libgazebo7-dev(7是你的gazebo版本号)
step2:创建一个存放文件的文件夹
mkdir ~/velodyne_plugin
cd ~/velodyne_plugin
step3:创建velodyne_plugin.cc,并将以下内容输入:
#ifndef _VELODYNE_PLUGIN_HH_
#define _VELODYNE_PLUGIN_HH_
#include <gazebo/gazebo.hh>
#include <gazebo/physics/physics.hh>
namespace gazebo
{
/// \brief A plugin to control a Velodyne sensor.
class VelodynePlugin : public ModelPlugin
{
/// \brief Constructor
public: VelodynePlugin() {}
/// \brief The load function is called by Gazebo when the plugin is
/// inserted into simulation
/// \param[in] _model A pointer to the model that this plugin is
/// attached to.
/// \param[in] _sdf A pointer to the plugin's SDF element.
public: virtual void Load(physics::ModelPtr _model, sdf::ElementPtr _sdf)
{
// Just output a message for now
std::cerr << "\nThe velodyne plugin is attach to model[" <<
_model->GetName() << "]\n";
}
};
// Tell Gazebo about this plugin, so that Gazebo can call Load on this plugin.
GZ_REGISTER_MODEL_PLUGIN(VelodynePlugin)
}
#endif
step4:编写Cmake文件,编译源代码
输入gedit CMakeLists.txt
输入以下内容:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
# Find Gazebo
find_package(gazebo REQUIRED)
include_directories(${GAZEBO_INCLUDE_DIRS})
link_directories(${GAZEBO_LIBRARY_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GAZEBO_CXX_FLAGS}")
# Build our plugin
add_library(velodyne_plugin SHARED velodyne_plugin.cc)
target_link_libraries(velodyne_plugin ${GAZEBO_LIBRARIES})
step5 :编译源代码,生成共享库
在velodyne_plugin文件加打开终端:
mkdir build
cd build
cmake ..
make
成功之后在build文件夹下生成一个共享库文件:libvelodyne_plugin.so
step6:采用新的world文件检验plugin的效果
新建world文件gedit velodyne.world并输入以下内容:
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default&#