-
Notifications
You must be signed in to change notification settings - Fork 1
Home
With iCubes platform you can add different properties and features to real objects
and interact with them in virtual space. You can "write" characters, numbers, words
or even chemical elements on a simple colored cube, and with help of a simple
web-camera, platform tracks its location. Based on a set of rules and input
information the cube is being transformed into an object in virtual space.
You can follow us on TWITTER or look at our code on
GITHUB.
iCubes grants you an opportunity to give different properties to real life objects and see how they interact in their midst in virtual space.
- You can write numbers and operation on cubes and do math with them, by showing proper combination of cubes to a cam.
- Or you can take chemical elements and write them down on the same cube and see what chemical reaction can be made with different combinations of elements.
- Also you can use a cube as a controller for games and such.
Aleksejs Buzdins
Maxims Ahadovs
Anders Bruun
Andrea Cuttone
Rodriges Martinez vazquez
Ethiel Figueira Diaz
Igor Golyanov
Ilja Zegars
Vojtech Rinik
Michal Puheim
Silke Ostermann
Seyed Ehsan Farshpour Rezaie
We have us split up in four teams, that we can better organize our project.
The platform will be created in such a way that logic module will be easily editable and interchangeable.
- Recognition Team
- Logic Team for Color Pallet
- Logic Team for Binary Math
- Graphic User Interface Team
We would like to give you a short overview how each team must work together.
Software that we need for our project.
Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server.
Branching and merging are fast and easy to do.
Qt is a cross-platform application framework that is widely used for developing application software with a graphical user interface (GUI)
and also used for developing non-GUI programs such as command-line tools and consoles for servers.
Qt is written in C++ and is fully object-oriented.
CDT Project provides a fully functional C and C++ Integrated Development Environment based on the Eclipse platform.
+ Webcam
OpenCV (Open Source Computer Vision) is a library of programming functions for real time computer vision.
It has C++, C, Python and soon Java interfaces running on Windows, Linux, Android and Mac. The library has >2500 optimized algorithms.
Ubuntu is a computer operating system based on the Debian Linux distribution and distributed as free and open source software, using its own desktop environment.
Ubuntu is designed primarily for use on personal computers, although a server edition also exists.
We have some ideas how we can use iCubes, these are two ideas that we worked out.
-
Color Palette
-
Binary Math
- Math
- Switch virtual desktops in Linux by turning to other sides of the cube
- Tetris
- Composing words
- Game controlling
For Color Pallet we use the color model RGB (Red, Green, Blue).
Depending on the colors how far they are away from the edge, they are more color intense.
The first steps we have carried out was to processing an array of squares to generate color.
After that the Logic Team for Color Pallet was generating a new QImage.
They compiled an interface for displaying the sliders represented by cubes, and the resulting color.
The Logic Team for Color Pallet integrated the interface with the work done by the User Interface team.
It's also important to update the GitHub repository to keep up to date.
They also fixed some memory management issues and integrated the penguins demo into our existing app.
The Color Pallet Team merged recognition into the main repository, now the penguin is moving.
For Binary Math there are the numbers 1, 0 and arithmetic operators on the cube.
The camera recognize these objects and count with them.
It also should be displayed on the screen like this.
The task of our Logic Team for Binary Math is to generate Inputs, Algorithms and Outputs.
Inputs
We can show an array of pointers to square objects.
The algorithm uses ID and Coordinates, squares with Ids of 0 and 1 represent the binary numbers 0 and 1 further binary operations (AND, OR, NOT...).
example:
void BinaryMath::ProcessSquares (const Square** recognizedSquares, size_t size)
Square object is defined as:
Square (int id, const CvPoint ¢erCoordinates, int width, int height)
Algorithms
1.Iteration through array of squares
- Index of square A in Number squares vector
- Index of square B in Number squares vector
- Storing the pointers to Number squares to a separate vector
- Storing the pointers to Operator squares to a another separate vector
- Create distance list of Number squares
http://dl.dropbox.com/u/54364932/ipdossee/table.jpg
- Sort this list according to distance
On 15 March 2012 the Logic Team for Binary Math completed the grouping of square objects for further processing.
They are expecting to finish the rough version of the whole module by 16 March.
2.Create one cluster for every square – and put these clusters into one common vector C.
- Vector C before clustering:
- Vector C after clustering:
3.Create a support list, where index i is index of square in Number squares vector and value is index of cluster, to which square i belongs.
4.Iterating throuegh distance list and for every pair (A and B) we perform:
- In case that value of A and B in support list is the same, than continue with another iteration.
- In case that A and B have distance higher than some threshold value, than we stop the iteration.
- In case that A and B have distance lower than some threshold value objects are merged into a single cluster.
We designed a prototype of the cube.
It's important how many contours are on the cube because we recognize the contours and not the squares.
Here are examples of the design of the cubes.
As we have only thought about the cube surface, hence we have chosen this cube.
Artwork:
The problem was how we can combine several cubes?
The solution is a magnet.
We build a magnet into the wall of the cube to connect them later.
Our first cubes with magnets are finished.
The magnets are responsible to hold the cube together.
Now we have developed our cube.
We have glued a piece of paper with squares and triangles, that the camera can recognize the countures, on the cubes.
Sometimes less is more. We decided us to keep the GUI very simple.
Our welcome window has only buttons where you can choose between two modules.
The second window depends on which module is selected.
Our first prototype of the User Interface is looking like this.
The second model of our User Interface is more intuitive to use.
In the upper part you can choose a modul (Color Pallet or Binary Math).
The canvas shows you the result what the camer picks up.
The GUI Team has implements Methods to get the GUI. For each image they create a lable.
For test passing they create there own images with a position that they have decided.
They also created a configuration surface which is easy to use.
The Recognition Team is also working very hard.
The first challenge was that the camera detects the contours.
They have captured video from webcam, made it gray-scale and converted it to B/W (binary).
Furthermore they have been able to make recognition of shapes with 3 and 4 sides, as you can see in the picture.