/DUC

Distributed UAVs Coordinator

Primary LanguageJavaScript

Distributed UAVs Coordinator

DUC is a distributed coordinator system that allows UAVs to communicate each others to preserve connectivity between two or more distant points, using the drones to form a wireless bridge across the points.

The drones are interconnected to form a single line, so that we can assign them an identification number. Each node can communicate only with adjacent nodes.

The output shows a map using Google Maps API v3.

To see DUC in action click here.

Legend

  • Node: an autonomous system
  • Master: a special node that has to reach a prefixed destination
  • Destination: a geographic point that have to be reached by a master

Idea

The main concept behind this project is to adapt Self-Organizing Maps to produce an algorithm that evolves himself through the nodes and not thanks to a central communication unit. That's because SOMs are not distributed, in the sense that to choose the winner at each iteration you have to compute the distance from the input (in this case, inputs are the destinations) to the output neurons (2nd neurons layer models the nodes). This is also the main problem to make SOMs distributed.

To prevent global choosing of the winner at each iteration, masters are elected before initialization of the network and each of them has a personal prefixed destination to reach that cannot be changed. Masters are the smart nodes and they deals to assign command to the other thin nodes.

The main requirement is to avoid breakage of the network line. The nodes must be distant from each other not more than the distance of wireless coverage radius.

Code

DUC provides several classes written in javascript to model position of nodes and destinations in a geographic coordinate system (longitude and latitude) and to refresh the map every prefixed time period.

Coordinates

This class models the position of a point on the earth's surface given the latitude, the longitude and the altitude. It also provides several methods to help calculation of common problems in spherical trigonometry (in particular, in WGS84 geodesic system).

Note: although the constructor requires the altitude as third attribute, it's not fully supported, yet.

Great-circle distance (ref.)

Computes the shortest distance between two points Start point and End point, where Longitude and Latitude are the latitudes and the longitudes, respectively. It doesn't make use of the Haversine Formula because it is ill-conditioned if two points are very nearly antipodal, but it uses a special case of the Vincenty formula. Let Delta Phi and Delta Lambda the differences of latitude and longitude; then the distance d between the two points is given by:

Great-circle distance

Great circle distance

Initial and final bearing

Since the heading vary along the great-circle path, Coordinates provides two methods to computes the initial and the final bearing, given the start and final point on an orthodromic line.

Initial and final bearing

Note: result angles are given in radians and they are calculated by default using an anticlockwise reference from East. If you want to use the standard clockwise reference from North, commonly used in navigation, you have to set (here):

Coordinates.clockwiseUsage = true;

Destination

Calculates the destination point, given the start point Start point and the initial bearing Initial bearing (in radians).

Destination point

Middle point

Computes the half-way point Middle point between two points on a great-circle path.

Middle point

Loxodromic distance, bearing and middle point

A loxodrome is a line on a sphere that cuts all meridians at the same angle, the path taken by a ship or plane that maintains a constant compass direction. It maintains the same initial bearing for all the route.

Loxodrome

Projections

Equirectangular projection (ref.)

It's a simple cylindrical map projection.

Equirectangular projection formula

Mercator projection (ref.)

It's a cylindrical map projection that has the ability to represent rhumb lines (or loxodrome) as straight segments which conserve the angles with the meridians. A close variant of this projection is used by Google Maps. This version is a generalization for the WSG84 ellipsoid.

Mercator projection formula

Mercator projection variant

This method is a variant of secant projection with standard parallels at the latitude of the point to project. It helps calculation of small (projected) distances between two points with an accuracy of few centimeters even for farthest points from the equator.

Note: the inverse formula requires to know the latitude (or the nearest one) of the point to convert.

Secant Mercator projection

Sensor

This class simulates the behavior of a single proximity sensor installed on the UAV. As the ultrasonic sensors, every proximity sensor has a fixed beam width (overture angle) of the main lobe and a maximum distance to detect obstacles. Users can set the number of the sensors and the position of the sensor on the autonomous system (in terms of angular position). The main purpose of this class is to make possible the execution of a simple collision avoidance algorithm between nodes, which simulates the real behavior of the external sensors.

Proximity sensors on board

Map

It's just a Google Maps wrapper that deals to draw nodes, destinations and the network polyline across the nodes. It also has the ability to "follow" nodes during moving adapting zoom value and map bounds dynamically (only if #follow checkbox is checked).

Note: to draw node and destination IDs, Map make use of an external project called Marker With Label.

DUC map

Author

This work is a part of my master thesis at the University of Pisa, in collaboration with [ReTiS Lab] (http://retis.sssup.it/) of Scuola Superiore Sant'Anna.

Indri Muska

  Indri Muska
  indrimuska@gmail.com