Only released in EOL distros:  

swarm_functions: area_division | coverage_path | kinematics_exchanger | state_exchanger | target_monitor | task_allocation

Package Summary

A package that divides the available environment area among multiple cyber physical systems (CPSs) in a swarm.

  • Maintainer status: developed
  • Maintainer: Micha Sende <sende AT lakeside-labs DOT com>
  • Author: Micha Sende <sende AT lakeside-labs DOT com>
  • License: Apache License 2.0
  • Source: git (branch: kinetic-devel)


This package depends on the following message definitions:

The communication between CPSs is based on the CPSwarm Communication Library.

The following packages of the sensing and actuation library are required:

  • area_provider
  • *_pos_provider
  • *_pos_controller


Run the launch file

roslaunch area_division area_division.launch

to launch the area_division 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).

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



The area_division divides the environment area among multiple CPSs. When this node is running, it listens to area division requests by other CPSs to perform the area division. The division is also triggered when CPS join or leave the swarm or the behavior state of this CPS changes. Once the area division starts, all CPSs that participate in the area division, stop moving, and synchronize in order to achieve the same area division result. The division algorithm is based on the DARP algorithm which tries to divide the area optimally. Each CPS is assigned an equal share of the environment that includes its current position.

Subscribed Topics

state (cpswarm_msgs/StateEvent)
  • The behavior state of this CPS.
swarm_state (cpswarm_msgs/ArrayOfStates)
  • The behaior states of the other CPSs.
pos_provider/pose (geometry_msgs/PoseStamped)
  • The current position of this CPS.
area/map (nav_msgs/OccupancyGrid)
  • The map to be divided.
bridge/uuid (swarmros/String) bridge/events/area_division (cpswarm_msgs/AreaDivisionEvent)

Published Topics

pos_controller/goal_position (geometry_msgs/PoseStamped)
  • The topic for stoping the CPS.
area_division (cpswarm_msgs/AreaDivisionEvent)
  • The topic for requesting area division among the available CPSs in the swarm. The request is forwarded by the CPSwarm Communication Library to the other swarm members.
area/assigned (nav_msgs/OccupancyGrid)
  • The area assigned to this CPS.
area/rotated (nav_msgs/OccupancyGrid)
  • The area to be divided, rotated so the lower boundary is horizontal. For visualization purposes, only published if the parameter visualize is set to true.
area/downsampled (nav_msgs/OccupancyGrid)
  • The area to be divided, downsampled to a lower resolution. For visualization purposes, only published if the parameter visualize is set to true.

Services Called

area/get_rotation (cpswarm_msgs/GetDouble)
  • Get the rotation required to align the lower boundary of the area horizontally.


~loop_rate (real, default: 1.5)
  • The frequency in Hz at which to run the control loops.
~queue_size (integer, default: 10)
  • The size of the message queue used for publishing and subscribing to topics.
~resolution (real, default: 1.0)
  • The grid map underlying the area division will be downsampled to this resolution in meter / cell.
~swarm_timeout (real, default: 5.0)
  • The time in seconds communication in the swarm can be delayed at most. Used to wait after an area division event before starting the area division or time after which it is assumed that a swarm member has left the swarm if no position update has been received.
~visualize (boolean, default: false)
  • Whether to publish the area division on a topic for visualization.
~states (string list, default: [])
  • Only CPSs in these states divide the area among each other.
~/optimizer/iterations (integer, default: 10)
  • Maximum number of iterations of the optimization algorithm.
~/optimizer/variate_weight (real, default: 0.01)
  • Maximum variate weight of connected components.
~/optimizer/discrepancy (integer, default: 30)
  • Maximum difference between number of assigned grid cells to each CPS.


This work is supported by the European Commission through the CPSwarm H2020 project under grant no. 731946.

Wiki: area_division (last edited 2020-03-04 14:48:01 by MichaSende)