Repo symbol

bob_launch repository

bob_launch

ROS Distro
humble

Repository Summary

Description
Checkout URI https://github.com/bob-ros2/bob_launch.git
VCS Type git
VCS Version main
Last Updated 2026-03-28
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
bob_launch 1.0.1

README

ROS Package bob_launch

ROS 2 CI License

bob_launch is a powerful meta-launcher for ROS 2 that enables dynamic system orchestration using YAML or JSON configuration files. It allows you to define, compose, and launch complex ROS 2 graphs without writing boilerplate Python launch files.

High-Level Capabilities

  • Dynamic Orchestration: Spawn nodes or include other launch files based on external configuration.
  • Composition over Coding: Define your entire ROS system in simple YAML.
  • Streamlined Workflow: Use the launch.sh wrapper or native ROS 2 launch arguments.
  • Auto-Abort Protection: Optionally shut down the entire launch tree if any critical node exits (ideal for Docker/CI).
  • Global Parameters: Inject a shared parameter file into all nodes launched within a configuration.
  • Path Placeholders: Use //PKGSHARE/ (current node package) or //PKGSHARE:pkg/ to dynamically resolve ROS 2 package share directories in parameters and arguments.
  • Environment Substitution: Support for shell-like ${VAR} or ${VAR:-default} syntax in all configuration fields and relevant launch arguments.

Native ROS 2 Usage (Preferred)

You can call the launch file directly using standard ROS 2 launch arguments:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml

To pass an optional global node parameter file:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml config_nodes:=node_params.yaml

Note: You can also use the environment variable BOB_LAUNCH_CONFIG=./my_config.yaml as an alternative to the config:= argument.

Fast Execution: launch.sh

The launch.sh script is a convenient wrapper that simplifies execution by handling environment variables and temporary file management for you.

1. Launch from a file

ros2 run bob_launch launch.sh my_config.yaml

2. Launch with a global parameter file

ros2 run bob_launch launch.sh my_config.yaml global_params.yaml

3. Launch from a JSON config file

ros2 run bob_launch launch.sh my_config.json

Advanced Usage

bob_launch is designed to be highly scriptable, making it an ideal tool for AI Agents needing to spawn ROS components on the fly.

Pipe a String Directly (Dynamic Spawning)

An agent can generate a YAML string and pipe it directly to the launcher without creating a persistent file:

echo "- name: talker
  package: demo_nodes_cpp
  executable: talker" | ros2 run bob_launch launch.sh

Multi-File Composition

You can quickly composite different system “layers” (e.g., base drivers + perception + mission logic) by concatenating files into the pipe:

cat base_robot.yaml nav2_stack.yaml custom_logic.yaml | ros2 run bob_launch launch.sh

Dynamic Substitution & Placeholders

bob_launch supports powerful dynamic string substitution in all configuration fields and launcher arguments (like config:= and config_nodes:=).

Environment Variables (${VAR})

Supports shell-like syntax for dynamic values:

  • ${MYVAR}: Replaces with the value or an empty string.
  • ${MYVAR:-/default/path/}: Replaces with the value or the specified default if unset.

Path Placeholders (//PKGSHARE)

Avoid hardcoded absolute paths by dynamically resolving ROS 2 package share directories:

  • //PKGSHARE/: Resolves to the share directory of the package defined for the current entity (implicit).
  • //PKGSHARE:pkg_name/: Resolves to the share directory of pkg_name (explicit).

Combination & CLI Usage

These mechanisms can be combined and even used directly in the ros2 launch command arguments:

ros2 launch bob_launch generic.launch.py \
  config:='//PKGSHARE:my_pkg/config/${ROBOT_ENV:-dev}.yaml'

To disable environment substitution, set BOB_SUBSTITUTE_ENV_VARS=0.

Configuration Schema

Spawning Nodes

```yaml

  • name: usb_cam # Optional: defaults to executable_name + random suffix package: usb_cam executable: usb_cam_node_exe arguments: # Optional: list of CLI arguments
    • –ros-args

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.
Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~
No version for distro jazzy showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

bob_launch repository

bob_launch

ROS Distro
humble

Repository Summary

Description
Checkout URI https://github.com/bob-ros2/bob_launch.git
VCS Type git
VCS Version main
Last Updated 2026-03-28
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
bob_launch 1.0.1

README

ROS Package bob_launch

ROS 2 CI License

bob_launch is a powerful meta-launcher for ROS 2 that enables dynamic system orchestration using YAML or JSON configuration files. It allows you to define, compose, and launch complex ROS 2 graphs without writing boilerplate Python launch files.

High-Level Capabilities

  • Dynamic Orchestration: Spawn nodes or include other launch files based on external configuration.
  • Composition over Coding: Define your entire ROS system in simple YAML.
  • Streamlined Workflow: Use the launch.sh wrapper or native ROS 2 launch arguments.
  • Auto-Abort Protection: Optionally shut down the entire launch tree if any critical node exits (ideal for Docker/CI).
  • Global Parameters: Inject a shared parameter file into all nodes launched within a configuration.
  • Path Placeholders: Use //PKGSHARE/ (current node package) or //PKGSHARE:pkg/ to dynamically resolve ROS 2 package share directories in parameters and arguments.
  • Environment Substitution: Support for shell-like ${VAR} or ${VAR:-default} syntax in all configuration fields and relevant launch arguments.

Native ROS 2 Usage (Preferred)

You can call the launch file directly using standard ROS 2 launch arguments:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml

To pass an optional global node parameter file:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml config_nodes:=node_params.yaml

Note: You can also use the environment variable BOB_LAUNCH_CONFIG=./my_config.yaml as an alternative to the config:= argument.

Fast Execution: launch.sh

The launch.sh script is a convenient wrapper that simplifies execution by handling environment variables and temporary file management for you.

1. Launch from a file

ros2 run bob_launch launch.sh my_config.yaml

2. Launch with a global parameter file

ros2 run bob_launch launch.sh my_config.yaml global_params.yaml

3. Launch from a JSON config file

ros2 run bob_launch launch.sh my_config.json

Advanced Usage

bob_launch is designed to be highly scriptable, making it an ideal tool for AI Agents needing to spawn ROS components on the fly.

Pipe a String Directly (Dynamic Spawning)

An agent can generate a YAML string and pipe it directly to the launcher without creating a persistent file:

echo "- name: talker
  package: demo_nodes_cpp
  executable: talker" | ros2 run bob_launch launch.sh

Multi-File Composition

You can quickly composite different system “layers” (e.g., base drivers + perception + mission logic) by concatenating files into the pipe:

cat base_robot.yaml nav2_stack.yaml custom_logic.yaml | ros2 run bob_launch launch.sh

Dynamic Substitution & Placeholders

bob_launch supports powerful dynamic string substitution in all configuration fields and launcher arguments (like config:= and config_nodes:=).

Environment Variables (${VAR})

Supports shell-like syntax for dynamic values:

  • ${MYVAR}: Replaces with the value or an empty string.
  • ${MYVAR:-/default/path/}: Replaces with the value or the specified default if unset.

Path Placeholders (//PKGSHARE)

Avoid hardcoded absolute paths by dynamically resolving ROS 2 package share directories:

  • //PKGSHARE/: Resolves to the share directory of the package defined for the current entity (implicit).
  • //PKGSHARE:pkg_name/: Resolves to the share directory of pkg_name (explicit).

Combination & CLI Usage

These mechanisms can be combined and even used directly in the ros2 launch command arguments:

ros2 launch bob_launch generic.launch.py \
  config:='//PKGSHARE:my_pkg/config/${ROBOT_ENV:-dev}.yaml'

To disable environment substitution, set BOB_SUBSTITUTE_ENV_VARS=0.

Configuration Schema

Spawning Nodes

```yaml

  • name: usb_cam # Optional: defaults to executable_name + random suffix package: usb_cam executable: usb_cam_node_exe arguments: # Optional: list of CLI arguments
    • –ros-args

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.
Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~
No version for distro kilted showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

bob_launch repository

bob_launch

ROS Distro
humble

Repository Summary

Description
Checkout URI https://github.com/bob-ros2/bob_launch.git
VCS Type git
VCS Version main
Last Updated 2026-03-28
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
bob_launch 1.0.1

README

ROS Package bob_launch

ROS 2 CI License

bob_launch is a powerful meta-launcher for ROS 2 that enables dynamic system orchestration using YAML or JSON configuration files. It allows you to define, compose, and launch complex ROS 2 graphs without writing boilerplate Python launch files.

High-Level Capabilities

  • Dynamic Orchestration: Spawn nodes or include other launch files based on external configuration.
  • Composition over Coding: Define your entire ROS system in simple YAML.
  • Streamlined Workflow: Use the launch.sh wrapper or native ROS 2 launch arguments.
  • Auto-Abort Protection: Optionally shut down the entire launch tree if any critical node exits (ideal for Docker/CI).
  • Global Parameters: Inject a shared parameter file into all nodes launched within a configuration.
  • Path Placeholders: Use //PKGSHARE/ (current node package) or //PKGSHARE:pkg/ to dynamically resolve ROS 2 package share directories in parameters and arguments.
  • Environment Substitution: Support for shell-like ${VAR} or ${VAR:-default} syntax in all configuration fields and relevant launch arguments.

Native ROS 2 Usage (Preferred)

You can call the launch file directly using standard ROS 2 launch arguments:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml

To pass an optional global node parameter file:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml config_nodes:=node_params.yaml

Note: You can also use the environment variable BOB_LAUNCH_CONFIG=./my_config.yaml as an alternative to the config:= argument.

Fast Execution: launch.sh

The launch.sh script is a convenient wrapper that simplifies execution by handling environment variables and temporary file management for you.

1. Launch from a file

ros2 run bob_launch launch.sh my_config.yaml

2. Launch with a global parameter file

ros2 run bob_launch launch.sh my_config.yaml global_params.yaml

3. Launch from a JSON config file

ros2 run bob_launch launch.sh my_config.json

Advanced Usage

bob_launch is designed to be highly scriptable, making it an ideal tool for AI Agents needing to spawn ROS components on the fly.

Pipe a String Directly (Dynamic Spawning)

An agent can generate a YAML string and pipe it directly to the launcher without creating a persistent file:

echo "- name: talker
  package: demo_nodes_cpp
  executable: talker" | ros2 run bob_launch launch.sh

Multi-File Composition

You can quickly composite different system “layers” (e.g., base drivers + perception + mission logic) by concatenating files into the pipe:

cat base_robot.yaml nav2_stack.yaml custom_logic.yaml | ros2 run bob_launch launch.sh

Dynamic Substitution & Placeholders

bob_launch supports powerful dynamic string substitution in all configuration fields and launcher arguments (like config:= and config_nodes:=).

Environment Variables (${VAR})

Supports shell-like syntax for dynamic values:

  • ${MYVAR}: Replaces with the value or an empty string.
  • ${MYVAR:-/default/path/}: Replaces with the value or the specified default if unset.

Path Placeholders (//PKGSHARE)

Avoid hardcoded absolute paths by dynamically resolving ROS 2 package share directories:

  • //PKGSHARE/: Resolves to the share directory of the package defined for the current entity (implicit).
  • //PKGSHARE:pkg_name/: Resolves to the share directory of pkg_name (explicit).

Combination & CLI Usage

These mechanisms can be combined and even used directly in the ros2 launch command arguments:

ros2 launch bob_launch generic.launch.py \
  config:='//PKGSHARE:my_pkg/config/${ROBOT_ENV:-dev}.yaml'

To disable environment substitution, set BOB_SUBSTITUTE_ENV_VARS=0.

Configuration Schema

Spawning Nodes

```yaml

  • name: usb_cam # Optional: defaults to executable_name + random suffix package: usb_cam executable: usb_cam_node_exe arguments: # Optional: list of CLI arguments
    • –ros-args

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.
Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~
Repo symbol

bob_launch repository

bob_launch

ROS Distro
rolling

Repository Summary

Description
Checkout URI https://github.com/bob-ros2/bob_launch.git
VCS Type git
VCS Version main
Last Updated 2026-03-28
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
bob_launch 1.0.1

README

ROS Package bob_launch

ROS 2 CI License

bob_launch is a powerful meta-launcher for ROS 2 that enables dynamic system orchestration using YAML or JSON configuration files. It allows you to define, compose, and launch complex ROS 2 graphs without writing boilerplate Python launch files.

High-Level Capabilities

  • Dynamic Orchestration: Spawn nodes or include other launch files based on external configuration.
  • Composition over Coding: Define your entire ROS system in simple YAML.
  • Streamlined Workflow: Use the launch.sh wrapper or native ROS 2 launch arguments.
  • Auto-Abort Protection: Optionally shut down the entire launch tree if any critical node exits (ideal for Docker/CI).
  • Global Parameters: Inject a shared parameter file into all nodes launched within a configuration.
  • Path Placeholders: Use //PKGSHARE/ (current node package) or //PKGSHARE:pkg/ to dynamically resolve ROS 2 package share directories in parameters and arguments.
  • Environment Substitution: Support for shell-like ${VAR} or ${VAR:-default} syntax in all configuration fields and relevant launch arguments.

Native ROS 2 Usage (Preferred)

You can call the launch file directly using standard ROS 2 launch arguments:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml

To pass an optional global node parameter file:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml config_nodes:=node_params.yaml

Note: You can also use the environment variable BOB_LAUNCH_CONFIG=./my_config.yaml as an alternative to the config:= argument.

Fast Execution: launch.sh

The launch.sh script is a convenient wrapper that simplifies execution by handling environment variables and temporary file management for you.

1. Launch from a file

ros2 run bob_launch launch.sh my_config.yaml

2. Launch with a global parameter file

ros2 run bob_launch launch.sh my_config.yaml global_params.yaml

3. Launch from a JSON config file

ros2 run bob_launch launch.sh my_config.json

Advanced Usage

bob_launch is designed to be highly scriptable, making it an ideal tool for AI Agents needing to spawn ROS components on the fly.

Pipe a String Directly (Dynamic Spawning)

An agent can generate a YAML string and pipe it directly to the launcher without creating a persistent file:

echo "- name: talker
  package: demo_nodes_cpp
  executable: talker" | ros2 run bob_launch launch.sh

Multi-File Composition

You can quickly composite different system “layers” (e.g., base drivers + perception + mission logic) by concatenating files into the pipe:

cat base_robot.yaml nav2_stack.yaml custom_logic.yaml | ros2 run bob_launch launch.sh

Dynamic Substitution & Placeholders

bob_launch supports powerful dynamic string substitution in all configuration fields and launcher arguments (like config:= and config_nodes:=).

Environment Variables (${VAR})

Supports shell-like syntax for dynamic values:

  • ${MYVAR}: Replaces with the value or an empty string.
  • ${MYVAR:-/default/path/}: Replaces with the value or the specified default if unset.

Path Placeholders (//PKGSHARE)

Avoid hardcoded absolute paths by dynamically resolving ROS 2 package share directories:

  • //PKGSHARE/: Resolves to the share directory of the package defined for the current entity (implicit).
  • //PKGSHARE:pkg_name/: Resolves to the share directory of pkg_name (explicit).

Combination & CLI Usage

These mechanisms can be combined and even used directly in the ros2 launch command arguments:

ros2 launch bob_launch generic.launch.py \
  config:='//PKGSHARE:my_pkg/config/${ROBOT_ENV:-dev}.yaml'

To disable environment substitution, set BOB_SUBSTITUTE_ENV_VARS=0.

Configuration Schema

Spawning Nodes

```yaml

  • name: usb_cam # Optional: defaults to executable_name + random suffix package: usb_cam executable: usb_cam_node_exe arguments: # Optional: list of CLI arguments
    • –ros-args

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.
Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~
No version for distro github showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

bob_launch repository

bob_launch

ROS Distro
humble

Repository Summary

Description
Checkout URI https://github.com/bob-ros2/bob_launch.git
VCS Type git
VCS Version main
Last Updated 2026-03-28
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
bob_launch 1.0.1

README

ROS Package bob_launch

ROS 2 CI License

bob_launch is a powerful meta-launcher for ROS 2 that enables dynamic system orchestration using YAML or JSON configuration files. It allows you to define, compose, and launch complex ROS 2 graphs without writing boilerplate Python launch files.

High-Level Capabilities

  • Dynamic Orchestration: Spawn nodes or include other launch files based on external configuration.
  • Composition over Coding: Define your entire ROS system in simple YAML.
  • Streamlined Workflow: Use the launch.sh wrapper or native ROS 2 launch arguments.
  • Auto-Abort Protection: Optionally shut down the entire launch tree if any critical node exits (ideal for Docker/CI).
  • Global Parameters: Inject a shared parameter file into all nodes launched within a configuration.
  • Path Placeholders: Use //PKGSHARE/ (current node package) or //PKGSHARE:pkg/ to dynamically resolve ROS 2 package share directories in parameters and arguments.
  • Environment Substitution: Support for shell-like ${VAR} or ${VAR:-default} syntax in all configuration fields and relevant launch arguments.

Native ROS 2 Usage (Preferred)

You can call the launch file directly using standard ROS 2 launch arguments:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml

To pass an optional global node parameter file:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml config_nodes:=node_params.yaml

Note: You can also use the environment variable BOB_LAUNCH_CONFIG=./my_config.yaml as an alternative to the config:= argument.

Fast Execution: launch.sh

The launch.sh script is a convenient wrapper that simplifies execution by handling environment variables and temporary file management for you.

1. Launch from a file

ros2 run bob_launch launch.sh my_config.yaml

2. Launch with a global parameter file

ros2 run bob_launch launch.sh my_config.yaml global_params.yaml

3. Launch from a JSON config file

ros2 run bob_launch launch.sh my_config.json

Advanced Usage

bob_launch is designed to be highly scriptable, making it an ideal tool for AI Agents needing to spawn ROS components on the fly.

Pipe a String Directly (Dynamic Spawning)

An agent can generate a YAML string and pipe it directly to the launcher without creating a persistent file:

echo "- name: talker
  package: demo_nodes_cpp
  executable: talker" | ros2 run bob_launch launch.sh

Multi-File Composition

You can quickly composite different system “layers” (e.g., base drivers + perception + mission logic) by concatenating files into the pipe:

cat base_robot.yaml nav2_stack.yaml custom_logic.yaml | ros2 run bob_launch launch.sh

Dynamic Substitution & Placeholders

bob_launch supports powerful dynamic string substitution in all configuration fields and launcher arguments (like config:= and config_nodes:=).

Environment Variables (${VAR})

Supports shell-like syntax for dynamic values:

  • ${MYVAR}: Replaces with the value or an empty string.
  • ${MYVAR:-/default/path/}: Replaces with the value or the specified default if unset.

Path Placeholders (//PKGSHARE)

Avoid hardcoded absolute paths by dynamically resolving ROS 2 package share directories:

  • //PKGSHARE/: Resolves to the share directory of the package defined for the current entity (implicit).
  • //PKGSHARE:pkg_name/: Resolves to the share directory of pkg_name (explicit).

Combination & CLI Usage

These mechanisms can be combined and even used directly in the ros2 launch command arguments:

ros2 launch bob_launch generic.launch.py \
  config:='//PKGSHARE:my_pkg/config/${ROBOT_ENV:-dev}.yaml'

To disable environment substitution, set BOB_SUBSTITUTE_ENV_VARS=0.

Configuration Schema

Spawning Nodes

```yaml

  • name: usb_cam # Optional: defaults to executable_name + random suffix package: usb_cam executable: usb_cam_node_exe arguments: # Optional: list of CLI arguments
    • –ros-args

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.
Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~
No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

bob_launch repository

bob_launch

ROS Distro
humble

Repository Summary

Description
Checkout URI https://github.com/bob-ros2/bob_launch.git
VCS Type git
VCS Version main
Last Updated 2026-03-28
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
bob_launch 1.0.1

README

ROS Package bob_launch

ROS 2 CI License

bob_launch is a powerful meta-launcher for ROS 2 that enables dynamic system orchestration using YAML or JSON configuration files. It allows you to define, compose, and launch complex ROS 2 graphs without writing boilerplate Python launch files.

High-Level Capabilities

  • Dynamic Orchestration: Spawn nodes or include other launch files based on external configuration.
  • Composition over Coding: Define your entire ROS system in simple YAML.
  • Streamlined Workflow: Use the launch.sh wrapper or native ROS 2 launch arguments.
  • Auto-Abort Protection: Optionally shut down the entire launch tree if any critical node exits (ideal for Docker/CI).
  • Global Parameters: Inject a shared parameter file into all nodes launched within a configuration.
  • Path Placeholders: Use //PKGSHARE/ (current node package) or //PKGSHARE:pkg/ to dynamically resolve ROS 2 package share directories in parameters and arguments.
  • Environment Substitution: Support for shell-like ${VAR} or ${VAR:-default} syntax in all configuration fields and relevant launch arguments.

Native ROS 2 Usage (Preferred)

You can call the launch file directly using standard ROS 2 launch arguments:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml

To pass an optional global node parameter file:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml config_nodes:=node_params.yaml

Note: You can also use the environment variable BOB_LAUNCH_CONFIG=./my_config.yaml as an alternative to the config:= argument.

Fast Execution: launch.sh

The launch.sh script is a convenient wrapper that simplifies execution by handling environment variables and temporary file management for you.

1. Launch from a file

ros2 run bob_launch launch.sh my_config.yaml

2. Launch with a global parameter file

ros2 run bob_launch launch.sh my_config.yaml global_params.yaml

3. Launch from a JSON config file

ros2 run bob_launch launch.sh my_config.json

Advanced Usage

bob_launch is designed to be highly scriptable, making it an ideal tool for AI Agents needing to spawn ROS components on the fly.

Pipe a String Directly (Dynamic Spawning)

An agent can generate a YAML string and pipe it directly to the launcher without creating a persistent file:

echo "- name: talker
  package: demo_nodes_cpp
  executable: talker" | ros2 run bob_launch launch.sh

Multi-File Composition

You can quickly composite different system “layers” (e.g., base drivers + perception + mission logic) by concatenating files into the pipe:

cat base_robot.yaml nav2_stack.yaml custom_logic.yaml | ros2 run bob_launch launch.sh

Dynamic Substitution & Placeholders

bob_launch supports powerful dynamic string substitution in all configuration fields and launcher arguments (like config:= and config_nodes:=).

Environment Variables (${VAR})

Supports shell-like syntax for dynamic values:

  • ${MYVAR}: Replaces with the value or an empty string.
  • ${MYVAR:-/default/path/}: Replaces with the value or the specified default if unset.

Path Placeholders (//PKGSHARE)

Avoid hardcoded absolute paths by dynamically resolving ROS 2 package share directories:

  • //PKGSHARE/: Resolves to the share directory of the package defined for the current entity (implicit).
  • //PKGSHARE:pkg_name/: Resolves to the share directory of pkg_name (explicit).

Combination & CLI Usage

These mechanisms can be combined and even used directly in the ros2 launch command arguments:

ros2 launch bob_launch generic.launch.py \
  config:='//PKGSHARE:my_pkg/config/${ROBOT_ENV:-dev}.yaml'

To disable environment substitution, set BOB_SUBSTITUTE_ENV_VARS=0.

Configuration Schema

Spawning Nodes

```yaml

  • name: usb_cam # Optional: defaults to executable_name + random suffix package: usb_cam executable: usb_cam_node_exe arguments: # Optional: list of CLI arguments
    • –ros-args

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.
Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~
No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

bob_launch repository

bob_launch

ROS Distro
humble

Repository Summary

Description
Checkout URI https://github.com/bob-ros2/bob_launch.git
VCS Type git
VCS Version main
Last Updated 2026-03-28
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
bob_launch 1.0.1

README

ROS Package bob_launch

ROS 2 CI License

bob_launch is a powerful meta-launcher for ROS 2 that enables dynamic system orchestration using YAML or JSON configuration files. It allows you to define, compose, and launch complex ROS 2 graphs without writing boilerplate Python launch files.

High-Level Capabilities

  • Dynamic Orchestration: Spawn nodes or include other launch files based on external configuration.
  • Composition over Coding: Define your entire ROS system in simple YAML.
  • Streamlined Workflow: Use the launch.sh wrapper or native ROS 2 launch arguments.
  • Auto-Abort Protection: Optionally shut down the entire launch tree if any critical node exits (ideal for Docker/CI).
  • Global Parameters: Inject a shared parameter file into all nodes launched within a configuration.
  • Path Placeholders: Use //PKGSHARE/ (current node package) or //PKGSHARE:pkg/ to dynamically resolve ROS 2 package share directories in parameters and arguments.
  • Environment Substitution: Support for shell-like ${VAR} or ${VAR:-default} syntax in all configuration fields and relevant launch arguments.

Native ROS 2 Usage (Preferred)

You can call the launch file directly using standard ROS 2 launch arguments:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml

To pass an optional global node parameter file:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml config_nodes:=node_params.yaml

Note: You can also use the environment variable BOB_LAUNCH_CONFIG=./my_config.yaml as an alternative to the config:= argument.

Fast Execution: launch.sh

The launch.sh script is a convenient wrapper that simplifies execution by handling environment variables and temporary file management for you.

1. Launch from a file

ros2 run bob_launch launch.sh my_config.yaml

2. Launch with a global parameter file

ros2 run bob_launch launch.sh my_config.yaml global_params.yaml

3. Launch from a JSON config file

ros2 run bob_launch launch.sh my_config.json

Advanced Usage

bob_launch is designed to be highly scriptable, making it an ideal tool for AI Agents needing to spawn ROS components on the fly.

Pipe a String Directly (Dynamic Spawning)

An agent can generate a YAML string and pipe it directly to the launcher without creating a persistent file:

echo "- name: talker
  package: demo_nodes_cpp
  executable: talker" | ros2 run bob_launch launch.sh

Multi-File Composition

You can quickly composite different system “layers” (e.g., base drivers + perception + mission logic) by concatenating files into the pipe:

cat base_robot.yaml nav2_stack.yaml custom_logic.yaml | ros2 run bob_launch launch.sh

Dynamic Substitution & Placeholders

bob_launch supports powerful dynamic string substitution in all configuration fields and launcher arguments (like config:= and config_nodes:=).

Environment Variables (${VAR})

Supports shell-like syntax for dynamic values:

  • ${MYVAR}: Replaces with the value or an empty string.
  • ${MYVAR:-/default/path/}: Replaces with the value or the specified default if unset.

Path Placeholders (//PKGSHARE)

Avoid hardcoded absolute paths by dynamically resolving ROS 2 package share directories:

  • //PKGSHARE/: Resolves to the share directory of the package defined for the current entity (implicit).
  • //PKGSHARE:pkg_name/: Resolves to the share directory of pkg_name (explicit).

Combination & CLI Usage

These mechanisms can be combined and even used directly in the ros2 launch command arguments:

ros2 launch bob_launch generic.launch.py \
  config:='//PKGSHARE:my_pkg/config/${ROBOT_ENV:-dev}.yaml'

To disable environment substitution, set BOB_SUBSTITUTE_ENV_VARS=0.

Configuration Schema

Spawning Nodes

```yaml

  • name: usb_cam # Optional: defaults to executable_name + random suffix package: usb_cam executable: usb_cam_node_exe arguments: # Optional: list of CLI arguments
    • –ros-args

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.
Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~
No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

bob_launch repository

bob_launch

ROS Distro
humble

Repository Summary

Description
Checkout URI https://github.com/bob-ros2/bob_launch.git
VCS Type git
VCS Version main
Last Updated 2026-03-28
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
bob_launch 1.0.1

README

ROS Package bob_launch

ROS 2 CI License

bob_launch is a powerful meta-launcher for ROS 2 that enables dynamic system orchestration using YAML or JSON configuration files. It allows you to define, compose, and launch complex ROS 2 graphs without writing boilerplate Python launch files.

High-Level Capabilities

  • Dynamic Orchestration: Spawn nodes or include other launch files based on external configuration.
  • Composition over Coding: Define your entire ROS system in simple YAML.
  • Streamlined Workflow: Use the launch.sh wrapper or native ROS 2 launch arguments.
  • Auto-Abort Protection: Optionally shut down the entire launch tree if any critical node exits (ideal for Docker/CI).
  • Global Parameters: Inject a shared parameter file into all nodes launched within a configuration.
  • Path Placeholders: Use //PKGSHARE/ (current node package) or //PKGSHARE:pkg/ to dynamically resolve ROS 2 package share directories in parameters and arguments.
  • Environment Substitution: Support for shell-like ${VAR} or ${VAR:-default} syntax in all configuration fields and relevant launch arguments.

Native ROS 2 Usage (Preferred)

You can call the launch file directly using standard ROS 2 launch arguments:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml

To pass an optional global node parameter file:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml config_nodes:=node_params.yaml

Note: You can also use the environment variable BOB_LAUNCH_CONFIG=./my_config.yaml as an alternative to the config:= argument.

Fast Execution: launch.sh

The launch.sh script is a convenient wrapper that simplifies execution by handling environment variables and temporary file management for you.

1. Launch from a file

ros2 run bob_launch launch.sh my_config.yaml

2. Launch with a global parameter file

ros2 run bob_launch launch.sh my_config.yaml global_params.yaml

3. Launch from a JSON config file

ros2 run bob_launch launch.sh my_config.json

Advanced Usage

bob_launch is designed to be highly scriptable, making it an ideal tool for AI Agents needing to spawn ROS components on the fly.

Pipe a String Directly (Dynamic Spawning)

An agent can generate a YAML string and pipe it directly to the launcher without creating a persistent file:

echo "- name: talker
  package: demo_nodes_cpp
  executable: talker" | ros2 run bob_launch launch.sh

Multi-File Composition

You can quickly composite different system “layers” (e.g., base drivers + perception + mission logic) by concatenating files into the pipe:

cat base_robot.yaml nav2_stack.yaml custom_logic.yaml | ros2 run bob_launch launch.sh

Dynamic Substitution & Placeholders

bob_launch supports powerful dynamic string substitution in all configuration fields and launcher arguments (like config:= and config_nodes:=).

Environment Variables (${VAR})

Supports shell-like syntax for dynamic values:

  • ${MYVAR}: Replaces with the value or an empty string.
  • ${MYVAR:-/default/path/}: Replaces with the value or the specified default if unset.

Path Placeholders (//PKGSHARE)

Avoid hardcoded absolute paths by dynamically resolving ROS 2 package share directories:

  • //PKGSHARE/: Resolves to the share directory of the package defined for the current entity (implicit).
  • //PKGSHARE:pkg_name/: Resolves to the share directory of pkg_name (explicit).

Combination & CLI Usage

These mechanisms can be combined and even used directly in the ros2 launch command arguments:

ros2 launch bob_launch generic.launch.py \
  config:='//PKGSHARE:my_pkg/config/${ROBOT_ENV:-dev}.yaml'

To disable environment substitution, set BOB_SUBSTITUTE_ENV_VARS=0.

Configuration Schema

Spawning Nodes

```yaml

  • name: usb_cam # Optional: defaults to executable_name + random suffix package: usb_cam executable: usb_cam_node_exe arguments: # Optional: list of CLI arguments
    • –ros-args

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.
Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~
No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

bob_launch repository

bob_launch

ROS Distro
humble

Repository Summary

Description
Checkout URI https://github.com/bob-ros2/bob_launch.git
VCS Type git
VCS Version main
Last Updated 2026-03-28
Dev Status MAINTAINED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
bob_launch 1.0.1

README

ROS Package bob_launch

ROS 2 CI License

bob_launch is a powerful meta-launcher for ROS 2 that enables dynamic system orchestration using YAML or JSON configuration files. It allows you to define, compose, and launch complex ROS 2 graphs without writing boilerplate Python launch files.

High-Level Capabilities

  • Dynamic Orchestration: Spawn nodes or include other launch files based on external configuration.
  • Composition over Coding: Define your entire ROS system in simple YAML.
  • Streamlined Workflow: Use the launch.sh wrapper or native ROS 2 launch arguments.
  • Auto-Abort Protection: Optionally shut down the entire launch tree if any critical node exits (ideal for Docker/CI).
  • Global Parameters: Inject a shared parameter file into all nodes launched within a configuration.
  • Path Placeholders: Use //PKGSHARE/ (current node package) or //PKGSHARE:pkg/ to dynamically resolve ROS 2 package share directories in parameters and arguments.
  • Environment Substitution: Support for shell-like ${VAR} or ${VAR:-default} syntax in all configuration fields and relevant launch arguments.

Native ROS 2 Usage (Preferred)

You can call the launch file directly using standard ROS 2 launch arguments:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml

To pass an optional global node parameter file:

ros2 launch bob_launch generic.launch.py config:=my_config.yaml config_nodes:=node_params.yaml

Note: You can also use the environment variable BOB_LAUNCH_CONFIG=./my_config.yaml as an alternative to the config:= argument.

Fast Execution: launch.sh

The launch.sh script is a convenient wrapper that simplifies execution by handling environment variables and temporary file management for you.

1. Launch from a file

ros2 run bob_launch launch.sh my_config.yaml

2. Launch with a global parameter file

ros2 run bob_launch launch.sh my_config.yaml global_params.yaml

3. Launch from a JSON config file

ros2 run bob_launch launch.sh my_config.json

Advanced Usage

bob_launch is designed to be highly scriptable, making it an ideal tool for AI Agents needing to spawn ROS components on the fly.

Pipe a String Directly (Dynamic Spawning)

An agent can generate a YAML string and pipe it directly to the launcher without creating a persistent file:

echo "- name: talker
  package: demo_nodes_cpp
  executable: talker" | ros2 run bob_launch launch.sh

Multi-File Composition

You can quickly composite different system “layers” (e.g., base drivers + perception + mission logic) by concatenating files into the pipe:

cat base_robot.yaml nav2_stack.yaml custom_logic.yaml | ros2 run bob_launch launch.sh

Dynamic Substitution & Placeholders

bob_launch supports powerful dynamic string substitution in all configuration fields and launcher arguments (like config:= and config_nodes:=).

Environment Variables (${VAR})

Supports shell-like syntax for dynamic values:

  • ${MYVAR}: Replaces with the value or an empty string.
  • ${MYVAR:-/default/path/}: Replaces with the value or the specified default if unset.

Path Placeholders (//PKGSHARE)

Avoid hardcoded absolute paths by dynamically resolving ROS 2 package share directories:

  • //PKGSHARE/: Resolves to the share directory of the package defined for the current entity (implicit).
  • //PKGSHARE:pkg_name/: Resolves to the share directory of pkg_name (explicit).

Combination & CLI Usage

These mechanisms can be combined and even used directly in the ros2 launch command arguments:

ros2 launch bob_launch generic.launch.py \
  config:='//PKGSHARE:my_pkg/config/${ROBOT_ENV:-dev}.yaml'

To disable environment substitution, set BOB_SUBSTITUTE_ENV_VARS=0.

Configuration Schema

Spawning Nodes

```yaml

  • name: usb_cam # Optional: defaults to executable_name + random suffix package: usb_cam executable: usb_cam_node_exe arguments: # Optional: list of CLI arguments
    • –ros-args

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.
Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~