The main focus of this project is to utilize current Artificial Intelligence (AI) software packages and develop new agents for the purpose of engaging a human player in a game of pool. By the completion of the project, the robot will be able to: learn behaviors, identify targets, strategize, and make real-time decisions as to meet its objectives.
This details section will include a functional overview of the main robotics modules as described by the following graphic:
Communications Architecture (Comms) and Physical Network:
The comms infrastructure will operate on a wireless router/4-port ethernet switch (exact model TBA) and will be based in MOOS (Mission Oriented Operating Suite) which is a publish and subscribe infrastructure for C++ (native), Python (external package), and Java (external package). MOOS was originally designed for the communications architecture for autonomous marine robotics and is being repurposed for this project because of its flexibility and efficient functionality. Please see their website for more details: http://www.robots.ox.ac.uk/~mobile/MOOS/wiki/pmwiki.php
The gaming agent is composed of two Artificial Neural Networks (ANNs) which will be used to decide on a move (shot) in the game of pool. Each shot is represented as both a set of vectors starting at the white ball (cueball) and a network of casual action-reaction parings which are generated using knowledge of the behavior of the system. System behavior is learned through inductive reasoning and sequential experimentation on an actual pool table.
Physics are left out of this section of the robot for the sole purpose of making the robot more "realistic" to play against. Generally, a human player does not understand the physics of the game; rather they understand that x action causes y reaction in the system. Our robot is designed to match this attribute of play.
An action is selected by a second ANN according to the utility formula:
(myBalls)(myScore) - (opponentBalls)(opponentScore)
Error calculations (which are necessary for the weights) are performed according to:
ERROR = 1 - (P(A) + P(B)) = 1 - P(A or B) where P(A) = (n(Possible likely successes))/(n(Total available moves to "me")) and P(B) = (n(Possible likely successes for opponent))/(n(Total available moves to opponent))
The robot will be controlled by means of an evolutionary algorithm (EA) control system which will be running on a Raspberry Pi. Specifically, all of the robots functions (such as moving a motor x number of radians in a certain direction) will be pre-programmed and placed in a library. The EA will be part of a weighted network which will be trained in how it is to call each of the functions and to what degree will they run. This will require the use of a Monte Carlo search tree combined with a genetic algorithm. An example of its use is, shooting a ball: it will already have all of the functions needed to shoot a ball but it must learn the order of those functions as well as the amount of force required to shoot the ball in a specific manner. Actual hardware actions will be carried out on the Arduino which is to be interfaced with the Pi.
Details on this system to be announced. Vision will be coded in Python 2.7.5+ with OpenCV.
The robot itself is being constructed from a mixture of VEX angles, plywood, PVC piping, and a few other eclectic parts.
Note on connected device:
An important note for the Hackaday Prize is "how is this project 'connected'?" Each software module runs on its own designated computational unit - whether that be Arduino, Raspberry Pi, or desktop, depends on the software itself - which are all networked together and communicating using PyMOOS which is MOOS (Mission Oriented Software Suite) for Python. MOOS operates using a publish and subscribe architecture.
The above image describes how the robot system functions as a whole (ignoring the publish and subscribe system). Note:...Read more »