146 lines
4.9 KiB
Python
146 lines
4.9 KiB
Python
|
# 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, GroupAction
|
||
|
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
||
|
from launch.substitutions import LaunchConfiguration
|
||
|
from launch_ros.actions import Node, SetRemap
|
||
|
from launch_ros.descriptions import ParameterFile
|
||
|
from nav2_common.launch import 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
|
||
|
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="robot", description="Top-level namespace"
|
||
|
)
|
||
|
|
||
|
declare_params_file_cmd = DeclareLaunchArgument(
|
||
|
"params_file",
|
||
|
default_value="/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},
|
||
|
],
|
||
|
)
|
||
|
|
||
|
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(),
|
||
|
)
|
||
|
|
||
|
group_actions = []
|
||
|
|
||
|
# Remapping
|
||
|
group_actions.append(SetRemap("/map", "map"))
|
||
|
group_actions.append(SetRemap("/map_metadata", "map_metadata"))
|
||
|
group_actions.append(SetRemap("/scan", "scan"))
|
||
|
|
||
|
# Running Map Saver Server
|
||
|
group_actions.append(start_map_saver_server_cmd)
|
||
|
group_actions.append(start_lifecycle_manager_cmd)
|
||
|
|
||
|
# Running SLAM Toolbox (Only one of them will be run)
|
||
|
group_actions.append(start_slam_toolbox_cmd_with_params)
|
||
|
|
||
|
slam_ns = GroupAction(actions=group_actions)
|
||
|
|
||
|
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 SLAM
|
||
|
ld.add_action(slam_ns)
|
||
|
|
||
|
return ld
|