本教程的目的是创建与上一教程中的四轮机器人相对应的PROTO文件。
目前,机器人的定义完全包含在世界文件中。在PROTO文件中移动此定义将允许您使用此机器人,而无需完全复制和粘贴其定义(在同一世界或不同世界中多次)。
在您喜欢的文本编辑器中打开上一教程中创建的世界4_wheels_robot.wbt。在项目的protos文件夹中创建一个新的空文本文件,名为FourWheelsRobot.proto,并在文本编辑器中打开该文件,该文件将包含机器人的定义。
任何PROTO文件至少应遵循以下结构:
#VRML_SIM R2023b utf8 PROTO protoName [ protoFields ] { protoBody }
protoName应该是PROTO文件的名称(即本例中的FourWheelsRobot),protoFields定义PROTO节点的可修改字段(该部分目前应为空),protoBody是根节点的定义(即本案中的Robot节点)。
使用正确的protoName在PROTO文件中写入此默认结构。从4_wheels_robot.wbt世界文件复制robot节点(以robot{开始,以final}结束),并将其粘贴到PROTO文件中,而不是protoBody中。最后,保存PROTO文件。
#VRML_SIM R2023b utf8 PROTO FourWheelsRobot [ ] { Robot { # list of fields } }
使用PROTO节点
这个新的PROTO节点现在可用于当前项目中的每个世界。
在Webots中打开4_wheels_robot.wbt世界,然后添加FourWheelsRobot节点(您刚刚定义的)。该节点位于PROTO节点(当前项目)/ForWheelsRobot(机器人)中。
应该在与现有机器人完全相同的位置添加第二个4轮机器人。
增加域
正如您可能注意到的,这个新的PROTO节点没有任何开放字段,因此不可能平移、旋转或更改控制器。将新字段添加到PROTO节点并将其与内部字段链接是非常容易的。这应该在PROTO接口部分([和]之间的部分)中完成。
在文本编辑器中编辑PROTO文件,并在PROTO接口部分添加平移、旋转和bodyMass字段的定义:
field SFVec3f translation 0 0 0 field SFRotation rotation 0 0 1 0 field SFFloat bodyMass 1
您的PROTO节点现在有两个打开的字段,但它们没有链接到任何内部字段。要链接应使用IS关键字的字段,只需将Robot节点的平移x y z和旋转x y z角度字段替换为:
translation IS translation rotation IS rotation
和机器人节点的物理节点的质量域通过:
mass IS bodyMass
保存PROTO文件
#VRML_SIM R2023b utf8 PROTO FourWheelsRobot [ field SFVec3f translation 0 0 0 field SFRotation rotation 0 0 1 0 field SFFloat bodyMass 1 ] { Robot { translation IS translation rotation IS rotation children [ # list of children nodes ] boundingObject USE BODY physics Physics { density -1 mass IS bodyMass } controller "four_wheels_collision_avoidance" } }
现在,您可以将模拟保存在Webots中并进行还原。FourWheelsRobot节点的平移、旋转和bodyMass现在可以更改(在场景树中或使用三维视图中的控制柄)。
同样的机制也可以用于暴露机器人节点的控制器字段。
标签:文件,教程,PROTO,机器人,FourWheelsRobot,rotation,节点 From: https://www.cnblogs.com/gary-guo/p/17586308.html