RAINBOW framework provides an easy-to-use toolchain for deployment and monitoring of applications and enable scaling through its orchestration capabilities. This allows high level of flexibility and efficiency as the system resources are used only when it is needed and more resources can be added or removed depending on the systems need. However, to enable orchestration through RAINBOW, the system applications are needed to be designed scalability in mind and especially if the system is using legacy applications, this might not be the case. This analysis will explain the methodology used for modifying the applications of use case 1 to enable integration of RAINBOW.
Human-Robot Collaboration in Industrial Ecosystems (HRC) use case demonstrates an industrial application, where humans and robots are working together in the same work floor. To make this possible, the use case utilizes an indoor localization system for workers together with robot motion tracking to predict and avoid collisions. The system consisted of a monolithic application that is running on a relatively powerful server. The application was responsible for the whole collision avoidance system through collection of the worker localization data, tracking the motion of the robots and calculate any potential collision. Because of this monolithic design, it was not suitable to be deployed on RAINBOW by itself, therefore we had to figure out to convert this application to micro-services architecture. To overcome this challenge, first we divided the responsibilities of the application. Examining the application reveals 3 responsibilities:
- Localization of the workers
- Tracking of the motion of the robots in the work floor.
- Calculation for collision prediction and avoidance.
Therefore, 3 micro-services needed to be created. These services have become “Personnel Localization and Motion Capturing Service (PLMC)”, “Robot Motion Tracking Service (RMT)” and “Collision Prediction and Avoidance Service (CPA)”. With 3 services defined, the second challenge was to figure out the communication between these services. The communication method needed to provide these requirements:
- Must be able to provide high throughput of real time motion data.
- Must be suitable to scaling in and out of the use case applications.
After consideration of the communication requirements, we chose AMQP protocol with the use of RabbitMQ. RabbitMQ provides creation and management of message queues with an easy to use API for sending and receiving messages. Furthermore, it provides analytics of the state of its queues, which proved very useful as metrics to be used for scaling of our applications.
As the micro-services and the communication between them defined, the use case was ready to integrate and utilize RAINBOW. However, a deeper dive to the application revealed one more challenge. The accurate localization and prediction for collision relies on previous calculation states for filtering and keeping track of all previously calculated assets in the work floor. However, to be able to run multiple instances of the services, the services must be stateless as to ensure all the instances are in the same condition for each step of the calculation. To overcome this challenge, we needed to find a way to store and retrieve these previous states without introducing too much delay. For this, we opted to use REDIS in memory database. Finally, we have the micro-services architecture for HRC use case ready for deployment.
Of course conversion from a monolithic architecture to micro-services architecture introduced delays, both on communication and database channels. However, as the system is not running on cloud but on fog devices at the work floor, the introduced network delays are manageable. Thanks to the architecture change, now we can create other work floors with ease by using RAINBOW for easy deployment. Furthermore, now we have the scaling and monitoring of our services provided by RAINBOW.