This page has moved to

Click here if you are not redirected.


An application can be written to run as either a task (a module with its own stack and process priority) or as a work queue task (a module that runs on a work queue thread, sharing the stack and thread priorit with other tasks on the work queue). In most cases a work queue task can be used, as this minimizes resource usage.

Architectural Overview > Runtime Environment provides more information about tasks and work queue tasks.

All the things learned in the First Application Tutorial are relevant for writing a full application.

Work Queue Task

PX4-Autopilot contains a template for writing a new application (module) that runs as a work queue task: src/examples/work_item.

A work queue task application is just the same as an ordinary (task) application, except that it needs to specify that it is a work queue task, and schedule itself to run during initialisation.

The example shows how. In summary:

  1. Specify the dependency on the work queue library in the cmake definition file (CMakeLists.txt):

  2. In addition to ModuleBase, the task should also derive from ScheduledWorkItem (included from ScheduledWorkItem.hpp)

  3. Specify the queue to add the task to in the constructor initialisation. The work_item example adds itself to the wq_configurations::test1 work queue as shown below:

     WorkItemExample::WorkItemExample() :
        ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::test1)

    The available work queues (wq_configurations) are listed in WorkQueueManager.hpp.

  4. Implement the ScheduledWorkItem::Run() method to perform "work".

  5. Implement the task_spawn method, specifying that the task is a work queue (using the task_id_is_work_queue id.

  6. Schedule the work queue task using one of the scheduling methods (in the example we use ScheduleOnInterval from within the init method).


PX4/PX4-Autopilot contains a template for writing a new application (module) that runs as a task on its own stack: src/templates/template_module.

The template demonstrates the following additional features/aspects that are required or are useful for a full application:

  • 访问参数并对参数更新做出反应。
  • 订阅、等待 topic 更新。
  • 通过 start/stop/status 控制后台运行的任务。 module start [<arguments>] 命令可以直接加入 启动脚本 中。
  • 命令行参数解析。
  • Documentation: the PRINT_MODULE_* methods serve two purposes (the API is documented in the source code):
    • 它们可用于在控制台键入 module help 指令后输出命令行指令的用法。
    • 可通过脚本提取该部分内容以自动生成 Modules & Commands Reference 页面。

results matching ""

    No results matching ""