Roam the universe with Open Liberty!

Overview

Open Liberty Space Rover Mission

Open Liberty Space Rover Mission is an interactive IoT game designed to showcase microservices with modern Java technologies in a fun way. The mission is to guide the Space Rover using hand gestures to its home while visiting planets along the way to gather supplies. Make sure to avoid any obstacles (asteroids, black-hole, etc.) in your path. 🚨 Beware of strong winds on Venus and Open Liberty 🚨

Teaser

Five Hand Gestures

These five hand gestures are used to move the Space Rover across the game board. image

The gesture detection is built upon using popular open sourced computer vision libraries such as OpenCV and CVZone. Computer Vision works by gaining high-level understanding from digital images/videos to understand and automate tasks that the human visual system can do. OpenCV was built to provide a common infrastructure for Computer Vision applications and to accelerate the use of machine perception.

Prerequisites

  1. Space Rover hardware component with the project code compiled and running.
  2. Game Board hardware component with the project code compiled and running.
  3. Gesture Control System client with webcam facing a defined area for users to control the Space Rover.
  4. Docker CE or Docker Desktop either running on the Gesture Control System's hardware or on its own hardware.

Setup, Cleanup, and Troubleshooting

For setup, cleanup, and troubleshooting instructions, see documentation.

GameBoard

Architecture Diagram

ArchitectureDiagram

Container 1 - Client

The Client is built using React and served using Nginx. The UI is used to enter the player's name, start the game, view current game stats, and view the leaderboard. It interacts with the Game Service using websockets and the Leaderboard Service using HTTP.

Container 2 - Leaderboard Serivce

The Leaderboard Service is built using Open Liberty. It is used to provide a REST API for the Client to query for past game information and for the Game Service to add the information after a game completes.

Container 3 - Game Service

The Game Service is built using Open Liberty. It holds the current game state and is the piece that connects all the different components together. It gets information from the hardware devices using websockets and sends events to the Client to update the health and score. It also updates the Leaderboard Service about the game information at the end of a game.

Container 4 - MongoDB

MongoDB is used to store information about past games. It interacts with the Leaderboard Service.

Container 5 - Prometheus server

The Prometheus server scrapes metrics from the Game Service and sends them to Grafana.

Container 6 - Grafana

Grafana takes the metrics scraped by the Prometheus Server and displays them on a dashboard.

Webcam and WiFi Enabled Standalone Device

The Webcam and WiFi Enabled Standalone Device is used to run the hand gesture game controls which is powered by CV Zone which uses Open CV under the hood.

Space Rover

The Space Rover is the physical device built using an Arduino which roams the game map. This component picks up light to determine if it has landed on a planet or hit an obstacle to the Game Service.

Game Map with Addressable LED's

The Game Map is the physical game board which the Space Rover roams on. It emits LED's of different colour to signify planets and obstacles.

Jakarta EE and MicroProfile features

Docker Container 2 – Leaderboard service

Jakarta EE 9.1

  • RESTful Web Services (JAX-RS) 3.0
    • Used REST endpoints for interfacing with the leaderboard.
    • HTTP GET endpoint used to retrieve stats from MongoDB container.
    • HTTP POST to update MongoDB with new statistics.
  • Context Dependency Injection (CDI) 3.0
    • Used to inject a MongoDatabase object and MongoClient used to interact with the MongoDB leaderboard database.

MicroProfile 5.0

  • MP Health 4.0
    • Used to add a /health endpoint that determines if MongoDB is up and running.
  • MP Config 3.0
    • Used to store connection information to MongoDB such as the username, port, and encrypted password.

Docker Container 3 – Game service

Jakarta EE 9.1

  • WebSocket 2.0
    • Used extensively to handle socket connections from the GUI, Gesture Control Service, Game Board, and Space Rover.

MicroProfile 5.0

  • MP Health 4.0
    • Used to add a /health endpoint which returns the server status based on its ability to handle messages within a timeout.
  • MP Config 3.0
    • Used to configure known IP addresses and ports for external connections to the Space Rover, Game Board and Leaderboard.
  • MP Metrics 3.0
    • Used to record JVM metrics on the game service as well as a SimpleTimer that tracks the amount of time it takes for the GameService to respond to the health check test. This tells us a local round trip latency value determining how long it takes a message to be sent to the server and have the server respond.
  • MP Rest Client 3.0
    • Generates an HTTP client to send game end statistics to the leaderboard's REST server.
Comments
Releases(v2.0.0)
  • v2.0.0(Jul 6, 2022)

    v2.0.0

    Second release for Space Rover Mission 🎉🎉🎉

    What's Changed

    • Jd leaderboard v2 by @jacobwdv in https://github.com/OpenLiberty/space-rover-mission/pull/78
    • add search functionality to leaderboard by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/80
    • addressing jimmys code review comments and updating docker to fix ope… by @jacobwdv in https://github.com/OpenLiberty/space-rover-mission/pull/79
    • Adding left hand integration with gesture control by @mshah0722 in https://github.com/OpenLiberty/space-rover-mission/pull/82
    • add pagination to leaderboard table by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/84
    • Update Rover Circuit Diagram V2 by @pgunapal in https://github.com/OpenLiberty/space-rover-mission/pull/87
    • Updated architecture diagram by @pgunapal in https://github.com/OpenLiberty/space-rover-mission/pull/88
    • add a toggle to show failures on leaderboard page by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/89
    • GameBoard v2 code changes by @ellen-lau in https://github.com/OpenLiberty/space-rover-mission/pull/90
    • add game modes to frontend by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/91
    • readme and setup doc updates by @ellen-lau in https://github.com/OpenLiberty/space-rover-mission/pull/92
    • Add space-rover device code by @pgunapal in https://github.com/OpenLiberty/space-rover-mission/pull/93
    • stable build from integration day 03/06/2022 by @jacobwdv in https://github.com/OpenLiberty/space-rover-mission/pull/94
    • update gb setup section by @ellen-lau in https://github.com/OpenLiberty/space-rover-mission/pull/95
    • Issue 75 by @mshah0722 in https://github.com/OpenLiberty/space-rover-mission/pull/96

    Full Changelog: https://github.com/OpenLiberty/space-rover-mission/compare/v1.0.0...v2.0.0

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(May 24, 2022)

    v1.0.0

    First release for Space Rover Mission 🎉🎉🎉

    What's Changed

    • init frontend and create home page by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/17
    • create play page by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/22
    • Jd leaderboardservicemix by @jacobwdv in https://github.com/OpenLiberty/space-rover-mission/pull/25
    • create leaderboard page by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/26
    • package font so it can be used offline by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/28
    • stop game from client side and send timestamp to server by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/29
    • add sound to play page by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/30
    • fix socket handlers by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/31
    • Latest stable build by @jacobwdv in https://github.com/OpenLiberty/space-rover-mission/pull/32
    • nav to home page if end mission by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/37
    • Fix player name by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/38
    • add sound to leaderboard page by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/36
    • hide settings page in header by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/39
    • fix leaderboard by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/40
    • deploy frontend using nginx by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/35
    • Added Prometheus and Grafana support by @pgunapal in https://github.com/OpenLiberty/space-rover-mission/pull/34
    • add clear endpoint by @jacobwdv in https://github.com/OpenLiberty/space-rover-mission/pull/41
    • adding documentation files by @ellen-lau in https://github.com/OpenLiberty/space-rover-mission/pull/42
    • cleanup repo by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/43
    • Added rover src code and documentation by @pgunapal in https://github.com/OpenLiberty/space-rover-mission/pull/45
    • update main readme by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/48
    • create docs for client by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/46
    • adding colour assist and some refactoring by @jacobwdv in https://github.com/OpenLiberty/space-rover-mission/pull/49
    • Update README.md by @mshah0722 in https://github.com/OpenLiberty/space-rover-mission/pull/51
    • Gesture recognition via trained VGG19 model by @mshah0722 in https://github.com/OpenLiberty/space-rover-mission/pull/50
    • initial updates for setup doc by @ellen-lau in https://github.com/OpenLiberty/space-rover-mission/pull/47
    • Gb circuit schematic by @ellen-lau in https://github.com/OpenLiberty/space-rover-mission/pull/52
    • update readme's in services by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/53
    • update setup and troubleshooting docs by @ellen-lau in https://github.com/OpenLiberty/space-rover-mission/pull/54
    • update architecture diagram to use OL logo beside services by @jimmy1wu in https://github.com/OpenLiberty/space-rover-mission/pull/55
    • Restructuring folder by @mshah0722 in https://github.com/OpenLiberty/space-rover-mission/pull/56
    • Updated MP logo in Architecture diagram by @pgunapal in https://github.com/OpenLiberty/space-rover-mission/pull/59

    New Contributors

    • @jimmy1wu made their first contribution in https://github.com/OpenLiberty/space-rover-mission/pull/17
    • @jacobwdv made their first contribution in https://github.com/OpenLiberty/space-rover-mission/pull/25
    • @pgunapal made their first contribution in https://github.com/OpenLiberty/space-rover-mission/pull/34
    • @ellen-lau made their first contribution in https://github.com/OpenLiberty/space-rover-mission/pull/42
    • @mshah0722 made their first contribution in https://github.com/OpenLiberty/space-rover-mission/pull/51

    Full Changelog: https://github.com/OpenLiberty/space-rover-mission/commits/v1.0.0

    Source code(tar.gz)
    Source code(zip)
Owner
Open Liberty Project
Open Liberty is an open source implementation of Eclipse MicroProfile and Java EE from IBM. It is the foundation of the WebSphere Liberty app server.
Open Liberty Project
Hcode Online Judge(HOJ):An open source online judge system base on SpringBoot, Springcloud Alibaba and Vue.js !

Hcode Online Judge(HOJ) 前言 基于前后端分离,分布式架构的在线测评平台(hoj),前端使用vue,后端主要使用springboot,redis,mysql,nacos等技术。 在线Demo:https://hdoi.cn 在线文档:https://www.hcode.top/

Himit_ZH 179 Dec 31, 2022
An open source Minecraft plugin that allows operators to control who has access to the nether.

Nether Access Controller Description Nether Access Controller is a Minecraft plugin that allows operators to control access to the nether. It is essen

Daniel Stephenson 2 Feb 12, 2022
POC showing how to divide endpoint(s) among different Open-API screens

Multiple Open-API groups: Spring boot POC showing how to divide endpoint(s) among different Open-API screens Demo Link (Select definition from top rig

null 6 Dec 15, 2022
log4j-scanner is a project derived from other members of the open-source community by CISA's Rapid Action Force team to help organizations identify potentially vulnerable web services affected by the log4j vulnerabilities.

Log4j Scanner This repository provides a scanning solution for the log4j Remote Code Execution vulnerabilities (CVE-2021-44228 & CVE-2021-45046). The

Cybersecurity and Infrastructure Security Agency 1.3k Dec 22, 2022
Apache Maven artifacts for bootstrapping new open-source projects

OSS Quickstart Apache Maven archetypes for bootstrapping new open-source projects. Think Maven Quickstart Archetype and friends, but more modern, comp

ModiTect 49 Dec 31, 2022
Tencent Kona JDK17 is a no-cost, production-ready distribution of the Open Java Development Kit (OpenJDK), Long-Term Support(LTS) with quarterly updates.

Tencent Kona JDK17 Tencent Kona JDK17 is a no-cost, production-ready distribution of the Open Java Development Kit (OpenJDK), Long-Term Support(LTS) w

Tencent 59 Nov 30, 2022
🕊️ The world's most advanced open source instant messaging engine for 100K~10M concurrent users https://turms-im.github.io/docs

简体中文 What is Turms Turms is the most advanced open-source instant messaging engine for 100K~10M concurrent users in the world. Please refer to Turms D

null 1.2k Dec 27, 2022
open-source electronics platform

Arduino is an open-source physical computing platform based on a simple I/O board and a development environment that implements the Processing/Wiring

Arduino 13.3k Jan 4, 2023
Rivr is a lightweight open-source dialogue engine enabling Java developers to easily create enterprise-grade VoiceXML applications.

Overview Rivr is a lightweight open-source dialogue engine enabling Java developers to easily create enterprise-grade VoiceXML applications. Read our

Nu Echo Inc. 57 Jun 27, 2022
Free and 100% open source Progressive Java Runtime for modern Java™ deployments supported by a leading OpenJDK contributor

BellSoft Liberica JDK is a build of OpenJDK that is tested and verified to be compliant with the Java SE specification using OpenJDK Technology Compat

null 195 Dec 22, 2022
GreenMail is an open source, intuitive and easy-to-use test suite of email servers for testing purposes.

GreenMail GreenMail is an open source, intuitive and easy-to-use test suite of email servers for testing purposes. Supports SMTP, POP3, IMAP with SSL

null 529 Dec 28, 2022
Ethylene is a open-source, lightweight, general-purpose compatibility layer standing between the developer and the chaotic world of configuration file formats.

Ethylene Ethylene is a open-source, lightweight, general-purpose compatibility layer standing between the developer and the chaotic world of configura

Steank 7 Aug 9, 2022
An open source civilization like game made in LibGDX

OpenCiv A turn based strategy game built on LibGDX, with a rouge-like tile set. About OpenCiv is a love letter to turn based strategy games inspired b

Rhin 58 Dec 26, 2022
Java based open source static site/blog generator for developers & designers.

JBake JBake is a Java based open source static site/blog generator for developers. Documentation Full documentation is available on jbake.org. Contrib

JBake 1k Dec 30, 2022
FreeLogJ - Start a conversation in your company about paying open source maintainers

Start a conversation in your company about paying open source maintainers! In the meantime enjoy this super-simple logging framework^W class.

Chris Newland 11 Jan 24, 2022
Desktop size version of my Open 6DOF Platform.

Mini-6DOF Desktop size version of my Open 6DOF Platform. This is an expansion on my initial learning that I did to get up to speed for the big version

Christopher Knauf 4 Aug 26, 2022
An open-source, free, scanner for exotic armour in Hypixel Skyblock

TheExoticsMod An open-source, free, scanner for exotic armour in Hypixel Skyblock! Searches friendslists, the auction house, and inventories to find e

null 4 Dec 26, 2022
Onepop is an utlity client previously paid, but now public and open source

onepop Onepop is an utlity client previously paid, but now public and open source, the client license is the GNU General Public License v3.0. The clie

Wks JanStudio 50 Dec 30, 2022
An open source Discord Bot made in Java!

ShiShi An open source Java Discord bot Report Bug . Request Feature About The Project This is a open source Java discord bot making use of the JDA lib

kb 2 Aug 5, 2022