ROS Noetic环境下xacro用变量读取YAML键值报错如何解决
报错原因
核心是xacro表达式语法使用错误:在${}包裹的表达式内部直接引用变量名即可,不需要额外嵌套一层${},你写的${COLORS[${color}]}里的两层${}会导致解析器无法正确识别表达式结构,触发语法报错。
修复方案
将颜色取值的行修改为如下写法即可:
<xacro:property name="YAML_FILE" value="$(find gazebo_ros_model_color)/configs/colors.yaml" /> <xacro:property name="COLORS" value="${load_yaml(YAML_FILE)}"/> <xacro:arg name="color" default="color_0" /> <!-- 仅修改这一行,表达式内直接用变量名color即可 --> <color>${COLORS[color]}</color>
修改后即可通过传入color参数的方式动态获取YAML中对应的颜色值,比如调用xacro时传入color:=color_2就能拿到对应红色配置。
可选扩展方案
如果需要避免传入不存在的key导致报错,可以加一层逻辑判断做默认值兜底:
<color>${color in COLORS.keys() ? COLORS[color] : COLORS['color_0']}</color>
上述写法会在传入的key不存在时自动降级使用color_0的默认值。
内容的提问来源于stack exchange,提问作者NEET
相关产品推荐
相关产品推荐

