Project structure


This minimalistic overview of the project will serve until a more comprehensive documentation is available:

  • libs - The code for all functionality of the project resides here. This is a sub project that builds to a library that will be included by the other projects.
  • agent -  The main project for agent that links to lib and acts as the on-board controlling software for the robot.
  • remote -  The main project for remote  that links to lib and acts as a dumb remote control UI. Can either be connected directly to robot (agent) or via server.
  • hub - The main project for hub that links to lib and acts as a more advanced remote control with UI that takes advantage of larger screens.
  • zoo - The main project for zoo that links to lib and acts as the server side peer (off-robot compute)
  • test: All unit & integration tests have their own sub-folder under here with main files that link to lib and uses Qt testlib to scrutinize the code in various ways.


The project contains 3 main peers.

  • Agent:("The robot") Software that runs on board a robot (such as mobile phone). The purpose of this software is to directly manipulate the actuators and to read the sensors of the robot. Depending on the mode, agent may control robot on its own (autonomous mode), take direct commands from a remote (direct remote mode) or take commands from a hub (indirect remote mode).
  • Hub:("The brain") Software that runs in the cloud somewhere, most likely or on your desktop computer. The purpose of the hub is to provide the features that requires heavier computer resources such as real-time processing of images for the SLAM algorithm, but also to provide a central for many robots to share their data when collaborating in flocks or similar.
  • Remote:("The control") Software that runs on a remote control device (such as mobile phone). The purpose of this software is to take input from the user on how a robot or hub should operate while displaying real time data from the robots/hub.

Since all peer are written in the same code base, it is easy to move or duplicate features between them. For example, if you have sufficiently powerful hardware on board the robot to do SLAM there, simply invoke slam from agent directly.