All projects assume that you can read and work in English. You are expected to write English-commented source code and documentation (if any). You can use any programming language, but you have to agree to make your program open-source.
Project assigned to: volunteer!
Short description: The robot is to reach the edge of a rectangular arena with obstacles. Use a Reinforcement Learning algorithm to learn a navigational strategy.
Long description: The state (input to the learning system) consists of the locations of the obstacles ([xi, yi] coordinates), and the location and heading of the robot ([xr,yr,alphar]). The system should learn a value function that will evaluate the state with an estimate of how good that state is with respect to the goal of reaching the particular edge (for example right side) of the rectangular areana. A new heading for the robot can be obtained every 20 steps of movement. The reward function gives high positive value when ithe robot reaches the edge, while it gives a negative value when the robot conflicts with obstacles. See also: Richard S. Sutton and Andrew G. Barto: Reinforcement Learning: An Introduction.
More information: andy @t microstep-mis.com, ppetrovic @t acm.org
Project assigned to: volunteer!
Short description: The robot is to reach the edge of a rectangular arena with obstacles. Train a neural network that can be used to navigate the robot.
Long description: The state (input to the neural network) consists of the locations of the obstacles ([xi, yi] coordinates), and the location and heading of the robot ([xr,yr,alphar]). The output of the network should be the new heading for the robot so that the robot will reach the goal with no collisions. Use either evolutionary or reinforcement methods to train your neural network through runs in a simulator.
More information: andy @t microstep-mis.com, ppetrovic @t acm.org
Project assigned to: volunteer!
Short description: Intelligent storeroom robot. The task for the robot is to move objects to target bins in a shortest time. Top-mounted camera overlooks the area in order to retrieve the positions and types of the objects, and the position of the robot.
Long description: Intelligent storeroom robot is to move red and blue balls placed on a rectangular arena to bins mounted on the edge of the arena. The robot is equiped with a gripper on its rear side. The task (similar to travelling-salesman) is complex (there will be 20+ balls), and therefore the use of [meta]heuristics is required. In this project, we will use evolutionary computation to improve a plan while it is being executed. The starting plan will be generated quickly by a fast heuristic, and while it is being executed, it will be improved using an evolutionary algorithm. The feedback from the camera is used to update the locations of the balls during the plan execution and update. Three possible approaches: 1) the balls may not be touched otherwise than using a gripper; 2) the robot is allowed to collide with the balls, and 3) the collisions result in time penalty. At the time of start, the path between the robot and the bins is free (does not contain balls).
More information: ppetrovic @t acm.org, andy @t microstep-mis.com
Project assigned to: not yet, please volunteer
Short description: The docking application is now turning the light on even when there is enough daylight because it is not able to determine if the daylight is strong enough for correctly detecting the robots. We need a program that loads an image from the camera and outputs a binary information: yes - light is needed, or no - the daylight is sufficient.
Long description: The image can be retrieved as jpg from camera (for example using libcurl, or just wget), it can be loaded to the application, for example using the cvLoad function from OpenCV (or some other way), and then the brightness values of the pixels should tell if the image is too dark (needs illumination), or if the brightness is high enough.
More information: Palo, ppetrovic @t acm.org
Project assigned to: not yet, please volunteer
Short description: Robots running in the virtual robotics laboratory are used by random users from around the world. When users connect or disconnect the robots, this is reported in the logfiles. We need a tool that will read these logfiles and generate graphical reports about the usage of the robots, and the distribution of the users around the World.
Long description: There are always 0-3 robots running and there are three laboratories. Each robot that is on is running in one of the three laboratories. Each laboratory generates its own logfile. The same robot can sometimes run in one laboratory, another time in a different laboratory. Robots are identified by the id of their BlueTooth (BT) module, and they print the id of their bluetooth module to the logfile of the laboratory where they run each time when they are started. They do not move to another laboratory without being re-started. There is always at most one robot running in each laboratory.
Various events can be reported in the logfiles, but your task is to ignore all other events except of entering and leaving exclusive mode. These events are associated with exact date and time of the event, and the ip-address of the user. An example logfile is shown here: example logfile. We would like your program to produce a bar-chart with 48 columns showing the usage of the laboratory during all 48 half-hours of the day. The height of the column should reflect the relative usage of the laboratory during that time slot (1.0 - means the lab was used every day at this time slot, 0.0 - means the lab was never used at this time slot, any other value in between is the ratio of number of days used against all the days). A single time slot is considered used if the lab was used anytime of the duration of that time slot. The program should take into account only a specified period of time. The output of the program should be a gif or png file which can be viewed in a web-browser. The program should also be able to produce another similar bar-chart, where the x-axis will contain the different connection lengths: less than 5 minutes, less than 10 minutes, less than 15 minutes, less than 20 minutes, less than 30 minutes, less than 45 minutes, less than 60 minutes, less than 2 hours, more than 2 hours, and the bar height will reflect the number of connections of the given length. Finally, the program should produce a bar-chart showing the usage of the laboratory by users from different countries - showing only 10 most frequent countries. It should use the whois (or similar) tool to determine the country based on the connection IP addresses.
More information: ppetrovic @t acm.org
Project assigned to: not yet, please volunteer
Short description: The robots can currently be controlled from Imagine, C/C++, Java, but also any other application that can load DLLs and call their methods. We would like to have a simple example how this can be done from Delphi.
Long description: For inspiration, see the examples in C++, they are in cvs. You can make this project more interesting, if your examples will not be so simple, perhaps interactive, some game, etc. But please include also one very simple example.
More information: ppetrovic @t acm.org
Project assigned to: not yet, please volunteer
Short description: The robots can currently be controlled from Imagine, C/C++, Java, but also any other application that can load DLLs and call their methods. We would like to have a simple example how this can be done from Visual Basic.
Long description: For inspiration, see the examples in C++, they are in cvs. You can make this project more interesting, if your examples will not be so simple, perhaps interactive, some game, etc. But please include also one very simple example.
More information: ppetrovic @t acm.org
Project assigned to: not yet, please volunteer
Short description: One of the main purposes of the Virtual Robotics Laboratory is to spread interest in robotics. In order to achieve that, we need to provide attractions to the random users, especially students (for example of the secondary schools). Currently, there is only a simple demo applet, which allows to control the laboratory, and it is possible to connect to the laboratory from any computer running Imagine on the Internet. Your task is to make a game that can be used in the remote settings and will not require presence of the maintenance staff. The game can involve multiple players.
Long description: The robots can be controlled from a Java Applet using simple API implemented in RemoteRobot class. The idea of the game is up to your creativity. The game should rather be educational, or logical than action type. If you can think of two versions - one for one player and one for two players, great. If you can write a program that will play the strategy of the second player, even better. The game can invlove the gripper robot and some items that can be placed around in the laboratory. The game should not involve drawing and pen as they dry out too fast. It would be wonderful, if you could prevent the robots crashing against each other and the walls. The game should be playable from www-browser.
More information: ppetrovic @t acm.org
Project assigned to: not yet, please volunteer
Short description: Develop an educational online contest using virtual laboratory. The contestants will
develop their simple programs in Imagine Logo that will perform a required task using the camera
gripper and the third robot. You need to develop a) the rules b) a very good and reliable API,
and c) contest administration. This project can be a bachelor or possibly even diploma thesis.
And the winning school.... could get Robotnacka! ;-)
Long description: The virtual robotics laboratory is an ideal testing platform, both for
educational researchers for introducing technology in the elementary and secondary schools or to
general public. In this project, you will have to develop an environment understandable and programmable
by children in Imagine - possibly incoroporating/sharing parts from the following project below, and/or
Ronalds thesis. Many of the code can be based on C++, Java, or whatever, but the interface for
the kids should be in Imagine...
Do talk to the Imagine people around and to us, we will also have some ideas.
More information: ppetrovic @t acm.org
Project assigned to: not yet, please volunteer
Short description: Develop an AI online contest using virtual laboratory. The contestants will
develop their programs that will perform a required task using the camera gripper and the third robot.
You need to develop a) the rules b) a reliable API, and c) contest administration.
This project can be a bachelor or possibly even diploma thesis. And the winner.... could get Robotnacka! ;-)
Long description: The virtual robotics laboratory is an ideal testing platform, both for
educational researchers for introducing technology in the elementary and secondary schools or to
general public. In this project, you will have to develop an AI environment - possibly based on
Ronalds thesis, where the AI algorithms will prove to be useful and help the agent to succeed.
Do talk to the AI people around and to us, we will also have some ideas...
More information: ppetrovic @t acm.org
Project assigned to: not yet, please volunteer
Short description: Some mobile phones are equipped with BT devices. Some of them are even
general enough so that applications can be written for them. We would like to see our robots
controlled from a mobile phone device!
Long description: Since we have little experience programming mobile phones, your
task will be more difficult - you have to figure out if it is possible and how.
There are different operating systems for mobile phones - primarly Symbian,
Windows Mobile,
and PalmSource.
So give it a try if it sounds interesting to you! You will need physical access to the robots, so you
have to be based in Bratislava, or have one robot yourself.
More information: ppetrovic @t acm.org
Project assigned to: Ronald
Short description: Several interesting applications are being developped for the virtual robotics laboratory.
However, testing these applications on the real robots may be dangerous and time consuming. We would need a simulator
of the laboratory so that the user or application would connect to the robot daemon in the same way, but the robot
daemon - when in simulated mode - would suppress the output to the real robots. However, it would still write the
commands to the log file and the simulator would then construct the image with the current situation from the
information retrieved log file. In such a way, the user could view an animated sequence of images in his
web browser or another client) instead of the view from the top-view camera. This project is tightly related
to the project Graphical replay of user session in virtual robotics laboratory. described above, and
they will hopefully share the implementation.
Long description: The virtuallab web-interface needs to be extended with the "simulate" option
and to show the resulting image generated by the simulator.
The robot daemon should be modified to suppress the output to the robots during the simulation.
For more details, see the description of the replay project above.
More information: ppetrovic @t acm.org
Project assigned to: Ronald
Short description: Robots running in the virtual robotics
laboratory are used by random users from around the world. When users connect or disconnect the robots, this
is reported in the logfiles. Each time the robots move, this is also reported in the logfiles in form of
packets according to Robotnacka protocol.
We need a tool that will read these logfiles and show an animated sequence of robot movements for each user session.
Long description: There are always 0-3 robots running and there are three laboratories. Each robot that is
on is running in one of the three laboratories. Each laboratory generates its own logfile. The same robot can
sometimes run in one laboratory, another time in a different laboratory. Robots are identified by the id of
their BlueTooth (BT) module, and they print the id of their bluetooth module to the logfile of the laboratory
where they run each time when they are started. They do not move to another laboratory without being re-started.
There is always at most one robot running in each laboratory. There are two types of logfiles - one reporting
the users logging in and out, and another one reporting the packets sent to the robot. Your task is to use the first one
to determine the list of user sessions first. Then use the second logfile to induce the movements of the robot and
construct an animation (either a Java Applet or animated GIF, AVI file, or a series of GIF or PNG files)
showing the robot movements. Examples of logfiles are shown here: example logfile
and example packet logfile.
More information: ppetrovic @t acm.org
Project assigned to: Palo, ppetrovic @t acm.org, there is a place to join in
Short description: The robots in the virtual laboratory are powered from batteries that last for several hours
of continuous operation or about a day of idle waiting. After that time, the robot must be parked in the recharging station. Currently, this is done manually by either the local or remote maintenance staff. Our goal is to have a parking daemon
that will park the robots whenever they are not used or when their battery is running out of the power.
Long description.
When robots' power falls down below some threshold, they
indicate that to the robot daemon. Robot daemon then immediatelly
executes this docking application. The docking application logs into
all three daemons as admin, stops the robots for at least a minute.
Then it reads their power for reference. Next, it turns off illumination,
loads the calibrated image, determines if the light conditions are ok,
if not, it turns the illumination on again, and then it detects
the position of the robots (locates the yellow circles
for the two marked robots and by some other magic it locates the camera
robot. It then plans the trajectory for the robot that is to be charged
(only one robot per each run of the application is docked) by first
finding a free (or appropriate?) recharging station and then loading a map of obstacles
from file (provided by the user or another agent), which is
completed by the other robot locations. It then generates a plan of robot
movements so that the robot can be parked. This can involve movements
of other robots. If there is no chance to generate
a plan, the application reports this to the log-file and terminates (it should
then refuse to start for the next 3 minutes). A possible reason for problems
can also be that one or two robots are off-line.
Once the plan is generated, it is executed, while monitoring the effects
of the actions being executed, and adjusting the plan as needed.
Robot approaches the station from a specific location that is computed
from the corner marks, and turns after reaching the station to prevent the
springs to push it away. Once parked, it waits for four minutes and then
measures the voltage. If it raised above
the power level detected in the beginning by at least 0.2V, it assumes
the robot is parked, and it will send it a reset command (this will cause
the daemon to restart), and quits, putting the robot daemon into recharge
monitoring state.
If the voltage level did not raise, it turns, moves away, approaches the station
again and turns again, but to another side. It repeats this dance until the
recharging starts or too many attempts were made (in that case it might
consider recharging on a different recharge station)
When the robot daemon is in recharge monitoring state, it does the following:
Normally, the docking application is started also each time after the user
logs out from the robot daemon (2 minutes after logoff), however this behavior can be
suppressed by a configuration option (at least, the registered user can prevent robots
from docking automatically during the registered time slot, while the battery
power is good )
The docking application can be running on a different workstation, but there
has to be a remote-launcher mechanism for the remote robot daemon to start it.
More information: ppetrovic @t acm.org
Project completed: Ronald, Dec 04 2005
Latest version available from: voltage/
Short description: Robots running in the virtual robotics
laboratory are powered from rechargable batteries. Robots report the voltage of their batteries every minute
in form of the internal communication protocol packets. All packets received from the robots are logged in files.
We need a tool that will read these logfiles on request and produce graphs that will help us analyze the recharging
times, and battery lifetime.
Long description: There are always 0-3 robots running and there are three laboratories. Each robot that is
on is running in one of the three laboratories. Each laboratory generates its own logfile. The same robot can
sometimes run in one laboratory, another time in a different laboratory. Robots are identified by the id of
their BlueTooth (BT) module, and they print the id of their bluetooth module to the logfile of the laboratory
where they run each time when they are started. They do not move to another laboratory without being re-started.
There is always at most one robot running in each laboratory.
When robot running, the laboratory queries the current battery voltage every minute. However, voltage queries can
occur also irregularly, if the laboratory user queries the robot manually. In addition, the robots can be turned
off at any time, so there can be long periods when their voltage level is not reported. When the logfile reaches
the size of 1 MB, a new logfile is created automatically, containing an HTML link to previous logfile. All logfiles
are formatted as HTML files. Empty lines, other packets and all other information in the logfiles should be
recognized and properly ignored. An example logfile is shown here: example logfile.
We would like your program to produce a standard line-chart where you plot the voltage against time for a specified
time interval. The graph should be saved to a gif- or a png- image file, so that it can be viewed in a web-browser.
The program should also produce an html-file with a list of recharging events during the specified time interval
in the following format:
More information: ppetrovic @t acm.org
Project completed: Palo, ppetrovic @t acm.org, Dec 01 2005, note: day/night issues spawned as separate project
Latest version available from: www/lab/ (camadjust.php, js/*, css/*, *.gif...)
Short description: There are three network cameras in the Robotics laboratory. The image properties of
these cameras can be configured only from a protected administrator interface of the camera. We need
an interface that any user could use in order to adjust the parameters. If some user is registered for
exclusive use of the lab, only that user should be able to modify the parameters.
Long description: The cameras have an embedded computer running Linux with a webserver. They
can be configured through the web interface after the user is authenticated as administrator.
Your task will be to write some piece of code that will emit http-transactions
to the camera - it will have to login as admin, and send requests that will change the brightness
or color level of the camera (if you find some other way to adjust the camera parameters, even better).
For example, you can use some C++ library (e.g. curl) to connect to the
camera web-server from your application, which would be called from php scripts. Part of your task is also creating
some nice www-interface, which will control the camera parameters and call your application underneath
(for this you can use Java Applet, or JavaScript, please avoid Flash). Your application should also
adjust the camera parameters during the day automatically - either according to the time/date, or even
better, according to the image that you can download from the camera and analyze its properties.
In such a way, the image properties would also reflect the changes of the illumination caused by the
weather changes. During night, your application will receive events (through the file system) when the
user turns the light on or off. Your application should produce log-files so that the maintenance staff
will be able to trace what was happening with the cameras.
More information: ppetrovic @t acm.org
Project completed: Palo, ppetrovic @t acm.org, Feb 05 2005
Latest version available from:www/lab/ (camadjust2.php, adjuster.php, js/*, css/*, *.gif...)
Long description: The cameras have an embedded computer running Linux with a webserver. They
can be configured through the web interface after the user is authenticated as administrator.
One of the cameras supports AXIS API, the other one has to be controlled by more complex http transactions,
and only some features can be controlled. See the completed project on controlling the brightness++ for details.
Your task will be to write some piece of code that will emit http-transactions
to the camera - it will have to login as admin, and send requests that will change the compression ratio,
image size, and framerate. You can use whatever means, but staying with JavaScript would be preferable.
This might require (but not necessarily) changing the html interface for displaying camera image.
More information: ppetrovic @t acm.org
Project completed: Palo, ppetrovic @t acm.org, 2006
Latest version available from: virtuallab/config
Short description: The goal is to design and implement a common configuration system for all
parts of the virtual laboratory. Thus the virtual laboratory could be configured using protected web-browser
interface, and all locally running programs could have access to the configuration variables dynamically
during the run, while the variables could optionally be changing underneath.
Long description: The number of configuration parameters of the virtual laboratory is growing with
each new utility or feature that is added. In the early stages, we kept the parameters directly
with the utilities - typically controlled by command line options and started from the scripts, where
the configuration options appeared at the top of the scripts as values of script variables. Other
solutions - such as compiled-in constants, proprietary configuration files also exist for some utilities.
We need a uniform way to configure all utilities - many of them share the same variables. Some variables
might be dynamic. The configuration should be accessible through www-interface.
(in later versions - consider grouping variables into logical groups and sections and provide
filter on viewing; think of priority levels - who has right to read and write to which variables? perhaps
provide user-group access rights to each variable?).
More information: Palo, ppetrovic @t acm.org
Project name: Online contest for schools
Project name: Online AI-contest
Project name: Controlling Robotnacka from mobile phone with Bluetooth.
Projects under development
Project name: Virtual lab simulator
Project name: Graphical replay of user session in virtual robotics laboratory.
Project name: Automatic recharging of robots
Completed projects
Project name: Generating graphical reports about voltage levels of robot batteries.
Recharge: day/time, voltage -> day/time, voltage (duration: hours:minutes)
The recharging events start when the power starts to increase, last while the power doesn't decrease,
and stop when the power stops increasing (i.e. increases for the last time before it will start decreasing again).
Project name: Control of camera parameters from www-interface
Project name: Control of camera compression and image size
Project name: Configuration engine for virtual robotics laboratory.