Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # Copyright (c) 2022 Samsung R&D Institute Russia
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- import os
- from ament_index_python.packages import get_package_share_directory
- from launch import LaunchDescription
- from launch.actions import DeclareLaunchArgument, GroupAction
- from launch.conditions import IfCondition
- from launch.substitutions import LaunchConfiguration, PythonExpression
- from launch.substitutions import NotEqualsSubstitution
- from launch_ros.actions import LoadComposableNodes, SetParameter
- from launch_ros.actions import Node
- from launch_ros.actions import PushROSNamespace
- from launch_ros.descriptions import ComposableNode, ParameterFile
- from nav2_common.launch import RewrittenYaml
- def generate_launch_description():
- # Environment
- package_dir = get_package_share_directory('nav2_collision_monitor')
- # Constant parameters
- lifecycle_nodes = ['collision_monitor']
- autostart = False #True
- remappings = [('/tf', 'tf'),
- ('/tf_static', 'tf_static')]
- # Launch arguments
- # 1. Create the launch configuration variables
- namespace = LaunchConfiguration('namespace')
- use_sim_time = LaunchConfiguration('use_sim_time')
- params_file = LaunchConfiguration('params_file')
- use_composition = LaunchConfiguration('use_composition')
- container_name = LaunchConfiguration('container_name')
- container_name_full = (namespace, '/', container_name)
- # 2. Declare the launch arguments
- declare_namespace_cmd = DeclareLaunchArgument(
- 'namespace',
- default_value='',
- description='Top-level namespace')
- declare_use_sim_time_cmd = DeclareLaunchArgument(
- 'use_sim_time',
- default_value='True',
- description='Use simulation (Gazebo) clock if true')
- declare_params_file_cmd = DeclareLaunchArgument(
- 'params_file',
- default_value=os.path.join(package_dir, 'params', 'collision_monitor_params.yaml'),
- description='Full path to the ROS2 parameters file to use for all launched nodes')
- declare_use_composition_cmd = DeclareLaunchArgument(
- 'use_composition', default_value='True',
- description='Use composed bringup if True')
- declare_container_name_cmd = DeclareLaunchArgument(
- 'container_name', default_value='nav2_container',
- description='the name of conatiner that nodes will load in if use composition')
- configured_params = ParameterFile(
- RewrittenYaml(
- source_file=params_file,
- root_key=namespace,
- param_rewrites={},
- convert_types=True),
- allow_substs=True)
- # Declare node launching commands
- load_nodes = GroupAction(
- condition=IfCondition(PythonExpression(['not ', use_composition])),
- actions=[
- SetParameter('use_sim_time', use_sim_time),
- PushROSNamespace(
- condition=IfCondition(NotEqualsSubstitution(LaunchConfiguration('namespace'), '')),
- namespace=namespace),
- Node(
- package='nav2_lifecycle_manager',
- executable='lifecycle_manager',
- name='lifecycle_manager_collision_monitor',
- output='screen',
- emulate_tty=True, # https://github.com/ros2/launch/issues/188
- parameters=[{'autostart': autostart},
- {'node_names': lifecycle_nodes}],
- remappings=remappings),
- Node(
- package='nav2_collision_monitor',
- executable='collision_monitor',
- output='screen',
- emulate_tty=True, # https://github.com/ros2/launch/issues/188
- parameters=[configured_params],
- remappings=remappings)
- ]
- )
- load_composable_nodes = GroupAction(
- condition=IfCondition(use_composition),
- actions=[
- SetParameter('use_sim_time', use_sim_time),
- PushROSNamespace(
- condition=IfCondition(NotEqualsSubstitution(LaunchConfiguration('namespace'), '')),
- namespace=namespace),
- LoadComposableNodes(
- target_container=container_name_full,
- composable_node_descriptions=[
- ComposableNode(
- package='nav2_lifecycle_manager',
- plugin='nav2_lifecycle_manager::LifecycleManager',
- name='lifecycle_manager_collision_monitor',
- parameters=[{'autostart': autostart},
- {'node_names': lifecycle_nodes}],
- remappings=remappings),
- ComposableNode(
- package='nav2_collision_monitor',
- plugin='nav2_collision_monitor::CollisionMonitor',
- name='collision_monitor',
- parameters=[configured_params],
- remappings=remappings)
- ],
- )
- ]
- )
- ld = LaunchDescription()
- # Launch arguments
- ld.add_action(declare_namespace_cmd)
- ld.add_action(declare_use_sim_time_cmd)
- ld.add_action(declare_params_file_cmd)
- ld.add_action(declare_use_composition_cmd)
- ld.add_action(declare_container_name_cmd)
- # Node launching commands
- ld.add_action(load_nodes)
- ld.add_action(load_composable_nodes)
- return ld
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement