SDF(Simulator Description format)是用于描述Gazebo仿真环境中所有元素的一种XML文件格式,包括机器人。
通过阅读Model Data documentation,要创建模型,必须遵循Gazebo模型数据库目录结构中的格式规则,详细的模型描述格式请参考SDF 1.4 reference。
1.创建模型目录
mkdir -p ~/.gazebo/models/my_robot
2.创建模型配置文件
gedit ~/.gazebo/models/my_robot/model.config
3.将以下语句复制到.config
配置文件中
<?xml version="1.0"?>
<model>
<name>My Robot</name>
<version>1.0</version>
<sdf version='1.4'>model.sdf</sdf>
<author>
<name>My Name</name>
<email>me@my.email</email>
</author>
<description>
My awesome robot.
</description>
</model>
4.在 ~/.gazebo/models/my_robot/model.sdf
目录下创建.sdf文件
gedit ~/.gazebo/models/my_robot/model.sdf
5.复制以下语句到.sdf文件中
<?xml version='1.0'?>
<sdf version='1.4'>
<model name="my_robot">
</model>
</sdf>
到此处,就有了模型的基本内容,model.config文件描述了机器人一些额外的元数据,且包含了必要的标签。
6.创建模型的结构
a.通过添加<static>true</static>元素到~/.gazebo/models/my_robot/model.sdf文件中,使模型处于静止状态。
<?xml version='1.0'?>
<sdf version='1.4'>
<model name="my_robot">
<static>true</static>
</model>
</sdf>
b.添加长方形底座。
<?xml version='1.0'?>
<sdf version='1.4'>
<model name="my_robot">
<static>true</static>
<link name='chassis'>
<pose>0 0 .1 0 0 0</pose>
<collision name='collision'>
<geometry>
<box>
<size>.4 .2 .1</size>
</box>
</geometry>
</collision>
<visual name='visual'>
<geometry>
<box>
<size>.4 .2 .1</size>
</box>
</geometry>
</visual>
</link>
</model>
</sdf>
创建的是一个0.4*0.2*0.1米的盒子,由于盒子高为0.2,以盒子的中心点为坐标系,故需要<pose>0 0 .1 0 0 0</pose>,碰撞元素(collision)指定了所使用的碰撞检测引擎的形状,视觉元素(visual)指定了视图引擎的形状,大部分的例子中,collision和visual是相同的,最常见的使用不同collision和visual元素是为了搭配一个使用了复杂网格的视觉元素而简化了碰撞元素,这有利于提高性能。
c.运行Gazebo,检测图形是否能输出。
gazebo
结果如下:
d.添加一个万向轮,万向轮是一个没有摩擦的球体。
<collision name='caster_collision'>
<pose>-0.15 0 -0.05 0 0 0</pose>
<geometry>
<sphere>
<radius>.05</radius>
</sphere>
</geometry>
<surface>
<friction>
<ode>
<mu>0</mu>
<mu2>0</mu2>
<slip1>1.0</slip1>
<slip2>1.0</slip2>
</ode>
</friction>
</surface>
</collision>
<visual name='caster_visual'>
<pose>-0.15 0 -0.05 0 0 0</pose>
<geometry>
<sphere>
<radius>.05</radius>
</sphere>
</geometry>
</visual>
保存,点击Gazebo的GUI界面中的Insert选项,结果如下:
e.增加左右轮。
<link name="left_wheel">
<pose>0.1 0.13 0.1 0 1.5707 1.5707</pose>
<collision name="collision">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</collision>
<visual name="visual">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</visual>
</link>
<link name="right_wheel">
<pose>0.1 -0.13 0.1 0 1.5707 1.5707</pose>
<collision name="collision">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</collision>
<visual name="visual">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</visual>
</link>
结果如下:设置<static>为false后,小车将能运行。
本文靠自己的理解,翻译而来,错误之处望不吝指教!!!