系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理

文章目录

  • 系列文章目录
  • 前言
  • 一、gazebo介绍
  • 二、应用场景
  • 三、gazebo的特点
  • 四、gazebo安装并运行
    • 1.安装
    • 2.运行
  • 五、gazebo界面介绍
  • 六、gazebo和ros的接口功能包
  • 七、搭建仿真环境步骤【重点!!!】
    • 1.gazebo的服务器和客户端
    • 2.【环境模型文件】构建环境几何模型【.world/.sdf】
      • (1)环境几何模型目录
      • (2)静态简单场景搭建
        • 1. 方法一:直接使用gazebo的GUI收录的模型/自己下载gazebo的模型数据库,然后保存成为.world文件
        • 2. 方法二:使用Building Editor自己画模型(主要是围墙和房子),然后保存成为.world文件
        • 3.方法三:在github上搜索开源的环境模型,拿过来直接用【这个还是自己搭建比较好】
      • (3)动态复杂场景搭建
      • (4)修改已经搭建好的.world文件的方法
      • 注意
    • 3.【机器人模型文件】构建机器人几何模型【.urdf/.xacro】
      • (0)机器人/障碍物的几何模型目录结构原理
      • (1)简单的机器人/障碍物模型构建【使用gazebo的界面GUI的Model Editor实现】
        • (1)机械外形【simple shapes/custom shapes】
        • (2)插入传感器【Model Database】
        • (3)添加插件【Model Plugins】
        • (4)最后通过GUI保存模型
      • (2)复杂的机器人模型构建【自己借助工具或者编程实现】
        • 1)方法一:通过简单的URDF/xacro文件编程实现
        • 2)方法二:专有的场景零件,使用SDF文件自己编程实现
          • (1)创建环境外形模型meshes
          • (2)编写.sdf环境文件
        • 3)方法三:通过soildworks工具导入
        • 4)方法四:通过github上开源的下载,改一改使用【我常用这种方法--偷鸡】
      • (3)两个xacro模型连接到同一个总的xacro模型的方法
      • 注意
    • 4.【构建/使用环境插件】【.pluin】
      • (1)构建自己的插件的方法
        • 1)从零构建一个插件的泛型方法
        • 2)gazebo插件的类型、构建+编译+使用方法
        • 3)从零构建一个32线的激光雷达传感器插件
        • 4)测试插件的的基本方法(以激光雷达为例)
      • (2)使用别人构建的插件的方法【重点】
        • 0)主要原理与步骤
        • 1)使用机器人本体插件
          • (1)【Model插件】小车运动控制插件类
          • (2)【Sensor插件】小车传感器类
        • 2)使用world环境插件
          • (1)【world插件】动态的人行走的场景(actor)
          • (2)为世界坐标系下的任意link指定随机的运动速度
          • (3)获取机器人在gazebo的定位信息
          • (4)基于事件触发
        • 3)【可视化插件】Visual
      • 注意
    • 5.通过launch文件导入相关gazebo需要的东西【gazebo.launch】
      • 一级的demo_run.launch
      • 二级的gazebo.launch
    • 6.搭建ROS工程,用ROS工程编写源代码
    • 7.从gazebo中获取仿真得到的数据
      • (1)构建rviz可视化配置文件【.rviz】
      • (2)通过gazebo的GUI,显示发布出去的话题
      • (3)gazebo的屏幕截图
  • 八、注意
  • 参考资料

前言

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!

本文先对gazebo三维物理仿真环境做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章


提示:以下是本篇文章正文内容

一、gazebo介绍

gazebo是三维物理仿真平台,强调的是创建一个虚拟的仿真环境。gazebo不是显示工具,强调的是仿真,它不需要数据,而是创造数据.gazebo本身就是一款机器人的仿真软件,基于ODE的物理引擎,可以模拟机器人以及环境中的很多物理特性%2c不仅可以仿真机器人的运动功能,还可以仿真机器人的传感器数据。而这些数据就可以放到rviz中显示,所以使用gazebo的时候,经常也会和rviz配合使用。另外,【防盗标记–盒子君hzj】rviz配合其他功能包也可以建立一个简单的仿真环境,比如rviz+ArbotiX,可以参考《ROS by Example》
教程见:http://www.ros.org/wiki/simulator_gazebo/Tutorials

.
.

二、应用场景

1.测试机器人算法

2.机器人的设计【防盗标记–盒子君hzj】

3.显示场景下的回溯测试
.
.

三、gazebo的特点

  1. 动力学仿真:支持多种高性能的物理引擎,例如ODE、Bullet、SimBody、DART等

  2. 三维可视化环境:支持显示逼真的三维环境,包括光线、纹理、影子。

  3. 传感器仿真:支持传感器数据的仿真,同时可以仿真传感器噪声。

  4. 可扩展插件:用户可以定制化开发插件,扩展gazebo的功能,满足个性化的需求。

  5. 多种机器人模型:官方提供PR2、Pioneer2 DX、TurtleBot等机器人模型,当然也可以使用自己创建的机器人模型。

  6. TCP/IP传输:gazebo可以实现远程仿真,后台仿真和前台显示通过网络通信。
    【防盗标记–盒子君hzj】

  7. 云仿真:gazebo仿真可以在Amazon、Softlayer等云端运行,也可以在自己搭建的云服务器上运行。

终端工具:用户可以使用gazebo提供的命令行工具在终端实现仿真控制。

四、gazebo安装并运行

1.安装

与rviz一样,如果已经安装了桌面完整版的ROS,那么可以直接跳过这一步,否则,请使用以下命令进行安装:

$ sudo apt-get install ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-ros-control

2.运行

安装完成后,在终端中使用如下命令启动ROS和gazebo【防盗标记–盒子君hzj】
$ roscore

$ rosrun gazebo_ros gazebo或者打开gazebo:直接在终端输入$ gazebo
.

五、gazebo界面介绍


0 :3D视图区

1 :工具栏
用于选择、移动、旋转和缩放对象的按钮;创建简单形状(例如立方体、球体、圆柱体);和复制/粘贴

2 :模型列表
WORLD:显示当前在场景中的模型,并允许您查看和修改模型参数【防盗标记–盒子君hzj】

INSERT:用于向模拟添加新对象(模型)。要查看模型列表,可能需要单击箭头以展开文件夹。在要插入的模型上单击(并释放),然后在场景中再次单击以添加该模型

LAYERS:组织并显示仿真中可用的不同可视化组(如果有)

3 :模型属性项

4 :时间显示区

.
.

六、gazebo和ros的接口功能包

gazebo仿真的元素搭建都是有对应的msgs的,也有对应的api函数,学会这些自己也可以搭建

(1)gazebo_ros
主要用于gazebo的接口封装、gazebo服务端和客户端的启动、URDF模型的生成【防盗标记–盒子君hzj】(2)gazebo_msgs
主要是gazebo的话题msg和服务srv的数据结构(3)gazebo_plugins
主要用于gazebo的通用传感器插件(4)gazebo_ros_api_plugins\gazebo_ros_path_plugins
这两个gazebo的插件实现接口的封装

官方教程

http://gazebosim.org/tutorials?tut=custom_messages&cat=transport
.
.

七、搭建仿真环境步骤【重点!!!】

1.gazebo的服务器和客户端

(gazebo的底层引擎)
服务器gzserver:用于模拟物理、渲染和传感器的服务器
客户端gzclient:提供图形界面以可视化模拟并与模拟交互的客户端【防盗标记–盒子君hzj】

客户端和服务器使用gazebo通信库进行通信

.
.

2.【环境模型文件】构建环境几何模型【.world/.sdf】

(有关环境配置的都在这里,包括静态对象、灯光等等)
【这个一般都要自己搭建–以.world模型文件的形式】

(1)环境几何模型目录

(1)世界对象
如建筑物和灯光(2)静态对象
标记为静态的实体(在SDF中具有<Static>true</Static>元素的实体)是仅具有碰撞几何体的对象。所有不打算移动的对象都应标记为静态(3)动态对象
标记为动态的实体(缺少<static>元素或在SDF中设置为false)是同时具有惯性和碰撞几何体的对象。

.
.

(2)静态简单场景搭建

1. 方法一:直接使用gazebo的GUI收录的模型/自己下载gazebo的模型数据库,然后保存成为.world文件

后续也能通过参数修改

(1)【快速搭建】Gazebo 界面GUI提供了一组简单的形状:长方体、球体和圆柱体
(2)【非常有用】Gazebo的模型数据库model database是所有类型模型的存储库,包括机器人、桌子和建筑物
(3)环境搭建完成后,选择“文件”菜单的“保存”,格式为.world文件,若要重新打开,进入.world文件目录下,输入指令$gazebo XXX.world

官方教程
【创建环境】http://gazebosim.org/tutorials?tut=build_world&cat=build_world
【修改环境】http://gazebosim.org/tutorials?tut=modifying_world&cat=build_world
.
.

2. 方法二:使用Building Editor自己画模型(主要是围墙和房子),然后保存成为.world文件

在gazebo菜单栏中选择Edit –; Building Editor,可以打开Building Editor界面。选择左侧的绘制选项,然后在上侧窗口中使用鼠标绘制,下侧窗口中即可实时显示绘制的仿真环境。【防盗标记–盒子君hzj】

参考官方教程
http://gazebosim.org/tutorials?cat=build_world&tut=building_editor

.
.

3.方法三:在github上搜索开源的环境模型,拿过来直接用【这个还是自己搭建比较好】

github打发~~
.
.

(3)动态复杂场景搭建

查阅gazebo官网提供的教程,一般使用world插件的方法进行导入

.
.

(4)修改已经搭建好的.world文件的方法

去到放置.world文件的目的,运行指令$gazebo XXX.world,修改完成后覆盖保存一下【防盗标记–盒子君hzj】
.
.

注意

(1)仿真环境应该尽可能保持简单,不然出问题很难搞

.
.

3.【机器人模型文件】构建机器人几何模型【.urdf/.xacro】

(有关机器人本体的构造配置都在这里,包括机器人的机械构造、几何链接关系)
【这个能用别人的模型就用别人的模型–以describe功能包模型文件的形式】

(0)机器人/障碍物的几何模型目录结构原理

(1)模型的内涵

 能够以编程方式或通过GUI将模型动态加载到仿真中模型定义了具有动力学、运动学和视觉特性的物理实体模型可能有一个或多个插件,这些插件会影响模型的行为【防盗标记–盒子君hzj】

(2)模型数据库的目录结构

(1)【插件】Plugins Directory
(2)【几何结构】Meshes Directory
(3)【材料】Material Directory
(4)Database Config
(5)Model Config
(6)Model SDF
(7)Model SDF.ERB

Gazebo依靠模型数据库来存储和维护仿真中可用的模型,模型数据库是社区支持的资源
git clone https://github.com/osrf/gazebo_models

.
.

(1)简单的机器人/障碍物模型构建【使用gazebo的界面GUI的Model Editor实现】

注意这种方法仅仅适合用Model Editor的

(1)机械外形【simple shapes/custom shapes】

方法一:用GUI简单的几何图形搭建一个简单的机器人【防盗标记–盒子君hzj】
方法二:用SVG files画一些机械小零件

官方教程
http://gazebosim.org/tutorials?cat=model_editor_top&tut=extrude_svg

(2)插入传感器【Model Database】

从gazebo的模型数据库中插入现有的传感器模型第一个列表包含本地计算机上可用的模型第二个列表包含gazebo官方的模型,在线模型数据库下载它们时,将显示更多信息

(3)添加插件【Model Plugins】

简单的插件可以使用gazebo现有的插件,复杂的插件可以通过编程的方法创建自己的插件【防盗标记–盒子君hzj】

(4)最后通过GUI保存模型

参考官方教程
http://gazebosim.org/tutorials?cat=guided_b&tut=guided_b3

.
.

(2)复杂的机器人模型构建【自己借助工具或者编程实现】

1)方法一:通过简单的URDF/xacro文件编程实现

1、名称

Unified Robot Description Format 统一机器人描述格式

2、优点

1、可以解析URDF文件中使用XML格式描述的机器人模型【防盗标记–盒子君hzj】
2、ROS同时也提供URDF文件的C++解析器

3、机器人结构分解
连杆link

格式:
<link name="<link name"><inertial>......</inertial><visual>......</visual><colliion>......</colliion>
<link>参数:<inertial>:描述link的惯性参数:惯性矩阵<visual>:描述link部分的外观参数:外观、尺寸、颜色<colliion>:描述link的碰撞属性:碰撞参数

关节join

格式:
<joint name="joint name"type="joint type"><parent link="parent link"/><child link="child link"/><calibration......./><dynamics....../><limit....../><....../>
</joint>参数
<parent link>:连接关节的前一个连杆,必须要的
<child link>:连接关节的后一个连杆,必须要的
<calibration>:关节的参考位置,用来校准绝对的关节位置的
<dynamics>:描述关节的物理属性,例如阻尼值、静摩擦力,经常在动力学仿真上用到【防盗标记–盒子君hzj】
<limit>:描述关节运动的极限值,包括上下限位置、速度限制、力矩限制等
<mimic>:描述该关节和已有关节的关系
<safety _controller>:描述安全控制器参数关节类型
1、(重要)continuous:旋转关节,可以围绕单轴做无限旋转
2、(重要)revolute:旋转关节,进可以围绕单轴做有限角度旋转
3、prismastic:平滑关节,可以沿着某一轴线移动,带有位置限制
等等

4、建立仿真模型urdf实操(让rviz模型可视化)【涉及launch文件】

2)方法二:专有的场景零件,使用SDF文件自己编程实现

(1)创建环境外形模型meshes

方法一:在Google 的 3D 仓库里面进行寻找
链接为:https://3dwarehouse.sketchup.com/

方法二:使用三维建模软件构建环境,并导入gazebo 【防盗标记–盒子君hzj】
Blender、Sketchup、soildworks

(2)编写.sdf环境文件


官方教程
http://gazebosim.org/tutorials?tut=build_model&cat=build_robot

.
.

3)方法三:通过soildworks工具导入

把设计文件转化成urdf文件再导入到机器人模型【防盗标记–盒子君hzj】
.
.

4)方法四:通过github上开源的下载,改一改使用【我常用这种方法–偷鸡】

注意
(1)创建一个机器人,放在gazebo的环境(URDF\Xacro,可以自己创建也可以GitHub)[构建一个模型很麻烦,因为不精准,网上找就行]

.
.

(3)两个xacro模型连接到同一个总的xacro模型的方法

【用于连接同一个机器人的父模型(躯干)与子模型(手臂)】
【用于连接机器人模型和传感器模型】

注意

(1)创建一个机器人,放在gazebo的环境(URDF\Xacro,可以自己创建也可以GitHub)[构建一个模型很麻烦,因为不精准,网上找就行]

.
.
.

4.【构建/使用环境插件】【.pluin】

(实现传感器数据处理、控制等复杂功能,包括六种类型的插件)
【嵌入到系统中使用,不能单独使用】【防盗标记–盒子君hzj】
【这个能用别人的插件就用别人的插件–以插件的形式】

(1)构建自己的插件的方法

1)从零构建一个插件的泛型方法

官方教程1
http://gazebosim.org/tutorials?tut=plugins_hello_world&cat=write_plugin

官方教程2
http://gazebosim.org/tutorials?tut=ros_plugins&cat=connect_ros
.
.
.

2)gazebo插件的类型、构建+编译+使用方法

目前有6种类型的插件,每个插件类型都由Gazebo的不同组件管理

(1)【环境场景插件】World

World插件连接到World,控制World属性,例如物理引擎、环境照明等
构建的官方教程http://gazebosim.org/tutorials?tut=plugins_world&cat=write_plugin

(2)【机器人模型插件–控制】Model

Model插件连接到Gazebo中的特定机器人模型并控制该模型,控制关节和模型的状态
构建的官方教程http://gazebosim.org/tutorials?tut=plugins_model&cat=write_plugin

(3)【传感器插件】Sensor

Sensor插件到一个特定的传感器,获取传感器信息并控制传感器属性【防盗标记–盒子君hzj】
在后面有详细说

(4)【系统插件】System

System插件在命令行中指定,并在Gazebo启动时首先加载。这个插件让用户可以控制启动过程
官方教程http://gazebosim.org/tutorials?tut=system_plugin&cat=write_plugin

(5)【可视化插件】Visual

GUI覆盖视为位于渲染窗口顶部的透明2D层,可视化参数
官方教程http://gazebosim.org/tutorials?tut=gui_overlay&cat=user_input

(6)【界面插件】GUI
.
.
.

3)从零构建一个32线的激光雷达传感器插件

【构建好了插件放在哪里都能用了】【防盗标记–盒子君hzj】
参考官方教程
http://gazebosim.org/tutorials?cat=guided_i&tut=guided_i1
.
.
.

4)测试插件的的基本方法(以激光雷达为例)

(1)Start roscore
source /opt/ros/<DISTRO>/setup.bash
roscore
(2)In a new terminal, start Gazebo
cd ~/velodyne_plugin/build
source /opt/ros/<DISTRO>/setup.bash
gazebo ../velodyne.world
(3)In a new terminal, use rostopic to send a velocity message.
source /opt/ros/<DISTRO>/setup.bash
rostopic pub /my_velodyne/vel_cmd std_msgs/Float32 1.0

.
.
.

(2)使用别人构建的插件的方法【重点】

0)主要原理与步骤

(1)第一步:在gazebo中可以通过插入一些插件,来仿真机器人的传感器、执行驱动器的特性,这些插件通过元素中的标签描述

(2)第二步:在传感器的urdf/xacro.sdf文件中,通过使用标签先把传感器模型(带插件)包含进来机器人子模型中,再通过标签连接不同模型

(3)第三步:(大型模型才会这么做,选做)先用xacro文件为传感器创建一个传感器模型和配置,再把传感器的xacro模型与配置通过二次标签嵌入到机器人的xacro文件【防盗标记–盒子君hzj】

官方教程
http://gazebosim.org/tutorials?tut=add_laser&cat=build_robot
.
.
.

1)使用机器人本体插件

(1)【Model插件】小车运动控制插件类

(1)差速底盘驱动插件
很多机器人本体都采用差速驱动的方式,gazebo提供差速机器人的仿真插件,可以直接将下边的代码放到URDF文件中,修改相应的参数,指定运动控制需要订阅的主题,让机器人在gazebo中动起来

<gazebo><plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so"><alwaysOn>true</alwaysOn><updateRate>${update_rate}</updateRate><leftJoint>base_link_right_wheel_joint</leftJoint><rightJoint>base_link_left_wheel_joint</rightJoint><wheelSeparation>0.5380</wheelSeparation><wheelDiameter>0.2410</wheelDiameter><torque>20</torque><commandTopic>cmd_vel</commandTopic><odometryTopic>odom</odometryTopic><odometryFrame>odom</odometryFrame><robotBaseFrame>base_footprint</robotBaseFrame></plugin>
</gazebo>

(2)在关节Jink和连杆link中设置速度(PID)插件

在关节Jink和连杆link中设置速度【防盗标记–盒子君hzj】
官方教程http://gazebosim.org/tutorials?tut=set_velocity&cat=

(3)接触传感器【Contact Sensor】

接触传感器检测两个物体之间的碰撞,并报告与接触相关的力的位置
官方教程http://gazebosim.org/tutorials?tut=contact_sensor&cat=sensors

(4)关节的力与力矩传感器插件【Force/Torque Sensor】

在关节上使用力/扭矩传感器。该传感器将力和扭矩读数发布到主题。
官方教程http://gazebosim.org/tutorials?tut=force_torque_sensor&cat=sensors

(5)通用控制接口ros_control

控制通用接口
官方教程http://gazebosim.org/tutorials?tut=ros_control&cat=connect_ros

(6)重力PID补偿插件

在Gazebo中使用模型插件进行重力补偿,以及如何补充内置PID关节控制器
官方教程http://gazebosim.org/tutorials?tut=gravity_compensation&cat=plugins

(7)【model插件】JointEvent事件触发插件

当关节的位置(或速度或施加的力)进入或离开指定范围时,JointEvent将在sim_事件主题上发送消息【防盗标记–盒子君hzj】
官方教程http://gazebosim.org/tutorials?tut=joint_events&cat=

.
.
.

(2)【Sensor插件】小车传感器类

【xacro文件之间可以进行嵌套】
官方教程http://gazebosim.org/tutorials?tut=ros_gzplugins&cat=connect_ros

1、仿真二维雷达数据
因为带示例在我的知识库,后续转移过来~
.

2、仿真摄像头数据
因为带示例在我的知识库,后续转移过来~【防盗标记–盒子君hzj】
.

3、仿真三维激光雷达数据
因为带示例在我的知识库,后续转移过来~
.

4、仿真RealSense双目相机数据
因为带示例在我的知识库,后续转移过来~
.

5、深度相机集成插件
因为带示例在我的知识库,后续转移过来~
.
.
.

2)使用world环境插件

(1)【world插件】动态的人行走的场景(actor)

【作为动态障碍物】
博客教程http://gazebosim.org/tutorials?tut=actor#Scriptedtrajectories
官方教程http://gazebosim.org/tutorials?tut=actor&cat=build_robot
.

(2)为世界坐标系下的任意link指定随机的运动速度

【Random Velocity Plugin】【作为动态障碍物】【防盗标记–盒子君hzj】

为世界上的link指定随机速度,可以设置x、y和z速度分量的最大和最小允许值以及速度幅值。此外,还可以设置时间段,在此时间段之后,速度可以自行更改。设置“速度幅值”后,将自行设置方向

官方教程http://gazebosim.org/tutorials?tut=plugins_random_velocity&cat=

.

(3)获取机器人在gazebo的定位信息

以插件形式获取:可以在机器人的urdf模型中加入插件

    <!-- Fake localization plugin --><plugin name="ground_truth_odometry" filename="libgazebo_ros_p3d.so"><alwaysOn>true</alwaysOn><updateRate>100.0</updateRate><bodyName>base_link</bodyName><topicName>base_pose_ground_truth</topicName><gaussianNoise>0.01</gaussianNoise><frameName>map</frameName>--><!-- initialize odometry for fake localization--><xyzOffsets>0 0 0</xyzOffsets><rpyOffsets>0 0 0</rpyOffsets></plugin>

以订阅者形式获取
订阅话题/gazebo/model_states,找到对应模型的名称
【防盗标记–盒子君hzj】

void _modelStatesCallback(const gazebo_msgs::ModelStatesConstPtr &msg)
{int modelCount = msg->name.size();for(int modelInd = 0; modelInd < modelCount; ++modelInd){if(msg->name[modelInd] == "turtlebot3"){_current_pose.pose = msg->pose[modelInd];_current_velocity.twist = msg->twist[modelInd];break;}}
}

.

(4)基于事件触发

(1)【world插件】Occupied Event
每当模型占据指定的三维区域时,OccuppiedEvent将发送有关主题的消息【防盗标记–盒子君hzj】
官方教程
.http://gazebosim.org/tutorials?tut=occupiedevent&cat=plugins

(2)【world插件】环境触发事件的动作(Trigger an Action)
官方教程
http://gazebosim.org/tutorials?tut=contain_plugin&cat=plugins

.
.

3)【可视化插件】Visual

作用
GUI覆盖视为位于渲染窗口顶部的透明2D层,可视化参数

官方教程
http://gazebosim.org/tutorials?tut=gui_overlay&cat=user_input

注意

ROS的gazebo的仿真插件需要什么功能插件可以去官网里面找,或者wiki【防盗标记–盒子君hzj】
.
.
.

5.通过launch文件导入相关gazebo需要的东西【gazebo.launch】

(有关启动gazebo组件的都在这里)
【这个一般是是自己实现的–gazabo的launch】

一级的demo_run.launch

【这个launch是启动整个工程的】
其他模块的启动…

<!---Gazebo---->
<include file="$(gazebo所在的功能包)/.../launch/gazebo.launch">

.
.

二级的gazebo.launch

【这个launch 是专门处理gazebo的】

(1)使用roslaunch命令打开环境World Models仿真环境

1)命令(不带参数):roslaunch gazebo.launch
2)命令(带参数):roslaunch gazebo_ros empty_world.launch paused:=true use_sim_time:=false gui:=true throttled:=false recording:=false debug:=true verbose:=true gui_required:=true

(2)编写gazebo.launch的原理

(1)【几何环境加载】world文件加载的原理
先创建一个空的empty gazebo环境,再通过world_name加载.world文件的路径进去【防盗标记–盒子君hzj】(2)【机器人模型文件加载】xacro文件加载原理
机器人模型一般是再网上下载下来的,已经是一个带有传感器和控制插件的功能包了,像再launch上启动一个功能包这样启动它就行了(3)【插件文件的加载】
插件文件一般都嵌入到了world几何环境和model机器人模型中了,具体怎么操作看插件的使用章节,
带有模型的插件是不会独立使用的,一些独立的系统的可视化的插件可以,
如rqt_steering插件(rqt工具包有比较多的独立插件)、robot_state_publisher(用于发布TF)(4)......

.
.

(3)gazebo.launch通常启动类型的步骤

启动gazebo环境也是启动一个总的launch,进而启动一堆仿真相关的机械外形、控制、传感器数据、环境数据、插件数据、坐标转换的东西!
(1)【环境几何模型】设置gazebo的参数(最常用时这个了)
不设置的话,使用默认参数

paused  在暂停状态下启动Gazebo(默认为false)
use_sim_time  告知ROS节点请求时间以获取通过ROS主题/时钟发布的Gazebo发布的模拟时间(默认为true)
gui  启动Gazebo的用户界面窗口(默认为true)
gui_required  当gzclient(用户界面窗口)退出时终止启动脚本(默认为false)
headless  启用gazebo状态日志记录
debug  Start gzserver (Gazebo Server) in debug mode using gdb (default false)
verbose 使用--verbose运行gzserver和gzclient,向终端打印错误和警告(默认为false)
server_required  当gzserver(Gazebo服务器)退出时终止启动脚本(默认为false)
world_name  这个就是我们建立.world文件的目录

(2)【机器人模型】在gazebo中加载机器人模型xacro(robot_description)
(3)【插件】运行robot_state_publisher节点,用于发布TF
(4)【插件】加载小车控制器rqt_steering
(5)【插件】启动rqt steering GUI【插件】

官方教程
http://gazebosim.org/tutorials?tut=ros_roslaunch&cat=connect_ros

6.搭建ROS工程,用ROS工程编写源代码

【系统开发基础储备】ROS开发步骤(第二篇)
和上面博客的步骤一致,转战一下~
.
.

7.从gazebo中获取仿真得到的数据

【以.rviz、插件、订阅者的形式】
(获取数据之前先实现自己的源码)

(1)构建rviz可视化配置文件【.rviz】

(有关数据可视化的都在rviz,有关仿真环境的都要在gazebo)【防盗标记–盒子君hzj】
在rviz中配置好,直接导出文件就好,仿真数据的获取都是用插件的形式得到的,无论是控制插件、传感器插件、环境插件

注意
一般在gazebbo中看不出来具体效果,可以把gazebo的界面关了,太耗算力
rviz可视化gazebo的模型和场景的数据,都是通过参数服务器来的,而不是通过接收话题来的

(2)通过gazebo的GUI,显示发布出去的话题

(3)gazebo的屏幕截图

.
.
.

八、注意

gazebo的坐标系使用的是右手坐标系

gazebo常出现的问题
频繁开启关闭gazrbo仿真环境会报错误,因为gazebo在没有完全退出的时候就再次开启(垃圾电脑更是这样)【防盗标记–盒子君hzj】

解决办法

$killall gzserver
$killall gzclient

参考资料

(1)gazebo的教程:http://www.gazebosim.org/tutorials

(2)自己需要什么功能可以去gazebo的官网上去搜索,按照wiki和Tutorials的教程部署下来

(3)具体参考的工程,或者要偷源码可以直接运行官方教程,部署下来,分析他怎么实现的

第九篇:ROS的gazebo三维物理仿真环境联合使用相关推荐

  1. ROS中阶笔记(四):机器人仿真—Gazebo物理仿真环境搭建(重点)

    ROS中阶笔记(四):机器人仿真-Gazebo物理仿真环境搭建(重点) 文章目录 1 ros_control 1.1 ros_control安装 2 Gazebo仿真步骤(重点) 2.1 配置物理仿真 ...

  2. ROS学习记录(二)阿克曼转向车运动学模型及在gazebo中搭建仿真环境

    前言:该篇是ROS学习记录的第二篇,如果还没关注过之前文章的读者,如有需要可以通过下方传送门去看之前的文章: ROS学习记录(一) Plugin插件 这两天关注了古月老师的公众号,看到了其中一篇课程推 ...

  3. 【Simscape】用Simscape实现三维物理仿真(四)——用PID控制倒立摆系统

    仿真文件下载:https://download.csdn.net/download/ReadAir/12232591 1 建立一个倒立摆系统 我们使用[Simscape]用Simscape实现三维物理 ...

  4. Simscape基础教程之实例(一)——使用Simscape三维物理仿真自由落体小球碰撞平面

    一. 简介 本实例使用MATLAB/Simulink里面的simscape,实现自由落体小球碰撞平面的三维物理仿真,可用于新手入门simscape的参考示例. 二. 准备工作 需要安装的工具箱 (1) ...

  5. 实验篇(7.2) 03. 部署物理实验环境(下)❀ 远程访问

    [简介]考虑到有很多人初次接触FortiGate防火墙硬件,因此在讲解部署物理实验环境的时候,防火墙的初次登录内容介绍的比较多,以致于需要将文章分下.下二篇.下篇我们重点介绍服务器的配置及部署.  防 ...

  6. 【Simscape】用Simscape实现三维物理仿真(一)——创建一个自由落体小球

    仿真文件下载:https://download.csdn.net/download/ReadAir/12230623 准备:MATLAB R2019a 1 打开MATLAB 2 打开Simulink ...

  7. 使用MATLAB绘制Gazebo中的仿真小车的运动轨迹

       虽然,Gazebo中自带了绘图工具,当需要绘制一些简单的图像时,非常的方便,但是当需要绘制复杂的图像时,还是MATLAB更加合适一些.    当我们仅仅使用MATLAB以可视化图像的形式去观察G ...

  8. 机器人学习--机器人仿真环境汇总

    注释1:玩机器人技术和研究,假设已经知道ROS,以下大部分仿真环境几乎都可以与ROS交互 非儿童机器人编程环境scratch等. 注释2:之前只知道gazebo,没想到还有这么多仿真软件和工具,可以做 ...

  9. APM无人机软件在环仿真环境搭建

    题记:最近做毕业设计得用到无人机仿真,重操旧业,搞一搞SITL仿真. 给个传送门参考:无人机SITL仿真 APM软件在环仿真 我的环境:ubuntu18.04虚拟机 1.官方教程 ardupilot官 ...

  10. 进入Baxter仿真环境

    step1:打开终端:Ctrl+Alt+T setp2:进入工作空间: cd ros/indigo/baxter_ws step3:链接仿真环境 ./baxter.sh sim step4:开启gaz ...

最新文章

  1. 利用 socket 获取 tcp 包并解析的问题。
  2. 用云服务器实现janus之web端与web通话!
  3. 【软件安装】sublime安装方法
  4. FPGA实战操作(1) -- SDRAM(Verilog实现)
  5. linux ntfs硬盘自动挂,linux下查看所有硬盘分区+挂接NTFS磁盘/硬盘+自动挂接硬盘方法...
  6. 猫眼java开发暑期实习_校招|猫眼 Android日常实习一面面经
  7. Python安装与库导入
  8. Android开发笔记(八十一)屏幕规格适配
  9. php ffmpeg
  10. LINQ体验(14)——LINQ to SQL语句之存储过程 夺表
  11. 万圣节字体来啦!6款风格奇幻的中文字体免费下载
  12. 斐波那契数列 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
  13. Excel文件减肥修复终极办法----解决Excel文件打开慢的问题
  14. python做数据透视表_利用Python进行数据分组/数据透视表
  15. 为何服务器变成ink文件,电脑上的文件全部变成ink了, 为什么, 跪求大神回答
  16. LeetCode 37. 解数独 Sudoku Solver
  17. PostgreSQL11 | pgadmin4基本使用
  18. APP 合规讲堂 - 收集使用个人信息的目的、方式、范围发生变化时,是否以适当方式通知用户(五)
  19. 从卷积神经网络(CNN)到图卷积神经网络(GCN)详解
  20. 火狐linux版更改语言,修改Firefox火狐语言 添加火狐语言包的方法

热门文章

  1. word与mathtype——“运行时错误48,文件未找到:MathPage.wll”解决
  2. 《8问》| 程晓明:未来一定有世界货币,关键在于设计逻辑
  3. windows系统镜像修复计算机,为你详解win7系统还原及映像修复功能
  4. maven项目中 org.hibernate.MappingNotFoundException: resource:**.hbm.xml not found问题的解决方案
  5. 计算机有哪些知识,电脑基本操作知识有哪些
  6. lg android tv遥控器,LG TV Remote遥控器
  7. HNOI 2015 【亚瑟王】
  8. 对残差网络(ResNet/Residual Network)的基础理解
  9. OROCOS之KDL(1)—— Linux环境搭建篇
  10. reactjs setState的两种写法