Skip to content

Overview 2: Task Management

Robert edited this page Apr 4, 2023 · 4 revisions

Conceptual Overview

Task management is all about defining and managing tasks as reusable software modules. The modules can contain arbitrary developer-defined code, but often the benefit of such task modularization is prominent when each module represents a simple self-contained behavior, such as navigation or manipulation. Thus these primitive modules can be joined to form complex tasks, as depicted in Figure 1. Task management is a necessary component for complex robots that operate in dynamic environments as task specifications and requirements can change, both in the long term and throughout the deployment.

Enabling features

Figure 1: Complex tasks can be achieved by combining modular behavior primitives.


It is often optimal to distribute the task between multiple robots for wider area coverage (Figure 2) or for achieving capabilities normally unfeasible by individual robots alone (Figure 3).

Enabling features

Figure 2: A multi-robot task where two light-weight scout robots are responsible for locating an object of interest. When found, the less energy-efficient worker robot can direcly navigate to the object and manipulate it.


Enabling features

Figure 3: Autonomous object delivery task achieved by combining a mobile base and a static manipulator. (video demo)


Task Management in TeMoto

Tasks control the execution flow of the robot. Tasks are made up of individual user-defined and reusable actions (navigation, manipulation, etc) which can implement custom behaviors and request, access, and stop components (sensors, actuators, algorithms) when required.

Each action is described using Unified Meaning Representation Fromat (UMRF), which allows invoking actions via any system or command interface that outputs commands in UMRF (Figure 4). Additionally, UMRF allows describing parent-child relations between actions, thus forming a graph or UMRF graph, which is used to invoke actions in a particular order.

The TeMoto framework provides the tools and API for starting, stopping and re-configuring tasks via the Action Engine. But TeMoto - by design - omits the control of tasks to the developer who utilizes TeMoto. Such control can be further delegated to an automated task planning system. The UMRF can be used to describe tasks in JSON syntax, decoupling the Action Engine specific API from user’s control application.

Enabling features

Figure 4: Task Management pipeline in TeMoto.

Actions

Actions are code modules that embed developer-defined task logic. Actions can accept and provide data, i.e., parameters, which makes an action reusable in different scenarios, e.g., a “navigation” action that accepts the destination coordinates as an input.

TeMoto actions are implemented in C++ and maintained as shared libraries. Each action is accompanied by a JSON file that contains a description in the UMRF notation. The UMRF outlines input and output parameters and other characteristics that define the action behavior. The UMRF description is used to search for actions that fulfill any specific requirements, e.g., an action that is able to perform a specific process on a point cloud and output the result in a correct form.

The Action Engine is a host program that provides dynamic loading and execution of sequential/concurrent actions as well as action loops. Thus a range of tasks can be described and executed by combining primitive and reusable actions. For example, “picking up an object” task can be formed by “locate-object,” “navigate-to,” “move-manipulator-at,” and “grab” actions executed sequentially.


Next: Overview 3 - "Resource Management"

Clone this wiki locally