mirror of
https://github.com/bjoernellens1/cps_rmp220_support.git
synced 2025-01-19 08:06:59 +00:00
update
This commit is contained in:
parent
423cbc8666
commit
cff8a7c906
@ -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
|
|
||||||
])
|
|
@ -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'
|
|
||||||
}]
|
|
||||||
)
|
|
||||||
])
|
|
@ -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
|
|
||||||
])
|
|
@ -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
|
|
@ -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
|
|
@ -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'
|
|
||||||
}]
|
|
||||||
)
|
|
||||||
])
|
|
@ -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
|
|
@ -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
|
|
||||||
])
|
|
@ -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
|
|
||||||
])
|
|
@ -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
|
|
||||||
])
|
|
@ -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()
|
|
||||||
])
|
|
@ -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
|
|
||||||
])
|
|
@ -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
|
|
||||||
])
|
|
@ -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
|
|
||||||
])
|
|
@ -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.
|
|
||||||
# '<robot_namespace>' 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 '<robot_namespace>' keyword for the replacements.
|
|
||||||
params_file = ReplaceString(
|
|
||||||
source_file=params_file,
|
|
||||||
replacements={'<robot_namespace>': ('/', 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
|
|
@ -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",
|
|
||||||
])],
|
|
||||||
)
|
|
||||||
])
|
|
@ -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
|
|
||||||
])
|
|
@ -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 '
|
|
||||||
'<robot_namespace> 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={'<robot_namespace>': ('/', 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
|
|
@ -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
|
|
Loading…
Reference in New Issue
Block a user