diff --git a/launch/!dont_use_launch_sim.launch.py b/launch/!dont_use_launch_sim.launch.py deleted file mode 100755 index 1908427..0000000 --- a/launch/!dont_use_launch_sim.launch.py +++ /dev/null @@ -1,98 +0,0 @@ -import os - -from ament_index_python.packages import get_package_share_directory - - -from launch import LaunchDescription -from launch.actions import IncludeLaunchDescription -from launch.launch_description_sources import PythonLaunchDescriptionSource - -from launch_ros.actions import Node - - - -def generate_launch_description(): - - - # Include the robot_state_publisher launch file, provided by our own package. Force sim time to be enabled - # !!! MAKE SURE YOU SET THE PACKAGE NAME CORRECTLY !!! - - package_name='cps_rmp220_support' #<--- CHANGE ME - - rsp = IncludeLaunchDescription( - PythonLaunchDescriptionSource([os.path.join( - get_package_share_directory(package_name),'launch','rsp.launch.py' - )]), launch_arguments={'use_sim_time': 'true', 'use_ros2_control': 'true'}.items() - ) - - joystick = IncludeLaunchDescription( - PythonLaunchDescriptionSource([os.path.join( - get_package_share_directory(package_name),'launch','joystick.launch.py' - )]), launch_arguments={'use_sim_time': 'true'}.items() - ) - - twist_mux_params = os.path.join(get_package_share_directory(package_name),'config','twist_mux.yaml') - twist_mux = Node( - package="twist_mux", - executable="twist_mux", - parameters=[twist_mux_params, {'use_sim_time': True}], - remappings=[('/cmd_vel_out','/diff_cont/cmd_vel_unstamped')] - ) - - gazebo_params_file = os.path.join(get_package_share_directory(package_name),'config','gazebo_params.yaml') - - # Include the Gazebo launch file, provided by the gazebo_ros package - gazebo = IncludeLaunchDescription( - PythonLaunchDescriptionSource([os.path.join( - get_package_share_directory('gazebo_ros'), 'launch', 'gazebo.launch.py')]), - launch_arguments={'extra_gazebo_args': '--ros-args --params-file ' + gazebo_params_file}.items() - ) - - # Run the spawner node from the gazebo_ros package. The entity name doesn't really matter if you only have a single robot. - spawn_entity = Node(package='gazebo_ros', executable='spawn_entity', - arguments=['-topic', 'robot_description', - '-entity', 'my_bot'], - output='screen') - - - diff_drive_spawner = Node( - package="controller_manager", - executable="spawner", - arguments=["diff_cont"], - ) - - joint_broad_spawner = Node( - package="controller_manager", - executable="spawner", - arguments=["joint_broad"], - ) - - - # Code for delaying a node (I haven't tested how effective it is) - # - # First add the below lines to imports - # from launch.actions import RegisterEventHandler - # from launch.event_handlers import OnProcessExit - # - # Then add the following below the current diff_drive_spawner - # delayed_diff_drive_spawner = RegisterEventHandler( - # event_handler=OnProcessExit( - # target_action=spawn_entity, - # on_exit=[diff_drive_spawner], - # ) - # ) - # - # Replace the diff_drive_spawner in the final return with delayed_diff_drive_spawner - - - - # Launch them all! - return LaunchDescription([ - rsp, - joystick, - twist_mux, - gazebo, - spawn_entity, - diff_drive_spawner, - joint_broad_spawner - ]) diff --git a/launch/camera.launch.py b/launch/camera.launch.py deleted file mode 100644 index fd62dfa..0000000 --- a/launch/camera.launch.py +++ /dev/null @@ -1,23 +0,0 @@ -import os - -from launch import LaunchDescription -from launch_ros.actions import Node - -def generate_launch_description(): - - - - return LaunchDescription([ - - Node( - package='v4l2_camera', - executable='v4l2_camera_node', - output='screen', - namespace='camera', - parameters=[{ - 'image_size': [640,480], - 'time_per_frame': [1, 6], - 'camera_frame_id': 'camera_link_optical' - }] - ) - ]) diff --git a/launch/launch_robot.launch.py b/launch/launch_robot.launch.py deleted file mode 100755 index ceec5ba..0000000 --- a/launch/launch_robot.launch.py +++ /dev/null @@ -1,115 +0,0 @@ -import os - -from ament_index_python.packages import get_package_share_directory - - -from launch import LaunchDescription -from launch.actions import IncludeLaunchDescription, TimerAction -from launch.launch_description_sources import PythonLaunchDescriptionSource -from launch.substitutions import Command -from launch.actions import RegisterEventHandler -from launch.event_handlers import OnProcessStart - -from launch_ros.actions import Node - - - -def generate_launch_description(): - - - # Include the robot_state_publisher launch file, provided by our own package. Force sim time to be enabled - # !!! MAKE SURE YOU SET THE PACKAGE NAME CORRECTLY !!! - - package_name='segway_rmp220_support' #<--- CHANGE ME - - rsp = IncludeLaunchDescription( - PythonLaunchDescriptionSource([os.path.join( - get_package_share_directory(package_name),'launch','rsp.launch.py' - )]), launch_arguments={'use_sim_time': 'false', 'use_ros2_control': 'true'}.items() - ) - - # joystick = IncludeLaunchDescription( - # PythonLaunchDescriptionSource([os.path.join( - # get_package_share_directory(package_name),'launch','joystick.launch.py' - # )]) - # ) - - - twist_mux_params = os.path.join(get_package_share_directory(package_name),'config','twist_mux.yaml') - twist_mux = Node( - package="twist_mux", - executable="twist_mux", - parameters=[twist_mux_params], - remappings=[('/cmd_vel_out','/diff_cont/cmd_vel_unstamped')] - ) - - - - - robot_description = Command(['ros2 param get --hide-type /robot_state_publisher robot_description']) - - controller_params_file = os.path.join(get_package_share_directory(package_name),'config','my_controllers.yaml') - - controller_manager = Node( - package="controller_manager", - executable="ros2_control_node", - parameters=[{'robot_description': robot_description}, - controller_params_file] - ) - - delayed_controller_manager = TimerAction(period=3.0, actions=[controller_manager]) - - diff_drive_spawner = Node( - package="controller_manager", - executable="spawner", - arguments=["diff_cont"], - ) - - delayed_diff_drive_spawner = RegisterEventHandler( - event_handler=OnProcessStart( - target_action=controller_manager, - on_start=[diff_drive_spawner], - ) - ) - - joint_broad_spawner = Node( - package="controller_manager", - executable="spawner", - arguments=["joint_broad"], - ) - - delayed_joint_broad_spawner = RegisterEventHandler( - event_handler=OnProcessStart( - target_action=controller_manager, - on_start=[joint_broad_spawner], - ) - ) - - - # Code for delaying a node (I haven't tested how effective it is) - # - # First add the below lines to imports - # from launch.actions import RegisterEventHandler - # from launch.event_handlers import OnProcessExit - # - # Then add the following below the current diff_drive_spawner - # delayed_diff_drive_spawner = RegisterEventHandler( - # event_handler=OnProcessExit( - # target_action=spawn_entity, - # on_exit=[diff_drive_spawner], - # ) - # ) - # - # Replace the diff_drive_spawner in the final return with delayed_diff_drive_spawner - - - - # Launch them all! - return LaunchDescription([ - rsp, - # joystick, - twist_mux, - delayed_controller_manager, - delayed_diff_drive_spawner, - delayed_joint_broad_spawner - ]) diff --git a/launch/localization.launch.py b/launch/localization.launch.py deleted file mode 100644 index 9f8dc39..0000000 --- a/launch/localization.launch.py +++ /dev/null @@ -1,192 +0,0 @@ -# Copyright (c) 2018 Intel Corporation -# -# 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, SetEnvironmentVariable -from launch.conditions import IfCondition -from launch.substitutions import LaunchConfiguration, PythonExpression -from launch_ros.actions import LoadComposableNodes -from launch_ros.actions import Node -from launch_ros.descriptions import ComposableNode, ParameterFile -from nav2_common.launch import RewrittenYaml - - -def generate_launch_description(): - # Get the launch directory - bringup_dir = get_package_share_directory('nav2_bringup') - - namespace = LaunchConfiguration('namespace') - map_yaml_file = LaunchConfiguration('map') - use_sim_time = LaunchConfiguration('use_sim_time') - autostart = LaunchConfiguration('autostart') - params_file = LaunchConfiguration('params_file') - use_composition = LaunchConfiguration('use_composition') - container_name = LaunchConfiguration('container_name') - container_name_full = (namespace, '/', container_name) - use_respawn = LaunchConfiguration('use_respawn') - log_level = LaunchConfiguration('log_level') - - lifecycle_nodes = ['map_server', 'amcl'] - - # Map fully qualified names to relative ones so the node's namespace can be prepended. - # In case of the transforms (tf), currently, there doesn't seem to be a better alternative - # https://github.com/ros/geometry2/issues/32 - # https://github.com/ros/robot_state_publisher/pull/30 - # TODO(orduno) Substitute with `PushNodeRemapping` - # https://github.com/ros2/launch_ros/issues/56 - remappings = [('/tf', 'tf'), - ('/tf_static', 'tf_static')] - - # Create our own temporary YAML files that include substitutions - param_substitutions = { - 'use_sim_time': use_sim_time, - 'yaml_filename': map_yaml_file} - - configured_params = ParameterFile( - RewrittenYaml( - source_file=params_file, - root_key=namespace, - param_rewrites=param_substitutions, - convert_types=True), - allow_substs=True) - - stdout_linebuf_envvar = SetEnvironmentVariable( - 'RCUTILS_LOGGING_BUFFERED_STREAM', '1') - - declare_namespace_cmd = DeclareLaunchArgument( - 'namespace', - default_value='', - description='Top-level namespace') - - declare_map_yaml_cmd = DeclareLaunchArgument( - 'map', - description='Full path to map yaml file to load') - - declare_use_sim_time_cmd = DeclareLaunchArgument( - 'use_sim_time', - default_value='false', - description='Use simulation (Gazebo) clock if true') - - declare_params_file_cmd = DeclareLaunchArgument( - 'params_file', - default_value=os.path.join(bringup_dir, 'params', 'nav2_params.yaml'), - description='Full path to the ROS2 parameters file to use for all launched nodes') - - declare_autostart_cmd = DeclareLaunchArgument( - 'autostart', default_value='true', - description='Automatically startup the nav2 stack') - - declare_use_composition_cmd = DeclareLaunchArgument( - 'use_composition', default_value='False', - 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') - - declare_use_respawn_cmd = DeclareLaunchArgument( - 'use_respawn', default_value='False', - description='Whether to respawn if a node crashes. Applied when composition is disabled.') - - declare_log_level_cmd = DeclareLaunchArgument( - 'log_level', default_value='info', - description='log level') - - load_nodes = GroupAction( - condition=IfCondition(PythonExpression(['not ', use_composition])), - actions=[ - Node( - package='nav2_map_server', - executable='map_server', - name='map_server', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings), - Node( - package='nav2_amcl', - executable='amcl', - name='amcl', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings), - Node( - package='nav2_lifecycle_manager', - executable='lifecycle_manager', - name='lifecycle_manager_localization', - output='screen', - arguments=['--ros-args', '--log-level', log_level], - parameters=[{'use_sim_time': use_sim_time}, - {'autostart': autostart}, - {'node_names': lifecycle_nodes}]) - ] - ) - - load_composable_nodes = LoadComposableNodes( - condition=IfCondition(use_composition), - target_container=container_name_full, - composable_node_descriptions=[ - ComposableNode( - package='nav2_map_server', - plugin='nav2_map_server::MapServer', - name='map_server', - parameters=[configured_params], - remappings=remappings), - ComposableNode( - package='nav2_amcl', - plugin='nav2_amcl::AmclNode', - name='amcl', - parameters=[configured_params], - remappings=remappings), - ComposableNode( - package='nav2_lifecycle_manager', - plugin='nav2_lifecycle_manager::LifecycleManager', - name='lifecycle_manager_localization', - parameters=[{'use_sim_time': use_sim_time, - 'autostart': autostart, - 'node_names': lifecycle_nodes}]), - ], - ) - - # Create the launch description and populate - ld = LaunchDescription() - - # Set environment variables - ld.add_action(stdout_linebuf_envvar) - - # Declare the launch options - ld.add_action(declare_namespace_cmd) - ld.add_action(declare_map_yaml_cmd) - ld.add_action(declare_use_sim_time_cmd) - ld.add_action(declare_params_file_cmd) - ld.add_action(declare_autostart_cmd) - ld.add_action(declare_use_composition_cmd) - ld.add_action(declare_container_name_cmd) - ld.add_action(declare_use_respawn_cmd) - ld.add_action(declare_log_level_cmd) - - # Add the actions to launch all of the localiztion nodes - ld.add_action(load_nodes) - ld.add_action(load_composable_nodes) - - return ld \ No newline at end of file diff --git a/launch/navigation.launch.py b/launch/navigation.launch.py deleted file mode 100644 index 94f73b1..0000000 --- a/launch/navigation.launch.py +++ /dev/null @@ -1,272 +0,0 @@ -# Copyright (c) 2018 Intel Corporation -# -# 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, SetEnvironmentVariable -from launch.conditions import IfCondition -from launch.substitutions import LaunchConfiguration, PythonExpression -from launch_ros.actions import LoadComposableNodes -from launch_ros.actions import Node -from launch_ros.descriptions import ComposableNode, ParameterFile -from nav2_common.launch import RewrittenYaml - - -def generate_launch_description(): - # Get the launch directory - bringup_dir = get_package_share_directory('nav2_bringup') - - namespace = LaunchConfiguration('namespace') - use_sim_time = LaunchConfiguration('use_sim_time') - autostart = LaunchConfiguration('autostart') - params_file = LaunchConfiguration('params_file') - use_composition = LaunchConfiguration('use_composition') - container_name = LaunchConfiguration('container_name') - container_name_full = (namespace, '/', container_name) - use_respawn = LaunchConfiguration('use_respawn') - log_level = LaunchConfiguration('log_level') - - lifecycle_nodes = ['controller_server', - 'smoother_server', - 'planner_server', - 'behavior_server', - 'bt_navigator', - 'waypoint_follower', - 'velocity_smoother'] - - # Map fully qualified names to relative ones so the node's namespace can be prepended. - # In case of the transforms (tf), currently, there doesn't seem to be a better alternative - # https://github.com/ros/geometry2/issues/32 - # https://github.com/ros/robot_state_publisher/pull/30 - # TODO(orduno) Substitute with `PushNodeRemapping` - # https://github.com/ros2/launch_ros/issues/56 - remappings = [('/tf', 'tf'), - ('/tf_static', 'tf_static')] - - # Create our own temporary YAML files that include substitutions - param_substitutions = { - 'use_sim_time': use_sim_time, - 'autostart': autostart} - - configured_params = ParameterFile( - RewrittenYaml( - source_file=params_file, - root_key=namespace, - param_rewrites=param_substitutions, - convert_types=True), - allow_substs=True) - - stdout_linebuf_envvar = SetEnvironmentVariable( - 'RCUTILS_LOGGING_BUFFERED_STREAM', '1') - - declare_namespace_cmd = DeclareLaunchArgument( - 'namespace', - default_value='', - description='Top-level namespace') - - declare_use_sim_time_cmd = DeclareLaunchArgument( - 'use_sim_time', - default_value='false', - description='Use simulation (Gazebo) clock if true') - - declare_params_file_cmd = DeclareLaunchArgument( - 'params_file', - default_value=os.path.join(bringup_dir, 'params', 'nav2_params.yaml'), - description='Full path to the ROS2 parameters file to use for all launched nodes') - - declare_autostart_cmd = DeclareLaunchArgument( - 'autostart', default_value='true', - description='Automatically startup the nav2 stack') - - declare_use_composition_cmd = DeclareLaunchArgument( - 'use_composition', default_value='False', - 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') - - declare_use_respawn_cmd = DeclareLaunchArgument( - 'use_respawn', default_value='False', - description='Whether to respawn if a node crashes. Applied when composition is disabled.') - - declare_log_level_cmd = DeclareLaunchArgument( - 'log_level', default_value='info', - description='log level') - - load_nodes = GroupAction( - condition=IfCondition(PythonExpression(['not ', use_composition])), - actions=[ - Node( - package='nav2_controller', - executable='controller_server', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings + [('cmd_vel', 'cmd_vel_nav')]), - Node( - package='nav2_smoother', - executable='smoother_server', - name='smoother_server', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings), - Node( - package='nav2_planner', - executable='planner_server', - name='planner_server', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings), - Node( - package='nav2_behaviors', - executable='behavior_server', - name='behavior_server', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings), - Node( - package='nav2_bt_navigator', - executable='bt_navigator', - name='bt_navigator', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings), - Node( - package='nav2_waypoint_follower', - executable='waypoint_follower', - name='waypoint_follower', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings), - Node( - package='nav2_velocity_smoother', - executable='velocity_smoother', - name='velocity_smoother', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings + - [('cmd_vel', 'cmd_vel_nav'), ('cmd_vel_smoothed', 'cmd_vel')]), - Node( - package='nav2_lifecycle_manager', - executable='lifecycle_manager', - name='lifecycle_manager_navigation', - output='screen', - arguments=['--ros-args', '--log-level', log_level], - parameters=[{'use_sim_time': use_sim_time}, - {'autostart': autostart}, - {'node_names': lifecycle_nodes}]), - ] - ) - - load_composable_nodes = LoadComposableNodes( - condition=IfCondition(use_composition), - target_container=container_name_full, - composable_node_descriptions=[ - ComposableNode( - package='nav2_controller', - plugin='nav2_controller::ControllerServer', - name='controller_server', - parameters=[configured_params], - remappings=remappings + [('cmd_vel', 'cmd_vel_nav')]), - ComposableNode( - package='nav2_smoother', - plugin='nav2_smoother::SmootherServer', - name='smoother_server', - parameters=[configured_params], - remappings=remappings), - ComposableNode( - package='nav2_planner', - plugin='nav2_planner::PlannerServer', - name='planner_server', - parameters=[configured_params], - remappings=remappings), - ComposableNode( - package='nav2_behaviors', - plugin='behavior_server::BehaviorServer', - name='behavior_server', - parameters=[configured_params], - remappings=remappings), - ComposableNode( - package='nav2_bt_navigator', - plugin='nav2_bt_navigator::BtNavigator', - name='bt_navigator', - parameters=[configured_params], - remappings=remappings), - ComposableNode( - package='nav2_waypoint_follower', - plugin='nav2_waypoint_follower::WaypointFollower', - name='waypoint_follower', - parameters=[configured_params], - remappings=remappings), - ComposableNode( - package='nav2_velocity_smoother', - plugin='nav2_velocity_smoother::VelocitySmoother', - name='velocity_smoother', - parameters=[configured_params], - remappings=remappings + - [('cmd_vel', 'cmd_vel_nav'), ('cmd_vel_smoothed', 'cmd_vel')]), - ComposableNode( - package='nav2_lifecycle_manager', - plugin='nav2_lifecycle_manager::LifecycleManager', - name='lifecycle_manager_navigation', - parameters=[{'use_sim_time': use_sim_time, - 'autostart': autostart, - 'node_names': lifecycle_nodes}]), - ], - ) - - # Create the launch description and populate - ld = LaunchDescription() - - # Set environment variables - ld.add_action(stdout_linebuf_envvar) - - # Declare the launch options - 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_autostart_cmd) - ld.add_action(declare_use_composition_cmd) - ld.add_action(declare_container_name_cmd) - ld.add_action(declare_use_respawn_cmd) - ld.add_action(declare_log_level_cmd) - # Add the actions to launch all of the navigation nodes - ld.add_action(load_nodes) - ld.add_action(load_composable_nodes) - - return ld \ No newline at end of file diff --git a/launch/oakd.launch.py b/launch/oakd.launch.py deleted file mode 100644 index fd62dfa..0000000 --- a/launch/oakd.launch.py +++ /dev/null @@ -1,23 +0,0 @@ -import os - -from launch import LaunchDescription -from launch_ros.actions import Node - -def generate_launch_description(): - - - - return LaunchDescription([ - - Node( - package='v4l2_camera', - executable='v4l2_camera_node', - output='screen', - namespace='camera', - parameters=[{ - 'image_size': [640,480], - 'time_per_frame': [1, 6], - 'camera_frame_id': 'camera_link_optical' - }] - ) - ]) diff --git a/launch/robot_amcl.launch.py b/launch/robot_amcl.launch.py deleted file mode 100644 index fafee46..0000000 --- a/launch/robot_amcl.launch.py +++ /dev/null @@ -1,190 +0,0 @@ -# Copyright (c) 2018 Intel Corporation -# -# 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, SetEnvironmentVariable -from launch.conditions import IfCondition -from launch.substitutions import LaunchConfiguration, PythonExpression -from launch_ros.actions import LoadComposableNodes -from launch_ros.actions import Node -from launch_ros.descriptions import ComposableNode -from nav2_common.launch import RewrittenYaml - - -def generate_launch_description(): - # Get the launch directory - bringup_dir = get_package_share_directory('cps_rmp220_support') - - namespace = LaunchConfiguration('namespace') - map_yaml_file = LaunchConfiguration('map') - use_sim_time = LaunchConfiguration('use_sim_time') - autostart = LaunchConfiguration('autostart') - params_file = LaunchConfiguration('params_file') - use_composition = LaunchConfiguration('use_composition') - container_name = LaunchConfiguration('container_name') - container_name_full = (namespace, '/', container_name) - use_respawn = LaunchConfiguration('use_respawn') - log_level = LaunchConfiguration('log_level') - - lifecycle_nodes = ['map_server', 'amcl'] - - # Map fully qualified names to relative ones so the node's namespace can be prepended. - # In case of the transforms (tf), currently, there doesn't seem to be a better alternative - # https://github.com/ros/geometry2/issues/32 - # https://github.com/ros/robot_state_publisher/pull/30 - # TODO(orduno) Substitute with `PushNodeRemapping` - # https://github.com/ros2/launch_ros/issues/56 - remappings = [('/tf', 'tf'), - ('/tf_static', 'tf_static')] - - # Create our own temporary YAML files that include substitutions - param_substitutions = { - 'use_sim_time': use_sim_time, - 'yaml_filename': map_yaml_file} - - configured_params = RewrittenYaml( - source_file=params_file, - root_key=namespace, - param_rewrites=param_substitutions, - convert_types=True) - - stdout_linebuf_envvar = SetEnvironmentVariable( - 'RCUTILS_LOGGING_BUFFERED_STREAM', '1') - - declare_namespace_cmd = DeclareLaunchArgument( - 'namespace', - default_value='', - description='Top-level namespace') - - declare_map_yaml_cmd = DeclareLaunchArgument( - 'map', - description='Full path to map yaml file to load') - - declare_use_sim_time_cmd = DeclareLaunchArgument( - 'use_sim_time', - default_value='false', - description='Use simulation (Gazebo) clock if true') - - declare_params_file_cmd = DeclareLaunchArgument( - 'params_file', - default_value=os.path.join(bringup_dir, 'config', 'nav2_params.yaml'), - description='Full path to the ROS2 parameters file to use for all launched nodes') - - declare_autostart_cmd = DeclareLaunchArgument( - 'autostart', default_value='true', - description='Automatically startup the nav2 stack') - - declare_use_composition_cmd = DeclareLaunchArgument( - 'use_composition', default_value='False', - 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') - - declare_use_respawn_cmd = DeclareLaunchArgument( - 'use_respawn', default_value='False', - description='Whether to respawn if a node crashes. Applied when composition is disabled.') - - declare_log_level_cmd = DeclareLaunchArgument( - 'log_level', default_value='info', - description='log level') - - load_nodes = GroupAction( - condition=IfCondition(PythonExpression(['not ', use_composition])), - actions=[ - Node( - package='nav2_map_server', - executable='map_server', - name='map_server', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings), - Node( - package='nav2_amcl', - executable='amcl', - name='amcl', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - parameters=[configured_params], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings), - Node( - package='nav2_lifecycle_manager', - executable='lifecycle_manager', - name='lifecycle_manager_localization', - output='screen', - arguments=['--ros-args', '--log-level', log_level], - parameters=[{'use_sim_time': use_sim_time}, - {'autostart': autostart}, - {'node_names': lifecycle_nodes}]) - ] - ) - - load_composable_nodes = LoadComposableNodes( - condition=IfCondition(use_composition), - target_container=container_name_full, - composable_node_descriptions=[ - ComposableNode( - package='nav2_map_server', - plugin='nav2_map_server::MapServer', - name='map_server', - parameters=[configured_params], - remappings=remappings), - ComposableNode( - package='nav2_amcl', - plugin='nav2_amcl::AmclNode', - name='amcl', - parameters=[configured_params], - remappings=remappings), - ComposableNode( - package='nav2_lifecycle_manager', - plugin='nav2_lifecycle_manager::LifecycleManager', - name='lifecycle_manager_localization', - parameters=[{'use_sim_time': use_sim_time, - 'autostart': autostart, - 'node_names': lifecycle_nodes}]), - ], - ) - - # Create the launch description and populate - ld = LaunchDescription() - - # Set environment variables - ld.add_action(stdout_linebuf_envvar) - - # Declare the launch options - ld.add_action(declare_namespace_cmd) - ld.add_action(declare_map_yaml_cmd) - ld.add_action(declare_use_sim_time_cmd) - ld.add_action(declare_params_file_cmd) - ld.add_action(declare_autostart_cmd) - ld.add_action(declare_use_composition_cmd) - ld.add_action(declare_container_name_cmd) - ld.add_action(declare_use_respawn_cmd) - ld.add_action(declare_log_level_cmd) - - # Add the actions to launch all of the localiztion nodes - ld.add_action(load_nodes) - ld.add_action(load_composable_nodes) - - return ld \ No newline at end of file diff --git a/launch/robot_controller.launch.py b/launch/robot_controller.launch.py deleted file mode 100755 index d34ad1a..0000000 --- a/launch/robot_controller.launch.py +++ /dev/null @@ -1,26 +0,0 @@ -from launch import LaunchDescription -from launch_ros.actions import Node -from launch.substitutions import LaunchConfiguration -from launch.actions import DeclareLaunchArgument - -def generate_launch_description(): - use_sim_time = LaunchConfiguration('use_sim_time') - - control_node = Node( - package='segwayrmp', - executable='SmartCar', - name='SmartCar', - #remappings=[('cmd_vel','cmd_vel_out'), ('/odom','odom'), ('/imu','imu'), ('/bms_fb','bms_fb'), ('/joint_states','joint_states'), ('/tf','tf'), ('/tf_static','tf_static')], - remappings=[('cmd_vel','cmd_vel_out')], - #namespace = "/rmp" - parameters=[{'serial_full_name': /dev/ttyUSB0}], - ) - - - return LaunchDescription([ - DeclareLaunchArgument( - 'use_sim_time', - default_value='false', - description='Use sim time if true'), - control_node - ]) \ No newline at end of file diff --git a/launch/robot_exploration.launch.py b/launch/robot_exploration.launch.py deleted file mode 100644 index 20b2366..0000000 --- a/launch/robot_exploration.launch.py +++ /dev/null @@ -1,37 +0,0 @@ -import os -from launch import LaunchDescription -from launch.substitutions import Command, FindExecutable, PathJoinSubstitution -from launch_ros.actions import Node -from launch_ros.substitutions import FindPackageShare -from ament_index_python.packages import get_package_share_directory -from launch_ros.actions import LifecycleNode -from launch_ros.descriptions import ParameterValue -from launch.substitutions import LaunchConfiguration - - -def generate_launch_description(): - use_sim_time = False - config_file = PathJoinSubstitution( - [ - FindPackageShare("explore_lite"), - "config", - "params.yaml" - ] - ) - namespace = "/rmp" - mapper_node = Node( - package="explore_lite", - executable="explore", - name='explore_node', - output='screen', - parameters=[ - config_file, - {'use_sim_time': use_sim_time} - ], - #namespace = namespace, - #remappings=[('/scan', 'scan'), ('/map', 'map')], - ) - - return LaunchDescription([ - mapper_node - ]) \ No newline at end of file diff --git a/launch/robot_joystick.launch.py b/launch/robot_joystick.launch.py deleted file mode 100644 index d7530f6..0000000 --- a/launch/robot_joystick.launch.py +++ /dev/null @@ -1,95 +0,0 @@ -from launch import LaunchDescription -from launch_ros.actions import Node -from launch.substitutions import LaunchConfiguration, Command, FindExecutable, PathJoinSubstitution -from launch.actions import DeclareLaunchArgument -from launch_ros.substitutions import FindPackageShare -from launch_ros.descriptions import ParameterValue -from launch_ros.actions import LifecycleNode - -import os -from ament_index_python.packages import get_package_share_directory - -def generate_launch_description(): - use_sim_time = LaunchConfiguration('use_sim_time') - - # joy_params = os.path.join(get_package_share_directory('cps_rmp220_support'),'config','joystick.yaml') - # namespace = "/rmp" - # joy_node = Node( - # package='joy', - # executable='joy_node', - # parameters=[joy_params, {'use_sim_time': use_sim_time}], - # namespace = namespace - # ) - - # teleop_node = Node( - # package='rmp220_teleop', - # executable='rmp220_teleop', - # name='rmp220_teleop', - # parameters=[joy_params, {'use_sim_time': use_sim_time}], - # remappings=[('/cmd_vel', 'cmd_vel_joy')], - # namespace = namespace - # ) - - # twist_mux_params = os.path.join(get_package_share_directory('cps_rmp220_support'),'config','twist_mux.yaml') - # twist_mux = Node( - # package="twist_mux", - # executable="twist_mux", - # parameters=[twist_mux_params, {'use_sim_time': False}], - # #remappings=[('cmd_vel_joy','/rmp/cmd_vel_joy')], - # namespace = namespace - # ) - - # Using the more 'ROS' way: joy node publishes at 50Hz defined in the config and joy-teleop - # node publishes the joy messages only when enable button is pressed. - - joy_params = os.path.join(get_package_share_directory('cps_rmp220_support'),'config','joystick.yaml') - namespace = "/rmp" - joy_node = Node( - package='joy', - executable='joy_node', - parameters=[joy_params, {'use_sim_time': use_sim_time}], - #namespace = namespace - ) - - teleop_node = Node( - package='teleop_twist_joy', - executable='teleop_node', - name='teleop_node', - parameters=[joy_params, {'use_sim_time': use_sim_time}], - remappings=[('cmd_vel', 'cmd_vel_joy')], - #namespace = namespace - ) - - twist_mux_params = os.path.join(get_package_share_directory('cps_rmp220_support'),'config','twist_mux.yaml') - twist_mux_node = Node( - package="twist_mux", - executable="twist_mux", - parameters=[twist_mux_params, {'use_sim_time': False}], - remappings=[('/cmd_vel_out','/cmd_vel_mux')] - ) - - rmp_teleop_node = Node( - package='rmp220_teleop', - executable='rmp220_teleop', - name='rmp220_teleop', - remappings=[('cmd_vel', 'cmd_vel_joy')], - ) - - rmp_middleware_node = Node( - package='rmp220_middleware', - executable='rmp220_middleware', - name='rmp220_middleware', - #namespace = namespace - ) - - return LaunchDescription([ - DeclareLaunchArgument( - 'use_sim_time', - default_value='false', - description='Use sim time if true'), - joy_node, - teleop_node, - #rmp_teleop_node, - twist_mux_node, - rmp_middleware_node - ]) \ No newline at end of file diff --git a/launch/robot_lidar.launch.py b/launch/robot_lidar.launch.py deleted file mode 100644 index f788d22..0000000 --- a/launch/robot_lidar.launch.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python3 - -import os - -from ament_index_python.packages import get_package_share_directory -from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument -from launch.actions import LogInfo -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node -from launch.substitutions import ThisLaunchFileDir - -def generate_launch_description(): - channel_type = LaunchConfiguration('channel_type', default='serial') - serial_port = LaunchConfiguration('serial_port', default='/dev/ttyUSB0') - serial_baudrate = LaunchConfiguration('serial_baudrate', default='115200') #for A1/A2 is 115200 - frame_id = LaunchConfiguration('frame_id', default='laser') - inverted = LaunchConfiguration('inverted', default='false') - angle_compensate = LaunchConfiguration('angle_compensate', default='true') - scan_mode = LaunchConfiguration('scan_mode', default='Sensitivity') - - # scan_filter = IncludeLaunchDescription( - # PythonLaunchDescriptionSource([ThisLaunchFileDir(), 'robot_scan_filter.launch.py']), - # #launch_arguments={'my_arg': 'new_value'}.items() # You can pass arguments here - # ), - - return LaunchDescription([ - DeclareLaunchArgument( - 'channel_type', - default_value=channel_type, - description='Specifying channel type of lidar'), - - DeclareLaunchArgument( - 'serial_port', - default_value=serial_port, - description='Specifying usb port to connected lidar'), - - DeclareLaunchArgument( - 'serial_baudrate', - default_value=serial_baudrate, - description='Specifying usb port baudrate to connected lidar'), - - DeclareLaunchArgument( - 'frame_id', - default_value=frame_id, - description='Specifying frame_id of lidar'), - - DeclareLaunchArgument( - 'inverted', - default_value=inverted, - description='Specifying whether or not to invert scan data'), - - DeclareLaunchArgument( - 'angle_compensate', - default_value=angle_compensate, - description='Specifying whether or not to enable angle_compensate of scan data'), - DeclareLaunchArgument( - 'scan_mode', - default_value=scan_mode, - description='Specifying scan mode of lidar'), - - Node( - package='sllidar_ros2', - executable='sllidar_node', - output='screen', - parameters=[{ - 'serial_port': serial_port, - 'frame_id': 'laser_frame', - 'scan_mode': 'Sensitivity', - 'channel_type':channel_type, - 'serial_baudrate': serial_baudrate, - 'inverted': inverted, - 'angle_compensate': angle_compensate - }], - #namespace = "/rmp" - ), - # scan_filter() - ]) diff --git a/launch/robot_localization.launch.py b/launch/robot_localization.launch.py deleted file mode 100644 index 351ee1d..0000000 --- a/launch/robot_localization.launch.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright 2022 Factor Robotics -# -# 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 launch import LaunchDescription -from launch.substitutions import Command, FindExecutable, PathJoinSubstitution -from launch_ros.actions import Node -from launch_ros.substitutions import FindPackageShare -from ament_index_python.packages import get_package_share_directory -from launch_ros.actions import LifecycleNode -from launch_ros.descriptions import ParameterValue -from launch.substitutions import LaunchConfiguration - - -def generate_launch_description(): - - robot_localization_node = Node( - package='robot_localization', - executable='ekf_node', - name='ekf_filter_node', - output='screen', - parameters = [ PathJoinSubstitution( - [ - FindPackageShare("cps_rmp220_support"), - "config", - "ekf.yaml" - ] - ) , - #{'use_sim_time': LaunchConfiguration('use_sim_time')} - ] - ) - - return LaunchDescription([ - robot_localization_node - ]) \ No newline at end of file diff --git a/launch/robot_mapping.launch.py b/launch/robot_mapping.launch.py deleted file mode 100644 index e8ab25a..0000000 --- a/launch/robot_mapping.launch.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2022 Factor Robotics -# -# 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 launch import LaunchDescription -from launch.substitutions import Command, FindExecutable, PathJoinSubstitution -from launch_ros.actions import Node -from launch_ros.substitutions import FindPackageShare -from ament_index_python.packages import get_package_share_directory -from launch_ros.actions import LifecycleNode -from launch_ros.descriptions import ParameterValue -from launch.substitutions import LaunchConfiguration - - -def generate_launch_description(): - robot_description_content = Command( - [ - PathJoinSubstitution([FindExecutable(name="xacro")]), - " ", - PathJoinSubstitution( - [ - FindPackageShare("cps_rmp220_support"), - "description", - "robot.urdf.xacro" - ] - ), - ] - ) - - use_sim_time = False - slam_params_file = PathJoinSubstitution( - [ - FindPackageShare("cps_rmp220_support"), - "config", - "mapper_params_online_async.yaml" - ] - ) - namespace = "/rmp" - mapper_node = Node( - package="slam_toolbox", - executable="async_slam_toolbox_node", - name='slam_toolbox_node', - output='screen', - parameters=[ - slam_params_file, - {'use_sim_time': use_sim_time} - ], - #namespace = namespace, - #remappings=[('/scan', 'scan'), ('/map', 'map')], - ) - - return LaunchDescription([ - mapper_node - ]) \ No newline at end of file diff --git a/launch/robot_mapping_localization.launch.py b/launch/robot_mapping_localization.launch.py deleted file mode 100644 index cbbc878..0000000 --- a/launch/robot_mapping_localization.launch.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2022 Factor Robotics -# -# 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 launch import LaunchDescription -from launch.substitutions import Command, FindExecutable, PathJoinSubstitution -from launch_ros.actions import Node -from launch_ros.substitutions import FindPackageShare -from ament_index_python.packages import get_package_share_directory -from launch_ros.actions import LifecycleNode -from launch_ros.descriptions import ParameterValue -from launch.substitutions import LaunchConfiguration - - -def generate_launch_description(): - use_sim_time = False - slam_params_file = PathJoinSubstitution( - [ - FindPackageShare("cps_rmp220_support"), - "config", - "mapper_params_localization.yaml" - ] - ) - namespace = "/rmp" - localization_node = Node( - package="slam_toolbox", - executable="localization_slam_toolbox_node", - name='slam_toolbox', - output='screen', - parameters=[ - slam_params_file, - {'use_sim_time': use_sim_time} - ], - #namespace = namespace, - #remappings=[('/scan', 'scan'), ('/map', 'map')], - ) - - return LaunchDescription([ - localization_node - ]) \ No newline at end of file diff --git a/launch/robot_navigation.launch.py b/launch/robot_navigation.launch.py deleted file mode 100644 index a3ccde3..0000000 --- a/launch/robot_navigation.launch.py +++ /dev/null @@ -1,197 +0,0 @@ -# Copyright (c) 2018 Intel Corporation -# -# 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, - IncludeLaunchDescription, SetEnvironmentVariable) -from launch.conditions import IfCondition -from launch.launch_description_sources import PythonLaunchDescriptionSource -from launch.substitutions import LaunchConfiguration, PythonExpression -from launch_ros.actions import Node -from launch_ros.actions import PushRosNamespace -from launch_ros.descriptions import ParameterFile -from nav2_common.launch import RewrittenYaml, ReplaceString - - -def generate_launch_description(): - # Get the launch directory - bringup_dir = get_package_share_directory('cps_rmp220_support') - launch_dir = os.path.join(bringup_dir, 'launch') - - # Create the launch configuration variables - namespace = LaunchConfiguration('namespace') - use_namespace = LaunchConfiguration('use_namespace') - slam = LaunchConfiguration('slam') - map_yaml_file = LaunchConfiguration('map') - use_sim_time = LaunchConfiguration('use_sim_time') - params_file = LaunchConfiguration('params_file') - autostart = LaunchConfiguration('autostart') - use_composition = LaunchConfiguration('use_composition') - use_respawn = LaunchConfiguration('use_respawn') - log_level = LaunchConfiguration('log_level') - - # Map fully qualified names to relative ones so the node's namespace can be prepended. - # In case of the transforms (tf), currently, there doesn't seem to be a better alternative - # https://github.com/ros/geometry2/issues/32 - # https://github.com/ros/robot_state_publisher/pull/30 - # TODO(orduno) Substitute with `PushNodeRemapping` - # https://github.com/ros2/launch_ros/issues/56 - remappings = [('/tf', 'tf'), - ('/tf_static', 'tf_static')] - - # Create our own temporary YAML files that include substitutions - param_substitutions = { - 'use_sim_time': use_sim_time, - 'yaml_filename': map_yaml_file} - - # Only it applys when `use_namespace` is True. - # '' keyword shall be replaced by 'namespace' launch argument - # in config file 'nav2_multirobot_params.yaml' as a default & example. - # User defined config file should contain '' keyword for the replacements. - params_file = ReplaceString( - source_file=params_file, - replacements={'': ('/', namespace)}, - condition=IfCondition(use_namespace)) - - configured_params = ParameterFile( - RewrittenYaml( - source_file=params_file, - root_key=namespace, - param_rewrites=param_substitutions, - convert_types=True), - allow_substs=True) - - stdout_linebuf_envvar = SetEnvironmentVariable( - 'RCUTILS_LOGGING_BUFFERED_STREAM', '1') - - declare_namespace_cmd = DeclareLaunchArgument( - 'namespace', - default_value='', - description='Top-level namespace') - - declare_use_namespace_cmd = DeclareLaunchArgument( - 'use_namespace', - default_value='false', - description='Whether to apply a namespace to the navigation stack') - - declare_slam_cmd = DeclareLaunchArgument( - 'slam', - default_value='False', - description='Whether run a SLAM') - - declare_map_yaml_cmd = DeclareLaunchArgument( - 'map', - description='Full path to map yaml file to load') - - declare_use_sim_time_cmd = DeclareLaunchArgument( - 'use_sim_time', - default_value='false', - description='Use simulation (Gazebo) clock if true') - - declare_params_file_cmd = DeclareLaunchArgument( - 'params_file', - default_value=os.path.join(bringup_dir, 'config', 'nav2_params.yaml'), - description='Full path to the ROS2 parameters file to use for all launched nodes') - - declare_autostart_cmd = DeclareLaunchArgument( - 'autostart', default_value='true', - description='Automatically startup the nav2 stack') - - declare_use_composition_cmd = DeclareLaunchArgument( - 'use_composition', default_value='True', - description='Whether to use composed bringup') - - declare_use_respawn_cmd = DeclareLaunchArgument( - 'use_respawn', default_value='False', - description='Whether to respawn if a node crashes. Applied when composition is disabled.') - - declare_log_level_cmd = DeclareLaunchArgument( - 'log_level', default_value='info', - description='log level') - - # Specify the actions - bringup_cmd_group = GroupAction([ - PushRosNamespace( - condition=IfCondition(use_namespace), - namespace=namespace), - - Node( - condition=IfCondition(use_composition), - name='nav2_container', - package='rclcpp_components', - executable='component_container_isolated', - parameters=[configured_params, {'autostart': autostart}], - arguments=['--ros-args', '--log-level', log_level], - remappings=remappings, - output='screen'), - - IncludeLaunchDescription( - PythonLaunchDescriptionSource(os.path.join(launch_dir, 'slam_launch.py')), - condition=IfCondition(slam), - launch_arguments={'namespace': namespace, - 'use_sim_time': use_sim_time, - 'autostart': autostart, - 'use_respawn': use_respawn, - 'params_file': params_file}.items()), - - IncludeLaunchDescription( - PythonLaunchDescriptionSource(os.path.join(launch_dir, - 'localization_launch.py')), - condition=IfCondition(PythonExpression(['not ', slam])), - launch_arguments={'namespace': namespace, - 'map': map_yaml_file, - 'use_sim_time': use_sim_time, - 'autostart': autostart, - 'params_file': params_file, - 'use_composition': use_composition, - 'use_respawn': use_respawn, - 'container_name': 'nav2_container'}.items()), - - IncludeLaunchDescription( - PythonLaunchDescriptionSource(os.path.join(launch_dir, 'navigation_launch.py')), - launch_arguments={'namespace': namespace, - 'use_sim_time': use_sim_time, - 'autostart': autostart, - 'params_file': params_file, - 'use_composition': use_composition, - 'use_respawn': use_respawn, - 'container_name': 'nav2_container'}.items()), - ]) - - # Create the launch description and populate - ld = LaunchDescription() - - # Set environment variables - ld.add_action(stdout_linebuf_envvar) - - # Declare the launch options - ld.add_action(declare_namespace_cmd) - ld.add_action(declare_use_namespace_cmd) - ld.add_action(declare_slam_cmd) - ld.add_action(declare_map_yaml_cmd) - ld.add_action(declare_use_sim_time_cmd) - ld.add_action(declare_params_file_cmd) - ld.add_action(declare_autostart_cmd) - ld.add_action(declare_use_composition_cmd) - ld.add_action(declare_use_respawn_cmd) - ld.add_action(declare_log_level_cmd) - - # Add the actions to launch all of the navigation nodes - ld.add_action(bringup_cmd_group) - - return ld \ No newline at end of file diff --git a/launch/robot_scan_filter.launch.py b/launch/robot_scan_filter.launch.py deleted file mode 100644 index 6a1e16c..0000000 --- a/launch/robot_scan_filter.launch.py +++ /dev/null @@ -1,18 +0,0 @@ -from launch import LaunchDescription -from launch.substitutions import PathJoinSubstitution -from launch_ros.actions import Node -from ament_index_python.packages import get_package_share_directory - - -def generate_launch_description(): - return LaunchDescription([ - Node( - package="laser_filters", - executable="scan_to_scan_filter_chain", - parameters=[ - PathJoinSubstitution([ - get_package_share_directory("cps_rmp220_support"), - "config", "box_filter.yaml", - ])], - ) - ]) \ No newline at end of file diff --git a/launch/rsp.launch.py b/launch/rsp.launch.py deleted file mode 100644 index 02184ce..0000000 --- a/launch/rsp.launch.py +++ /dev/null @@ -1,56 +0,0 @@ -import os - -from ament_index_python.packages import get_package_share_directory - -from launch import LaunchDescription -from launch.substitutions import LaunchConfiguration, Command, FindExecutable, PathJoinSubstitution -from launch.actions import DeclareLaunchArgument -from launch_ros.actions import Node - -import xacro - -namespace = "/rmp" -def generate_launch_description(): - - # Check if we're told to use sim time - use_sim_time = LaunchConfiguration('use_sim_time') - use_ros2_control = LaunchConfiguration('use_ros2_control') - - # Process the URDF file - pkg_path = os.path.join(get_package_share_directory('cps_rmp220_support')) - xacro_file = os.path.join(pkg_path,'description','robot.urdf.xacro') - robot_description_config = Command(['xacro ', xacro_file, ' use_ros2_control:=', use_ros2_control, ' sim_mode:=', use_sim_time]) - - # Create a robot_state_publisher node - params = {'robot_description': robot_description_config, 'use_sim_time': use_sim_time} - node_robot_state_publisher = Node( - package='robot_state_publisher', - executable='robot_state_publisher', - output='screen', - parameters=[params], - #namespace=namespace - ) - - node_joint_state_publisher = Node( - package='joint_state_publisher', - executable='joint_state_publisher', - output='screen', - parameters=[params], - #namespace=namespace - ) - - - # Launch! - return LaunchDescription([ - DeclareLaunchArgument( - 'use_sim_time', - default_value='false', - description='Use sim time if true'), - DeclareLaunchArgument( - 'use_ros2_control', - default_value='true', - description='Use ros2_control if true'), - - node_robot_state_publisher, - node_joint_state_publisher - ]) diff --git a/launch/rviz.launch.py b/launch/rviz.launch.py deleted file mode 100644 index 5a6a856..0000000 --- a/launch/rviz.launch.py +++ /dev/null @@ -1,109 +0,0 @@ -# Copyright (c) 2018 Intel Corporation -# -# 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, EmitEvent, RegisterEventHandler -from launch.conditions import IfCondition, UnlessCondition -from launch.event_handlers import OnProcessExit -from launch.events import Shutdown -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node -from nav2_common.launch import ReplaceString - - -def generate_launch_description(): - # Get the launch directory - bringup_dir = get_package_share_directory('cps_rmp220_support') - - # Create the launch configuration variables - namespace = LaunchConfiguration('namespace') - use_namespace = LaunchConfiguration('use_namespace') - rviz_config_file = LaunchConfiguration('rviz_config') - - # Declare the launch arguments - declare_namespace_cmd = DeclareLaunchArgument( - 'namespace', - default_value='navigation', - description=('Top-level namespace. The value will be used to replace the ' - ' keyword on the rviz config file.')) - - declare_use_namespace_cmd = DeclareLaunchArgument( - 'use_namespace', - default_value='false', - description='Whether to apply a namespace to the navigation stack') - - declare_rviz_config_file_cmd = DeclareLaunchArgument( - 'rviz_config', - default_value=os.path.join(bringup_dir, 'config', 'nav2_default_view.rviz'), - description='Full path to the RVIZ config file to use') - - # Launch rviz - start_rviz_cmd = Node( - condition=UnlessCondition(use_namespace), - package='rviz2', - executable='rviz2', - arguments=['-d', rviz_config_file], - output='screen') - - namespaced_rviz_config_file = ReplaceString( - source_file=rviz_config_file, - replacements={'': ('/', namespace)}) - - start_namespaced_rviz_cmd = Node( - condition=IfCondition(use_namespace), - package='rviz2', - executable='rviz2', - namespace=namespace, - arguments=['-d', namespaced_rviz_config_file], - output='screen', - remappings=[('/map', 'map'), - ('/tf', 'tf'), - ('/tf_static', 'tf_static'), - ('/goal_pose', 'goal_pose'), - ('/clicked_point', 'clicked_point'), - ('/initialpose', 'initialpose')]) - - exit_event_handler = RegisterEventHandler( - condition=UnlessCondition(use_namespace), - event_handler=OnProcessExit( - target_action=start_rviz_cmd, - on_exit=EmitEvent(event=Shutdown(reason='rviz exited')))) - - exit_event_handler_namespaced = RegisterEventHandler( - condition=IfCondition(use_namespace), - event_handler=OnProcessExit( - target_action=start_namespaced_rviz_cmd, - on_exit=EmitEvent(event=Shutdown(reason='rviz exited')))) - - # Create the launch description and populate - ld = LaunchDescription() - - # Declare the launch options - ld.add_action(declare_namespace_cmd) - ld.add_action(declare_use_namespace_cmd) - ld.add_action(declare_rviz_config_file_cmd) - - # Add any conditioned actions - ld.add_action(start_rviz_cmd) - ld.add_action(start_namespaced_rviz_cmd) - - # Add other nodes and processes we need - ld.add_action(exit_event_handler) - ld.add_action(exit_event_handler_namespaced) - - return ld \ No newline at end of file diff --git a/launch/slam.launch.py b/launch/slam.launch.py deleted file mode 100644 index 29eb2cd..0000000 --- a/launch/slam.launch.py +++ /dev/null @@ -1,142 +0,0 @@ -# Copyright (c) 2020 Samsung Research 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, IncludeLaunchDescription -from launch.conditions import IfCondition, UnlessCondition -from launch.launch_description_sources import PythonLaunchDescriptionSource -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node -from launch_ros.descriptions import ParameterFile -from nav2_common.launch import HasNodeParams, RewrittenYaml - - -def generate_launch_description(): - # Input parameters declaration - namespace = LaunchConfiguration('namespace') - params_file = LaunchConfiguration('params_file') - use_sim_time = LaunchConfiguration('use_sim_time') - autostart = LaunchConfiguration('autostart') - use_respawn = LaunchConfiguration('use_respawn') - log_level = LaunchConfiguration('log_level') - - # Variables - lifecycle_nodes = ['map_saver'] - - # Getting directories and launch-files - bringup_dir = get_package_share_directory('nav2_bringup') - slam_toolbox_dir = get_package_share_directory('slam_toolbox') - slam_launch_file = os.path.join(slam_toolbox_dir, 'launch', 'online_sync_launch.py') - - # Create our own temporary YAML files that include substitutions - param_substitutions = { - 'use_sim_time': use_sim_time} - - configured_params = ParameterFile( - RewrittenYaml( - source_file=params_file, - root_key=namespace, - param_rewrites=param_substitutions, - convert_types=True), - allow_substs=True) - - # Declare the launch arguments - declare_namespace_cmd = DeclareLaunchArgument( - 'namespace', - default_value='', - description='Top-level namespace') - - declare_params_file_cmd = DeclareLaunchArgument( - 'params_file', - default_value=os.path.join(bringup_dir, 'params', 'nav2_params.yaml'), - description='Full path to the ROS2 parameters file to use for all launched nodes') - - declare_use_sim_time_cmd = DeclareLaunchArgument( - 'use_sim_time', - default_value='True', - description='Use simulation (Gazebo) clock if true') - - declare_autostart_cmd = DeclareLaunchArgument( - 'autostart', default_value='True', - description='Automatically startup the nav2 stack') - - declare_use_respawn_cmd = DeclareLaunchArgument( - 'use_respawn', default_value='False', - description='Whether to respawn if a node crashes. Applied when composition is disabled.') - - declare_log_level_cmd = DeclareLaunchArgument( - 'log_level', default_value='info', - description='log level') - - # Nodes launching commands - - start_map_saver_server_cmd = Node( - package='nav2_map_server', - executable='map_saver_server', - output='screen', - respawn=use_respawn, - respawn_delay=2.0, - arguments=['--ros-args', '--log-level', log_level], - parameters=[configured_params]) - - start_lifecycle_manager_cmd = Node( - package='nav2_lifecycle_manager', - executable='lifecycle_manager', - name='lifecycle_manager_slam', - output='screen', - arguments=['--ros-args', '--log-level', log_level], - parameters=[{'use_sim_time': use_sim_time}, - {'autostart': autostart}, - {'node_names': lifecycle_nodes}]) - - # If the provided param file doesn't have slam_toolbox params, we must remove the 'params_file' - # LaunchConfiguration, or it will be passed automatically to slam_toolbox and will not load - # the default file - has_slam_toolbox_params = HasNodeParams(source_file=params_file, - node_name='slam_toolbox') - - start_slam_toolbox_cmd = IncludeLaunchDescription( - PythonLaunchDescriptionSource(slam_launch_file), - launch_arguments={'use_sim_time': use_sim_time}.items(), - condition=UnlessCondition(has_slam_toolbox_params)) - - start_slam_toolbox_cmd_with_params = IncludeLaunchDescription( - PythonLaunchDescriptionSource(slam_launch_file), - launch_arguments={'use_sim_time': use_sim_time, - 'slam_params_file': params_file}.items(), - condition=IfCondition(has_slam_toolbox_params)) - - ld = LaunchDescription() - - # Declare the launch options - ld.add_action(declare_namespace_cmd) - ld.add_action(declare_params_file_cmd) - ld.add_action(declare_use_sim_time_cmd) - ld.add_action(declare_autostart_cmd) - ld.add_action(declare_use_respawn_cmd) - ld.add_action(declare_log_level_cmd) - - # Running Map Saver Server - ld.add_action(start_map_saver_server_cmd) - ld.add_action(start_lifecycle_manager_cmd) - - # Running SLAM Toolbox (Only one of them will be run) - ld.add_action(start_slam_toolbox_cmd) - ld.add_action(start_slam_toolbox_cmd_with_params) - - return ld \ No newline at end of file