首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROS URDF:处理文件时重新定义全局符号: pi

ROS URDF:处理文件时重新定义全局符号: pi
EN

Stack Overflow用户
提问于 2021-07-14 18:13:07
回答 1查看 161关注 0票数 0

在ros urdf.xacro文件上运行xacro时,出现错误"redefining global symbol: pi“。重现的步骤如下。

代码语言:javascript
复制
 <?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">

  <!-- transmission -->
  <xacro:include filename="$(find tm_grasp_description)/urdf/tm.transmission.xacro" />

  <!-- Mass parameters -->
  <xacro:property name="pi" value="3.14159265" />

  <xacro:macro name="tm700_robot" params="prefix joint_limited">

    <!-- transmission prefix -->
    <xacro:tm_arm_transmission prefix="${prefix}" />

    <joint name="${prefix}shoulder_1_joint" type="revolute">
      <parent link="${prefix}base_link" />
      <child link = "${prefix}shoulder_1_link" />
      <origin xyz="0.0 0.0 ${shoulder_height}" rpy="${-0.5 * pi} 0.0 0.0" />
      <axis xyz="0 -1 0" />
      <xacro:unless value="${joint_limited}">
        <limit lower="${-2.0 * pi}" upper="${2.0 * pi}" effort="150.0" velocity="3.15"/>
      </xacro:unless>
      <xacro:if value="${joint_limited}">
        <limit lower="${-pi}" upper="${pi}" effort="150.0" velocity="3.15"/>
      </xacro:if>
      <dynamics damping="0.0" friction="0.0"/>
    </joint>

    ...
  </xacro:macro>
</robot>

我正在尝试将机器人添加到xacro文件中

代码语言:javascript
复制
<?xml version="1.0" ?>
<robot name="hrwros" xmlns:xacro="http://www.ros.org/wiki/xacro">

<!-- world --> 
<link name="world" />

<!-- workcell -->
<xacro:include filename="$(find hrwros_support)/urdf/workcell/workcell.urdf.xacro"/>
<xacro:workcell_urdf workcell_parent="world_interface"/>

<!-- Robot1 Pedestal -->
<xacro:include filename="$(find hrwros_support)/urdf/robot_pedestal/robot_pedestal.urdf.xacro"/>
    <xacro:robot_pedestal_urdf pedestal_prefix="robot1_" pedestal_parent="world_interface" pedestal_height="0.95">
    <origin xyz="0.5 1.8 0.0" rpy="0 0 0"/>
</xacro:robot_pedestal_urdf>

<!-- Robot1 -->
<xacro:include filename="$(find tm_grasp_description)/urdf/tm700.urdf.xacro"/>
<xacro:tm700_robot prefix="robot1_" joint_limited="true"/>

<!-- bins -->
<xacro:include filename="$(find hrwros_support)/urdf/bin/bin.urdf.xacro"/>
<xacro:bin_urdf prefix="bin_1_"/>

<!-- logical camera 1 collision model -->
<xacro:include filename="$(find hrwros_support)/urdf/logical_camera/logical_camera.urdf.xacro"/>
<xacro:logical_camera_urdf prefix="logical_camera1_" logical_camera_parent="world_interface">
  <origin xyz="1.2 1.8 2.0" rpy="0 1.5708 0"/>
</xacro:logical_camera_urdf>

<!-- logical camera 2 collision model -->
<xacro:include filename="$(find hrwros_support)/urdf/logical_camera/logical_camera.urdf.xacro"/>
<xacro:logical_camera_urdf prefix="logical_camera2_" logical_camera_parent="world_interface">
    <origin xyz="-8.3 -1.23 1.8" rpy="0 1.5708 0"/>
</xacro:logical_camera_urdf>

<!-- break beam -->
<xacro:include filename="$(find hrwros_support)/urdf/break_beam/break_beam.urdf.xacro"/>
<xacro:break_beam_urdf prefix="break_beam_"/>

但是当我试着跑的时候

代码语言:javascript
复制
    rosrun xacro xacro --inorder hrwros.xacro > hrwros.urdf

它显示以下错误,说明重定义符号pi。我要添加的机器人是techman机器人。

代码语言:javascript
复制
    xacro: in-order processing became default in ROS Melodic. You can drop the option.
    redefining global symbol: pi
    when processing file: /home/akash/project/src/techman_robot_ros-master/tm_grasp_description/urdf/tm700.urdf.xacro
    included from: hrwros.xacro
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-14 22:15:07

因此,当您在全局作用域中定义了相同的xacro属性时,拥有另一个同名的属性将重新定义它。

查看错误报告,您首先在顶部文件中定义了它,也可能在其他地方定义了它。在数学运算中,pi is defined already,因为数学运算使用python,而pi是在那里定义的。如果您删除您的全局pi定义,它现在应该可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68376150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档