https://classic.gazebosim.org/tutorials?tut=plugins_hello_world&cat=write_plugin
1. 插件类型
- World
- Model
- Sensor
- System
- Visual
- GUI
需要安装Gazebo development files。
sudo apt-get install libgazebo6-dev
2. Hello WorldPlugin
2.1 源码
$ mkdir ~/gazebo_plugin_tutorial
$ cd ~/gazebo_plugin_tutorial
$ gedit hello_world.cc
gazebo/gazebo.hh包含基本的函数,physics.hh, rendering.hh, sensors.hh不在其中。所有插件需要在gazebo namespace中。
#include <gazebo/gazebo.hh>
namespace gazebo
{
class WorldPluginTutorial : public WorldPlugin // 需要继承自一个插件类型,这里是WorldPlugin
{
public:
WorldPluginTutorial() : WorldPlugin()
{
printf("Hello World!\n")
}
public:
void Load(physics::WorldPtr _world, sdf::ElementPtr _sdf) // 这是一个强制的方法
{
}
};
GZ_REGISTER_WORLD_PLUGIN(WorldPluginTutorial) // 注册这个plugin
// 还有其他宏对应其他类型的插件,例如GZ_REGISTER_MODEL_PLUGIN, GZ_REGISTER_SENSOR_PLUGIN等
}
2.2 编译
创建CMakeLists.txt
gedit ~/gazebo_plugin_tutorial/CMakeLists.txt
内容如下:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(hello_world_plugin)
find_package(gazebo REQUIRED)
include_directories(${GAZEBO_INCLUDE_DIRS})
link_directories(${GAZEBO_LIBRARY_DIRS})
list(APPEND CMAKE_CXX_FLAGS "${GAZEBO_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GAZEBO_CXX_FLAGS}")
add_library(hello_world SHARED hello_world.cc)
target_link_libraries(hello_world ${GAZEBO_LIBRARIES})
创建build目录,并编译,最终得到libhello_world.so
$ mkdir ~/gazebo_plugin_tutorial/build
$ cd ~/gazebo_plugin_tutorial/build
$ cmake ../
$ make
将路径添加到GAZEBO_PLUGIN_PATH。要永久生效的话,添加到~/.bashrc
$ export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:~/gazebo_plugin_tutorial/build
3. 使用插件
将plugin附加在SDF文件中。
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default">
<plugin name="hello_world" filename="gazebo_plugin_tutorial/build/libhello_world.so"/>
</world>
</sdf>
使用gzserver运行这个world,输出如下:
gzserver myworld.world --verbose
Gazebo multi-robot simulator, version 11.12.0
Copyright (C) 2012 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: 10.0.80.9
[Msg] Loading world file [/home/123/project/test/walk.world]
Hello World!
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 cdd@ahucd.cn