Showing posts with label ITINERA. Show all posts
Showing posts with label ITINERA. Show all posts

Thursday, September 16, 2010

1

ITINERA'S NEW VOICE

Here is the result of the poll about the new voice for the robot.

And the winner is...(drum roll)....:



Many thanks for helping me to choose!

Thursday, September 9, 2010

5

VOICE SINTHESYS, TEXT TO SPEECH

As I mentioned on the post about damage evaluation of ITINERA, the sound interface was missing. But today the new one arrived. So, it is time to give back to the robot its ability to speak.

In order to do that, I installed the Festival Speech Synthesis System. Since the OS of the robot is Debian this task is quite easy:

$ sudo apt-get install festival festvox-ellpc11k

The package festvox-ellpc11k contains the default Spanish male voice, which is the voice that the robot had previously.

I also installed 2 new Spanish voices, developed by Junta de Andalucia for Guadalinex. Those were quite easy to install as well:

$ wget http://forja.guadalinex.org/frs/download.php/154/festvox-sflpc16k_1.0-1_all.deb
$ wget http://forja.guadalinex.org/frs/download.php/153/festvox-palpc16k_1.0-1_all.deb
$ sudo dpkg -i festvox-palpc16k_1.0-1_all.deb
$ sudo dpkg -i festvox-sflpc16k_1.0-1_all.deb

And can be tested by doing this:

$ festival
Festival Speech Synthesis System 1.96:beta July 2004
Copyright (C) University of Edinburgh, 1996-2004. All rights reserved.
For details type `(festival_warranty)'
festival> (voice_JuntaDeAndalucia_es_sf_diphone)
JuntaDeAndalucia_es_sf_diphone
festival> (SayText "Hola, soy la nueva femenina de itinera")

festival> (quit)

$ festival
Festival Speech Synthesis System 1.96:beta July 2004
Copyright (C) University of Edinburgh, 1996-2004. All rights reserved.
For details type `(festival_warranty)'
festival> (voice_JuntaDeAndalucia_es_pa_diphone)
JuntaDeAndalucia_es_sf_diphone
festival> (SayText "Hola, soy la nueva masculina de itinera")

festival> (quit)

Now I have a problem... I don't know which voice I like the most!!!
Could you help me to choose please?

Here you are the samples of the 3 voices:

Original Voice


Feminine Voice


Masculine Voice

Which voice do you like?

Sunday, September 5, 2010

3

(CONTROLLING RKL298 WITH ARDUINO) ARDUINO: THE BEST PIECE OF HARDWARE EVER!

 Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. And it is also very cheap! Under 20€!



In a previous post I talked about an L298 based motor controller. It is the circuit that is going to replace a faulty motor controller of the robot ITINERA. Now I need a way to command the new motor controller via a PC serial port. The previous motor controller had a Serial Motor Interface, it costs over 50€ and it is not compatible with the new motor controller.

Another issue is that the robot is programmed to use the protocol of the old Serial Motor Interface and I would not like to change that program because it took me so long to build it :p

The solution is my new best friend: Arduino. I have never used it before but thanks to its features I could program it to do what I need in less than 1 hour... and the best of all... it worked at the first attempt!!!!

Here you have the source code, it could be useful if you want to reproduce this kind of motor control or if you just want to see how easy it is to program an arduino.

I recommend you to read it, you will find much more details than in this post ;)

/*
   Serial Motor Interface
   Author: Martin Peris-Martorell - www.martinperis.com

   Description: This program is a serial port motor interface.
   It is used to command an H-Bridge motor controller based on
   L298. 
   This motor controller can be found at www.rkeducation.co.uk
   under the reference part number: RKL298 PCB

   The RKL298 PCB can control 2 DC motors. The control is achieved
   by using 6 control lines: ENA, IP1, IP2, ENB, IP3 and IP4.

   ENA, IP1 and IP2 are used to command the motor A
   ENB, IP3 and IP4 are used to command the motor B

   Wiring with arduino: 
  
   RKL298 PCB |     Arduino
   -----------------------------
   ENA       <-> Digital port 12
   IP1       <-> Digital port 11
   IP2       <-> Digital port 10
   
   ENB       <-> Digital port 7
   IP3       <-> Digital port 6
   IP4       <-> Digital port 5 

   A LED can be connected to digital port 13  

   Serial port configuration: 9600 bauds

   Comunication protocol: Connect the arduino via USB to
   a PC, or via digital pins 0 and 1 to a serial port.

   Open the serial port for communication and send 3 bytes.
   The format is:

   Byte 0: 255  //Sync. signal
   Byte 1: Motor identificator. 0 for motor A, 1 for motor B.
   Byte 2: Command. A value between 0 and 63. 
                    0       = Full stop (free running)
                    1 - 31  = Backward with PWM ( 1: slowest, 31: fastest)
                    32      = Full stop (active braking)
                    33 - 63 = Forward with PWM (33: slowest, 63: fastest)

  For example, if you want to move motor A backward at 50% of speed
  the command would be:  255 0 16
  If you want to stop motor A the command would be: 255 0 0


  This program is distributed under the terms of the GNU General Public License.
   
  Enjoy it.
*/


/* Declarations for serial communications */
int incomingByte[128];
int numBytes = 0;

/* Declarations for wiring */
int pinEN[2];
int pinIP1[2];
int pinIP2[2];


void setup(){
int i = 0;
//0 refers to Motor A; 1 refers to Motor B
pinEN[0] = 12;
pinEN[1] = 7;

pinIP1[0] = 11;
pinIP2[0] = 10;

pinIP1[1] = 6;
pinIP2[1] = 5;

//Set pin modes
for (i = 0; i < 2; i++){
pinMode(pinEN[i], OUTPUT);
digitalWrite(pinEN[i],HIGH);
pinMode(pinIP1[i], OUTPUT);
digitalWrite(pinIP1[i],LOW);
pinMode(pinIP2[i], OUTPUT);
digitalWrite(pinIP2[i],LOW);
}

//Light up the led
pinMode(13,OUTPUT);
digitalWrite(13,HIGH);

//Open serial port
Serial.begin(9600);
}

void loop(){
int i = 0;
int motor = 0;
int action = 0;

//Check for data in serial port
numBytes = Serial.available();
if (numBytes >= 3){

//Read all the data in the buffer
for(i = 0; i < numBytes; i++){
incomingByte[i] = Serial.read();
}

/* The data received should be: 255 M A
       Where:
        255 is the sync byte 
        M is the motor number (0 or 1)
        A is the action (a number between 0 and 63)
    */
if (incomingByte[0] != 255 || incomingByte[1] < 0 || incomingByte[1] > 1 || incomingByte[2] < 0 || incomingByte[2] > 63){
Serial.flush();
return;
}

/* The received data is correct -> activate the appropriate pins */
motor = incomingByte[1];
action = incomingByte[2];

if (action == 0){
//Full stop (free running)
digitalWrite(pinIP1[motor],LOW);
digitalWrite(pinIP2[motor],LOW);
return;
}

if (action == 32){
//Full stop (active braking)
digitalWrite(pinIP1[motor],HIGH);
digitalWrite(pinIP2[motor],HIGH);
return;
}

if (action >= 1 && action <= 31 ){
//Reverse with PWM
analogWrite(pinIP1[motor],0);
analogWrite(pinIP2[motor],(action-1)*8);
return;
}

if (action >= 33 && action <= 63 ){
//Forward with PWM
action = action - 32;
analogWrite(pinIP1[motor],(action-1)*8);
analogWrite(pinIP2[motor],0);
return;
}

}

}

Here you can see a video demonstrating how it works, sorry for my Spanish accent xD

Tuesday, August 31, 2010

0

DO NOT REINVENT THE WHEEL!

Sometimes when you work in a complex robotic project you face the question: Should I build myself a certain part or should I buy a manufactured one?

Recently I faced that question, the robot ITINERA needs a new circuit to control 2 DC motors because the old one is malfunctioning. Then it came to my mind that some years ago I implemented such a circuit by using a self-made PCB board,  an L298 integrated circuit and some other components (diodes, resistors, etc...)



So now I could build it again and use it, but lets think about it... if I buy all the components I would spend about 15€ and it would take me about 2 hours to build it. Time is money, so if we translate two hours of work into money, lets say that is equivalent to 40€. In total: 55€ (Not taking into account the time spent going to the store and getting the components)

In the other hand, performing a quick search on Internet you can find products matching your needs. In my case an  L298 h-bridge with a price of 12,42€


I think, in this case, the answer to the question raised at the beginning of this post is pretty clear: Do not reinvent the wheel!!! 

By the way, the circuit in the last picture is the one that will replace the faulty motor controller of ITINERA.

Saturday, August 28, 2010

0

NEW POWER BUTTON: THOSE LITTLE THINGS

Well, ever since I started writing this blog and about ITINERA, I always said that it is a "handmade" robot. But somethings in the robot are too "handmade",  you know what I mean?

Let me put an example:


Yeah... that was the power switch of the robot, it was not a "handmade" job, it was a clumsy job (shame on me xD). So I decided to fix it.

I took a fancy power switch from an old computer, a couple of LEDs and attached it to the structure of the robot.


Then connected the power switch to the PC's mother board and one of the LEDs to the Power LED bay. The other LED is connected to the  motor's power source to indicate whether it is ON or OFF.


This is the result:



Looks much better :D

Tuesday, August 24, 2010

0

DAMAGE EVALUATION

In our world time is something we cannot fight. It goes by for everybody, even for robots.

So after all these years of inactivity and reusing components for other projects, the time has come to evaluate the damage caused to the robot.

Here is a list of the robot's components and its status:

ITEMSTATUS
StructureWorking
Control PC BoardMissing
Mini SSC IIWorking
Serial Motor InterfaceWorking
H-Bridge Motor controllerPartially Working - Can't move both motor wheels at the same time
FireWire InterfaceMissing
Ethernet InterfaceWorking
Wireless InterfaceMissing
Sound InterfaceMissing
MicrophoneMissing
Hard DriveMissing
Control PC Power SourceMissing
Motors Power SourceWorking
BatteryMissing
Stereo CameraWorking
Panoramic CameraMissing
BumpersWorking

Poor guy, almost half of the components were missing. Fortunately those components were easy to replace and some of them were not even needed. So, right now this is how ITINERA looks:



And thanks $DEITY: IT IS ALIVE!!

Friday, August 20, 2010

0

ITINERA: THE MAKING OF

Here is a video that shows a little bit about the making of this robot.

First it was designed by using the software Virtual Robot Simulator (http://robotica.isa.upv.es/virtualrobot). This software is similar in some ways to Microsoft's Robotic Developer Studio, the difference is that VRS was developed by the robotics group of UPV some years before MRDS and it is OpenSource.



After the digital design was approved, the actual assembly of the robot began... you should forgive me... I am a Computer Science Engineer not an Industrial or Mechanical Engineer, so the look was very "handmade" and the details not so polished... but, hey it works! It is not that bad :P 

Monday, August 16, 2010

1

ITINERA: WHAT WAS IT CAPABLE OF?

In this post I am going to roughly describe what the robot was able to do just before it was abandoned.

As mentioned in a previous post, the aim of the robot was to display the technology developed by ITI. Thanks to that technology the robot was able to perform several tasks related to speech recognition, speech synthesis, computer vision, biometry and navigation. But there was no specific task to be solved by the robot, it was just an exotic platform to display new technology.

The most basic task was to move around, this robot is a differential vehicle; it means  that it has two wheels set in the same axis and powered by independent motors. So, if both motors are set to the same speed and the same direction the robot will move straight forward (or backward depending on the direction of the motors). But, if both motors are set to the same speed and opposite directions then the robot will spin over itself. This vehicle configuration has been widely studied and its control is very simple. Based on this configuration I implemented a very simple layer of software to control the movements of the robot.

To complement the moving task, the robot had a series of bumpers and infrared beams that allowed it to detect collisions

Mounted on the top of the robot's head there was a camera pointing to an hyperbolic mirror. This mirror allowed the robot to see a 360 degrees picture of the scene. The purpose of this camera was to detect movements and then follow them.


In order to detect movements, first the image was flattened by using the Bresenham's algorithm. After that, the motion was detected by simple image subtraction (yeah, it is naive, but it was good enough).

This is the result of flattening the image and motion detection (you can see a vertical white line pointing out that I was moving in front of the robot)



Then there was the stereo camera. It was meant to be used to extract 3D information, but in fact only one of the images (eyes) was used. That eye was used to locate and identify faces, that means that the robot was able to know the identity of the person standing in front of it and track it.


Almost all the interaction with the robot was performed using a voice interface. That interface was implemented using ATROS (Automatically Trainable Recognition of Speech), a software developed by the PRHLT group of ITI. Thanks to this software (maybe someday ITI will release it under GPL license) it was easy to define a list of commands to be understood by the robot and associate an action to perform, for example:

  • move forward, move backward, move left, move right


  • follow me, who am I?

  • tell me the weather forecast, tell something funny

  • ....

The ability to speak was given by the Festival Speech Synthesizer. The Spanish voice was quite depressive but that made it funnier when you asked the robot's name and it answered   I tell you if you rub my hard drive


All the funny sentences and jokes came from Unix Fortune, a program that displays a random sentence from a database.

And that is pretty much it. Check this previous post if you want to see it in action.

Monday, August 9, 2010

0

ITINERA: A LOWCOST HANDMADE ROBOT

ITINERA was the robot that I built as Degree Project five years ago at ITI (Instituto Tecnológico de Informática). The aim of this robot was to integrate all the technology developed at ITI in subjects like Speech Recognition, Computer Vision and so on.

The thing you should keep in mind when looking at ITINERA is that it was a low cost project and handmade.

Basically it is a regular PC with an aluminum structure, motors, wheels, cameras,some control circuits and software.

Here you can see ITINERA in action (thanks to Luis for the video):


It was taken to several events and it claimed the attention of a lot of people. Unfortunately I was assigned to other projects and ITINERA was abandoned :(

Now, five years later, I have a couple of months free and I wanted to rescue that robot and do some upgrading. I talked to the people of ITI and they, very gently, lend it to me so I could work with it at home.

After all this years of being in a corner it was in really bad shape. Now I started to repair and reprogramme it (I am ashamed of the software I wrote 5 years ago xD).

Monday, August 2, 2010

0

HELLO WORLD!

This is the first post in this blog. You see, I have always been an enthusiast of robotics, computers and technology and I always wanted to share that enthusiasm with the rest of the world.

Recently I rescued a robot that I built five years ago (2005). While restoring the robot it came to my mind that this could be the motivation I needed to start a blog, describe the project as it grows and talk a little bit about things related to the world of robotics, computer vision, artificial intelligence and technology.

So, here it is. If you'd like to, you are more than welcome to come and visit this site anytime.