【问题标题】:ROS URDF: redefining global symbol: pi when processing fileROS URDF:重新定义全局符号:处理文件时的 pi
【发布时间】:2021-07-19 17:03:42
【问题描述】:

在 ros urdf.xacro 文件上运行 xacro 时,出现错误“重新定义全局符号:pi”。 重现的步骤如下。

 <?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 文件中

<?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_"/>

但是当我尝试运行时

    rosrun xacro xacro --inorder hrwros.xacro > hrwros.urdf

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

    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

【问题讨论】:

  • 你包含的代码太多了;它被剥离了。

标签: ros


【解决方案1】:

因此,当您在全局范围内定义了相同的 xacro 属性时,拥有另一个具有相同名称的属性会重新定义它。

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

【讨论】:

  • 你能指出我应该在哪里删除全局 pi 的代码
  • 您问题的顶级文件中的第三行,即在全局范围内显示&lt;xacro:property name="pi" value="3.14159265" /&gt; 的行。如果这回答了您的问题,请接受它。
  • yaa 工作但仍然看不到机器人
  • 这听起来像是一个不同的问题;如果您对此有调试信息,或者有一个很好的问题,请随时问其他人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多