Catalog of Behaviors - cvar-upm/aerostack GitHub Wiki
This catalog shows the available robot behaviors 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.
Files/OperatorAssistanceRequest.png
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.