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

Package Summary

A package that generates an optimal path to cover a given area with a cyber physical system (CPS).

  • 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 https://github.com/cpswarm/swarm_functions.git (branch: kinetic-devel)

Dependencies

This package depends on the following message definitions:

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

The following packages of the swarm functions library are required:

  • area_division
  • state_exchanger

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

  • *_pos_provider

Further required packages are:

Execution

Run the launch file

roslaunch coverage_path coverage_path.launch

to launch the coverage_path 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 coverage_path.yaml that allows to configure the behavior of the coverage_path node.

Nodes

coverage_path

The coverage_path node generates a path that allows a CPS to cover a given area. It uses the area assigned by the area_division package. The generated coverage path is based on a minimum spanning tree to optimally sweep the area. The path is regenerated when area to be covered changes. The path can be retrieved either as a whole or waypoint after waypoint. In the latter case, the current waypoint is returned, based on the current position of the CPS.

Subscribed Topics

area/assigned (nav_msgs/OccupancyGrid)
  • The area to be covered by this CPS. Only called if divide_area=true.
area/map (nav_msgs/OccupancyGrid)
  • The area to be covered. Only called if divide_area=false.

Published Topics

coverage_path/path (nav_msgs/Path)
  • The generated path for visualization purposes. Only published if the parameter visualize is set to true.
coverage_path/waypoint (geometry_msgs/PointStamped)
  • The current waypoint of the generated path for visualization purposes. Only published if the parameter visualize is set to true.
coverage_path/mst (geometry_msgs/PoseArray)
  • The minimum spanning tree of the area for visualization purposes. Only published if the parameter visualize is set to true.

Services

coverage_path/path (nav_msgs/GetPlan)
  • Provides the complete generated path.
coverage_path/waypoint (cpswarm_msgs/GetWaypoint)
  • Provides the current waypoint of the generated path.

Services Called

area/get_area (cpswarm_msgs/GetPoints)
  • Get the points defining the polygon of the area to be covered.

Parameters

~loop_rate (real, default: 1.5)
  • 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.
~resolution (real, default: 1.0)
  • The grid map underlying the path planning will be downsampled to this resolution in meter / cell.
~visualize (boolean, default: false)
  • Whether to publish the coverage path on a topic for visualization.
~divide_area (boolean, default: false)
  • Whether to divide the area among the CPSs before generating the path or to generate the path on the complete map. If true, downsampling is not available.
~vertical (boolean, default: false)
  • Whether the sweeping pattern is vertical or horizontal.
~turning_points (boolean, default: false)
  • Whether there are only waypoints at turning points of the path or also waypoints regularly spaced on straight line segments of the path.

Acknowledgements

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

Wiki: coverage_path (last edited 2020-03-04 14:53:06 by MichaSende)