9、教程-2环境修改

在本教程中,我们将教您如何在环境中创建简单的对象。第一步是创建一个与环境相互作用的球。我们将讨论与节点相关的几个概念:它们的含义是什么,如何创建它们,它们必须如何附属,等等。此外,我们将了解如何设置物理。
将介绍几种类型的节点。其详细定义见参考手册。将节点图表放在你面前,也将有助于理解节点的继承关系。

将上一节的wbt文件另存为obstacles.wbt

 修改地板

默认的RectangleArena PROTO定义了一个固定在静态环境上的简单地板,即没有物理节点,并由墙包围。Webots对象库中提供了其他预建楼层。我们现在将删除RectangleArena节点,并添加一个简单的地板,我们将在本教程稍后手动用墙围绕它。

要删除RectangleArena,请在三维视图或场景树视图中左键选择它,然后按键盘上的del键。或者,也可以在三维视图中单击鼠标右键,然后在关联菜单中选择“删除”(也可以直接在场景树视图中使用关联菜单)。选择TexturedBackgroundLight节点,然后单击“+”按钮。在打开的对话框中,选择PROTO节点(Webots项目)/对象/楼层/楼层(实体)。

新添加的Floor PROTO默认大小为10mx10m,但可以通过更改相应字段来调整其大小、位置和纹理。

在场景树视图中,选择并展开“楼板”。修改大小字段并将其设置为{1,1}以将其大小调整为1mx1m。

 

实体节点

本小节介绍了Webots中最重要的基础节点:Solid节点,许多其他节点都源自该节点。
实体节点表示刚体,即可以忽略变形的实体。刚体任意两个给定点之间的距离在时间上保持不变,而不受外力的影响。例如,桌子、机器人指骨或轮子都是刚体。柔体和关节对象不是刚体。例如,绳子、轮胎、海绵或关节式机械臂都不是刚体。但是,铰接实体可以分解为多个刚体。
Webots的物理引擎仅用于模拟刚体。设计仿真时,一个重要步骤是将各种实体分解为单独的刚体。
若要定义刚体,必须创建实体节点。在该节点内,将根据刚体的特性设置不同的子节点。下图显示了刚体及其子节点。“实体”节点的图形表示由填充其子列表的“形状”节点定义。碰撞边界在其boundingObject字段中定义。图形表示和碰撞形状通常但不一定相同。最后,物理场定义了物体是属于动态环境还是属于静态环境。所有这些子节点都是可选的,但物理场需要定义boundingObject。

“几何体”框(在此图中)代表任何类型的几何图元。事实上,它可以用球体、长方体、圆柱体等来代替。

创建一个球

现在我们将向模拟中添加一个球。该球将被建模为刚体,如图所示。球体节点将用于定义球的几何结构。

在场景树视图中,选择最后一个节点,然后按“添加”按钮。在对话框中,打开“基础”节点区域,然后选择“实体”节点。在场景树视图中,展开“实体”节点并选择其children字段。使用“添加”按钮将“形状”节点添加到其中。选择“形状”节点的外观字段,然后使用“添加”按钮添加PBRA外观节点。

  1. 添加一个Sphere节点作为新创建的Shape节点的geometry字段。
  2. 展开“PBRAappearance”节点,并将其“金属度metalness”字段更改为0,将其“粗糙度roughness”字段改为1。
  3. 将另一个“球体”节点添加到实体的boundingObject字段中。
  4. 最后,将“物理”节点添加到实体的physics字段中。
  5. 通过修改“实体”节点的平移场,将球放置在机器人前面(例如,在{0.2,0,0.2}处)。
  6. 保存仿真
  7. 结果如下

模拟开始时,球会碰到地板。可以通过对球施加力(ctrl+alt+左键单击+拖动)来移动球。通过启用“视图/可选渲染/显示接触点”菜单项,球和地板之间的接触点可以显示为青色线。

Geometries

为了定义球,我们在两个不同的上下文中使用了Sphere节点:用于图形表示(子对象)和定义物理边界(boundingObject)。所有“几何体”节点(如“球体”节点)都可以在图形上下文中使用。但是,在物理环境中只能使用其中的一个子集。节点图表表示在每个上下文中支持哪些节点。
我们现在将通过增加用于表示球体的三角形数量来减小球体的大小并提高其图形质量。

For each Sphere node defining the ball, set its radius field to 0.05 and its subdivision field to 2. Refer to the Reference Manual to understand what the subdivision field stands for.

DEF-USE机制

DEF-USE机制允许在一个位置定义节点,并在场景树的其他位置重用该定义。这对于避免世界文件中相同节点的重复非常有用。此外,它还允许用户同时修改多个对象。它的工作原理如下:首先用DEF字符串标记节点。然后,可以使用USE关键字在其他地方重用此节点的副本。只有DEF节点的字段可以编辑,USE的字段继承自DEF节点,不能更改。此机制取决于世界文件中节点的顺序。应在任何相应的USE节点之前定义DEF节点。
我们前面用来定义球的两个球体定义是多余的。现在,我们将使用DEF-USE机制将这两个球体合并为一个球体。

 

现在,更改第一个Sphere节点的半径字段也会修改其boundingObject。

为方便起见,boundingObject字段还接受“形状”节点(而不是直接接受“球体”节点)。如图所示,也可以在形状级别使用相同的DEF-use机制。目前最大的好处是可以直接将此形状用于图形目的。稍后,这种机制将被证明对一些传感器非常有用。

Create a second ball with the same parameters but using the Shape node (rather than the Sphere node directly) for the DEF-USE mechanism.

 

posted on 2023-07-27 18:40  gary_123  阅读(42)  评论(0编辑  收藏  举报

导航