首页 > 其他分享 >Webots tutorial 8

Webots tutorial 8

时间:2023-02-03 14:11:52浏览次数:40  
标签:node Supervisor BB robot field Webots 节点 tutorial

第九章 Webots官方Tutorial 8


目录

Tutorial 8: the Supervisor

Supervisor监督一个世界,可以设置或获取有关它的信息。本教程将教supervisor的一些任务:

  • 如何使用 supervisor 移动对象。
  • 如何删除一个节点并在其位置生成另一个节点。
  • 如何跟踪场景中对象的变化。
  • 如何更改对象的属性,即其颜色。

二、设置环境并添加Supervisor

  1. File / New / New Project Directory新建工程my_supervisor
  2. 新建世界文件my_supervisor.wbt,添加地板"Add a rectangle arena"
  3. 设置地板大小floorsize为
  4. 添加一个BB-8机器人。PROTO nodes (Webots projects) / robots / sphero / bb8
  5. 删除BB-8自带的控制器
  6. 添加一个Robot结点作为监控器,name改为supervisor,supervisor改为TRUE
  7. 新建一个机器人控制器supervisor_controller.pyFile / New / New Robot Controller,将其作为supervisor的控制器。
  8. 保存

三、使用Supervisor移动对象

使用Supervisor移动BB-8机器人,有必要在其他物体中找到唯一识别BB-8的方法。为此,我们可以使用DEF机制。

单击BB-8节点,并将其命名为BB-8,然后保存世界。

控制器supervisor_controller.py代码(机器人将被移动到指定位置坐标,注意robot创建的是Supervisor而不是Robot实例):

from controller import Supervisor

TIME_STEP = 32

robot = Supervisor()  # create Supervisor instance

# [CODE PLACEHOLDER 1]
bb8_node = robot.getFromDef('BB-8')
# Get Location
translation_field = bb8_node.getField('translation')

i = 0
while robot.step(TIME_STEP) != -1:
  # [CODE PLACEHOLDER 2]
  if i == 0:
     new_value = [2.5, 0, 0]
     translation_field.setSFVec3f(new_value)
      
  i += 1
  

这是一个简单的例子,但无论你更改哪个字段,原理都是一样的。例如,你可以增加对象的大小、颜色,更改灯光条件,或在超出范围时重置其位置等等。这只是一个获取节点引用的问题,从中可以按名称获取字段引用,并通过使用适合更改的类型的函数来设置其值。

四、生成和删除结点

删除结点

if i == 10:
  bb8_node.remove()

添加一个型机器人Nao

为了添加节点,我们必须知道要在场景树(软件左侧列表)中的何处生成节点。是否应将其添加到场景树的顶层?它应该作为另一个节点的字段插入吗?这些问题将改变如何插入节点以及需要使用哪个主管功能,但其中一个不变的因素是我们需要引用此位置。在这种情况下,Nao机器人将被添加到场景树中的最后一个位置,即BB-8曾经出现的位置。

  1. 点击IMPORTABLE EXTERNPROTOInsert new一个Nao机器人。PROTO nodes (Webots Projects)/Nao,保存。

控制代码

from controller import Supervisor

TIME_STEP = 32

robot = Supervisor()  # create Supervisor instance

# [CODE PLACEHOLDER 1]
bb8_node = robot.getFromDef('BB-8')

translation_field = bb8_node.getField('translation')
# 获取根节点
root_node = robot.getRoot()
children_field = root_node.getField('children')

i = 0
while robot.step(TIME_STEP) != -1:
  # [CODE PLACEHOLDER 2]
  if i == 0:
     new_value = [2.5, 0, 0]
     translation_field.setSFVec3f(new_value)
  # 删除结点
  if i == 10:
     bb8_node.remove()
  # 添加型机器人Nao
  if i == 20:
     children_field.importMFNodeFromString(-1, 'Nao { }')
  
  i += 1
  

我们将包含所有内容的此Group节点称为根节点。为了插入Nao robot,我们需要的引用实际上是对根节点的子字段的引用。

五、使用Supervisor跟踪目标位置

由于Supervisor拥有无限的权力,因此它是跟踪模拟演变的完美工具。在本节中,我们将使用所获得的知识来产生一个球,并在它下落时跟踪它的位置,当它接触地面时改变它的颜色。

同添加Nao的操作,将球Ball声明为一个IMPORTABLE EXTERNPROTO

from controller import Supervisor

TIME_STEP = 32

robot = Supervisor()  # create Supervisor instance

# [CODE PLACEHOLDER 1]
# bb8_node = robot.getFromDef('BB-8')
# translation_field = bb8_node.getField('translation')

root_node = robot.getRoot()
children_field = root_node.getField('children')

children_field.importMFNodeFromString(-1, 'DEF BALL Ball { translation 0 1 1 }')
ball_node = robot.getFromDef('BALL')
color_field = ball_node.getField('color')

i = 0
while robot.step(TIME_STEP) != -1:
  # [CODE PLACEHOLDER 2]
  # if (i == 0):
    # new_value = [2.5, 0, 0]
    # translation_field.setSFVec3f(new_value)

  # if i == 10:
      # bb8_node.remove()

  # if i == 20:
    # children_field.importMFNodeFromString(-1, 'Nao { }')

  position = ball_node.getPosition()
  print('Ball position: %f %f %f\n' %(position[0], position[1], position[2]))

  if position[2] < 0.2:
    red_color = [1, 0, 0]
    color_field.setSFColor(red_color)

  i += 1


总结

通过本教程,已了解到:

  1. Supervisor只不过是一个具有额外权力的机器人,因此,使用机器人实例执行的任何操作都可以使用Supervisor实例来执行。
  2. Supervisor不受物理学的约束,因为它的权力是无限的,具有“欺骗”性。
  3. 每当希望使用Supervisor更改场景树时,需要获得参考:
    • 要插入节点,需要包含该节点的字段的引用。
    • 要删除节点,需要引用节点(即对象)本身。
    • 要更改参数的值,如(位置、颜色、大小等),需要引用所述字段。
  4. 通过将机器人或对象定义为IMPORTABLE EXTERNPROTO并使用importMFNodeFromString API函数,可以实现机器人或对象的生成。

标签:node,Supervisor,BB,robot,field,Webots,节点,tutorial
From: https://www.cnblogs.com/YIKeLB/p/17085235.html

相关文章

  • Webots tutorial 5
    第六章Webots官方Tutorial5目录第六章Webots官方Tutorial5一、Tutorial5:CompoundSolidandPhysicsAttributes二、组合实体三、物理属性3.1Handson#33.2Han......
  • Webots tutorial 4
    第五章Webots官方Tutorial4目录第五章Webots官方Tutorial4一、Tutorial4:MoreaboutControllers二、新建一个控制器2.1Handson#1三、e-puck模型四、设计控制......
  • Webots tutorial 2
    第三章Webots官方Tutorial2目录第三章Webots官方Tutorial2一、Tutorial2:ModificationoftheEnvironment二、一个新仿真2.1Hands-on#1三、修改地板Floor3.1Ha......
  • Webots tutorial 3
    第四章Webots官方Tutorial3目录第四章Webots官方Tutorial3一、Tutorial3:Appearance二、灯光三、修改墙的外观3.1Hands-on#2四、给球添加一个现有外观4.1Hands-......
  • Webots tutorial 1
    第二章Webots官方Tutorial1目录第二章Webots官方Tutorial1前言一、Tutorial1:YourFirstSimulationinWebots二、创建一个新世界2.1Hands-on#22.2Hands-on#3......
  • Webots下载安装 + Pycharm联调
    第一章Webots安装目录第一章Webots安装前言一、Webots是什么?二、WebotsR2022b安装1.下载2.安装3.Pycharm作为IDE3.1设置环境变量3.2Webots设置总结前言本系列......
  • Firefly Amazon UK PC control installation tutorial
    FireflyAmazonUKPCcontrolinstallationtutorial1.TurnoffthePCfirewallandanti-virussoftware,itisbesttouninstalltheanti-virussoftware2.Downl......
  • Firefly Amazon PC control installation tutorial
    FireflyAmazonPCcontrolinstallationtutorial1.TurnoffthePCfirewallandanti-virussoftware,itisbesttouninstalltheanti-virussoftware2.Download......
  • Firefly Amazon US PC control installation tutorial
    FireflyAmazonUSPCcontrolinstallationtutorial1.TurnoffthePCfirewallandanti-virussoftware,itisbesttouninstalltheanti-virussoftware2.Downl......
  • Quartz.Net 官方教程 Tutorial 3/3
    Schedule相关属性设置扩展属性方式varhost=Host.CreateDefaultBuilder().ConfigureServices(services=>{services.AddQuartz(opt=>......