Which problems MaCI can solve?

Imagine that you have a robot with two wheels and laser-scanner. You know how to program a code to command the wheels to turn and you know how to read the data from laser-scanner. 1) If you don't, MaCI might have a driver for your hardware.

Let's imagine further and you want to control the robot somehow. You would like to have the robot to drive around randomly while avoiding obstacles with the help of laser-scanner. It is a good practice to isolate your software into functions or even independent modules. 2) MaCI defines interfaces between these modules and handles the communication via GIMnet. So, you could have module for the wheels where you can command velocity for the wheel or even for the whole robot. Also you could have one module spitting out the data from the laser-scanner and an other module to receive the data and calculate the commands for the wheels.

Let's assume that on top of the autonomous random motion, you would like to have user interface for the robot. You would like to see the data from the laser scanner and give commands to the wheels from a computer off-board the robot. 3) MaCI can share and broadcast the data and commands between multiple modules. And if you are lucky 4) there might already be an user interface in the repository that does exactly what you want.

Time goes by and you get more money and can buy a better laser-scanner for the robot. You can make a module (if it does not already exists) for your new sensor and 5) you can just swap one module and rest of the system will not even realize that there has been something changing.

You get even more money and get even bigger robot with bigger wheels and laser scanner. Now you can again have modules for the wheels and sensors and 6) reuse your code in random motion module in the new robot.

How I can get to use MaCI?

  1. Get the source code and try compile it (see installation).
  2. Define what kind of data you need to sift around and what kind of peaces of hardware you have.
  3. Make or get modules for the hardware.
  4. Think what kind of algorithms you would need and put them into their own modules (or reuse the existing ones)
  5. Think how the computational load should distributed, is one computer enough to handle all the modules?
  6. Construct a configuration file for your needed modules for easier compiling of the modules and, most importantly, for starting everything with one command. (Look for Launcher in MaCI)

Why, in name of X%&#*, I have to have everything in modules?

  • Modules can be reused.
  • With modules you can develop the code incrementally.
  • Smaller software units are easier to handle, develop, test, make and maintain.
  • With modules many people can work on same code base without interfering each others work.
  • Modules can make the software more stable, because bugs and problems can be isolated.
  • Modules can be distributed to balance the computational load.

What I get from MaCI?

With MaCI you can get a distributed and modularized control system for your robot. You can get "easy" access to all the data that robot is producing and a way to command the robot. There are a bunch of drivers and algorithms in the repository for your disposal (but the documentation could be better)

What I don't get with MaCI?

MaCI will not have a ready turnkey solution for your specific hardware. You have to specify the modules for your specific hardware. MaCI can not read your mind and make the robot do what you want. You need to specify inside some modules the algorithms you want the robot to follow. For some hardware and algorithms there might be already existing implementations but you need to choose one. You will not (yet) get LabView or Simulink like graphical tool draw lines between boxes to create the algorithms and internal workings of the robot. You have to get your hands dirty with C, C++ or Python.

Why I should use MaCI?

There are other people using it already and you can benefit from the work already done. You don't have to repeat all the same mistakes and development phases for the interfaces and modules again. If you place your code into the repository, they are in secure maintained place even if your own hard-disk goes haywire. With MaCI you can reuse not only others but your own code better.

What are the technical requirements in MaCI?

  • MaCI has been developed and is used in Linux (mainly Debian and Ubuntu). Windows would be possible in theory but would nobody dared to try. Port to OSX is not considered but should not be impossible either.
  • MaCI is developed using C++.
  • The most common interfaces are wrapped into Python, so modules communicating with MaCI interfaces can be programmed with it.
  • The GIM source code repository is currently (1.2.2011) XXX MB and whole GIM repository
  • Processor: MaCI does not require processing that much since it is just a communication method. MaCI modules has been compiled on cumstixs and on N810 mobile device.

Where is the documentation?

  • Here (wiki pages)
  • Doxygen
  • GIMnet seminar
  • Source... GIM/src/MaCI/examples is a good starting point

Who I can ask for help regarding MaCI?


  • irc
  • phone
  • email