如何禁用MoveIt OMPL规划管线的[INFO]日志输出?
问题
使用Ubuntu 20.04 arm64系统与ROS Noetic最新版本,希望禁用MoveIt OMPL规划管线的[INFO]日志输出——这些日志刷屏导致无法看到需要的警告。近期未修改代码,但日志突然大量出现。
相关文件内容
move_group.launch文件
<launch> <!-- GDB Debug Option --> <arg name="debug" default="false" /> <arg unless="$(arg debug)" name="launch_prefix" value="" /> <arg if="$(arg debug)" name="launch_prefix" value="gdb -x $(find ur5e-rg2_moveit_config)/launch/gdb_settings.gdb --ex run --args" /> <!-- Verbose Mode Option --> <arg name="info" default="$(arg debug)" /> <arg unless="$(arg info)" name="command_args" value="" /> <arg if="$(arg info)" name="command_args" value="--debug" /> <!-- move_group settings --> <arg name="pipeline" default="ompl" /> <arg name="allow_trajectory_execution" default="true"/> <arg name="fake_execution" default="false"/> <arg name="execution_type" default="interpolate"/> <!-- set to 'last point' to skip intermediate trajectory in fake execution --> <arg name="max_safe_path_cost" default="1"/> <arg name="jiggle_fraction" default="0.05" /> <arg name="publish_monitored_planning_scene" default="true"/> <arg name="capabilities" default=""/> <arg name="disable_capabilities" default=""/> <!-- load these non-default MoveGroup capabilities (space seperated) --> <!-- <arg name="capabilities" value=" a_package/AwsomeMotionPlanningCapability another_package/GraspPlanningPipeline " /> --> <!-- inhibit these default MoveGroup capabilities (space seperated) --> <!-- <arg name="disable_capabilities" value=" move_group/MoveGroupKinematicsService move_group/ClearOctomapService " /> --> <arg name="load_robot_description" default="true" /> <!-- load URDF, SRDF and joint_limits configuration --> <include file="$(find ur5e-rg2_moveit_config)/launch/planning_context.launch"> <arg name="load_robot_description" value="$(arg load_robot_description)" /> </include> <!-- Planning Pipelines --> <group ns="move_group/planning_pipelines"> <!-- OMPL --> <include ns="ompl" file="$(find ur5e-rg2_moveit_config)/launch/planning_pipeline.launch.xml"> <arg name="pipeline" value="ompl" /> </include> <!-- CHOMP --> <include ns="chomp" file="$(find ur5e-rg2_moveit_config)/launch/planning_pipeline.launch.xml"> <arg name="pipeline" value="chomp" /> </include> <!-- Pilz Industrial Motion--> <include ns="pilz_industrial_motion_planner" file="$(find moveit_resources_prbt_moveit_config)/launch/planning_pipeline.launch.xml"> <arg name="pipeline" value="pilz_industrial_motion_planner" /> </include> <!-- Support custom planning pipeline --> <include if="$(eval arg('pipeline') not in ['ompl', 'chomp', 'pilz_industrial_motion_planner'])" file="$(find ur5e-rg2_moveit_config)/launch/planning_pipeline.launch.xml"> <arg name="pipeline" value="$(arg pipeline)" /> </include> </group> <!-- Trajectory Execution Functionality --> <include ns="move_group" file="$(find ur5e-rg2_moveit_config)/launch/trajectory_execution.launch.xml" if="$(arg allow_trajectory_execution)"> <arg name="moveit_manage_controllers" value="true" /> <arg name="moveit_controller_manager" value="ur5e-rg2" unless="$(arg fake_execution)"/> <arg name="moveit_controller_manager" value="fake" if="$(arg fake_execution)"/> <arg name="execution_type" value="$(arg execution_type)" /> </include> <!-- Sensors Functionality --> <include ns="move_group" file="$(find ur5e-rg2_moveit_config)/launch/sensor_manager.launch.xml" if="$(arg allow_trajectory_execution)"> <arg name="moveit_sensor_manager" value="ur5e-rg2" /> </include> <!-- Start the actual move_group node/action server --> <node name="move_group" launch-prefix="$(arg launch_prefix)" pkg="moveit_ros_move_group" type="move_group" respawn="false" output="screen" args="$(arg command_args)"> <!-- Set the display variable, in case OpenGL code is used internally --> <env name="DISPLAY" value="$(optenv DISPLAY :0)" /> <param name="allow_trajectory_execution" value="$(arg allow_trajectory_execution)"/> <param name="max_safe_path_cost" value="$(arg max_safe_path_cost)"/> <param name="jiggle_fraction" value="$(arg jiggle_fraction)" /> <param name="default_planning_pipeline" value="$(arg pipeline)" /> <param name="capabilities" value="$(arg capabilities)" /> <param name="disable_capabilities" value="$(arg disable_capabilities)" /> <!-- Publish the planning scene of the physical robot so that rviz plugin can know actual robot --> <param name="planning_scene_monitor/publish_planning_scene" value="$(arg publish_monitored_planning_scene)" /> <param name="planning_scene_monitor/publish_geometry_updates" value="$(arg publish_monitored_planning_scene)" /> <param name="planning_scene_monitor/publish_state_updates" value="$(arg publish_monitored_planning_scene)" /> <param name="planning_scene_monitor/publish_transforms_updates" value="$(arg publish_monitored_planning_scene)" /> </node> </launch>
调用move_group.launch的代码
<include file="$(find ur5e-rg2_moveit_config)/launch/move_group.launch" if="$(arg sim)"> <arg name="allow_trajectory_execution" value="true"/> <arg name="fake_execution" value="true"/> <arg name="execution_type" value="$(arg execution_type)"/> <arg name="info" value="false"/> <arg name="debug" value="false"/> <arg name="pipeline" value="$(arg pipeline)"/> <arg name="load_robot_description" value="true"/> </include>
终端输出的INFO日志
[ INFO] [1672325791.029486426]: Stereo is NOT SUPPORTED [ INFO] [1672325791.029630843]: OpenGL device: virgl (Apple M1 Pro (Compat)) [ INFO] [1672325791.029683884]: OpenGl version: 3.1 (GLSL 1.4). [ INFO] [1672325794.416828292]: Loading robot model 'ur5e-rg2'... [ INFO] [1672325794.600401765]: Starting planning scene monitor [ INFO] [1672325794.601532390]: Listening to '/move_group/monitored_planning_scene' [ INFO] [1672325794.864384678]: Constructing new MoveGroup connection for group 'manipulator' in namespace '' [ INFO] [1672325796.045110033]: Ready to take commands for planning group manipulator.
疑问:遗漏了什么设置?
解决方案
当前设置的info参数仅控制是否传入--debug参数,无法直接屏蔽[INFO]级别的日志。要禁用OMPL及move_group节点的INFO日志,可通过以下方法实现:
方法1:直接修改节点日志级别
在move_group.launch的move_group节点配置中,添加日志级别参数,将输出级别设为warn及以上,仅显示警告及更高级别的日志:
<node name="move_group" launch-prefix="$(arg launch_prefix)" pkg="moveit_ros_move_group" type="move_group" respawn="false" output="screen" args="$(arg command_args)"> <!-- 保留原有参数,新增以下两行 --> <param name="rosconsole/logger_level" value="warn" /> <param name="rosconsole/logger_level/moveit_ompl_planner" value="warn" /> <!-- 其他原有内容... --> </node>
方法2:使用自定义ROS控制台配置文件
- 在你的功能包中创建
config/rosconsole.config文件,内容如下:
log4j.logger.ros.moveit_ompl_planner=WARN log4j.logger.ros.moveit_ros_move_group=WARN
- 在
move_group.launch的move_group节点中添加环境变量,引用该配置文件:
<node name="move_group" launch-prefix="$(arg launch_prefix)" pkg="moveit_ros_move_group" type="move_group" respawn="false" output="screen" args="$(arg command_args)"> <!-- 新增环境变量 --> <env name="ROSCONSOLE_CONFIG_FILE" value="$(find ur5e-rg2_moveit_config)/config/rosconsole.config" /> <!-- 其他原有内容... --> </node>
方法3:终端临时设置日志级别
启动launch文件时,通过环境变量临时指定日志配置:
ROSCONSOLE_CONFIG_FILE=$(find ur5e-rg2_moveit_config)/config/rosconsole.config roslaunch your_package your_launch_file.launch
也可以全局设置日志级别(会影响所有ROS节点):
export ROSCONSOLE_CONFIG_FILE=/path/to/your/rosconsole.config
关键说明
你看到的INFO日志不全来自OMPL管线:OpenGL相关日志来自RViz或MoveIt的可视化模块,机器人模型加载、规划场景监控的日志来自move_group节点本身。以上方法可统一屏蔽这些INFO级输出,让你专注于警告信息。
内容的提问来源于stack exchange,提问作者M. Funk
相关产品推荐
相关产品推荐

