Skip to main content

ros2-launch

Write and debug ROS 2 Python launch files — substitutions, OpaqueFunction, composable containers, lifecycle events, namespaces. Use when editing launch.py, IncludeLaunchDescription, LaunchConfiguration, or bringup.

Informations de source

Dépôt
guilyx/dotfiles
Dernière activité de la source
12 août 2026 à 19:39
Langue détectée de SKILL.md
anglais
Étoiles
0
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
ros2-launch
description
Write and debug ROS 2 Python launch files — substitutions, OpaqueFunction, composable containers, lifecycle events, namespaces. Use when editing launch.py, IncludeLaunchDescription, LaunchConfiguration, or bringup.
# ROS 2 Python Launch ## Substitutions vs Python values `LaunchConfiguration('foo')` is **not** a `str` at declaration time. You cannot `if LaunchConfiguration('sim') == 'true'` in plain Python. Use: - `IfCondition` / `UnlessCondition` / `PythonExpression` - `OpaqueFunction` when you need real Python after substitutions resolve ```python def launch_setup(context, *args, **kwargs): sim = LaunchConfiguration('sim').perform(context) == 'true' # now branch, load YAML, compute remaps return [nodes...] # in generate_launch_description: OpaqueFunction(function=launch_setup) ``` ## Composition vs processes | Action | Process | |--------|---------| | `Node(...)` | New process | | `ComposableNode` in `ComposableNodeContainer` | Same process (intra-process possible) | | `LoadComposableNode` | Load into an existing container | Do not wrap a composable plugin with `Node(executable=...)` unless there is a standalone main. ## Namespaces and remaps - `PushRosNamespace` / `GroupAction` for multi-robot (`/uav1/imu`). - Remaps are **unresolved names** relative to the node's namespace unless absolute (`/tf`). - `/tf` and `/tf_static` are usually **global** — remap carefully or you split the tree. ## Timing anti-patterns - `TimerAction(period=3.0)` to wait for a driver is a race. Prefer lifecycle events or a lifecycle manager. - `RegisterEventHandler(OnProcessExit(...))` for shutdown chains; `OnStateTransition` for managed nodes (`ros2-lifecycle`). ## Parameters in launch ```python parameters=[config.yaml, {'use_sim_time': sim, 'foo': 1}] ``` Later dicts override earlier YAML keys for that node. Wildcard YAML (`/**:`) is easy to apply to the wrong node — see `ros2-parameters`. ## Debug ```bash ros2 launch pkg file.launch.py --show-args ros2 launch pkg file.launch.py --debug ``` Print the resolved `Node` kwargs from `OpaqueFunction` when remaps look wrong.
Voir sur GitHub