Difference between revisions of "Roomba project"

From AIRWiki
Jump to: navigation, search
(Pyro: download and installation)
(Roomba's Pyro files configuration)
Line 46: Line 46:
 
First of all, you need to open the following file, as administrator:
 
First of all, you need to open the following file, as administrator:
 
  /usr/lib/python2.6/dist-packages/pyrobot/robot/roomba.py
 
  /usr/lib/python2.6/dist-packages/pyrobot/robot/roomba.py
 +
 +
At the line 459, you will find the code
 +
dev.sendMsg('\x89\x00\x80\x00\x00')
 +
 +
You should change the last '0' with a '1'. This piece of code represents the bytes sent to the Roomba to force the rotation anticlockwise, but with the final zero, it represents a translation forward.
 +
 +
At the line 316, you can find the code which transforms the value got by the sensors about the rotation angle in radians. You should replace the value '258' with '38.5':
 +
self.sensorData['angleInRadians'] = (2.0 * self.sensorData['rawAngle']) / 258
 +
This depends on how the Roomba sensors process the information, and probably it worked for another model of Roomba. The value 38.5 was obtained by proportions

Revision as of 19:18, 29 July 2010

Roomba Analysis and Modification
Image of the project Roomba project
Short Description: Roomba's control system study and modification
Coordinator: GiuseppinaGini (gini@elet.polimi.it)
Tutor: ThomasFerrari (tferrari@elet.polimi.it)
Collaborator:
Students: AndreaScalise (andrea.scalise@aol.it), NiccoloTenti (nicotenti@libero.it)
Research Area: Robotics
Research Topic: Robot development
Start: 2010/05/10
End: 2010/09/25
Status: Active
Level: Ms
Type: Course

This project is about studying the vacuum cleaner Roomba's brain, in order to modify and add new behaviours to it: in particular a wall-following algorithm will be implemented and tested. The interfacing with the robot will be provided by Pyro, a library, environment, graphical user interface to explore AI and robotics using the Python language.

Interfacing with Pyro

Pyro is a powerful software written in Python, used to provide a high level interface to many types of robots, regardless of their hardware structure. Here the main steps to configure properly the Pyro environment and to interface it with a Roomba. For the project a Roomba 535 will be used (the one shown in the photo).

Pyro: download and installation

First of all, you need to download the latest version of Pyro. You can choose between different versions and operative systems from this website: http://pyrorobotics.org/download/. Since the project will be developed under Linux, we will refer to Linux Ubuntu OS, using the Pyro version 5.0.0. Then, you need to install it, open a terminal, move to the pyrobot folder, write the following commands and follow the instructions:

./configure.py
make
makefile

If you have python version 2.6 or higher, you need to modify the file:

/usr/lib/python2.6/dist-packages/pyrobot/bin/pyrobot

changing the words "site-packages" with "dist-packages" wherever it appears. This modification must not be done if you have earlier python versions. From now on, we will refer to python version 2.6.

Now you can run the program writing from terminal:

cd /usr/lib/python2.6/dist-packages/pyrobot/bin/
./pyrobot

You can also copy the file executable file in your home folder, and write from terminal:

./pyrobot

Roomba's Pyro files configuration

Before starting to use pyrobot with the Roomba, you must modify some settings in the Roomba robot files; these modifications are needed because the interfacing with Roomba that Pyro provides it's general, so there might be different behaviours according to your Roomba model (in this documentation we refer to Roomba 535).

First of all, you need to open the following file, as administrator:

/usr/lib/python2.6/dist-packages/pyrobot/robot/roomba.py

At the line 459, you will find the code

dev.sendMsg('\x89\x00\x80\x00\x00')

You should change the last '0' with a '1'. This piece of code represents the bytes sent to the Roomba to force the rotation anticlockwise, but with the final zero, it represents a translation forward.

At the line 316, you can find the code which transforms the value got by the sensors about the rotation angle in radians. You should replace the value '258' with '38.5':

self.sensorData['angleInRadians'] = (2.0 * self.sensorData['rawAngle']) / 258

This depends on how the Roomba sensors process the information, and probably it worked for another model of Roomba. The value 38.5 was obtained by proportions