2

I'm searching for an approach to a very generic problem. In my recent private project, I want to control different Applications from a single GUI.

To make the idea more clear I'll explain my project a little bit: I want to make an Augmented Reality Program with different settings and features. The video will be recorded by a webcam and the graphical evaluation of AR is programmed in a Game engine (like Unreal). I want a single GUI for the Program where I can start up or shut down single Features of the AR.

How can this be accomplished?

shup
  • 29
  • 3
  • 1
    It is probably operating system & GUI-toolkit specific. – Basile Starynkevitch Apr 13 '16 at 13:49
  • I assume you mean "App" in the sense of "application program", not "Smartphone App"? It may help to phrase your requirement differently: Probably you want to control multiple backend processes from a common GUI. Does this match what you have in mind? – Murphy Apr 13 '16 at 14:08
  • Sorry, I am new to the english terms. I try to give more specifics: The project should be able to handle different application programs, which could be able to be installed or uninstalled (like in a app store), and those applications should be loaded in my GUI or unloaded from my GUI separatly. For example: I have a cup of coffee: there should be one application "fillstate" and one application "shape". If I am starting fillstate, there should be created a line, marking the fillstate of my cup of coffee. If I start "shape", the shape of my cup should be colored, parallel or standalone. – shup Apr 13 '16 at 14:29
  • 3
    Those are probably not separate programs, but separate modules within your main program. – Dan Pichelman Apr 13 '16 at 15:11

2 Answers2

3

I think what you are thinking of is a plugin architecture, something like Chrome and Chrome extensions for example.

The idea is that you have a main program that expects some packaged module in a known location, and this package is known to adhere to some interface/protocol so that the main program can use it at runtime.

You could have your main program scan for its plugins on start and display to the user the discovered plugins and let her enable/disable plugins per her choice.

It's hard to be specific as no platform was specified. You can take look at this Android example as some sort of reference, but you should be able to find some type of plugin-able architecture reference for any common platform.

1

The basis model required for your augmented reality system seems to be an event based architecture:

  • Different applications react on events or trigger themselves events. For example by providing video frames, calculating the position and movements based on accelerometers, provide/update objects to render.
  • Your GUI application integrates all the events relevant for the display, and send events to translate user commands for the back-ebnd application

This article explain the basic principles of such an architecture, and identifies event processing style:

  • In your case I suspect that you can forget simple event processing,
  • Go directly to stream event processing because you'll merge the video stream and the 3D rendering streams
  • You might perhaps even need complex event processing (CEP) to coordinate different streams, and correlate them (i.e. correlate the video with the movement captors to influence the position of the 3D objects to be rendered.

The practical techniques to implement such event based architecture all involve some kind of IPC mechanisms, such as message based systems, shared memory, socket based (be it ad-hoc protocol or standardized webservice protocols). The choice will depend on OS and performance constraints.

But one question remains: do you really need different applications ? If not, you should really consider a multithreaded applications, which will faciliatet sharing of data with very low latency and maximized use of CPU. For a computing intensive augmented reality model, this could really be an interesting alternative. An of course, this approach is compatible with the plugin approach mentionned by Rafi.

Christophe
  • 74,672
  • 10
  • 115
  • 187