Skip to content

Catalog of behavior tasks

Martin Molina edited this page Oct 7, 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.

Parameters Format Example
altitude number(m) altitude: 4.5
speed number(m/s) speed: 0.5

NOTE: The previous parameters are available when the DF controller is used.

LAND

Description: The robot lands vertically in the current position.

Type: Goal-based.

Parameters Format Example
speed number(m/s) speed: 0.5

NOTE: The previous parameter is available when the DF controller is used.

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.

Parameters 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.

Parameters 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.

Parameters 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 (parameter “angle”) or relative to the robot (parameter “relative_angle”).

Type: Goal-based.

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

FOLLOW_PATH

FOLLOW PATH (Version 1)

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

FOLLOW_PATH (version 2)

Description: The robot tries to follow a path that is received by ROS topics. The robot assumes that there are not moving or unknown obstacles. This version does not have any parameters.

Type: Recurrent.

SEND_PATH

Description: This behavior notifies the path to be followed by a task FOLLOW_PATH (version 2). The notification is done by using ROS topics. 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_mode: allowed values {constant, path_facing} yaw_mode: constant
speed: number (m/s) speed: 0.5

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.

Parameters 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.

Parameters 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_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.

Parameters 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.