前言

这是一个系列小文章,主要介绍在ROS-Gazebo中如何更好地使用SDF格式建模与仿真。众所周知,URDF是ROS的原生支持格式,但在某些情况下(尤其是Gazebo仿真时),使用SDF格式会更加合理。鉴于中文网络上几乎没有成体系的SDF介绍博文,因此我将自己在硕士期间关于SDF模型的使用经验稍作总结。如有谬误,还望友好地指出。

 

本系列规划如下内容,建议按顺序阅读。尤其是第一篇,以确认你是否有必要使用SDF建模:

1 SDF规范文档

SDF官网上有详尽且直观的规范文档。点击相应元素,即可查看其结构和定义,链接:

SDFormat Specification​sdformat.org

 

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示例模型,链接和界面如下:

Bitbucket​bitbucket.org

 


Gazebo官方的SDF示例模型

 

在左侧的Downloads栏目中,我们可以找到模型资源包的下载链接。将其下载解压后,放到如下目录:(.gazebo是隐藏目录,想要查看,可先ctrl+h显示)

 

~/.gazebo/models

 

接下来打开gazebo,找到左侧的insert栏目,点击相应的名称即可插入模型。常用的模型有室内环境、楼房、各种材质地形、围墙等,甚至还有整个城市的粗模型,用于搭建机器人的工作环境;一些水瓶、桌椅等小物品可以与机器人交互。

 

模型库中的一些模型

 

参考资料

[1] SDF官网