NASA is sending another ship to Mars!
Once the ship reaches the red planet it will deploy a robot to the surface. On the surface the robot will traverse the surface looking for metal, minerals, and signs of life. It will catalog and send back images of the Martian landscapes and use spectral analysis to analyze the resources it finds.
Your task is to write the software for the robot.
The software has several requirements:
- Because of the time it takes for the ship to arrive at Mars, the software will be uploaded to the robot in transit
- We do not know exactly what sequences we will want the robot to do, so we need a framework for software design
- The robot should be able to reconfigure itself for different tasks using pieces from itself
- The robot should be able to remember the images of things it has seen and use a behavioral Artificial Intelligence to make decisions (whether or not to take pictures, has it seen an object or not, or has it already covered an area, for example)
- The decisions the Robot makes are based on its current state (you must define this in the aforementioned framework and in the AI)
- Some software has been purchased from the Russians and MUST be used
- Many of the components are built in Taiwan and have supplied software which also must be used
- The robot must be able to check all of its components quickly in a diagnostic
- NASA must be able to take control of the robot from a computer on Earth or the space station
- The President wants to control the robot from a smartphone
In addition to these requirements, the robot must also be able to move along the Martian surface, take and send back images, and any other thing NASA happens to think of in the next two years while the ship is headed to Mars.
Use all or most of these design patterns: Strategy, Observer, Decorator, Factory, Singleton, Command, Adapter, Facade, Template, Iterator, Composite, State, Proxy, and Compound.
- Design this software system
- Write an overall description of your thought process and architectural logic in designing this system
- Illustrate your system using class diagrams