1.理论部分
在本教程中,我们将教您如何在环境中创建简单的对象。第一步是创建一个与环境互动的球。我们将解决与节点相关的几个概念:它们的含义是什么,如何创建它们,它们必须如何关联等等。此外,我们将了解如何设置物理参数。它们的详细定义可以在参考手册中找到。将节点图表放在您面前,也将有助于理解节点继承关系。
本小节介绍 Webots 中最重要的基本节点:Solid 节点,许多其他节点都源自该节点。
Solid 节点表示刚体,即可以忽略变形的刚体。无论施加在其上的外力如何,刚体任意两个给定点之间的距离在时间上保持不变。例如一张桌子、一个机器人指节或一个轮子都是刚体。柔体和铰接物体不是刚体。例如,绳索、轮胎、海绵或关节机器人手臂都不是刚体。然而,一个关节实体可以分解成几个刚体。
Webots 的物理引擎专为模拟刚体而设计。在设计模拟时,一个重要的步骤是将各种实体分解为单独的刚体。要定义刚体,您必须创建一个实体节点。在此节点内,您将根据刚体的特性设置不同的子节点。下图描绘了刚体及其子节点。 Solid 节点的图形表示由填充其子列表的 Shape 节点定义。碰撞边界在其 boundingObject 字段中定义。图形表示和碰撞形状通常但不一定相同。最后,physics field定义对象是属于动态环境还是静态环境。所有这些子节点都是可选的,但physics field 需要定义 boundingObject。
DEF-USE机制允许在一个地方定义一个节点并在场景树的其他地方重复使用该定义。这对于避免世界文件中相同节点的重复是非常有用的。此外,它还允许用户在同一时间修改几个对象。以下是它的工作原理:首先,一个节点被贴上一个DEF字符串。然后这个节点的副本可以通过USE关键字在其他地方重复使用。只有 DEF 节点的字段可以被编辑,USE 的字段继承自 DEF 节点,不能被改变。这种机制取决于世界文件中节点的顺序。一个 DEF 节点应该定义在任何相应的 USE 节点之前。
总体而言内容主要是下面几点,对于添加的Solid节点我们可以
- 在其children下添加shape修改形状
- 通过修改Solid的translation可以修改物体位置,通过修改rotation可以改变物体朝向
- 通过设置physic可以添加物理参数重力,质量,密度
- 通过设置boundingObject我们可以使物体与地面产生碰撞效果
- 在shape中的geometry的DEF设置为BALLL之后可以在boundingObject中使用这个设置达到同样效果,与此同时体现了我们对减少场景树节点冗余的 DEF-USE 机制的应用。
2.实践部分
- 首先新建一个世界
- 接下来新增一个地面,鼠标右键Add New
- 新加入一个球,之后命名为1号
修改一下地面的大小,这样可以看到球了
修改坐标将它设置到天上
将球的名字修改为1
- 接下来新增一个Solid节点,修改名字为2
对Solid的children节点右键Add New,然后如图操作添加shape
修改几何形状
将solid这个球设置到天上
开始仿真发现小球1号自由落体而2号球没有动
对2号大球添加物理参数
再次仿真发现打球也会自由下落,而且会穿过地面
为什么白球不会停留在地面上?
- 类似2号球的创建我们再新建一个3号球
更名为3
添加形状
修改几何形状
修改名字为3
添加重力物理参数
修改质量
更改boundingObject
再次仿真可以看到3号球可以停在地面上了,而2号球由于没有改变boundingObject而直接穿过了地面。
另外我们也可以修改形状
可以看到球的粗糙度之类的有改变
我们可以在shape中的geometry Sphere中的DEF添加BALLL
删除之前设置的boundingObject
再次让3号球自由下落
可以发现3号球会穿过地面。接下来修改boundingObject如下图,从而使用我们刚刚定义的BALLL
再次仿真之后可以看到球可以落到地面上不穿过去,如此达到了和最开始boundingObject设置有一样的效果。
通过仿真我们可以看到物体不会穿过地面,达到了和之前一样的效果。
另外我们可以再次创建一个4号球,定义其shape中的geometry时可以直接使用之前的BALLL。
在这两个地方都可以使用我之前预定义的DEF BALLL,我的理解是一个是几何外观,一个是几何碰撞接触,就像下图所描述的。
在本教程结束时,您将能够创建基于刚体的简单环境。您可以从场景树视图中添加节点并修改它们的字段。您已经熟悉了 Solid、Physics、Shape、Sphere 和 Box 节点。您还看到了允许减少场景树节点冗余的 DEF-USE 机制。