gazebo学习教程

引言:因为项目需要,我们需要提供基于某种定制传感器的GAZEBO仿真,因此,开始了整个基于ROS下的GAZEBO仿真学习

一、GAZEBO添加插件代码

链接: GAZEBO添加插件代码

链接: link

链接: link

链接: link

1、什么是gazebo_plugin

gazebo的插件机制给用户提供了更多的自由度和发挥空间,可以通过插件与gazebo中的模型进行交互。比如改变模型的质量、惯性张量,给模型施加力、提供速度等等。同时,gazebo的插件机制也具有ros发布订阅、请求响应等模式。

2、怎么使用gazebo插件

gazebo的插件机制相关的教程比较少,我的个人对他的使用流程是这样的。首先你会写一个.cc文件以及相应的.hh文件,然后将其编译成为一个.so的动态链接库,然后再在模型的xacro文件中的gazebo标签中将这个动态链接库与模型绑定。然后加载模型后,插件将会一起上传到gazebo中,你可以在gazebo/model/plugins下查看一个模型绑定的插件。下面具体说说:

Gazebo插件通过标准C++类直接控制Gazebo模型, 其具有以下优点

可以控制gazebo中几乎各个方面;
容易共享;
能够在运行的系统中插入移除;

Gazebo插件共有六种:

1.World:控制世界特性,如物理引擎、环境光等
2.Model:用于控制关节和模型状态
3.Sensor:用于获取传感器数据和控制传感器
4.System
5.Visual
6.GUI

安装Gazebo开发文件

sudo apt-get install libgazebo#-dev   //#为版本号(无需重复安装)

Plugin简单例程—Hello WorldPlugin!

1、创建Plugin文件夹
mkdir ~/gazebo_plugin_tutorial
cd ~/gazebo_plugin_tutorial
gedit hello_world.cc
2、输入如下代码:
#include <gazebo/gazebo.hh>  
/* 包含gazebo基本功能,
不包括gazebo/physics/physics.hh, gazebo/rendering/rendering.hh, 和 gazebo/sensors/sensors.hh
gazebo/gazebo.hh 文件包含了一些gazebo的基础函数,但有时可能还会需要包含 gazebo/physics/physics.hh 、 gazebo/rendering/rendering.hh、gazebo/sensors/sensors.hh 等。所有的插件都必须位于 gazebo 命名空间中。*/
 
namespace gazebo  //所有插件都需要在gazebo名空间中编写
{
 
/* 所有插件类的创建需要继承一种plugin类型,下面是继承WorldPlugin */
  class WorldPluginTutorial : public WorldPlugin  
  {
    public: WorldPluginTutorial() : WorldPlugin()//默认构造函数
            {
              printf("Hello World!\n");//只要创建该类类型就会打印
            }
/* 唯一另一个必须的函数是Load(),其中_sdf接收一个包含sdf文件中指定的参数和属性 */
    public: void Load(physics::WorldPtr _world, sdf::ElementPtr _sdf)
            {
            }
  };
/* 使用GZ_REGISTER_WORLD_PLUGIN macro函数将插件注册,函数的需要的参数仅为插件类名
macro函数还包括GZ_REGISTER_MODEL_PLUGIN, GZ_REGISTER_SENSOR_PLUGIN, GZ_REGISTER_GUI_PLUGIN,
 GZ_REGISTER_SYSTEM_PLUGIN and GZ_REGISTER_VISUAL_PLUGIN
 最后,必须使用 GZ_REGISTER_WORLD_PLUGIN 宏在模拟器中注册插件,用插件类的名称 WorldPluginTutorial 作为参数。每类插件都有与之匹配宏,例如:GZ_REGISTER_MODEL_PLUGIN、 GZ_REGISTER_SENSOR_PLUGIN、 GZ_REGISTER_GUI_PLUGIN、 GZ_REGISTER_SYSTEM_PLUGIN、GZ_REGISTER_VISUAL_PLUGIN。*/
  GZ_REGISTER_WORLD_PLUGIN(WorldPluginTutorial)
 
}
2、编译plugin代码—创建CMakeLists.txt
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
 
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})
3、编译CMakeLists
mkdir ~/gazebo_plugin_tutorial/build
cd ~/gazebo_plugin_tutorial/build
 
cmake ../
make
4、编译后即可生成如下图所示共享库文件

在这里插入图片描述
将库路径添加到GAZEBO_PLUGIN_PATH

export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:~/gazebo_plugin_tutorial/build

使用插件

只要作为共享库编译插件,就可以将其添加到SDF文件的world或model中。gazebo会分析sdf文件,定位插件,加载插件代码。为了让gazebo找到插件,可以填写插件绝对路径或将插件路径添加到GAZEBO_PLUGIN_PATH环境变量中。

创建world文件

   gedit ~/gazebo_plugin_tutorial/hello.world

在world文件中添加plugin插件

<?xml version="1.0"?>
<sdf version="1.4">
  <world name="default">
    <plugin name="hello_world" filename="libhello_world.so"/>
  </world>
</sdf>

运行world文件

gzserver ~/gazebo_plugin_tutorial/hello.world --verbose

在这里插入图片描述

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于Gazebo教程中的无人机部分,你可以根据以下步骤进行操作。首先,确保你已经安装了ROSGazebo插件。对于Melodic版本,你可以执行以下命令进行安装:sudo apt install ros-melodic-gazebo-*。如果你使用的是Kinetic版本,则执行sudo apt install ros-kinetic-gazebo9-*。这样就可以获取到Gazebo模型。 接下来,你可以根据古月居大神Judez的教程进行仿真。根据你提供的引用,你可以跟随他的教程来模拟无人机。确保你已经按照教程中的步骤进行了设置,并且已经获取到了Gazebo模型。如果你遇到了一些问题,例如无人机无法显示在Gazebo中或者启动仿真没有反应,你可以尝试修改启动仿真语句。根据你提供的引用中的说明,你可以使用以下命令进行启动仿真:roslaunch rotors_gazebo multi_mav_formation.launch mav_name:=firefly world_name:=basic。这样应该可以让无人机飞起来。 如果你在使用Gazebo过程中遇到了报错,例如你提供的引用中的错误信息,你可以尝试解决这个问题。根据你提供的错误信息,这个错误可能是由于虚拟机设置的问题导致的。你可以尝试检查虚拟机的设置,并根据需要进行一些调整以解决这个问题。 总结起来,如果你想学习Gazebo教程中的无人机部分,你需要安装ROSGazebo插件,并按照教程进行设置和操作。如果遇到问题,你可以尝试修改启动仿真语句或者检查虚拟机的设置以解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪者1015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值