首页 > 解决方案 > Webots - 世界重新加载后机器人的 BoundingObject 变为空(如何防止这种情况?)

问题描述

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

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

现在我使用 BODY DEF 节点作为机器人的 boundingObject,如下所示:

在此处输入图像描述

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

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

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

标签: roboticswebots

解决方案


首先,您的 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 的问题,这确实是一个错误,似乎 PROTO 的默认参数是在根节点之后创建的,因此在创建根节点时找不到。我已经在这里报告了这个问题,希望它会在下一个版本的 Webots 中得到修复: https ://github.com/cyberbotics/webots/issues/1231


推荐阅读