Reaali Robootika.COM

NXT robotimaailm ja programmeerimine C-keeles

Kuidas meie tiim esitluseks valmistub

Juba mitu nädalat on tegeletud projekti esitluse ettevalmistamisega.

Robootika.COM tööhoos

Küll sai toodud mööblipoest pappkaste, ehitatud maja, kleebitud kirjasid peale, teibitud lahtisi kohti, värvitud jäätiseid, lõigatud kosmonauti, joonistatud kirjasid jne. Kõik mis on vajalik ühe 5 minuti pikkuse teatrietenduse rekvisiitideks.

Uskumatu millise innuga kogu seda tööd tehti, käidi õues ja keldris rekvisiite värvimas, teibiti ja ehitati Aki pead jms.

RaimondAKI

Ja siin on näha ka kaua-tehtud-kaunikene Aki pea.

Meie pilt: Robootika.COM tiim

Kes on Robootika.COM tiim? Ikka meie, siin oma tuliuutes ja nimelistes t-särkides.

RobootikaCOM tiim

Vasakult lugedes:

Raimond, Jaan, Tomi-Andre, Ramses, Leivo, Marko-Raul, Rao.

Õpi kuidas robotid aitavad õnnetuste korral

Robotid mängivad erakordselt suurt rolli katastroofide korral otsi-ja-päästa rollides. Eriti oluliseks muutub see siis kui katastroofipiirkond on inimestele ohtlik või ligipääsetamatu. Näiteks saastatud mürgigaaside poolt või koht kuhu pääseb ainult miniatuursete mõõtmetega või lendav robot.

Üldiselt juhitakse selliseid roboteid mängumaailmast tuntud joystiku abil. Microsofti teadlased Massachusetti ülikoolist on välja töötamas lahendust kuidas hakata roboteid juhtima Microsoft Surface puutetundliku tehnoloogia abil, tehes seda palju loomulikumal ja täpsemal viisil.

Get Microsoft Silverlight

FLL-i laua kokkupanek ja tutvustus

Täna, 2. oktoobril toimus meie tiimil 4h kestev FUN-üritus, mille käigus sai kokku pandud FLL-i laud.

 

ENJOY THE VIDEO

Team: Robootika.COM

 

Kuna kõik liikmed ei saanud osaleda siis Tomi näiteks osales laua kokkupanekul Kinect-video vahendusel – ja kõigil oli tore Smile

 

Ja leidsime ühe probleemi, nimelt teatud tingimustel võivad viljapead jääda kombaini sisse kinni.

FLL food factor issue

Robotex 2011 ja First Lego League

RobotexIga aastaga lähevad robootika võistlused keerukamaks ning tänavu enam Robomiku võistlust ei toimu, vähemalt mitte sügisel. Selle asemel toimub Robotexi raames ka põhikoolide robotivõistlus FLL (First Lego League), mis on ühtlasi ka Eestisiseseks FLL-i eelvooruks.

Kevadisel FLL-i võistlusel ajas Heilo asjad nii kaugele, et Eesti sai ametlikuks partnerriigiks FLL-le, mille ametlik koduleht asub siin: http://www.robootika.ee/flleesti/

FLL Food Factor

FLL on robotivõistlus, mille käigus valmistatakse Legorobot, mis peab 2,5 minuti jooksul lahendama platsil palju erinevaid ülesandeid. Igal aastal on oma temaatika ning 2011 FLL-i teema on Food Factor.

Millised näevad välja Food Factory ülesanded, seda näeb siit: http://www.youtube.com/watch?v=SvdTbTf4G0k Huvitav on selle aasta ülesande juures ülesande keerukus ning korraldajad ise ütlevad et kogu ülesannet on füüsiliselt võimatu 2,5 minuti jooksul lahendada.

Eks näis Smile

 

Meie ringi peaeesmärk on keskenduda maksimaalselt Robotexil toimuvale FLL-i võistluse eelvoorule. Selge see, et samamoodi keskenduvad ka paljud teised koolid sellele võistlusele.

Ja võit läheb ainult parimale!

 

Robootika tiim on saanud olulist juurdekasvu ning me anname endast maksimumi nii tiimina kui ka robotit ehitades.

Robootika ring

robotTahad olla oma klassi parim programmeerija?

Tahad osaleda Robotexil?

Tahad sõita kevadel Euroopa meistrivõistlustele Eestit esindama?

Tahad õppida tulevikutehnoloogiaid?

 

Kas matemaatika on Sinu meelest peaaegu lihtne?

Kas tööõpetuses on lahe kui saab midagi ehitada?

Kas oled kunagi jootekolbi käes hoidnud?

Kas meeldib teistega koos arutleda ja probleemidele lahendusi leida?

 

Muuda oma mindseti ning tule ja paneme kokku Eesti parima robootika tiimi!

Ole valmis selleks, et õppida uusi asju:

·         Kuidas ehitada roboteid Lego Mindstorm platvormil?

·         Kuidas programmeerida C-keeles NXT robotit?

·         Mis asjad on WHILE, FOR jms tsüklid, kuidas kasutada IF-ELSE lauseid?

·         Mis on Ternary Condition ja mis asjad on bool, int, string, float jne?

·         Mis asi on PID kontroller ja kuidas sellega saab Robotexi jaoks line follower robotit tuunida?

·         Kuidas lugeda I2C anduritest infot?

 

Kui sa oled 13-15 aastane ning huvitatud robotitest ja programmeerimise õppimisest siis kirjuta meiliaadressil leivo@robootika.com .

Koos käime kesklinnas ning kohtade olemasolul saad liituda ja tulevikutehnoloogiaid õppida. Selle aasta Robotexi võistlusel TTÜ-s tulevad lahendamisele ülesanded: jalgpall, joonel sõitmine kiiruse peale ning ilmselt ka FLL-i võistluslaualt ülesannete täitmine.

See aasta saab olema tihe ja huvitav!

Robootikaga Euroopa meistrivõistlustele

Ülemaailmsed, Lego robootika platvormil baseeruvad võistlused kannavad nime FLL ehk First Lego League.

Need võistlused toimuvad tänavu juba 11. korda, kuid oluline on siinkohal see, et Eestist minnakse sinna esimest korda võistlema. On kokku pandud Tallinna-Tartu esindustiim.

Käesoleva aasta teemaks on Body Forward ehk siis inimkeha arendamine ja parendamine. Võistlus koosneb kahest poolest – robotiehitusest ja projektist. Robotiehituse juures tuleb ehitada robot, mis 2,5 minuti jooksul lahendab ära hulga keerukaid ülesandeid. Projekti raames on vaja lõpptulemusena esitada 5 minuti pikkune presentatsioon, mis haakub inimkeha arendamisega seotud teemasse.

Roboti ülesanne

Robot peab sõitma spetsiaalsel laual ning iseseisvalt ülesandeid lahendama. Aprillis toimus meil tiimi kohtumine ning alljärgnevas videoklipis tegeleme laua kokkupanekuga ja Ramses tutvustab sealseid ülesandeid.

FLL 2011 Body Forward laua ettevalmistus

Projekt

Meie tiim valis peale ajurünnakut oma teemaks kuulmispuude ja pakume välja lahenduse, kuidas selle puudega inimesed saaksid oluliselt lihtsamal moel suhelda teiste inimestega, kes viipekeelt ei mõista.

Lahenduseks mõtlesime välja “viipekeele tõlk videotöötluse abil”. Tehnoloogilise platvormina on vajalik arvutiekraan teksti ja sõnumite edastamiseks, mikorofon kõneleva inimese jutu muutmiseks tekstiks ja Kinect sensor mis suudab tuvastada viipekeeles kõneleva inimese liigutusi.

Viiplemine tõlgitakse arvutiekraanil teisele osapoolele arusaadavateks sõnadeks ning kõneleja tekst omakorda muudetakse kuulmispuudega suhtleja jaoks arvutiekraanil mõistetavateks sõnadeks.

Presidendi Lossis

Jõudsime Robomiku finaalis 3. kohale ning esikohtadele oli organiseeritud vastuvõtt Presidendi juures.

President Toomas-Hendrik Ilves ja robootika

See oli äärmiselt mõnus ja meeldejääv sündmus. Alguses tehti meile ringkäik Lossis ja tutvustati sealseid ruume ning elukorraldust. Ajaloost, K.Päts on olnud 9 korda President, sellist resümeed on vähestel ette näidata. Lossi seinakate on mitmes ruumis kaunis elegantne ja peen kangas (mitte värv ega tapeet). Kogu majesteetlik mööbel on eesti käsitööliste tehtud ja hästi säilinud või renoveeritud.

Ainult üks mõistatus jäi kogu sellest käigust – et miks Venemaa relvakambrist pole võimalik kätte saada Eesti Vabariigi esimese presidendi Konstantin Pätsi ametiketti? Ja keegi ei teadvat miks ja kui kauaks see seal asub?

Aitäh President, et leidsid oma väga tihedas graafikus aega meie vastuvõtuks ning innustamaks noori insenere jätkama sellega millega nad tegelevad.

Robomiku võistluse roboti programm

Robomiku võistlusel saavutasime 3. koha.

Koos reavahede ja kommentaaridega tuli kokku ligi 200 rida koodi.

Kuna palusin poistel kommentaarid juurde panna siis peaks olema arusaajale inimesele täitsa loetav kood. Kuna kasutasime mitte kõige uuemat versiooni NXC-st siis seetõttu on LineLeader anduriga suhtlev library siia eraldi included. Uuemasse softi (15. märts 2011) on juba kõik need uute andurite driverid sisse kirjutatud.

/*
autor: Ramses Sepp 20/03/11
robomiku 2011 kevad karupäästmise programm
selles programmis:
* sõidab robot mööda joont LineLeader anduri abil
* leiab rohelisi ja hõbedasi teibiribasid mis on kannatanud ja annab nendest märku
* tuvastab IR abil karu ja annab temast märku
* robotil on haarad mille abil ta kannab karu majast välja
*/

#include "LL-Lib.nxc"
#define IR_TOUCH S1
#define I2C_SENSOR S2
#define COLOR S3
#define LIGHT S4
#define LL_ADDR 0x04

long endTime;
bool haaradLahti = FALSE;
bool mulOnKaru = FALSE;
task DriveOnTheLine();
task KeeraRobotit180();
task KeeraRobotit();

//funktsioon ArvutaKiirus tagastab väärtuse, mis jääb -100 ... 100 vahele
int ArvutaKiirus(int x, int min, int max)
{
if (x < min)
   return min;
else if (x > max)
   return max;
else
   return x;
}

//alamprogramm HaaradLahti avab haarad ning seejärel robot sõidab edasi
task HaaradLahti()
{
RotateMotorEx(OUT_A, -100, 6840, 0, FALSE, TRUE);
haaradLahti = TRUE;
//endTime muutujat kasutatakse selleks 
//et robot sõidaks peale haarade lahti tegemist 2 sekundit edasi
endTime = CurrentTick() + 1000;
ExitTo(DriveOnTheLine);
}

//alamprogramm HaaradKinni sulgeb haarad ning siis käivitub roboti pööramine
task HaaradKinni()
{
RotateMotorEx(OUT_A, 100, 6840, 0, FALSE, TRUE);
mulOnKaru = TRUE;
haaradLahti = FALSE;
ExitTo(KeeraRobotit180);
}

//alamprogramm KeeraRobotit180 keerab robotit 180 kraadi 
//kuni ta on joone keskel
task KeeraRobotit180()
{
int onJoonel;
//hakkame mootoreid keerama, et robot liiguks joonelt ära
RotateMotor(OUT_BC, 40, 360);
OnFwdReg(OUT_B, 40, OUT_REGMODE_SPEED);
OnFwdReg(OUT_C, -40, OUT_REGMODE_SPEED);
Wait(1000);
while (TRUE)
   {
   OnFwdReg(OUT_B, 40, OUT_REGMODE_SPEED);
   OnFwdReg(OUT_C, -40, OUT_REGMODE_SPEED);
   //loeme LL andurist kas robot on joone keskel
   onJoonel = LL_Read (I2C_SENSOR, LL_ADDR, LL_READ_AVERAGE);
   //kui robot on joone keskel siis käivitub uuesti põhiprogramm
   if (onJoonel < 50 && onJoonel > 40)
      {
      Off(OUT_BC);
      ExitTo(DriveOnTheLine);
      }
   }
}

//alamprogramm KeeraRobotit keerab robotit 180 kraadi
task KeeraRobotit()
{
RotateMotor(OUT_BC, 50, 360);
RotateMotorEx(OUT_BC, 50, 1100, 100, TRUE, TRUE);
Off(OUT_BC);
ExitTo(DriveOnTheLine);
}

//alamprogramm DriveOnTheLine on joone jälgimise, kannatanute tuvastamise
//ja karu kandmise programm
task DriveOnTheLine()
{
int steering;
int b_speed;
int c_speed;
int rohelisedMehed;
int hobedasedMehed;
bool naebKaru;
int karuKaugus;
bool onSoitnud2Sek = FALSE;
int baasKiirus;

//lõpmatu tsükkel mille sees toimub enamus programmist
while (TRUE)
   {
   rohelisedMehed = Sensor(COLOR);
   hobedasedMehed = Sensor(LIGHT);
   naebKaru = !Sensor(IR_TOUCH);
   karuKaugus = SensorUS(I2C_SENSOR);
   
   //kui värviandur näeb rohelist või hõbedast meest põrandal
   //annab heliga märku
   if (rohelisedMehed == 3 || hobedasedMehed > 70)
      {
      PlaySound(SOUND_DOUBLE_BEEP);
      }
      
   //kui IR_sensor näeb karu, haarad on kinni ja mul ei ole karu 
   //siis annab sellest heliga märku:P
   if (naebKaru && !haaradLahti && !mulOnKaru)
      {
      Off(OUT_BC);
      PlaySound(SOUND_UP);
      ExitTo(HaaradLahti);
      }
   
   //kui haarad on lahti, ei näe karu ja on sõitnud 2 sekundit 
   //siis paneb haarad kinni
   if (haaradLahti && !naebKaru && onSoitnud2Sek)
      {
      Off(OUT_BC);
      ExitTo(HaaradKinni);
      }
   
   //kui robot on haarad lahti teinud siis ta sõidab 2 sekundit joonel edasi
   //enne kui hakkab kontrollima kas on tarvis haarasid kinni panna
   if (haaradLahti)
      {
      if (endTime < CurrentTick())
         {
         onSoitnud2Sek = TRUE;
         }
      }
   
   //steering muutujasse kirjutatakse LineLeaderist steering väärtus
   //mida kasutatakse mootorite juhtimisel
   steering = LL_ReadSteering(I2C_SENSOR, LL_ADDR);
   
   //see If lause on vajalik, et steering oleks vahemikus -127 ... 127
   if(steering > 127)
      {
      steering = steering - 256;
      }

   // kui robot sõidab üles siis on baasKiirus 40, allaminekul 30
   if (mulOnKaru)
      {
      baasKiirus = 30;
      steering = steering / 3;
      }
   else
      {
      baasKiirus = 40;
      }
   /*
   mootoritele õige kiiruse andmine
   igal juhul ei saa olla mootori kiirus suurem kui 100
   igal juhul ei saa olla mootori kiirus väiksem kui -100
   */
   b_speed = ArvutaKiirus(baasKiirus + steering, -100, 100);
   c_speed = ArvutaKiirus(baasKiirus - steering, -100, 100);
   
   //kuna mootorid on tagurpidi siis peame muutma väärtused vastasmärgiliseks
   b_speed = 0 - b_speed;
   c_speed = 0 - c_speed;
   
   OnFwdReg(OUT_B, b_speed, OUT_REGMODE_SPEED);
   OnFwdReg(OUT_C, c_speed, OUT_REGMODE_SPEED);
   }
}

task main()
{
SetSensorLight(LIGHT);
SetSensorColorFull(COLOR);
SetSensorLowspeed(I2C_SENSOR);
SetSensorTouch(IR_TOUCH);
Wait(SEC_5);

LL_Write_KP(I2C_SENSOR, LL_ADDR, 40, 32); //katsetada 0...100 //alla:40
LL_Write_KI(I2C_SENSOR, LL_ADDR, 0, 32);  //jääb nulliks
LL_Write_KD(I2C_SENSOR, LL_ADDR, 5, 32);  //katsetada 0..20 //alla:5

StartTask(DriveOnTheLine);
}