目录
一、运行gazebo
因为gazebo一般不是单独安装,基本都是作为ros的插件形式;这里也是这种情况,所以关于怎么安装gazebo的这里已经略去。
//
这里启动gazebo遇到一个问题:vmw_ioctl_command error Invalid argument,
解决办法是在终端下设置环境变量为0,$export SVGA_VGPU10=0
//
在home目录下直接运行 gazebo 即可打开gazebo界面,此时界面world是灰色的什么都没有。
对于初学者,可以打开官网的world模型,其中一个如下
gazebo worlds/pioneer2dx.world
注:如果本地没有pioneer2dx.world这个模型的话,会从网上下载,所以需要一段时间,界面变灰也不要紧,请耐心等待!
其他介绍:
gazebo也分客户端(client)与服务端(server),这里是这样区分的。
服务端运行指令:gzserver
客户端运行指令:gzclient
server端可以理解成服务器,运行gazebo实际的一些运算分析;
而client则可以理解成显示器,接受一些数据信息并显示,所以可以有多个显示器存在;
可以新开一个terminal然后输出gzclient是没有问题的,会弹出一个跟原来一模一样的窗口;
总结:运行gazebo这个指令时,会同时gzserver与gzclient,也可以分开运行,例如上面gazebo worlds/pioneer2dx.world,可以这样
gzserver worlds/pioneer2dx.world,然后另外开个terminal,输入gzclient
二 、gazeb组件
这一部分主要介绍在gazebo仿真运行中的各部分;
主要包括:
1.world files
该描述文件包含了仿真的所有元素,包括机器人,灯光,传感器,以及静物等等,文件格式一般是SDF,
并常常一个.world扩展名。通过gzserver读取所有信息并构建一个world场景;
2.model files
模型文件采用的格式与world files相同,SDF(simulation description format)格式,不同的是包含的内容,模型文件仅包含模型。
模型文件:
world files文件:
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default">
<!-- Ground -->
<include>
<uri>model://ground_plane</uri>
</include>
<!-- Pioneer2dx model -->
<include>
<uri>model://pioneer2dx</uri>
<pose>0 0 0 0 0 0</pose>
</include>
<!-- A global light source -->
<include>
<uri>model://sun</uri>
</include>
</world>
</sdf>
如果内容是world files子集,那模型文件的意义在哪里呢?
模型文件主要作用是实现原件的复用,例如四个车轮,可以通过一个模型实现,从而简化world files。
3.environment variables
环境变量,gazebo通过环境变量定位文件,并连接服务端与客户端,正常情况下环境变量是默认的,不需要我们进行设置。
一些环境变量:
GAZEBO_MODEL_PATH:gazebo所有模型的路径
GAZEBO_RESOURCE_PATH:供gazebo所有的资源路径,例如world
GAZEBO_MASTER_URI:指定的ip与端口,用于客户端连接服务器使用(其实正常情况下不用管这些,都是默认的,只有用服务器运行gazebo的情况才可能会用到此种设置);
GAZEBO_PLUGIN_PATH:用于gazebo搜索插件库的路径
GAZEBO_MODEL_DATABASE_URI:用于模型下载的网址
上述所有的变量查看位置
/usr/share/gazebo/setup.sh
修改上述环境变量的方式:
首先修改上面提高的setup.sh文件,然后source /usr/share/gazebo/setup.sh
三 、gazebo 架构
gazebo采用库形式的分布式架构,主要有物理仿真库,rendering(应该翻译成渲染,跟3D场景有关),用户接口,通信,传感器。
同时gazebo提供了两个执行进程用于仿真,分别是gzserver,gzclient。
gazebo支持订阅与发布的通信模式,例如当仿真环境中更新了机器人本体位置信息后,传感器以及界面会根据新的信息做出下一步动作。
1.gazebo master
gazebo master本质上是一个话题与名称的服务端。它提供名称查看,话题管理。一个master可以管理多个物理场景的仿真,传感器以及GUI。
2.通信库(Communication Library)
该库会被随后提到的大部分库使用。通信库其实是gazebo的传输机构,主要负责通信功能,目前仅支持publish/subscribe通信模式。
3.物理库(Physics Library)
物理库为基本的仿真组件提供了一个简单通用的接口,基本模拟组件包括刚体、碰撞外形、表征关节约束的关节点。
该接口已经被整合进四个开源的物理引擎中:
每个引擎都可以加载SDF文件中描述的模型。这样就保证了不同算法的实现以及满足不同的仿真特性。
4.渲染库(Rendering Library)
渲染库使用OGRE提供了一个简单的接口,用于在GUI和传感器库中渲染3D场景。主要包括灯光、材质纹理,天空的仿真。
也可以为渲染库编写插件完成需要的功能。
5.传感器库(Sensor Generation)
传感器生成库集成所有类型的传感器,监听仿真的状态更新,并生成传感器指定的输出。
6.GUI
GUI库使用qt编写图像窗口,用于仿真与用户之间的交互。GUI库就是与用户交互相关的功能的集成,基本都是窗口的相关操作。
7.插件(Plugins)
支持插件的库有,物理库、渲染库、传感器库。这些支持插件的库,可以知己