diff --git a/ros_gz_sim/ros_gz_sim/actions/gzserver.py b/ros_gz_sim/ros_gz_sim/actions/gzserver.py index 81a1bf140..0b96df356 100644 --- a/ros_gz_sim/ros_gz_sim/actions/gzserver.py +++ b/ros_gz_sim/ros_gz_sim/actions/gzserver.py @@ -96,6 +96,7 @@ def __init__( create_own_container: Union[bool, SomeSubstitutionsType] = False, use_composition: Union[bool, SomeSubstitutionsType] = False, initial_sim_time: Union[float, SomeSubstitutionsType] = 0.0, + verbosity_level: Union[int, SomeSubstitutionsType] = 4, **kwargs ) -> None: """ @@ -109,6 +110,8 @@ def __init__( :param: container_name Name of container that nodes will load in if use composition. :param: create_own_container Whether to start a ROS container when using composition. :param: use_composition Use composed bringup if True. + :param: initial_sim_time: The initial simulation time. + :param: verbosity_level: The verbosity level of the Gazebo server (0=FATAL, 4=DEBUG). """ super().__init__(**kwargs) self.__world_sdf_file = world_sdf_file @@ -140,6 +143,13 @@ def __init__( else: self.__initial_sim_time = normalize_typed_substitution(initial_sim_time, float) + if isinstance(verbosity_level, str): + self.__verbosity_level = normalize_typed_substitution( + TextSubstitution(text=verbosity_level), int + ) + else: + self.__verbosity_level = normalize_typed_substitution(verbosity_level, int) + @classmethod def parse(cls, entity: Entity, parser: Parser): """Parse gz_server.""" @@ -169,6 +179,10 @@ def parse(cls, entity: Entity, parser: Parser): 'initial_sim_time', data_type=str, optional=True) + verbosity_level = entity.get_attr( + 'verbosity_level', data_type=str, + optional=True) + if isinstance(world_sdf_file, str): world_sdf_file = parser.parse_substitution(world_sdf_file) kwargs['world_sdf_file'] = world_sdf_file @@ -194,6 +208,10 @@ def parse(cls, entity: Entity, parser: Parser): initial_sim_time = parser.parse_substitution(initial_sim_time) kwargs['initial_sim_time'] = initial_sim_time + if isinstance(verbosity_level, str): + verbosity_level = parser.parse_substitution(verbosity_level) + kwargs['verbosity_level'] = verbosity_level + return cls, kwargs def execute(self, context: LaunchContext) -> Optional[List[Action]]: @@ -229,7 +247,8 @@ def execute(self, context: LaunchContext) -> Optional[List[Action]]: output='screen', parameters=[{'world_sdf_file': self.__world_sdf_file, 'world_sdf_string': self.__world_sdf_string, - 'initial_sim_time': self.__initial_sim_time}], + 'initial_sim_time': self.__initial_sim_time, + 'verbosity_level': self.__verbosity_level}], )) # Composable node with container configuration @@ -246,7 +265,8 @@ def execute(self, context: LaunchContext) -> Optional[List[Action]]: name='gz_server', parameters=[{'world_sdf_file': self.__world_sdf_file, 'world_sdf_string': self.__world_sdf_string, - 'initial_sim_time': self.__initial_sim_time}], + 'initial_sim_time': self.__initial_sim_time, + 'verbosity_level': self.__verbosity_level}], extra_arguments=[{'use_intra_process_comms': True}], ), ], @@ -264,7 +284,8 @@ def execute(self, context: LaunchContext) -> Optional[List[Action]]: name='gz_server', parameters=[{'world_sdf_file': self.__world_sdf_file, 'world_sdf_string': self.__world_sdf_string, - 'initial_sim_time': self.__initial_sim_time}], + 'initial_sim_time': self.__initial_sim_time, + 'verbosity_level': self.__verbosity_level}], extra_arguments=[{'use_intra_process_comms': True}], ), ], diff --git a/ros_gz_sim/src/gzserver.cpp b/ros_gz_sim/src/gzserver.cpp index c18cd5ab5..7c6b3aa09 100644 --- a/ros_gz_sim/src/gzserver.cpp +++ b/ros_gz_sim/src/gzserver.cpp @@ -61,8 +61,9 @@ void GzServer::OnStart() auto world_sdf_file = this->declare_parameter("world_sdf_file", ""); auto world_sdf_string = this->declare_parameter("world_sdf_string", ""); auto initial_sim_time = this->declare_parameter("initial_sim_time", 0.0); + const auto verbosity_level = this->declare_parameter("verbosity_level", 4); - gz::common::Console::SetVerbosity(4); + gz::common::Console::SetVerbosity(verbosity_level); gz::sim::ServerConfig server_config; if (!world_sdf_file.empty()) {