Repository Summary
Checkout URI | https://github.com/dfki-ric/better_launch.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-01 |
Dev Status | DEVELOPED |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
Name | Version |
---|---|
better_launch | 1.0.1 |
README
About | Why? | Features | Usage | TUI | Differences | Performance | Installation | ROS2 | Contributors |
[!TIP] Just looking for the documentation? We also have multiple examples!
đ§ About
Letâs face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. Iâve listed my personal gripes below, but if youâre here you likely feel the same. This is why I wrote better_launch.
Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:
from better_launch import BetterLaunch, launch_this
@launch_this(ui=True)
def my_main(enable_x: bool = True):
"""
This is how nice your launch files could be!
"""
bl = BetterLaunch()
if enable_x:
bl.node(
"examples_rclpy_minimal_publisher",
"publisher_local_function",
"example_publisher",
)
# Include other launch files, even regular ROS2 launch files!
bl.include("better_launch", "ros2_turtlesim.launch.py")
$> bl my_package my_launch_file.py --enable_x True
Do I have your attention? Read on to learn more!
đ€ Why not improve the existing ROS2 launch?
Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)
Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.
đ§© Okay, what can I do with it?
Everything you would expect and a little more! The BetterLaunch
instance allows you to
- create subscribers, publishers, services, service clients, action servers and action clients on the fly
- start and stop nodes
- start and stop lifecycle nodes and manage their lifecycle stage
- start and stop composers and load components into them
- organize your nodes in groups
- define hasslefree topic remaps for nodes and groups
- pass any arguments from the command line without having to declare them
- easily load parameters from yaml files
- locate files based on filenames and package names
- use string substitutions to resolve e.g. paths
- include other better_launch launch files
- include other ROS2 launch files
- let regular ROS2 launch files include your better_launch launch files
- configure logging just as you would in ROS2, yet have much more readable output
- manage your node using a nice terminal UI reminiscent of rosmon
For a quick comparison, bravely unfold the sections below:
ROS2
```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/README.md)CONTRIBUTING
Contributing to better_launch
Please inform the maintainer as early as possible about your planned feature developments, extensions, or bugfixes that you are working on. An easy way is to open an issue or a pull request in which you explain what you are trying to do.
Pull Requests
The preferred way to contribute to better_launch is to fork the main repository on GitHub, then submit a âpull requestâ (PR):
-
Create an account on GitHub if you do not already have one.
-
Fork the project repository: click on the âForkâ button near the top of the page. This creates a copy of the code under your account on the GitHub server.
-
Clone this copy to your local disk:
$ git clone git@github.com:dfki-rc/better_launch.git
-
Create a branch to hold your changes:
$ git checkout -b my-feature
and start making changes. Never work in the
master
branch! -
Work on this copy, on your computer, using Git to do the version control. When youâre done editing, do::
$ git add modified_files $ git commit
to record your changes in Git, then push them to GitHub with::
$ git push -u origin my-feature
Finally, go to the web page of the your fork of the bolero repo, and click âPull requestâ to send your changes to the maintainers for review. request.
Merge Policy
Developers have to submit pull requests. Those will be reviewed by at least one other developer and merged by the maintainer. New features must be documented and tested. Breaking changes must be discussed and announced in advance with deprecation warnings.
Roadmap
- a tool for generating launch graphs from better_launch launch files
- more interactions for the TUI like setting live parameters
- a tool for converting regular ROS2 launch files to better_launch. This is a big maybe as it seems quite annoying to do
- who knows :)
Funding
better_launch was initiated and is currently developed at the Robotics Innovation Center of the German Research Center for Artificial Intelligence (DFKI) in Bremen.
Repository Summary
Checkout URI | https://github.com/dfki-ric/better_launch.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-01 |
Dev Status | DEVELOPED |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
Name | Version |
---|---|
better_launch | 1.0.1 |
README
About | Why? | Features | Usage | TUI | Differences | Performance | Installation | ROS2 | Contributors |
[!TIP] Just looking for the documentation? We also have multiple examples!
đ§ About
Letâs face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. Iâve listed my personal gripes below, but if youâre here you likely feel the same. This is why I wrote better_launch.
Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:
from better_launch import BetterLaunch, launch_this
@launch_this(ui=True)
def my_main(enable_x: bool = True):
"""
This is how nice your launch files could be!
"""
bl = BetterLaunch()
if enable_x:
bl.node(
"examples_rclpy_minimal_publisher",
"publisher_local_function",
"example_publisher",
)
# Include other launch files, even regular ROS2 launch files!
bl.include("better_launch", "ros2_turtlesim.launch.py")
$> bl my_package my_launch_file.py --enable_x True
Do I have your attention? Read on to learn more!
đ€ Why not improve the existing ROS2 launch?
Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)
Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.
đ§© Okay, what can I do with it?
Everything you would expect and a little more! The BetterLaunch
instance allows you to
- create subscribers, publishers, services, service clients, action servers and action clients on the fly
- start and stop nodes
- start and stop lifecycle nodes and manage their lifecycle stage
- start and stop composers and load components into them
- organize your nodes in groups
- define hasslefree topic remaps for nodes and groups
- pass any arguments from the command line without having to declare them
- easily load parameters from yaml files
- locate files based on filenames and package names
- use string substitutions to resolve e.g. paths
- include other better_launch launch files
- include other ROS2 launch files
- let regular ROS2 launch files include your better_launch launch files
- configure logging just as you would in ROS2, yet have much more readable output
- manage your node using a nice terminal UI reminiscent of rosmon
For a quick comparison, bravely unfold the sections below:
ROS2
```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/README.md)CONTRIBUTING
Contributing to better_launch
Please inform the maintainer as early as possible about your planned feature developments, extensions, or bugfixes that you are working on. An easy way is to open an issue or a pull request in which you explain what you are trying to do.
Pull Requests
The preferred way to contribute to better_launch is to fork the main repository on GitHub, then submit a âpull requestâ (PR):
-
Create an account on GitHub if you do not already have one.
-
Fork the project repository: click on the âForkâ button near the top of the page. This creates a copy of the code under your account on the GitHub server.
-
Clone this copy to your local disk:
$ git clone git@github.com:dfki-rc/better_launch.git
-
Create a branch to hold your changes:
$ git checkout -b my-feature
and start making changes. Never work in the
master
branch! -
Work on this copy, on your computer, using Git to do the version control. When youâre done editing, do::
$ git add modified_files $ git commit
to record your changes in Git, then push them to GitHub with::
$ git push -u origin my-feature
Finally, go to the web page of the your fork of the bolero repo, and click âPull requestâ to send your changes to the maintainers for review. request.
Merge Policy
Developers have to submit pull requests. Those will be reviewed by at least one other developer and merged by the maintainer. New features must be documented and tested. Breaking changes must be discussed and announced in advance with deprecation warnings.
Roadmap
- a tool for generating launch graphs from better_launch launch files
- more interactions for the TUI like setting live parameters
- a tool for converting regular ROS2 launch files to better_launch. This is a big maybe as it seems quite annoying to do
- who knows :)
Funding
better_launch was initiated and is currently developed at the Robotics Innovation Center of the German Research Center for Artificial Intelligence (DFKI) in Bremen.
Repository Summary
Checkout URI | https://github.com/dfki-ric/better_launch.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-01 |
Dev Status | DEVELOPED |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
Name | Version |
---|---|
better_launch | 1.0.1 |
README
About | Why? | Features | Usage | TUI | Differences | Performance | Installation | ROS2 | Contributors |
[!TIP] Just looking for the documentation? We also have multiple examples!
đ§ About
Letâs face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. Iâve listed my personal gripes below, but if youâre here you likely feel the same. This is why I wrote better_launch.
Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:
from better_launch import BetterLaunch, launch_this
@launch_this(ui=True)
def my_main(enable_x: bool = True):
"""
This is how nice your launch files could be!
"""
bl = BetterLaunch()
if enable_x:
bl.node(
"examples_rclpy_minimal_publisher",
"publisher_local_function",
"example_publisher",
)
# Include other launch files, even regular ROS2 launch files!
bl.include("better_launch", "ros2_turtlesim.launch.py")
$> bl my_package my_launch_file.py --enable_x True
Do I have your attention? Read on to learn more!
đ€ Why not improve the existing ROS2 launch?
Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)
Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.
đ§© Okay, what can I do with it?
Everything you would expect and a little more! The BetterLaunch
instance allows you to
- create subscribers, publishers, services, service clients, action servers and action clients on the fly
- start and stop nodes
- start and stop lifecycle nodes and manage their lifecycle stage
- start and stop composers and load components into them
- organize your nodes in groups
- define hasslefree topic remaps for nodes and groups
- pass any arguments from the command line without having to declare them
- easily load parameters from yaml files
- locate files based on filenames and package names
- use string substitutions to resolve e.g. paths
- include other better_launch launch files
- include other ROS2 launch files
- let regular ROS2 launch files include your better_launch launch files
- configure logging just as you would in ROS2, yet have much more readable output
- manage your node using a nice terminal UI reminiscent of rosmon
For a quick comparison, bravely unfold the sections below:
ROS2
```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/README.md)CONTRIBUTING
Contributing to better_launch
Please inform the maintainer as early as possible about your planned feature developments, extensions, or bugfixes that you are working on. An easy way is to open an issue or a pull request in which you explain what you are trying to do.
Pull Requests
The preferred way to contribute to better_launch is to fork the main repository on GitHub, then submit a âpull requestâ (PR):
-
Create an account on GitHub if you do not already have one.
-
Fork the project repository: click on the âForkâ button near the top of the page. This creates a copy of the code under your account on the GitHub server.
-
Clone this copy to your local disk:
$ git clone git@github.com:dfki-rc/better_launch.git
-
Create a branch to hold your changes:
$ git checkout -b my-feature
and start making changes. Never work in the
master
branch! -
Work on this copy, on your computer, using Git to do the version control. When youâre done editing, do::
$ git add modified_files $ git commit
to record your changes in Git, then push them to GitHub with::
$ git push -u origin my-feature
Finally, go to the web page of the your fork of the bolero repo, and click âPull requestâ to send your changes to the maintainers for review. request.
Merge Policy
Developers have to submit pull requests. Those will be reviewed by at least one other developer and merged by the maintainer. New features must be documented and tested. Breaking changes must be discussed and announced in advance with deprecation warnings.
Roadmap
- a tool for generating launch graphs from better_launch launch files
- more interactions for the TUI like setting live parameters
- a tool for converting regular ROS2 launch files to better_launch. This is a big maybe as it seems quite annoying to do
- who knows :)
Funding
better_launch was initiated and is currently developed at the Robotics Innovation Center of the German Research Center for Artificial Intelligence (DFKI) in Bremen.
Repository Summary
Checkout URI | https://github.com/dfki-ric/better_launch.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-08-01 |
Dev Status | DEVELOPED |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
Name | Version |
---|---|
better_launch | 1.0.1 |
README
About | Why? | Features | Usage | TUI | Differences | Performance | Installation | ROS2 | Contributors |
[!TIP] Just looking for the documentation? We also have multiple examples!
đ§ About
Letâs face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. Iâve listed my personal gripes below, but if youâre here you likely feel the same. This is why I wrote better_launch.
Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:
from better_launch import BetterLaunch, launch_this
@launch_this(ui=True)
def my_main(enable_x: bool = True):
"""
This is how nice your launch files could be!
"""
bl = BetterLaunch()
if enable_x:
bl.node(
"examples_rclpy_minimal_publisher",
"publisher_local_function",
"example_publisher",
)
# Include other launch files, even regular ROS2 launch files!
bl.include("better_launch", "ros2_turtlesim.launch.py")
$> bl my_package my_launch_file.py --enable_x True
Do I have your attention? Read on to learn more!
đ€ Why not improve the existing ROS2 launch?
Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)
Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.
đ§© Okay, what can I do with it?
Everything you would expect and a little more! The BetterLaunch
instance allows you to
- create subscribers, publishers, services, service clients, action servers and action clients on the fly
- start and stop nodes
- start and stop lifecycle nodes and manage their lifecycle stage
- start and stop composers and load components into them
- organize your nodes in groups
- define hasslefree topic remaps for nodes and groups
- pass any arguments from the command line without having to declare them
- easily load parameters from yaml files
- locate files based on filenames and package names
- use string substitutions to resolve e.g. paths
- include other better_launch launch files
- include other ROS2 launch files
- let regular ROS2 launch files include your better_launch launch files
- configure logging just as you would in ROS2, yet have much more readable output
- manage your node using a nice terminal UI reminiscent of rosmon
For a quick comparison, bravely unfold the sections below:
ROS2
```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/README.md)CONTRIBUTING
Contributing to better_launch
Please inform the maintainer as early as possible about your planned feature developments, extensions, or bugfixes that you are working on. An easy way is to open an issue or a pull request in which you explain what you are trying to do.
Pull Requests
The preferred way to contribute to better_launch is to fork the main repository on GitHub, then submit a âpull requestâ (PR):
-
Create an account on GitHub if you do not already have one.
-
Fork the project repository: click on the âForkâ button near the top of the page. This creates a copy of the code under your account on the GitHub server.
-
Clone this copy to your local disk:
$ git clone git@github.com:dfki-rc/better_launch.git
-
Create a branch to hold your changes:
$ git checkout -b my-feature
and start making changes. Never work in the
master
branch! -
Work on this copy, on your computer, using Git to do the version control. When youâre done editing, do::
$ git add modified_files $ git commit
to record your changes in Git, then push them to GitHub with::
$ git push -u origin my-feature
Finally, go to the web page of the your fork of the bolero repo, and click âPull requestâ to send your changes to the maintainers for review. request.
Merge Policy
Developers have to submit pull requests. Those will be reviewed by at least one other developer and merged by the maintainer. New features must be documented and tested. Breaking changes must be discussed and announced in advance with deprecation warnings.
Roadmap
- a tool for generating launch graphs from better_launch launch files
- more interactions for the TUI like setting live parameters
- a tool for converting regular ROS2 launch files to better_launch. This is a big maybe as it seems quite annoying to do
- who knows :)
Funding
better_launch was initiated and is currently developed at the Robotics Innovation Center of the German Research Center for Artificial Intelligence (DFKI) in Bremen.