序言
这个教程演示了gazebo的基本操作,并且对模型数据库内的各个基本参数进行了基本讲解,你可以通过下面的过程创造一个两轮小车,进行基本的移动。
建立模型文件夹
建立模型的第一步是要建立一个符合模型数据库规则的文件系统,关于模型的细节描述可以看SDF。
1.创建模型文件夹
mkdir -p ~/.gazebo/models/my_robot
2.创建模型config文件(配置)
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
文件
gedit ~/.gazebo/models/my_robot/model.sdf
5.把下面内容贴进去
<sdf version='1.4'>
<model name="my_robot">
</model>
</sdf>
现在我们有了一个模型基本的内容,这个model.config
文件通过一些额外的数据描述了这个机器人。这个机器人的名字叫做my_robot,机器人使用的sdf文件版本为1.4。
建立模型框架
这一步会建立一个长方形底座和两个轮子
从一个基本的模型开始,慢慢建立一个机器人是很重要的,第一步是把基本形状布置在模型中,做这一步会使我们的模型进入static
状态,意味着它将不使用物理引擎。它会一直呆在一个地方,让我们可以装配所有组件。
1.让模型变为静态是通过加入<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>
2.然后通过编辑~/.gazebo/models/my_robot/model.sdf
加入基本长方体。
<?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.40.20.1的盒子,这里的碰撞引擎通过碰撞元素(collision)定义的形状进行检测。渲染引擎通过可视化元素(visual)进行渲染,对于大部分情况来说,碰撞以及渲染元素是一样的。当visual的网格很复杂时,可以通过简化碰撞元素来提高运行效果。
3.尝试在gazebo里插入这个模型
gazebo
你可以看到一个白色的盒子飘在地面上1m处。
点一下他就会落下来
4.现在我们可以在机器人上加入轮子了,轮子是一个没有摩擦的球体,这种形状的轮子会比加一个有关节的轮子更好,因为它减少了约束,使物理引擎运算更加简单。(想看完整robot代码的可以直接往下拉)
<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>
5.加入一个左轮
<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>
6.然后插入一个右轮,跟左轮差不多,只不过pose当中的位置发生了改变。
<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>
7.把<static>设置为false然后在左轮和右轮上加入两个关节。
<static>false</static>
<joint type="revolute" name="left_wheel_hinge">
<pose>0 0 -0.03 0 0 0</pose>
<child>left_wheel</child>
<parent>chassis</parent>
<axis>
<xyz>0 1 0</xyz>
</axis>
</joint>
<joint type="revolute" name="right_wheel_hinge">
<pose>0 0 0.03 0 0 0</pose>
<child>right_wheel</child>
<parent>chassis</parent>
<axis>
<xyz>0 1 0</xyz>
</axis>
</joint>
两个关节绕y轴旋转<xyz>0 1 0 </xyz>,把轮子和底座连接起来。
sdf文件完整代码
<?xml version='1.0'?>
<sdf version='1.4'>
<model name="my_robot">
<static>false</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>
<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>
</link>
<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>
<joint type="revolute" name="left_wheel_hinge">
<pose>0 0 -0.03 0 0 0</pose>
<child>left_wheel</child>
<parent>chassis</parent>
<axis>
<xyz>0 1 0</xyz>
</axis>
</joint>
<joint type="revolute" name="right_wheel_hinge">
<pose>0 0 0.03 0 0 0</pose>
<child>right_wheel</child>
<parent>chassis</parent>
<axis>
<xyz>0 1 0</xyz>
</axis>
</joint>
</model>
</sdf>
8.打开gazebo,点击insert,把模型从左边来劲来,然后放进去。
9.可以在gazebo打开后把右边中间的点点拉开
点击小车调整force的数值,或者之间点击要改变的那个物理,选择force然后在y轴加上一定的力,小车就会开始移动了(注意力不要太大不然会跑得很快,推荐小于1。