Package Summary

Tags No category tags.
Version 1.3.0
License Apache License 2.0
Build type CATKIN

Repository Summary

Checkout URI
VCS Type git
VCS Version noetic-devel
Last Updated 2023-07-06
CI status No Continuous Integration
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

A package that performs different types of coverage with unmanned aerial vehicles (UAVs).

Additional Links


  • Micha Sende


  • Micha Sende


Build Status

This package performs different types of coverage with unmanned aerial vehicles (UAVs). It is part of the swarm behaviors library.


This package depends on the following message definitions: * geometry_msgs * cpswarm_msgs

The following library packages of the swarm behaviors library are required: * swarm_behaviors_flocking * swarm_behaviors_position * swarm_behaviors_velocity

The following packages of the swarm functions library are required: * target_monitor (only if single_target=true or help_range_max>0) * coverage_path (only if behavior=flocking or behavior=systematic)

The following packages of the sensing and actuation library are required: * area_provider (only if behavior=random) * obstacle_detection (only if behavior=random) * *_pos_provider (only if help_range_max>0)

Further required packages are: * roscpp * actionlib * random_numbers


Run the launch file

roslaunch uav_coverage uav_coverage.launch

to launch the uav_coverage node.

The launch file can be configured with following parameters: * id (integer, default: 1) The identifier (ID) of the CPS used for name spacing in simulation. * output (string, default: screen) Whether to show the program output (screen) or to write it to a log file (log). * behavior (string) The behavior to use for coverage. See below for more details.

In the param subdirectory there is the parameter file uav_coverage.yaml that allows to configure the behavior of the uav_coverage node.



The uav_coverage lets a swarm of UAVs cover the environment. It provides an action server that has three outcomes: succeeded, preempted, or aborted. When the parameter single_target is set to true, the coverage succeeds once a target has been found and returns the target ID and position. When the parameter help_range_max is greater than zero, the coverage is preempted based on a certain probability when help calls from other CPSs are received. This probability is calculates as

if d < help_range_min:
  p = 1
  p = exp(2 ⋅ log(0.5) ⋅ t ⋅ (d - help_range_min) / help_range_max)

where d ist the distance between the UAV and the target and t is the relative time that help is required. It is calculated as

time_need > 0:
  t = time_avail / time_need
  t = 1

where time_avail is the remaining time that the calling CPS can still work without help and time_need is the remaining time that is needed for the help.

The coverage is performed either individually or cooperatively by employing one of the following algorithms: * Flocking: The UAVs move in a flock through the environment following the rules of cohesion, alignment, and repulsion. The flock sweeps the environment using simple back and forth (boustrophedon) motion. Once the environment has been sweeped completely, the UAVs abort the coverage. The coverage path generation is provided by the swarm functions library. * Spiral: A single UAV performs coverage locally around its current position. This is achieved by generating a spiral movement pattern according to the circle involute. The shape of the circle involute is computed based on the characteristics of the camera of the UAV. It is computed in such a way that a downward facing camera completely covers the area around the current position of the UAV. The UAV follows this path for a predefined number of steps and then aborts the coverage. * Random: The UAVs perform coverage using the random direction algorithm. The random direction is a mathematical movement model, where an agent moves straight forward until it reaches an obstacle or the environment boundary. There, it changes its direction randomly into a direction that is clear of obstacles. The random algorithm does not abort automatically. * Systematic: The UAVs perform coverage cooperatively. The environment to be covered is divided among the UAVs to avoid overlapping regions to be covered multiple times. Within each region, the assigned UAV sweeps the environment using simple back and forth (boustrophedon) motion. Once the region has been sweeped completely, it aborts the coverage. The area division and coverage path generation are provided by the swarm functions library.

Action Goal

  • uav_coverage/goal (cpswarm_msgs/CoverageGoal) A goal that starts the random direction coverage behavior. It contains the altitude at which to operate.

Action Result

Subscribed Topics

  • target_found (cpswarm_msgs/TargetPositionEvent) Position and ID of a target detected by the target monitor. Only subscribed if single_target=true.
  • target_help (cpswarm_msgs/TargetHelp) Position, ID, and required time of a target where help is needed by another CPS. Only subscribed if help_range_max>0.
  • pos_provider/pose (geometry_msgs/PoseStamped) Position of this UAV. Only subscribed if help_range_max>0.

Services Called

  • coverage_path/waypoint (cpswarm_msgs/GetWaypoint) Get the current waypoint to navigate to. Only called if behavior=flocking or behavior=systematic.
  • area/get_area (cpswarm_msgs/GetPoints) Get the area polygon. Only called if behavior=random.
  • obstacle_detection/get_clear_sector (cpswarm_msgs/GetSector) Get the circular sector that is clear of obstacles. Only called if behavior=random.


  • ~loop_rate (real, default: 5.0) The frequency in Hz at which to run the control loops.
  • ~queue_size (integer, default: 1) The size of the message queue used for publishing and subscribing to topics.
  • ~single_target (boolean, default: true) Whether the algorithm will succeed / terminate once a target has been found.
  • ~help_range_max (real, default: 0.0) The distance in meter within which help calls of other CPSs are considered.
  • ~help_range_min (real, default: 0.0) The distance in meter below which help calls of other CPSs are answered for sure.
  • ~flocking/flock_vel (real, default: 0.5) Target velocity of the flock in meter per second.
  • ~spiral/fov_hor (real, default: 1.236) Horizontal camera field of view in radian. It is used to compute the path of the UAV.
  • ~spiral/fov_ver (real, default: 0.970) Vertical camera field of view in radian. It is used to compute the path of the UAV.
  • ~spiral/steps (integer, default: 20) Number of steps to do in the spiral coverage behavior.
  • ~random/margin (real, default: 0.5) The distance in meter to keep to the environment boundary.
  • ~random/max_tries (integer, default: 10) The maximum number of tries for finding a new goal in a random direction until giving up.
  • /rng_seed (integer, default: 0) The seed used for random number generation. In the default case, a random seed is generated.

Code API

uav_coverage package code API documentation


Changelog for package uav_random_direction

1.3.0 (2020-01-03)

1.2.0 (2019-12-29)

  • Changed: Refactor library structure
  • Changed: UAVs depart in different directions
  • Changed: Read RNG seed from parameter, use random seed otherwise
  • Changed: Return state aborted once coverage finishes
  • Changed: Check if movement was successful
  • Changed: Targets handled by swarm functions library
  • Fixed: Change direction when obstacle detected
  • Fixed: Correctly handle state of behavior algorithm
  • Fixed: Force C++11
  • Fixed: Returning of target
  • Contributors: Micha Sende

1.1.0 (2018-11-12)

  • Fixed: Computation of sector occupied by obstacles and other UAVs
  • Contributors: Micha Sende

1.0.0 (2018-10-30)

  • Initial release of uav_random_direction
  • Contributors: Micha Sende

Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Launch files


No message files found.


No service files found


No plugins found.

Recent questions tagged uav_coverage at