Skip to content

Catalog of behavior tasks

Martin Molina edited this page Jun 4, 2021 · 10 revisions

This catalog shows the available behavior tasks of Aerostack that can be used in a mission. In general, the particular task performed by a behavior (e.g., FOLLOW_PATH) can be performed by different methods (e.g., using PID motion control or MPC motion control). This page presents the list of behaviors according to the tasks that they perform:

It is important to note that there are two types of behaviors:

  • Goal-based behaviors. These behaviors are defined to reach a final state (attain a goal). For example, the task TAKE_OFF ends when the drone has reached a certain height.

  • Recurrent behaviors. These behaviors perform an activity recurrently or maintain a desired state (for example, the task PAY_ATTENTION_TO_QR_CODES).

Motion tasks

TAKE_OFF

Description: The robot takes off vertically from a static surface. This task ends when the robot reaches a default altitude.

Type: Goal-based.

LAND

Description: The robot lands vertically in the current position.

WAIT

Description: The robot waits until a certain condition is satisfied (e.g., duration). During this time the running tasks are not stopped.

Type: Goal-based.

Arguments Format Example
duration number(seconds) duration: 30

HOVER

Description: The robot keeps hovering. Hovering is a maneuver in which the robot is maintained in nearly motionless flight over a reference point at a constant altitude and on a constant heading. This task does not avoid moving obstacles.

Type: Recurrent.

MOVE_VERTICAL

Description: The robot moves vertically a given distance. If the distance is positive, the robot moves upward. If the distance is negative, the robot moves downwards.

Type: Goal-based.

Arguments Format Example
distance number (meters) distance: 1.5

MOVE_AT_SPEED

Description: The robot keeps moving at a constant speed in some direction (forward, backward, left,right). If the speed value is not given a default value is considered (the maximum speed). This task does not avoid obstacles.

Type: Recurrent.

Arguments Format Example
direction {FORWARD, BACKWARD, LEFT, RIGHT} direction: FORWARD
speed number (m/sec) speed: 0.8

ROTATE

Description: The robot rotates left or right a certain number of degrees (angle) on the vertical axis (yaw). The number of degrees can be expressed as an absolute value (argument “angle”) or relative to the robot (argument “relative_angle”).

Type: Goal-based.

Arguments Format Example
angle number (degrees) angle: 90
relative_angle number (degrees) relative_angle: 90

FOLLOW_PATH

Description: The robot tries to follow a path that is defined as a sequence of points. The robot assumes that there are not moving or unknown obstacles. When the parameter yaw has the value path_facing, the drone changes its yaw angle in order to face the next point (this is the value by default). If the parameter yaw is constant, the same yaw angle is maintained during the trajectory.

Type: Goal-based.

Parameters Format Example
path: sequence of 3D points (x,y,z) in meters path: [ [1.1,1.1,0.7], [2.2,2.2,0.7], [3.3,3.3,2.5] ]
yaw: allowed values {constant, path_facing} yaw: constant

Navigation tasks

GENERATE_PATH

Description: The robot generates a path free of obstacles between the current position of the robot and the given destination. The result of this behavior is stored in the belief memory in the predicates: object(X, path) and path(X, Y), where Y is a list of 3D points. For example: object(32, path), path(32, ((1.1,1.1,0.7), (2.2,2.2,0.7), (3.3,3.3,0.7))). Note that the height value of each point (z value) is a constant value because the path is planned on a horizontal surface.

Type: Goal-based.

Arguments Format Example
destination Tuple of 3 numbers x, y, z (meters) destination: [3.3,3.3,3.3]

CLEAR_OCCUPANCY_GRID

Description: This behavior clears the map represented as occupancy grid.

Type: Goal-based.

SAVE_OCCUPANCY_GRID

Description: This behavior saves the map represented as an occupancy grid. Two new files are created: $AEROSTACK_PROJECT/maps/my_map.yaml (with parameters defining the map) and $AEROSTACK_PROJECT/maps/my_map.pgm (map image).

Type: Goal-based.

Arguments Format Example
map_name string map_name: "$AEROSTACK_PROJECT/maps/my_map"

Tasks for attention control

PAY_ATTENTION_TO_QR_CODES

Description: The robot pays attention to QR codes. Each recognized code is stored as a belief with the following format: object(X, qr_code), code(X, Y), visible(X) where X is the object identifier (generated automatically) and Y is the recognized QR code (string). The predicate visible(X) is deleted when the QR code is not observed. We assume that the objects with QR codes are static (they don't move in the environment). We assume that there are not different objects with the same QR code.

Type: Recurrent.

PAY_ATTENTION_TO_ROBOT_MESSAGES

Description: The robot pays attention to messages sent by other robots. When the name of the message's receiver is the name of the own robot (or when there are messages from another robot broadcasted to all robots such as its position), the message is added to the belief memory of the own robot.

Type: Recurrent

Tasks for communication

INFORM_OPERATOR

Description: This behavior presents through a pop-up window a text message that the robot sends to the operator.

Type: Goal-based.

Name Format Example
message String with the message to show message: "Sensors detect a low level of light intensity in the environment where the aerial robot is flying."

REQUEST_OPERATOR_ASSISTANCE

Description: This behavior shows a pop-up window with a question for the operator and several options to be selected as the answer. The robot will save the selected answer in the belief memory. For instance, in the example presented below, the predicates saved in the belief memory are: object(7,light), intensity(7, adequate). In this example, the object identifier (number 7) is automatically generated by the task.

Type: Goal-based.

Name Format Example
question String with the question for the operator question: "What is the level of light intensity in the environment where the aerial robot is flying?"
predicate String with the name of the predicate to be saved in the belief memory predicate: "intensity"
object String with the name of the object to be saved in the belief memory belief_predicate_name: "light"
options Array of strings with the possible answers to the question options: ["too_low","adequate","too_high"]

INFORM_ROBOTS

Description: The robot sends a text message to another robot. The other robot must have activated the task PAY_ATTENTION_TO_ROBOT_MESSAGES. The text message is an alphanumeric string without spaces. If a message is sent by drone110 to the receiver "drone120" and message "found_item_01", the belief memory of drone120 will include the following predicates in its belief memory:

  • object(7, drone)
  • name(7, drone110)
  • object(9, message)
  • sender(9, 7)
  • content(9, found_item_01)

Type: Goal-based.

Arguments Format Example
receiver String with the name of the receiver receiver: "drone120"
message String with the text of the message message: "found_item_01"

INFORM_POSITION_TO_ROBOTS

Description: The robot broadcasts its position to the rest of robots. The other robots must have activated the task PAY_ATTENTION_TO_ROBOT_MESSAGES to receive this information. If the position of drone110 is informed to other robots, another robot (like drone120) will include the following predicates in its belief memory:

  • object(7, drone)
  • name(7, drone110)
  • position (7, (0.7, 3.2, 5.4))

Type: Recurrent.