This is a quick overview of my masters research work that you might find interesting. I've been posting in the drones-discuss developer mailing list and a couple of people suggested I make a post over here for everyone to see. The associated paper is titled "Relief and Emergency Communication Network Based on an Autonomous Decentralized UAV Clustering Network" and will be published soon in the 2015 conference proceedings for IEEE SoutheastCon.
What it is
Quoting the abstract from my paper:
...propose a fully autonomous system to deploy Unmanned Aerial Vehicles (UAV) as the first phase disaster recovery communication network for wide-area relief. An automation algorithm has been developed to control the deployment and positioning of UAVs based on a traditional cell network structure utilizing 7-cell clusters in a hexagonal pattern. The distributed execution of the algorithm is based on a centralized management of UAV cells through assigning higher ranked UAVs referred to as supernodes. The algorithm autonomously elects supernodes based on weighted variables and dynamically handles any changes in total number of UAVs in the system...
So in essence you can launch a bunch of drones in the air to act as communication towers using any protocol like GSM or WiFi.
The System
The system consists of three main parts:
Yes, I just threw the props on for the picture so the orientations are probably wrong :)
On the software side I didn't use MAVProxy or DroneAPI as a whole but I studied them heavily and was able to understand how they were built in order to create my own more streamlined (single-purpose) version. I of course used a lot of helper functions from both MAVProxy and DroneAPI.
The system consists of a Python backend and an HTML user interface. I use WebSockets and Flask to communicate between Python and my interface in real time. I also use Bootstrap and AngularJS as helpers on the frontend side. The interface also allows for setting of parameters and fail-safes. I can control the system from anywhere in the world or on any device by simply using an HTTP tunnel.
With my system, you first start up the Python script and load the web interface. The two will automatically connect via WebSockets as long as the port numbers are the same. After that the interface will automatically recognize any drone connected to the computer and add it to the system. When all that is done all you need to do is initiate the launch and then the control algorithm takes over. The algorithm arranges the drones in a hexagonal honeycombed pattern, which can scale to any size.
For autonomous control, I implemented a finite-state machine. Each drone added spawned it's own FSM, which allowed for everything to function independently and as a whole at the same time by simply manipulating a master state.
There are a bunch of fail-safes and safety measures in the system but you can read about that in the paper -- I'm not going into too much detail in this post.
Testing
Everything in the system is fully functional but the fleet was grounded for some time due to the FAA regulations that went into effect but I'm hoping to get a video out of them all in operation before the end of the semester. I can definitely understand the dangers of 13 drones flying themselves :)
I'll update the post with a link to the paper on this research once it's published -- it goes into much more detail than I've covered here. As far as releasing the full source I have no problem with it but I'll have to see about that from my school since they own the research.
Hopefully this was an interesting read -- it was definitely an awesome project to work on! Now my next project is finding a job ;)
Comments
Excellent work, Paul. I for one hope the FAA rescinds its proposed rule on swarming.
I didn't include that functionality in this instance but that's just a simple matter of adding a new class in the Python code and then adding a dropdown menu in the UI to select which formation to use. The rest of the logic will function exactly the same.
This is really cool, but I have one question: can you command other formations of the drones currently instead of the 7-drone hexagonal formations that you displayed here?