## 10 Challenges and Open Research Problems
### Complexity  
Increasingly, UAVs are being deployed as a swarm of vehicles to achieve communication, reconnaissance, search/rescue, or monitoring tasks. Due to the complexity of these tasks, multiple UAVs (also called a swarm of UAVs) are usually required to perform them more efficiently. The advantages of using multiple UAVs in such scenarios, such as cost and time efficiency, reliability/fault tolerance, flexibility/adaptability to changing requirements, and the ability to perform multiple tasks simultaneously, have been well-established [325]. However, due to the dynamism and uncertainty of the operating environments for such complex tasks, coordinating multiple UAVs to work together is highly challenging [326]. In addition, UAVs nowadays are increasingly subjected to more and more complicated cyber and physical threats. Thus, they have to be designed with additional software and hardware components to thwart such threats, which further increases their complexity. The most common issues that arise in multi-UAV coordination have been documented in [327, 328, 329, 330]. They include:  
* Algorithmic planning to manage communication and task allocation;
* Coverage issues and equitable distribution of workload;
* Aerial manipulation of the vehicles;
* Power management;
* Management of the communication infrastructure;
* Path planning to avoid collisions while ensuring adequate coverage without overlaps;
* Interference arising from other UAVs;
* Conflict resolution;
* Safety issues related to preventing the vehicles from flying into one another's buffer zones;
* Safety issues related to take-off and landing (in some current implementations, a swarm of fixed-wing UAVs spent less than 20% of the time staying simultaneously in the air to execute assigned tasks) while the bulk of the time is spent trying to coordinate the flight of the UAVs;
* Network congestion and channel interference [] due to multiple UAVs exchanging data to coordinate the execution of assigned tasks. Multi-UAV systems may also require more than a single pilot to manage them, which introduces another layer of complexity to the system [325]. One of the main challenges facing the implementation of a swarm of UAVs is localization. To be effective as part of a fleet, a UAV needs to be aware of its position in a given map of the environment. The UAV position is either relative to a reference point or relative to other UAVs in the fleet. As one can imagine, this is a non-trivial task that requires numerous exchanges of communication and control commands. In addition, since the positions of the UAVs are constantly changing, the map of the fleet is also constantly changing 3D. This gives rise to a dynamic 3D map of the environment, rather than a constrained static map with a reference landmark [331]. Thus, achieving partial or full localization is both energy- and bandwidth-intensive. GPS sensors are insufficient to address this problem because they provide position accuracy to only three meters [331], which is not granular enough to prevent collisions. Alternatives found in the literature include equipping the UAVs with wireless communication modules and inertial navigation systems, coupled with on-board sensor fusion to enable accurate estimation of position. As highlighted already, this incurs a heavy computational, communication (bandwidth), and energy cost, hence, finding innovative ways to do this more efficiently is still an open problem. Path planning is another challenge that arises when multiple UAVs work together to achieve a common objective (this is related to the localization problem). As the number of vehicles in the swarm/fleet grows, it becomes more difficult to plan the trajectory of each UAV from the starting points to the goal points in order to traverse the minimum path (so as to save energy) and avoid collisions with obstacles or other vehicles in the swarm. In addition, path planning must be executed such that the UAVs maintain connectivity with one another and with the ground control station while performing assigned tasks.