URDF加载报错:无法读取<drake:hunt_crossley_dissipation>的value属性
Drake URDF加载报错:无法读取
<drake:hunt_crossley_dissipation>的value属性 我正在编写一个用作“垫球板”的单摆URDF文件,摆锤与弹性球碰撞时可让球弹开(类似排球运动员垫球)。参考弹性球示例编写了URDF文件,但使用parser.AddModelFromFile("filename.urdf")加载时出现如下报错:
RuntimeError: filename.urdf:39: error: Unable to read the 'value' attribute for the drake:hunt_crossley_dissipation tag
我的URDF文件内容:
<?xml version="1.0"?> <robot name="pendulum-paddle"> <material name="black"> <color rgba="0 0 0 1" /> </material> <link name="base"> <inertial> <origin xyz="0 0 0" /> <mass value="0.01" /> <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0" /> </inertial> </link> <joint name="base_weld" type="fixed"> <parent link="world" /> <child link="base" /> </joint> <link name="arm"> <inertial> <origin xyz="0 0 -1" rpy="0 0 0" /> <mass value="1" /> <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/> </inertial> <visual> <origin xyz="0 0 -.5" rpy="0 0 0" /> <geometry> <box size="0.2 0.2 1"/> </geometry> <material name="black" /> </visual> <collision name="collision"> <origin xyz="0 0 -.5" rpy="0 0 0" /> <geometry> <box size="0.2 0.2 1"/> </geometry> <drake:proximity_properties> <drake:hunt_crossley_dissipation> 0.1 </drake:hunt_crossley_dissipation> <drake:point_contact_stiffness> 1000000 </drake:point_contact_stiffness> </drake:proximity_properties> </collision> </link> <joint name="shoulder" type="continuous"> <parent link="base"/> <child link="arm" /> <axis xyz="0 1 0" /> </joint> <transmission type="SimpleTransmission" name="shoulder_trans"> <actuator name="shoulder" /> <joint name="shoulder" /> <mechanicalReduction>1</mechanicalReduction> </transmission> </robot>
问题原因与修复方案
报错的核心原因是Drake的URDF扩展标签要求数值通过value属性传递,而非标签内的文本内容。你当前把阻尼和刚度数值写在了标签的嵌套文本里,不符合Drake的解析规则。
需要修改<drake:proximity_properties>内的两个标签:
原错误写法
<drake:hunt_crossley_dissipation> 0.1 </drake:hunt_crossley_dissipation> <drake:point_contact_stiffness> 1000000 </drake:point_contact_stiffness>
修改后的正确写法
<drake:hunt_crossley_dissipation value="0.1" /> <drake:point_contact_stiffness value="1000000" />
修改后的完整URDF:
<?xml version="1.0"?> <robot name="pendulum-paddle"> <material name="black"> <color rgba="0 0 0 1" /> </material> <link name="base"> <inertial> <origin xyz="0 0 0" /> <mass value="0.01" /> <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0" /> </inertial> </link> <joint name="base_weld" type="fixed"> <parent link="world" /> <child link="base" /> </joint> <link name="arm"> <inertial> <origin xyz="0 0 -1" rpy="0 0 0" /> <mass value="1" /> <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/> </inertial> <visual> <origin xyz="0 0 -.5" rpy="0 0 0" /> <geometry> <box size="0.2 0.2 1"/> </geometry> <material name="black" /> </visual> <collision name="collision"> <origin xyz="0 0 -.5" rpy="0 0 0" /> <geometry> <box size="0.2 0.2 1"/> </geometry> <drake:proximity_properties> <drake:hunt_crossley_dissipation value="0.1" /> <drake:point_contact_stiffness value="1000000" /> </drake:proximity_properties> </collision> </link> <joint name="shoulder" type="continuous"> <parent link="base"/> <child link="arm" /> <axis xyz="0 1 0" /> </joint> <transmission type="SimpleTransmission" name="shoulder_trans"> <actuator name="shoulder" /> <joint name="shoulder" /> <mechanicalReduction>1</mechanicalReduction> </transmission> </robot>
修改后重新加载URDF即可解决该报错。
内容的提问来源于stack exchange,提问作者Tom C.
相关产品推荐
相关产品推荐

