前言
这是一个系列小文章,主要介绍在ROS-Gazebo中如何更好地使用SDF格式建模与仿真。众所周知,URDF是ROS的原生支持格式,但在某些情况下(尤其是Gazebo仿真时),使用SDF格式会更加合理。鉴于中文网络上几乎没有成体系的SDF介绍博文,因此我将自己在硕士期间关于SDF模型的使用经验稍作总结。如有谬误,还望友好地指出。
本系列规划如下内容,建议按顺序阅读。尤其是第一篇,以确认你是否有必要使用SDF建模:
- 为什么选择SDF?
- SDF规范文档与模型资源
- SDF的建模与使用
- ERB:模块化生成SDF模型
- SDF与URDF的相互转换
- 基于SDF的多机器人仿真
- 使用与编写自定义插件——以PID控制插件为例
1 SDF规范文档
SDF官网上有详尽且直观的规范文档。点击相应元素,即可查看其结构和定义,链接:
SDF规范文档
规范文档该怎么使用呢?我一般采取逆向查阅的方法,先通过Gazebo的模型编辑器生成标准的SDF模型文件,其基本包含了需要的元素。如果遇到含义不明的元素,再到文档中逐级找到相应的说明。
2 SDF简要分析
下面我们简要分析文档,看看SDF有哪些有意思的特性。
首先,SDF元素中,除了版本信息外,包含了以下4个子元素:
- world:描述环境信息
- model:描述机器人
- actor:描述一种可执行脚本动画的特殊模型
- light:描述光照
相比之下,URDF的子元素就相对单调,缺少了对环境和光照的描述:
URDF的子元素
另外,二者还有一个重要的区别:SDF的<model>元素下,还可以包含<model>元素。而URDF的<model>元素下只有<link>和<joint>。这就意味着,相比起URDF,SDF可以很容易地通过嵌套<model>(model里面再放model)的形式实现多机器人仿真。
3 SDF模型资源的下载使用
gazebo官方项目中提供了大量SDF示例模型,链接和界面如下:
Gazebo官方的SDF示例模型
在左侧的Downloads栏目中,我们可以找到模型资源包的下载链接。将其下载解压后,放到如下目录:(.gazebo是隐藏目录,想要查看,可先ctrl+h显示)
~/.gazebo/models
接下来打开gazebo,找到左侧的insert栏目,点击相应的名称即可插入模型。常用的模型有室内环境、楼房、各种材质地形、围墙等,甚至还有整个城市的粗模型,用于搭建机器人的工作环境;一些水瓶、桌椅等小物品可以与机器人交互。
模型库中的一些模型
参考资料
[1] SDF官网