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.

معلومات المصدر

المستودع
guilyx/dotfiles
آخر نشاط في المصدر
١٢ أغسطس ٢٠٢٦ في ١٩:٣٩
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٠
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
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.
عرض على GitHub