Robotic devices (i.e., “robots”) are capable of performing many tasks, such as data collection, searching, and mapping. Generally, these tasks are defined programmatically using a software development system. One or more robots receive the programmed instructions, execute them, and perform the corresponding tasks. This generally occurs under the auspices of a central command and control apparatus.
When a task is complex or large scale (e.g., mapping a big area), the time to complete the task can be prohibitive if an insufficient number of robots are employed. Consequently, to improve efficiency, more robots are typically added to share the task (or parts of the task) and drive it to completion earlier. A small increase in the number of deployed robots can complicate command and control, but not to the point where the array of robots becomes unmanageable.
Difficulties can ensue when efficient completion of the task requires the deployment of more than just a small number of robots. At this level, the central command and control apparatus typically cannot exercise complete management of the group of robots. Further, a human operator overseeing the robots can be overwhelmed trying to monitor the progress of (and potentially control) every robot. In fact, when working with large numbers of robots, an operator often cannot manually program, charge, or even turn on the robots. Moreover, control strategies for multiple robots need to be robust in the face of complex environments and tolerant to the failure of any number of individual robots within the group. Optimally, a control strategy is designed to be completely scaleable to function with any number of robots.
A robot typically observes its environment during the performance of the task. For example, a robot can sense when it has encountered an obstacle and, optionally, attempt to circumvent the obstacle. When several robots are deployed to complete a task, it is likely they will encounter each other. On the one hand, the robots can simply avoid each other (i.e., to eliminate the potential of collisions) and continue to perform their duties in a virtually independent manner. Nevertheless, efficiency can be improved beyond that attained by increasing the number of robots by allowing the robots to interact with each other and adapt their behavior accordingly, ideally without intervention from a central command and control apparatus or an attending operator (i.e., autonomously).
From the foregoing, it is apparent that there is still a need for a way to allow increasing the number of robots performing a particular task while, at the same time, distributing command and control to, for example, the individual robots. Further, it is desirable to accomplish this in conjunction with allowing interaction between the robots, resulting in the adaptive behavior thereof.