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.

Informações da origem

Repositório
guilyx/dotfiles
Última atividade na origem
12 de agosto de 2026 às 19:39
Idioma detectado do SKILL.md
inglês
Estrelas
0
Forks
0

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
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.
Ver no GitHub