Configure an application to launch at start-up

Pre-requisites

Adding your own application to the Module Manager

In addition to the system applications, you can easily add your own custom modules to the Module Manager. To do so, register the new module in the CMakeLists.txt of a ROS package. For example, if you have a package called hello_world, with a node called hello_world_node, you can add the following lines to the CMakeLists.txt:

find_package(pal_module_cmake QUIET)

if(pal_module_cmake_FOUND)
   pal_register_modules(
      module/hello_world.yaml
   )
endif()

The module file hello_world.yaml should be placed in the module/ directory of the package would look something like this:

hello_world:
  run: "hello_world hello_world_node"

Then, you can deploy the package to the robot as described in Deploying ROS 2 packages on your robot. After a reboot of the robot the module is available and can be started using the command pal module start hello_world.

Adding your own application to the startup sequence of the robot

To start the module at startup a module set has to be created. To do so, register a new module set in the CMakeLists.txt of hello_world ROS package:

if(pal_module_cmake_FOUND)
   pal_register_module_sets(
      module/custom_module_set.yaml
   )
endif()

The module file custom_module_set.yaml should be placed in the module/ directory of the package would look something like this:

custom_modules:
   - hello_world

Then, you can deploy the package to the robot as described in Deploying ROS 2 packages on your robot. After a reboot of the robot the module hello_world start automatically.

Customizing an existing application in the startup sequence of the robot

To customize an existing application in the startup sequence of the robot, you can create a new module that overwrites the existing module. To do so, first retrieve the filename of the existing module by running the command pal module info foo_module. In this example the filename is 00_foo_module.yaml.

Then, register a new module in the CMakeLists.txt of a ROS package. The new module file should be placed in the module/ directory of the package and would look something like this:

foo_module:
  run: "foo_package different_node"

The Module Manager will sort all registered modules based on their filename in lexicographical order. This means to overwrite the existing module in 00_foo_module.yaml we have to register the new module in a file with a name that comes after 00_foo_module.yaml, for example 10_foo_module.yaml.

Note

The registered modules are sorted based on the filename in lexicographical order. Take this into account when naming the file of the module. A module file named 00_foo_module.yaml will be overwritten by a module file named 10_foo_module.yaml. To overwrite the module bar_module.yaml the new module file should be named bar_module_01.yaml.

Finally, deploy the package to the robot as described in Deploying ROS 2 packages on your robot. After a reboot of the robot the updated version of the foo_module is used. To check this run the command pal module info foo_module.

Disable an existing application in the startup sequence of the robot

To disable a module in the startup sequence of the robot, you can use the command line interface of the Module Manager.

  • To disable a module, run the command pal module disable foo_module.

  • To enable a module, run the command pal module enable foo_module.

Then, in order to apply the changes you have to restart the startup sequence of the robot by running the command pal module_manager restart.

See also