Ubuntu18.04+ROS Melodic环境下summit_xl_steel机器人仿真启动RLException参数未使用错误修复问询
我在Ubuntu 18.04 + ROS Melodic环境下尝试仿真Summit XL Steel机器人,catkin_make能成功编译所有相关功能包,但执行启动命令时遇到了错误:
roslaunch summit_xl_sim_bringup summit_xl_complete.launch
终端输出的关键错误信息如下:
xacro: in-order processing became default in ROS Melodic. You can drop the option. Deprecated: xacro tag 'sensor_axis_gazebo' w/o 'xacro:' xml namespace prefix (will be forbidden in Noetic) when processing file: /workspace/src/summit_xl_common/summit_xl_description/robots/summit_xl_std.urdf.xacro Use the following command to fix incorrect tag usage: find . -iname "*.xacro" | xargs sed -i 's#<\([/]\?\)\(if\|unless\|include\|arg\|property\|macro\|insert_block\)#<\1xacro:\2#g' RLException: unused args [arm_model, arm_manufacturer] for include of [/workspace/src/summit_xl_common/summit_xl_control/launch/summit_xl_control.launch] The traceback for the exception was written to the log file
我已经尝试了提示的xacro标签修复命令,也多次重建功能包并重新加载环境变量,但问题依然存在。以下是summit_xl_control.launch的内容:
<?xml version="1.0"?> <launch> <arg name="id_robot" default="$(optenv ROBOT_ID robot)"/> <arg name="prefix" default="$(arg id_robot)_"/> <!-- kinematics: skid, omni --> <arg name="kinematics" default="$(optenv ROBOT_KINEMATICS skid)"/> <arg name="wheel_diameter" default="$(optenv ROBOT_WHEEL_DIAMETER 0.22)"/> <arg name="track_width" default="$(optenv ROBOT_TRACK_WIDTH 0.439)"/> <arg name="wheel_base" default="$(optenv ROBOT_WHEEL_BASE 0.430)"/> <arg name="odom_frame" default="$(arg prefix)odom"/> <arg name="base_frame" default="$(arg prefix)base_footprint"/> <arg name="ros_planar_move_plugin" default="false"/> <arg name="sim" default="false"/> <arg name="sim_arm_control" default="false"/> <arg name="cmd_vel" default="robotnik_base_control/cmd_vel"/> <arg name="launch_pantilt_camera_controller" default="false"/> <arg name="odom_broadcast_tf" default="true"/> <!-- kinova arm --> <arg name="kinova_arm" default="j2s7s300"/> <arg name="arm_prefix" default="$(arg prefix)$(arg kinova_arm)"/> <arg name="is7dof" default="true"/> <!-- Robot - Load joint controller configurations from YAML file to parameter server --> <group unless="$(arg sim)"> <rosparam file="$(find summit_xl_control)/config/robot_control.yaml" command="load" subst_value="true"/> <!-- load the controllers --> <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args=" robotnik_base_control joint_read_state_controller "> </node> </group> <!-- Simulation - Load joint controller configurations from YAML file to parameter server --> <group if="$(arg sim)"> <rosparam file="$(find summit_xl_control)/config/simulation/robot_control.yaml" command="load" subst_value="true"/> <group if="$(arg sim_arm_control)"> <!-- Kinova --> <include file="$(find summit_xl_control)/launch/kinova_control.launch"> <arg name="prefix" value="$(arg prefix)"/> <arg name="kinova_arm" value="$(arg kinova_arm)"/> <arg name="arm_prefix" value="$(arg arm_prefix)"/> <arg name="use_trajectory_controller" value="false"/> <arg name="is7dof" value="$(arg is7dof)"/> </include> </group> <!-- if it has camera ptz --> <group if="$(arg launch_pantilt_camera_controller)"> <node if="$(arg ros_planar_move_plugin)" name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args=" joint_read_state_controller joint_pan_position_controller joint_tilt_position_controller "> </node> <!-- load the robotnik_base_control ros controllers --> <node unless="$(arg ros_planar_move_plugin)" name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args=" robotnik_base_control joint_read_state_controller joint_pan_position_controller joint_tilt_position_controller "> </node> </group> <!-- if does not have camera ptz --> <group unless="$(arg launch_pantilt_camera_controller)"> <node if="$(arg ros_planar_move_plugin)" name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args=" joint_read_state_controller "> </node> <!-- load the robotnik_base_control ros controllers --> <node unless="$(arg ros_planar_move_plugin)" name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args=" robotnik_base_control joint_read_state_controller "> </node> </group> </group> <node pkg="twist_mux" type="twist_mux" name="twist_mux"> <rosparam command="load" file="$(find summit_xl_control)/config/twist_mux.yaml" /> <remap from="cmd_vel_out" to="$(arg cmd_vel)" /> </node> <node pkg="twist_mux" type="twist_marker" name="twist_marker"> <remap from="twist" to="$(arg cmd_vel)"/> <remap from="marker" to="twist_marker"/> </node> </launch>
问题分析
核心错误是RLException: unused args [arm_model, arm_manufacturer],这说明调用summit_xl_control.launch的上级launch文件(比如summit_xl_complete.launch)传递了arm_model和arm_manufacturer两个参数,但你的summit_xl_control.launch里并没有定义这两个参数,ROS会因为接收到未声明的参数而抛出异常。
解决方案
只需要在summit_xl_control.launch的参数声明部分添加这两个缺失的参数即可,即使暂时用不到,也可以设置空默认值避免错误:
打开
summit_xl_control.launch,在现有的<arg>列表末尾(比如<arg name="is7dof" default="true"/>之后)添加以下两行:<arg name="arm_model" default=""/> <arg name="arm_manufacturer" default=""/>如果你知道这两个参数的合理默认值(比如对应Kinova臂的型号),也可以设置具体值,比如
default="j2s7s300"或者default="kinova"。关于xacro的警告,虽然不影响仿真启动,但建议手动检查相关xacro文件,将未加前缀的标签(比如
<sensor_axis_gazebo>)修改为<xacro:sensor_axis_gazebo>,确保兼容后续ROS版本。
验证步骤
修改完成后,重新编译并加载环境变量:
catkin_make source devel/setup.bash
再次执行启动命令:
roslaunch summit_xl_sim_bringup summit_xl_complete.launch
此时RLException错误应该会消失,机器人可以正常在Gazebo中启动。
内容的提问来源于stack exchange,提问作者Jam-CPU

