mirror of
https://github.com/SHC-ASTRA/rover-ros2.git
synced 2026-02-11 17:30:36 +00:00
133 lines
4.1 KiB
Python
133 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from launch import LaunchDescription
|
|
from launch.actions import DeclareLaunchArgument, OpaqueFunction, Shutdown
|
|
from launch.substitutions import LaunchConfiguration
|
|
from launch_ros.actions import Node
|
|
|
|
|
|
|
|
#Prevent making __pycache__ directories
|
|
from sys import dont_write_bytecode
|
|
dont_write_bytecode = True
|
|
|
|
def launch_setup(context, *args, **kwargs):
|
|
# Retrieve the resolved value of the launch argument 'mode'
|
|
mode = LaunchConfiguration('mode').perform(context)
|
|
nodes = []
|
|
|
|
if mode == 'anchor':
|
|
# Launch every node and pass "anchor" as the parameter
|
|
nodes.append(
|
|
Node(
|
|
package='arm_pkg',
|
|
executable='arm', # change as needed
|
|
name='arm',
|
|
output='both',
|
|
parameters=[{'launch_mode': mode}],
|
|
on_exit=Shutdown()
|
|
)
|
|
)
|
|
nodes.append(
|
|
Node(
|
|
package='core_pkg',
|
|
executable='core', # change as needed
|
|
name='core',
|
|
output='both',
|
|
parameters=[{'launch_mode': mode}],
|
|
on_exit=Shutdown()
|
|
)
|
|
)
|
|
nodes.append(
|
|
Node(
|
|
package='core_pkg',
|
|
executable='ptz', # change as needed
|
|
name='ptz',
|
|
output='both'
|
|
# Currently don't shutdown all nodes if the PTZ node fails, as it is not critical
|
|
# on_exit=Shutdown() # Uncomment if you want to shutdown on PTZ failure
|
|
)
|
|
)
|
|
nodes.append(
|
|
Node(
|
|
package='bio_pkg',
|
|
executable='bio', # change as needed
|
|
name='bio',
|
|
output='both',
|
|
parameters=[{'launch_mode': mode}],
|
|
on_exit=Shutdown()
|
|
)
|
|
)
|
|
nodes.append(
|
|
Node(
|
|
package='anchor_pkg',
|
|
executable='anchor', # change as needed
|
|
name='anchor',
|
|
output='both',
|
|
parameters=[{'launch_mode': mode}],
|
|
on_exit=Shutdown()
|
|
)
|
|
)
|
|
elif mode in ['arm', 'core', 'bio', 'ptz']:
|
|
# Only launch the node corresponding to the provided mode.
|
|
if mode == 'arm':
|
|
nodes.append(
|
|
Node(
|
|
package='arm_pkg',
|
|
executable='arm',
|
|
name='arm',
|
|
output='both',
|
|
parameters=[{'launch_mode': mode}],
|
|
on_exit=Shutdown()
|
|
)
|
|
)
|
|
elif mode == 'core':
|
|
nodes.append(
|
|
Node(
|
|
package='core_pkg',
|
|
executable='core',
|
|
name='core',
|
|
output='both',
|
|
parameters=[{'launch_mode': mode}],
|
|
on_exit=Shutdown()
|
|
)
|
|
)
|
|
elif mode == 'bio':
|
|
nodes.append(
|
|
Node(
|
|
package='bio_pkg',
|
|
executable='bio',
|
|
name='bio',
|
|
output='both',
|
|
parameters=[{'launch_mode': mode}],
|
|
on_exit=Shutdown()
|
|
)
|
|
)
|
|
elif mode == 'ptz':
|
|
nodes.append(
|
|
Node(
|
|
package='core_pkg',
|
|
executable='ptz',
|
|
name='ptz',
|
|
output='both',
|
|
on_exit=Shutdown(), #on fail, shutdown if this was the only node to be launched
|
|
)
|
|
)
|
|
else:
|
|
# If an invalid mode is provided, print an error.
|
|
print("Invalid mode provided. Choose one of: arm, core, bio, anchor, ptz.")
|
|
|
|
return nodes
|
|
|
|
def generate_launch_description():
|
|
declare_arg = DeclareLaunchArgument(
|
|
'mode',
|
|
default_value='anchor',
|
|
description='Launch mode: arm, core, bio, anchor, or ptz'
|
|
)
|
|
|
|
return LaunchDescription([
|
|
declare_arg,
|
|
OpaqueFunction(function=launch_setup)
|
|
])
|