Webots - 机器人的 BoundingObject 在世界重新加载后变为空(如何防止这种情况发生?)

Webots - BoundingObject of Robot becomes null after world reload (how to prevent that?)

我有一个带有子节点的机器人节点 = [SolidCylinderJoint]。 SolidCylinderJoint 是我创建的一个原型,它将 DEF 节点定义为一个字段,即

field SFNode geometry DEF BODY Cylinder {
                height 0.1
                radius 0.05
            }

现在我使用 BODY DEF 节点作为机器人的 boundingObject,像这样:

现在,这很好用,但是只要我点击“重新加载世界”或重新启动 webots,boundingObject 就会再次变为 NULL。我认为这是因为机器人节点是在 Proto 之前加载的,并且在它试图将 boundingObject 设置为 BODY 时,它没有找到该定义,因此默认为 NULL。

世界文件:https://pastecode.xyz/view/fab1533d

原型文件:https://pastecode.xyz/view/f558d13c

首先,您的 PROTO 中存在问题,您不允许在字段的默认参数中创建 IS(即 baseColor IS baseColor):

field SFVec3f baseColor 0.985946 0 0.0481575
field SFNode appearance PBRAppearance { baseColor IS baseColor metalness 0.3 }

关于DEF-USE的问题,这确实是一个bug,PROTO的默认参数似乎是在根节点之后创建的,因此在创建根节点时找不到。 我在这里报告了这个问题,希望它会在下一个版本的 Webots 中得到修复: https://github.com/cyberbotics/webots/issues/1231