在ros urdf.xacro文件上运行xacro时,出现错误"redefining global symbol: 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发布于 2021-07-14 22:15:07
因此,当您在全局作用域中定义了相同的xacro属性时,拥有另一个同名的属性将重新定义它。
查看错误报告,您首先在顶部文件中定义了它,也可能在其他地方定义了它。在数学运算中,pi is defined already,因为数学运算使用python,而pi是在那里定义的。如果您删除您的全局pi定义,它现在应该可以工作。
https://stackoverflow.com/questions/68376150
复制相似问题