Ampujarobotti
Alla oleva esimerkkikoodi hyödyntää Vision Subsystem v4 for NXT- kameraa ja sitä varten rakennettiin varta vasten koulun perusroboteista poikkeava robotti. Robottissa ei käytetä muita sensoreita ja se sisältää pallonampujan.
Toiminta: Robotti pyörii aluksi ympäri, kunnes se havaitsee halutun värisen kohteen, tässä tapauksessa punaisen kohteen, ja alkaa tämän jälkeen lähestymään kohdetta. Kun robotti havaitsee kohteen määritellyn arvon korkuisena, se kääntyy hetken aikaa vasemmalle, tähdäten ampujan kohti kohdetta, ja ampuu. Tämän jälkeen robotti alkaa jälleen pyörimään ja etsimään uutta kohdetta ja toistaa samat operaatiot kuin edellä. Kohteiden määrä on määritelty kolmeen kappaleeseen tässä esimerkissä.
HUOM! Kamera saattaa sammua, mikäli ohjelma pysäytetään kesken ajon (=kameran punainen valo sammuu), jolloin ohjelmaa uudelleen ajettaessa robotti vain pyörii ympyrää tunnistamatta mitään. Esim. kun robotti on ampunut kerran ja se sammutetaan sen jälkeen. Mikäli näin tapahtuu, kytke kameran piuha irti ja takaisin, jolloin punainen valo syttyy, jonka jälkeen voit kokeilla ohjelmaa uudelleen.
Koodinpätkän alapuolelta löytyy ohjetta NXTCamView-ohjelman käyttöönotosta ja linkki, josta saa ohjeita sen käytöstä. Ohjelmalla voidaan määritellä kameran seuraamat väriskaalat.
Code Block |
---|
Wiki Markup |
h3. Ampujarobotti Alla oleva esimerkkikoodi hyödyntää Vision Subsystem v4 for NXT\- kameraa ja sitä varten rakennettiin varta vasten koulun perusroboteista poikkeava robotti. Robottissa ei käytetä muita sensoreita ja se sisältää pallonampujan. Toiminta: Robotti pyörii aluksi ympäri, kunnes se havaitsee halutun värisen kohteen, tässä tapauksessa punaisen kohteen, ja alkaa tämän jälkeen lähestymään kohdetta. Kun robotti havaitsee kohteen määritellyn arvon korkuisena, se kääntyy hetken aikaa vasemmalle, tähdäten ampujan kohti kohdetta, ja ampuu. Tämän jälkeen robotti alkaa jälleen pyörimään ja etsimään uutta kohdetta ja toistaa samat operaatiot kuin edellä. Kohteiden määrä on määritelty kolmeen kappaleeseen tässä esimerkissä. HUOM\! Kamera saattaa sammua, mikäli ohjelma pysäytetään kesken ajon (=kameran punainen valo sammuu), jolloin ohjelmaa uudelleen ajettaessa robotti vain pyörii ympyrää tunnistamatta mitään. Esim. kun robotti on ampunut kerran ja se sammutetaan sen jälkeen. Mikäli näin tapahtuu, kytke kameran piuha irti ja takaisin, jolloin punainen valo syttyy, jonka jälkeen voit kokeilla ohjelmaa uudelleen. Koodinpätkän alapuolelta löytyy ohjetta NXTCamView-ohjelman käyttöönotosta ja linkki, josta saa ohjeita sen käytöstä. Ohjelmalla voidaan määritellä kameran seuraamat väriskaalat. {code} #pragma config(Sensor, S4, Kamera, sensorI2CCustomFastSkipStates) #pragma config(Motor, motorA, Oikea, tmotorNormal, PIDControl, encoder) #pragma config(Motor, motorB, Vasen, tmotorNormal, PIDControl, encoder) #pragma config(Motor, motorC, Ampuja, tmotorNormal, PIDControl, encoder) #define KohteidenMaara 3 // Kohteiden lukumaara #define NOPEUS 20 // Etenemisnopeus #define NOPEUS2 100 // Tykin nopeus #define ResX 88 // NXTcamin resoluutio (Loydettavissa kameran dokumentaatiosta) #define ResY 144 #define KpX 0.3 #define KpH 0.8 #define KohteenKorkeus 130 // Kohteen haluttu korkeus #define Odotusaika 75 #include "rdpartyrobotcdr-v2.6/drivers/common.h" // Sisallyttaa ajuripaketista ajurit koodiin #include "rdpartyrobotcdr-v2.6/drivers/NXTCAM-driver.h" void Pysayta(); // Pysayta kaikki moottorit void Etsi(); // Etsi kohde void Ammu(); // Ammu pallo task main() { blob_array blobs; memset(blobs, 0, sizeof(blob_array)); int nblobs = 0, errX = 0, errH = 0, BlobN = 0, TargetNum = 0; eraseDisplay(); //Tyhjentaa robotin ruudun Pysayta(); if(NXTCAMinit(Kamera)) { PlaySound(soundUpwardTones); //Mikali kamera kaynnistyy oikein, tulee soundUpwardTones aanimerkki while(bSoundActive); } else { PlaySound(soundDownwardTones); //Mikali kamera ei kaynnisty oikein, tulee soundDownwardTones aanimerkki while(bSoundActive); StopAllTasks(); //Pysayttaa kaikki toiminnot } wait1Msec(100); while(true) { eraseDisplay(); //Tyhjentaa robotin ruudun nblobs = NXTCAMgetBlobs(Kamera, blobs, true); nxtDisplayCenteredTextLine(1, "blobs: %d", nblobs); nxtDisplayCenteredTextLine(3, "Targets Down: %d", TargetNum); if(nblobs > 0) { BlobN = -1; for(int i = 0; i < nblobs; i++) // Seuraa vain kohteita, joiden Korkeus > Leveys (ei "jahtaa" kaatuneita kohteita) { if((blobs[i].x2 - blobs[i].x1) < (blobs[i].y2 - blobs[i].y1)) { BlobN = i; break; } } if(BlobN != -1) { errX = (blobs[BlobN].x1 + blobs[BlobN].x2) / 2 - ResX/2; //X-suunnassa blobsin vas. reunan arvo + oik. reunan //arvo jaettuna 2 - X:n resoluutio jaettuna 2 errH = KohteenKorkeus - (blobs[BlobN].y2 - blobs[BlobN].y1); //Kohteen korkeus - (y-suunnassa blobsin maksimi - minimi) if(abs(errX) > 4) //Pyorimisnopeus etsiessa { motor[Vasen] = errX * KpX; motor[Oikea] = -errX * KpX; } else if(abs(errH) > 6) { motor[Vasen] = errH * KpH; motor[Oikea] = errH * KpH; } else { Pysayta(); Ammu(); Pysayta(); TargetNum++; if(TargetNum == KohteidenMaara) //Jos kohteiden maara on yhta kuin asetettu kohteiden tavoitemaara -> Pysayta kaikki { PlaySound(soundUpwardTones); while(bSoundActive); StopAllTasks(); } else Etsi(); } } else { Etsi(); } } else { Etsi(); } wait1Msec(Odotusaika); } } void Pysayta() //Pysayttaa kaikki liikkeet { motor[Vasen] = 0; motor[Oikea] = 0; motor[Ampuja] = 0; } void Etsi() //Etsintatila { blob_array blobs; memset(blobs, 0, sizeof(blob_array)); int nblobs = 0, BlobN = -1; for(int i = 0; i < 1750 * 4.5 / Odotusaika; i++) { BlobN = -1; motor[Vasen] = NOPEUS; motor[Oikea] = -NOPEUS; nblobs = NXTCAMgetBlobs(Kamera, blobs, true); nxtDisplayCenteredTextLine(1, "blobs: %d", nblobs); if(nblobs > 0) { for(int j = 0; j < nblobs; j++) { if((blobs[j].x2 - blobs[j].x1) < (blobs[j].y2 - blobs[j].y1)) { BlobN = j; break; } } if(BlobN != -1) break; } wait1Msec(Odotusaika); } Pysayta(); if(BlobN == -1) { motor[Vasen] = NOPEUS; motor[Oikea] = NOPEUS; wait1Msec(2000); } } void Ammu() { Pysayta(); motor[Vasen] = -20; //"Tahtays" eli kaantyy vasemmalle 200ms ajan motor[Oikea] = 20; wait1Msec(200); Pysayta(); for(int i = 0; i < 3; i++) { PlayImmediateTone(440, 10); while(bSoundActive); wait1Msec(100); } Pysayta(); nMotorEncoder[Ampuja] = 0; nMotorEncoderTarget[Ampuja] = 360; motor[Ampuja] = NOPEUS2; while(nMotorRunState[Ampuja] != runStateIdle); Pysayta(); while(bSoundActive) {} } {code} h3. |
NXTCamView:n
...
ja
...
ajureiden
...
asennus
...
sekä
...
käyttöönotto
...
Lego
...
Mindstorms
...
robotteihin
...
liitettävän
...
mindsensors:n
...
Vision
...
Subsystem
...
v4
...
for
...
NXT
...
(NXTCam-v4)-
...
-
...
kameran
...
asetuksia
...
ja
...
väriskaaloja
...
määritellään
...
PC:lle
...
asennettavalla
...
erillisellä
...
NXTCamView
...
-
...
ohjelmalla.
...
Jos
...
haluat
...
muokata
...
kameran
...
kohdevärejä,
...
lataa
...
ohjelma
...
koneellesi
...
...
(versio
...
0.21).
...
HUOM
...
!
...
Jos
...
koneelle
...
on
...
jo
...
asennettu
...
NXTCamView,
...
niin
...
on
...
todennäköistä,
...
että
...
myös
...
ajurit
...
on
...
asennettu.
...
Tällöin
...
voit
...
katsoa
...
ohjeita
...
ohjelman
...
käytöstä
...
suoraan
...
kohdasta
...
4.
...
Asennusohje
...
(Windows
...
7):
...
1.
...
Lataa
...
ja
...
asenna
...
NXTCamView
...
oletushakemistoon.
...
2.
...
Seuraavaksi
...
pitää
...
asentaa
...
kameran
...
vaatimat
...
USB-ajurit
...
2.1
...
Lataa
...
zippipaketti
...
...
(kirjoitushetkellä
...
nimellä
...
NXTCam_v3p0.zip)
...
2.2
...
Pura
...
paketti
...
vaikkapa
...
työpöydällesi
...
2.3
...
Kytke
...
kamera
...
kiinni
...
koneeseen
...
USB:lla
...
Windows
...
yrittää
...
asentaa
...
joitain
...
ajureita
...
ja
...
antaa
...
ilmoituksen,
...
että
...
ajureiden
...
asennus
...
on
...
epäonnistunut.
...
2.4
...
Avaa
...
Control
...
Panel
...
ja
...
valitse
...
Hardware
...
and
...
Sound
...
->
...
Devices
...
and
...
Printers
...
ja
...
alhaalla
...
pitäisi
...
näkyä
...
NXTCamv3.0
...
2.5
...
Paina
...
hiiren
...
oikealla
...
painikkeella
...
kuvakkeen
...
päällä
...
ja
...
valitse
...
Properties
...
2.6
...
Avautuvassa
...
ikkunassa
...
siirry
...
Hardware-välilehdellä
...
ja
...
paina
...
Properties
...
-painiketta
...
2.7
...
Avautuvassa
...
ikkunassa
...
valitse
...
Change
...
settings
...
2.8
...
Valitse
...
Update
...
Driver
...
2.9
...
Avautuvassa
...
ikkunassa
...
valitse
...
alempi
...
vaihtoehto:
...
Browse
...
my
...
computer
...
for
...
driver
...
software
...
ja
...
selaa
...
siihen
...
kansioon
...
johon
...
purit
...
zippipaketin.
...
(Esim.
...
C:\Users\mXXXXXXX\Desktop\NXTCam_v3p0
...
Drivers)
...
ja
...
Paina
...
Next
...
2.10
...
Windows
...
aloittaa
...
ajurin
...
asennuksen
...
ja
...
antaa
...
turvailmoituksen.
...
Paina
...
Install
...
this
...
driver
...
software
...
anyway
...
ja
...
asennus
...
jatkuu
...
ja
...
ensimmäinen
...
ajuri
...
asentuu
...
2.11
...
Kun
...
se
...
on
...
asennettu,
...
sulje
...
auki
...
oleva
...
ikkuna
...
ja
...
paina
...
hiiren
...
oikealla
...
painikkeella
...
NXTCamv3.0
...
kuvakkeen
...
päällä
...
uudestaan
...
(kuten
...
kohdissa
...
2.4&2.5)
...
ja
...
valitse
...
Properties
...
2.12
...
Avautuvassa
...
ikkunassa
...
siirry
...
Hardware-välilehdellä
...
ja
...
varmista,
...
että
...
USB
...
Serial
...
Port
...
on
...
valittuna
...
ja
...
paina
...
sitten
...
Properties
...
2.13
...
Avautuvassa
...
ikkunassa
...
valitse
...
Change
...
settings
...
ja
...
avautuvassa
...
ikkunassa
...
Update
...
Driver
...
2.14
...
Avautuvassa
...
ikkunassa
...
valitse
...
alempi
...
vaihtoehto:
...
Browse
...
my
...
computer
...
for
...
driver
...
software.
...
Ajurikansion
...
pitäisi
...
olla
...
oletuksena
...
ajurikansion
...
sijainti
...
(jos
...
ei
...
ole
...
niin
...
toimi
...
kuten
...
kohdassa
...
2.9).
...
Paina
...
Next
...
2.15
...
Windows
...
aloittaa
...
ajurin
...
asennuksen
...
ja
...
antaa
...
turvailmoituksen.
...
Paina
...
Install
...
this
...
driver
...
software
...
anyway
...
ja
...
asennus
...
jatkuu
...
ja
...
toinen
...
ajuri
...
asentuu.
...
2.16
...
Ajurien
...
asennus
...
on
...
valmis
...
3.
...
Nyt
...
voit
...
avata
...
NXTCamView:n.
...
Mene
...
asetuksiin
...
(Tools
...
->
...
Options)
...
ja
...
valitse
...
Comport-kohtaan
...
NXTCAM
...
(Esim
...
COM3:
...
NXTCAM)
...
ja
...
paina
...
ok
...
4.
...
Nyt
...
voit
...
painaa
...
Connect-painiketta
...
ja
...
ottaa
...
kameralla
...
kuvan
...
tai
...
pari
...
painamalla
...
Capture
...
(HUOM
...
!
...
Muista
...
poistaa
...
linssinsuojus).
...
5.
...
Katso
...
ohjeita
...
ohjelman
...
käytöstä
...
...