在ROS机器人开发实用案例分析中第五章搭建模拟机器人手臂里面的rrbot_rviz.lunch如下所示
<launch>
<!-- set parameter on Parameter Server-->
<arg name="model"/>
<param name="robot_description" command="$(find xacro)/xacro.py
'$(find ros_robotics)/urdf/$(arg model)'"/>
<!-- send joind values from gui-->
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher">
<param name="use_gui" value="TRUE"/>
</node>
<!-- use joint positions to update tf-->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>
<!-- visualize robot mode in 3D-->
<node name="rviz" pkg="rviz" type="rviz"
args="-d $(find ros_robotics)/urdf.rviz" required="true" />
</launch>
运行会报出如下错误
RLException: Invalid <param> tag: Cannot load command parameter [robot_description]: no such command [['/opt/ros/noetic/share/xacro/xacro.py', '/home/lvrobot/ROSExample/src/ros_robotics/urdf/rrbot.xacro']].
Param xml is <param name="robot_description" command="$(find xacro)/xacro.py '$(find ros_robotics)/urdf/$(arg model)'"/>
The traceback for the exception was written to the log file
其主要原因是在Noetic版本的ROS需要把
xacro.py
改为
xacro
<launch>
<!-- set parameter on Parameter Server-->
<arg name="model"/>
<param name="robot_description" command="$(find xacro)/xacro
'$(find ros_robotics)/urdf/$(arg model)'"/>
<!-- send joind values from gui-->
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher">
<param name="use_gui" value="TRUE"/>
</node>
<!-- use joint positions to update tf-->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>
<!-- visualize robot mode in 3D-->
<node name="rviz" pkg="rviz" type="rviz"
args="-d $(find ros_robotics)/urdf.rviz" required="true" />
</launch>