HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT (VERSIE 1.0)
Copyright © 2006 RoboTech Srl
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
2
Inhoud INLEIDING ...................................................................................................................................................................3 EEN PROGRAMMA MAKEN.....................................................................................................................................6 EEN NIEUW PROGRAMMA TOEVOEGEN ........................................................................................................................6 EEN NIEUW GEDRAG TOEVOEGEN ...............................................................................................................................6 EEN NIEUWE PROCEDURE TOEVOEGEN .......................................................................................................................7 EEN NIEUWE VARIABELE TOEVOEGEN .........................................................................................................................8 EEN NIEUWE INSTRUCTIE TOEVOEGEN ........................................................................................................................9 DE EIGENSCHAPPEN VAN EEN INSTRUCTIE WIJZIGEN .................................................................................................11 SENSOREN EN EVENTS ........................................................................................................................................13 INSTRUCTIES...........................................................................................................................................................16 BASISINSTRUCTIES VAN DE TAAL (LANGUAGE) ..........................................................................................................16 TEST OP DE SENSOREN (TEST) .................................................................................................................................19 INSTRUCTIES VOOR DE VARIABELEN (VARIABLES) .....................................................................................................22 INSTRUCTIES VOOR HET HOOFD (HEAD)....................................................................................................................23 INSTRUCTIES VOOR DE ARMEN (ARMS) .....................................................................................................................25 INSTRUCTIES VOOR DE BASIS (BASE) ........................................................................................................................26 INSTRUCTIES VOOR DE SPRAAK (VOICE) ...................................................................................................................28 OUTPUT COMMANDO'S (OUTPUT)..............................................................................................................................30 CONFIGURATIE COMMANDO'S (CONFIGURATION) ......................................................................................................31 HET FUNCTIONEREN VAN ENKELE INSTRUCTIES..........................................................................................32 GEBRUIK VAN DE BEHAVIORS ....................................................................................................................................32 BLOKKERENDE EN NIET BLOKKERENDE INSTRUCTIES ................................................................................................34 TEST VAN DE SENSOREN ...........................................................................................................................................36 CONDITIES VAN DE TEST INSTRUCTIES OP DE SENSOREN..........................................................................................38 AANSTURING VAN DE GPIO (GENERAL PURPOSE IN/OUT) .......................................................................................39 SPRAAKCOMMANDO'S ...............................................................................................................................................41 LIJST VAN DE ZINNEN UITGESPROKEN DOOR DE ROBOT .............................................................................................43 COÖRDINATEN VAN HET BEELDVLAK EN VERDELING IN ZONES ...................................................................................45 EEN PROGRAMMA COMPILEREN EN UITVOEREN ..........................................................................................47 EEN PROGRAMMA VERZENDEN NAAR DE ROBOT ........................................................................................................47 HET PROGRAMMA COMPILEREN ................................................................................................................................47 HET PROGRAMMA UITVOEREN ...................................................................................................................................47 HET PROGRAMMA STOPPEN ......................................................................................................................................48
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
3
Inleiding I-Qbot Visual C-like Editor biedt je de mogelijkheid om programma's voor de robot te maken in een grafische programmeeromgeving. Een programma gemaakt in de grafische programmeeromgeving wordt vervolgens vertaald in C-like taal en via de Bluetooth verbinding verzonden naar de robot om gecompileerd en uitgevoerd te worden. Een programma voor de robot bestaat uit een totaal van gedragingen (behaviors in programmeertaal). Een gedrag is een opeenvolging van acties die door de robot herhaaldelijk worden uitgevoerd. Het uitvoeren van de acties hangt af van de toestand van de sensoren van de robot. Elk gedefinieerd gedrag wordt gelijktijdig met andere behaviors uitgevoerd: alle behaviors samen bepalen dus het complete gedrag van de robot. Voorbeelden van gedrag zijn Geluiden volgen – waarbij de robot zijn hoofd draait in de richting van een duidelijk afgebakend geluid (bijvoorbeeld één keer in de handen klappen), telkens wanneer hij dit waarneemt – of Obstakels vermijden, waarbij de robot via de ultrasoon sensoren obstakels op zijn weg vermijdt. Bij het gedrag Geluiden volgen worden de instructies om het hoofd te bewegen uitgevoerd wanneer er een nieuw geluid wordt geregistreerd, oftewel wanneer zich een speciaal event heeft voorgedaan. Bij het gedrag Obstakels vermijden, houdt de robot voortdurend de waarden van de door de ultrasoon sensoren gemeten afstanden in de gaten en past vervolgens zijn weg daarop aan. Een gedrag is dus een opeenvolging van instructies die herhaaldelijk worden uitgevoerd of die worden uitgevoerd telkens wanneer zich een bepaald event voordoet. Een event vindt plaats wanneer zich voor een sensor een bepaalde conditie voordoet, zoals bijvoorbeeld de herkenning van een bepaald spraakcommando, de activering van de tastsensor of een nieuwe afstandswaarde, geregistreerd door de ultrasoon sensoren, et cetera. Als het event plaatsvindt, worden alle instructies die het gedrag bepalen, uitgevoerd. Aan het eind van de uitvoering van deze instructies, stopt het gedrag in afwachting van een nieuw event. Instructies kunnen commando's voor de actuatoren zijn, zoals bijvoorbeeld 'rechterarm omhoog', 'hoofd naar rechts', 'zeg een zin', maar ook het in- en uitschakelen van de basis behaviors van de robot (zoals 'Geluiden volgen', 'Obstakels vermijden' en 'Zicht volgen') of het aflezen van de toestand van de sensoren (ultrasoon, zicht, geluid, et cetera). Daarnaast is er een serie instructies die horen tot programmeertalen, zoals bijvoorbeeld de instructie 'if then else' of de cyclus 'while'. Via de visuele programmeertaal kun je ook variabelen en procedures definiëren. Variabelen zijn 'tellers' (counters) – gehele getallen, waarop verschillende bewerkingen kunnen worden uitgevoerd: toekennen, verhogen, verlagen en test. Dankzij variabelen is uitwisseling van gegevens tussen behaviors mogelijk en kan de uitvoering van behaviors worden gesynchroniseerd. Een procedure daarentegen is een opeenvolging van instructies die één enkele keer wordt uitgevoerd en waarvan de uitvoering expliciet moet worden aangeroepen door een gedrag of door een andere procedure. Anders dan behaviors, worden procedures niet herhaaldelijk uitgevoerd maar eindigen ze zodra de opeenvolging van acties is uitgevoerd. De behaviors die in een programma worden gemaakt, worden niet automatisch uitgevoerd – hun uitvoering moet worden aangeroepen. Er bestaat echter een speciaal gedrag, Main
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
4
genaamd, dat automatisch wordt gemaakt wanneer er een nieuw programma wordt aangemaakt en dat, anders dan andere behaviors, automatisch wordt uitgevoerd. De uitvoering van andere behaviors moet noodzakelijkerwijs worden gestart binnen het gedrag Main of een ander gedrag. Bovendien wordt het gedrag Main niet, zoals andere behaviors, herhaaldelijk uitgevoerd, maar gedraagt het zich als een procedure en eindigt het slechts wanneer alle andere behaviors van het programma zijn beëindigd. Om een gedrag te omschrijven in visuele programmeertaal, moet er in de programmeeromgeving een flowchart worden gemaakt dat de opeenvolging van instructies definieert. De volgorde van de instructies en het soort blokken van de flowchart definiëren samen een gedrag. Zoals gezegd, begint een gedrag met het wachten op een event en wordt het herhaaldelijk uitgevoerd tot aan het eind van het programma, tenzij er expliciet een instructie wordt toegevoegd die het voortijdige einde van het gedrag bepaalt, of het gedrag wordt beëindigd door een ander gedrag. Op dezelfde manier kan een procedure worden gedefinieerd: zoals gezegd, is het enige verschil tussen een gedrag en een procedure dat een procedure aan het eind van de uitvoering van zijn instructies afloopt, en niet herhaaldelijk wordt uitgevoerd tenzij er, natuurlijk, expliciet een instructieblok while wordt toegevoegd. Een event wordt gedefinieerd door de sensor te specificeren en, daarbij, het event dat voor die sensor moet plaatsvinden. Voor bijna alle sensoren zijn er twee events vooraf gedefinieerd, het event change en het event update. Het event update vindt plaats wanneer de waarde van de sensor wordt bijgewerkt. Het event change vindt plaats wanneer de waarde van sensor wordt bijgewerkt met een waarde die anders is dan de voorgaande. Voor sommige soorten sensoren, zoals de zichtsensor of de spraakherkenning, zijn er ook andere events gedefinieerd. De programma's worden gedefinieerd binnen de visuele programmeeromgeving, te zien op de afbeelding op de volgende pagina. Het venster van de programmeeromgeving bestaat uit vier delen: • programmastructuur (Outline): waar voor elk programma alle onderdelen worden weergegeven: variabelen (Variables), gedragingen (Behaviors), en procedures (Procedures); • instructies (Palette): hier vind je, op soort ingedeeld, een lijst van alle instructies die beschikbaar zijn om een gedrag of een procedure te maken. De instructies worden weergegeven door grafische blokken; • programma's: (Program): hier zie je een tabblad voor elk programma, en, voor elk programma, een subtabblad voor elk gedefinieerd gedrag en/of gedefinieerde procedure. In dit scherm worden de flowcharts van de behaviors of procedures gemaakt door grafische blokken toe te voegen vanuit het Palette gedeelte. De geopende programma's worden bovenaan, boven het venster van de programma's, getoond ('*Programma1.vclike' en Programma2.vclike' in het voorbeeld. Het sterretje in *Programma1.vclike geeft aan dat programma 1 niet is opgeslagen). Onderaan het scherm worden alle behaviors en procedures opgesomd van het programma dat op dat moment wordt bewerkt ('Main' en 'Behavior1' in het voorbeeld). • eigenschappen (Properties): waar je de eigenschappen voor de instructieblokken, toegevoegd in het Program gedeelte, kunt instellen.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
5
In het voorbeeld kun je de flowchart van Behavior1 van Programma1 zien.
Op de werkbalk zie je de iconen die je kunt aanklikken om een nieuw programma te maken, een bestaand programma te openen, een programma te bewaren, een programma te downloaden, compileren en uit te voeren en daarnaast de klassieke iconen voor knippen, kopiëren en plakken, ongedaan maken en herstellen.
Bewaart een programma Opent een programma Maakt een nieuw programma
Beëindigt het programma Voert het programma uit Compileert het programma Uploadt een programma naar de robot
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
6
Een programma maken Een nieuw programma toevoegen Een nieuw programma kan worden toegevoegd door te klikken op het item New in het menu File of op het juiste icoontje op de werkbalk. Het nieuwe programma krijgt de algemene naam New File. Om het programma een naam te geven, moet je het opslaan door te klikken op Save of Save as in het menu File, of op het betreffende icoontje van de werkbalk. Voor het nieuwe programma wordt automatisch het basisgedrag aangemaakt, dat de naam Main krijgt. NB: Bij het starten van de toepassing wordt automatisch een nieuw programma aangemaakt. Om een eerder opgeslagen programma te openen, klik je op het item Open van het menu File of op het betreffende icoontje van de werkbalk, en selecteer je het bestand in het dialoogvenster dat wordt geopend. Je kunt van het ene naar het andere programma gaan door in het programmascherm direct te klikken op het tabblad met de naam van het programma.
Een nieuw gedrag toevoegen Nieuwe behaviors kunnen worden toegevoegd door met de rechtermuisknop te klikken op het item Behaviors in het Outline venster en vervolgens met de muis Add Behavior te selecteren in het pop-up menu.
Je kunt van het ene naar het andere gedrag gaan door in het programmascherm direct te klikken op het tabblad met de naam van het gedrag. Een gedrag kan geworden gewist door Delete aan te klikken in het uitrolmenu dat te openen is door in het Outline venster met de rechtermuisknop de naam van het gedrag aan te klikken. Al je een gedrag verwijdert, moet je zeker weten dat er in het programma geen instructieblokken zijn die verwijzen naar het verwijderde gedrag.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
7
Een nieuwe procedure toevoegen Nieuwe procedures kunnen worden toegevoegd door met de muis te klikken op het item Add Procedure van het pop-up menu dat je kunt openen door met de rechtermuisknop te klikken op het item Procedures in het Outline venster.
Een procedure kan worden verwijderd door te klikken op het item Delete van het pop-up menu, te openen door met de rechtermuisknop te klikken op de naam van de procedure in het Outline venster.
Als je een procedure verwijdert, moet je zeker weten dat er in het programma geen instructieblokken zijn die verwijzen naar de verwijderde procedure.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
8
Een nieuwe variabele toevoegen Nieuwe variabelen kunnen aan een programma worden toegevoegd door met de muis te klikken op het item Add Variables van het pop-up menu, te activeren door met rechtermuisknop te klikken op het item Variables in het Outline venster.
Een variabele kan worden verwijderd door te klikken op het item Delete van het pop-up menu, te openen door met de rechtermuisknop te klikken op de naam van de variabele in het Outline venster.
NB: Variabelen zijn speciale tellers (getallen), die slechts gehele waarden kunnen aannemen en waar je de operaties toekennen, verhogen, verlagen en test op kunt uitvoeren. Als je een variabele verwijdert, moet je zeker weten dat er in het programma geen instructieblokken zijn die verwijzen naar de verwijderde variabele.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
9
Een nieuwe instructie toevoegen Een gedrag of een procedure worden gemaakt door in het betreffende scherm vanuit het Palette gedeelte de instructies in te voegen die de flowchart definiëren. De instructies worden weergegeven door grafische blokken, die, per soort instructie, verschillend zijn van kleur en uiterlijk. De eerste toegevoegde instructie vind je in het eerste blok van de flowchart van het gedrag (bijvoorbeeld een blok voor het wachten op een event). De andere blokken worden toegevoegd als vervolg van de eerder toegevoegde blokken, of binnen blokken van andere instructies (zoals bijvoorbeeld binnen de twee takken van een ifinstructie), al naar gelang het soort instructie dat dat blok vertegenwoordigt. Alle instructieblokken staan in een lijst in het instructiegedeelte (Palette), aan de rechterkant van het scherm. De instructieblokken zijn ingedeeld op soort (bijvoorbeeld Language, Test, Variable, Head, et cetera). Om een groep instructieblokken te openen of te sluiten hoef je alleen maar op de naam van de groep te klikken. Om een instructie toe te voegen, moet het betreffende grafische blok in Palette met de muis worden aangeklikt (bv. Head Up) en met een volgende klik ingevoegd op een toegestane plaats binnen het venster. Het eerste blok moet linksboven worden ingevoegd, ter hoogte van het denkbeeldige doorzichtige gele blok, zoals getoond in het voorbeeld.
1. Het gewenste instructieblok aanklikken
2. Ter hoogte van het gele blok klikken om het geselecteerde instructieblok toe te voegen
Een instructie kan worden verwijderd door Delete aan te klikken in het pop-up menu, te openen door met rechtermuisknop te klikken op het grafische instructieblok dat je wilt verwijderen, of door op de Del toets van het toetsenbord te drukken nadat je het blok dat je wilt verwijderen hebt geselecteerd.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
10
Andere instructieblokken kunnen op dezelfde manier worden toegevoegd boven of onder een eerder ingevoerd commando, zoals getoond in het volgende voorbeeld.
... of binnen de blokken THEN of ELSE van een if-instructie zoals getoond in het volgende voorbeeld.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
11
De eigenschappen van een instructie wijzigen Wanneer een instructieblok eenmaal is toegevoegd, kun je de eigenschappen ervan instellen of wijzigen, zoals bijvoorbeeld de conditie die geëvalueerd moet worden voor een voorwaardelijke instructie, of het aantal series voor een herhaalcommando. Je doet dit via het Properties venster. Voor het commando Base Forward is het bijvoorbeeld mogelijk om de afstand en de snelheid van de robot in te stellen, door te klikken op de eigenschappen Speed en Distance in het Properties venster en de waarde in het corresponderende tekstvak aan te passen, zoals getoond in het volgende voorbeeld.
NB: Op dezelfde wijze is het mogelijk om de naam van een gedrag, een variabele of een procedure te wijzigen. Je klikt in het Outline venster de naam van het gedrag, de procedure of variabele aan en wijzigt de eigenschap Name in het Properties venster. Let, bij het wijzigen van de naam van een gedrag, een procedure of een variabele, goed op: als je de naam van een van deze componenten wijzigt, moet je zeker weten dat er in het programma geen instructieblokken zijn die verwijzen naar de oude naam. De namen van variabelen, procedures en behaviors moeten uniek zijn, d.w.z. een variabele kan niet dezelfde naam hebben als een procedure of een gedrag, en een gedrag kan niet dezelfde naam hebben als een procedure.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
12
Verder is het mogelijk om instructieblokken te knippen, kopiëren, plakken, verwijderen en te herstellen met de klassieke toetscommando's CTRL+C, CTRL+X, CTRL+V, CTRL+Z, CTRL+Y en via de betreffende icoontjes op de werkbalk. Knippen, kopiëren en plakken is ook mogelijk tussen verschillende behaviors, procedures en programma's. Door te kiezen voor 'kopiëren en plakken', wordt het gekopieerde blok na het laatste instructieblok geplakt of direct na het op dat moment geselecteerde blok. Meervoudige selectie is mogelijk door de SHIFT toets ingedrukt te houden en te klikken op de grafische blokken die zo achtereenvolgens worden genummerd. Ook kun je een of meerdere instructieblokken van het ene punt van het programma naar het andere slepen. In de komende paragrafen worden de events en alle instructies van de visuele programmeertaal besproken.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
13
Sensoren en events Een event vindt plaats wanneer zich een bijzondere conditie voordoet voor een sensor. Een event wordt gedefinieerd door de sensor en het event dat voor die sensor moet plaatsvinden te specificeren. Voor bijna alle sensoren zijn er twee events vooraf gedefinieerd: het event change en het event update. Het event update vindt plaats als de waarde van de sensor wordt bijgewerkt. Het event change vindt plaats als de waarde van de sensor wordt bijgewerkt met een waarde die verschilt van de voorgaande. Nu een overzicht van alle sensoren en events die bekend zijn in de programmeertaal. Icoon en naam
Beschrijving sensor
Tastsensor
Touch
Sound Direction
Voice Command
N.B. dit event kan alleen maar worden afgehandeld via een blok Wait For
Sound Follower levert de herkomst van een geregistreerd geluid. • De mogelijke richtingen zijn: • left (links) • center_left (midden links) • center (midden) • center_right (midden rechts) • right (rechts) • back (achter)
Sensor Spraakherkenning Levert het herkende spraakcommando uit woordset 11. De waarde kan zijn: • zero: commando 'nul' • one: commando 'een' • two: commando 'twee' • ... • ten: commando 'tien'
Events
update: de waarde van de tastsensor is bijgewerkt. Let op: de waarde van de sensor wordt alleen bijgewerkt als de sensor wordt geactiveerd, d.w.z. bij een aanraking. update: de Sound Follower heeft een nieuw geluid geregistreerd. change: de Sound Follower heeft een nieuw geluid geregistreerd en de herkomst verschilt van de laatste geregistreerde richting. back: er is een geluid geregistreerd afkomstig van achter de robot. left, center_left, center, center_right, right: er is een geluid geregistreerd afkomstig van links, midden links, midden, midden rechts of rechts. update: er is een nieuw spraakcommando uit woordset 11 herkend. change: er is een nieuw spraakcommando uit woordset 11 herkend dat anders is dan het laatst herkende spraakcommando. zero: het commando 'nul' is herkend. one: het commando 'een' is herkend. ... ten: het commando 'tien' is herkend.
1
Tracking
CMOS sensor Levert de coördinaten van het zwaartepunt van het grootste pixelgebied van een specifieke kleur. Bereik coördinaten van het zwaartepunt: • x: [- 80,80]
update: de waarden van de coördinaten van het zwaartepunt zijn bijgewerkt. area change: de zone waarin het zwaartepunt valt is veranderd.
1 Zie de paragraaf Coördinaten van het beeldvlak en onderverdeling in zones voor meer informatie over de events van de CMOS sensor.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
•
Temperature
Proximity
Batteries
14
y: [- 60,60]
Temperatuursensor De waarde van de temperatuursensor, met een bereik van [0,35].
update: de door de temperatuursensor gemeten waarde is bijgewerkt. change: de door de temperatuursensor gemeten waarde is veranderd.
Ultrasoon sensoren Afstanden in cm gemeten door de drie ultrasoon sensoren. De sensoren zijn: • left: linker sensor, met een bereik van [0, 255]. • center: middelste sensor, met een bereik van [0, 255]. • right: rechter sensor, met een bereik van [0,255].
update: de waarden gemeten door de ultrasoon sensoren zijn bijgewerkt. min_change: de sensor die de minimum afstand meet is veranderd. max_change: de sensor die de maximum afstand meet is veranderd.
Laadniveau van de batterijen. Er zijn twee soorten laadniveaus: • logic: laadniveau van de batterijen voor de elektronica, bereik [0, 100] • motors: laadniveau van de batterijen voor de motoren, bereik [0, 100]
update: de waarden van de laadniveaus van de batterijen zijn bijgewerkt. logic_change: het laadniveau van de batterijen voor de elektronica is veranderd. motors_change: het laadniveau van de batterijen voor de motoren is veranderd.
Keyboard
Keyboard
Analog in
Digital in
N.B. dit event kan alleen maar worden afgehandeld via een blok Wait For.
update: de rechterknop van het bedieningspaneeltje van de robot is ingedrukt.
Analoge ingangen Gedigitaliseerde waarden van de twee analoge ingangen: • analog_1, waarde van de analoge ingang 1, bereik [0, 255] • analog_2; waarde van de analoge ingang 2, bereik [0, 255]
update: de waarde van de analoge ingangen is bijgewerkt. pin_1_change: de waarde van analoge ingang 1 is veranderd. pin_2_change: de waarde van analoge ingang 2 is veranderd.
Digitale ingangen De waarden van de vier digitale ingangen: • pin_1: waarde van de digitale ingangen 1, kan zijn {low, high} • pin_ 2: waarde van de digitale ingang 2, kan zijn {low, high} • pin_3: waarde van de digitale ingang 3, kan zijn {low, high} • pin_4: waarde van de digitale ingang 4, kan zijn {low, high}
update: de waarde van de digitale ingangen is bijgewerkt. change: de waarde van de digitale ingangen is veranderd. pin_1_change: digitale ingang 1 is veranderd. pin_1_raise: digitale ingang 1 is van laag naar hoog gegaan. pin_1_fall: digitale ingang 1 is van hoog naar laag gegaan. pin_2_change : analoog aan pin_1_change, pin_1_raise, pin_1_fall
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
N.B. dit event kan alleen maar worden afgehandeld via een blok Wait For.
pin_2_raise pin_2_fall pin_3_change pin_3_raise pin_3_fall pin_4_change pin_4_raise pin_4_fall
15
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
16
Instructies Er zijn vijf verschillende soorten instructies: • basisinstructies van de taal: instructies waarmee een gedrag of een procedure gestart of beëindigd kan worden, instructies voor het aflezen van de toestand van de sensoren of voor het wachten op events, en andere instructies zoals de cyclus while, en pauze. • beslissende instructies of test op de sensoren: instructies waarmee een conditie kan worden beoordeeld die afhangt van de toestand van een sensor of van een teller (counter) en de uitvoering van een instructieblok toegekend aan de conditie die heeft plaatsgevonden. • instructies voor de variabelen: instructies waarmee bewerkingen op de variabelen kunnen worden uitgevoerd, zoals het toekennen, het vermeerderen of verminderen van de waarde. • actie instructies: instructies voor de actuatoren van de robot; deze zijn onderverdeeld in instructies voor het hoofd, de armen, de basis, spraak – en andere output (LCD, GPIO). • configuratie instructies: commando's waarmee basis behaviors van de robot in- en uitgeschakeld kunnen worden of instructies voor de configuratie van de digitale in- en uitgangen. Hieronder vind je voor elke instructie een beschrijving van de actie en de eigenschappen.
Basisinstructies van de taal (Language) Icoon en naam
Beschrijving
Eigenschap
Leest de waarde van een sensor af.
Sensor: sensor waarvan de waarde wordt afgelezen. Deze kan zijn {Analog in, Battery, Temperature, Proximity, Tracking}
Wacht op een event van een sensor.
Sensor: Sensor die het event levert. Deze kan zijn {Analog in, Digital in, Battery, Temperature, Proximity, Tracking, Keyboard, Touch, Sound Dir, Voice Cmd} Event: soort event waarop wordt gewacht.
Voert een actieblok uit tot er zich een conditie voordoet.
Conditie: expressie van de conditie Source: naam van de sensor waarop de conditie zich voordoet. Deze kan zijn {Analog in, Digital in, Battery, Temperature, Proximity, Tracking} of een variabele. Andere eigenschappen: afhankelijk van de conditie.
Read
Wait for
2
While
2 Zie de paragraaf Condities van de Test instructies op de sensoren voor een beschrijving van de mogelijke condities en van de andere eigenschappen.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
Pauzeert de uitvoering van het gedrag of van de procedure gedurende de gespecificeerde tijd.
Value: wachttijd uitgedrukt in milliseconden.
Voert een procedure uit.
Target: naam van de uit te voeren procedure.
Pause
Call
Beëindigt een procedure. Deze instructie kan alleen worden aangeroepen door de procedure die beëindigd moet worden. Return
Start de uitvoering van een gedrag.
Target: naam van het gedrag dat ingeschakeld moet worden.
Start
Stopt direct de uitvoering van een gedrag.
Stop
N.B.: Gebruik deze instructie ook om het aanroepende gedrag onmiddellijk te beëindigen.
End
Beëindigt een gedrag bij de daaropvolgende cyclus, waardoor, als er na deze instructies nog andere instructies zijn, deze ook nog worden uitgevoerd. Deze instructie kan alleen worden aangeroepen door het gedrag dat moet worden beëindigd.
Set Blocking
Stelt de erop volgende instructies in als blokkerend of niet blokkerend. Een niet blokkerende instructie wacht niet het einde van de uitvoering van een commando af alvorens verder te gaan, terwijl een blokkerende instructie wel wacht op het einde van uitvoering van een commando alvorens verder te gegaan. Standaard
Target: naam van het gedrag dat beëindigd moet worden (kan ook de naam zijn van het aanroepende gedrag).
Mode: blokkerend of niet blokkerend {blocking, asynchronous}.
17
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
staan de instructies ingesteld op blokkerend.
18
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
19
Test op de sensoren (Test) Icoon en naam
Beschrijving
Counter
Beoordeelt een conditie aan de hand van de waarde van een variabele en voert het actieblok van de THEN-tak uit als de conditie WAAR is gebleken en van de ELSE-tak als de conditie ONWAAR is gebleken.
Batteries
Temperature
Proximity
Tracking
Beoordeelt een conditie op grond van het laadniveau van de batterijen voor de elektronica of voor de motoren en voert het actieblok van de THEN-tak uit als de conditie WAAR is gebleken en van de ELSE-tak als de conditie ONWAAR is gebleken.
Beoordeelt een conditie op grond van de waarde gemeten door de temperatuursensor en voert het actieblok van de THEN-tak uit als de conditie WAAR is gebleken en van de ELSE-tak als de conditie ONWAAR is gebleken. Beoordeelt een conditie op grond van de afstand gemeten door een van de ultrasoon sensoren en voert het actieblok van de THEN-tak uit als de conditie WAAR is gebleken en van de ELSE-tak als de conditie ONWAAR is gebleken. Beoordeelt een conditie op grond van de coördinaten (x,y) van het zwaartepunt van het gekleurde gebied geregistreerd door de CMOS sensor en voert het actieblok van de THENtak uit als de conditie WAAR is gebleken en van de ELSE-tak als de conditie ONWAAR is gebleken. Beoordeelt een conditie op grond van de waarde van een van de twee analoge ingangen en voert het actieblok van de THEN-tak uit als de conditie WAAR is gebleken en van de
Eigenschappen
3
Condition: uitdrukking van de conditie. Source: naam van de variabele waarvan de waarde de conditie WAAR of ONWAAR maakt. Andere eigenschappen afhankelijk van de conditie. Condition: uitdrukking van de conditie. Source: specificeert de batterijen waarvan het laadniveau de conditie WAAR of ONWAAR maakt: {Logic, Motor} Andere eigenschappen afhankelijk van de conditie.
Condition: uitdrukking van de conditie. Andere eigenschappen afhankelijk van de conditie.
Condition: uitdrukking van de conditie. Source: sensor waarvan de waarde de conditie WAAR of ONWAAR maakt: {Left, Center, Right} Andere eigenschappen afhankelijk van de conditie. Condition: uitdrukking van de conditie. Source: coördinaat dat de conditie WAAR of ONWAAR maakt: {x,y} Andere eigenschappen afhankelijk van de conditie. Condition: uitdrukking van de conditie. Source: naam van de analoge ingang: {port_1, port_2}
3 Zie de paragraaf Condities van de Test instructies op de sensoren voor informatie over de mogelijke condities en de andere eigenschappen.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
Analog in
Sound Direction
Voice Command
Andere eigenschappen afhankelijk van de conditie.
Beoordeelt de herkomst van een geluid geregistreerd door de Sound Follower en voert het actieblok uit van de tak: • SOUND_DIR_BACK als het geluid van achteren komt. • SOUND_DIR_LEFT als het geluid van links komt. • SOUND_DIR_CENTER_LEFT als het geluid van midden links komt. • SOUND_DIR_CENTER als het geluid van het midden komt. • SOUND_DIR_CENTER_RIGHT als het geluid van midden rechts komt • SOUND_DIR_RIGHT als het geluid van rechts komt. Beoordeelt het herkende spraakcommando van woordset 11 en voert het actieblok uit van de tak: • CMD_ZERO als het herkende commando 'nul' is. • CMD_ONE als het herkende commando 'een' is. • ... • CMD_TEN als het herkende commando 'tien' is
Min Distance
Beoordeelt de afstanden gemeten door de ultrasoon sensoren en voert de actieblokken uit van de tak: • US_LEFT als de minimum afstand wordt gemeten door de linker sensor. • US_CENTER als de minimum afstand wordt gemeten door de middelste sensor. • US_RIGHT als de minimum afstand wordt gemeten door de rechter sensor.
Max Distance
Beoordeelt de afstanden gemeten door de ultrasoon sensoren en voert de actieblokken uit van de tak: • US_LEFT als de maximum afstand wordt gemeten door de linker sensor. • US_CENTER als de maximum afstand wordt gemeten door de middelste sensor. • US_RIGHT als de maximum afstand wordt gemeten door de rechter sensor.
Tracking Area
4
ELSE-tak als de conditie ONWAAR is gebleken.
20
Verdeelt het beeld in negen zones, drie per regel en drie per kolom, en voert het 4 actieblok uit van de tak :: • TOP_LEFT als de coördinaten van het zwaartepunt in de zone linksboven vallen. • TOP_CENTER als de coördinaten van het zwaartepunt in de zone midden boven vallen. • TOP_RIGHT als de coördinaten van het zwaartepunt in de zone rechtsboven vallen. • LEFT als de coördinaten van het zwaartepunt in de zone midden links vallen. • CENTER als de coördinaten van het zwaartepunt in de middelste zone vallen. • RIGHT als coördinaten van het zwaartepunt in de zone midden rechts vallen. • BOTTOM_LEFTals de coördinaten van het zwaartepunt in de zone links onder vallen. • BOTTOM_CENTER als de coördinaten van het zwaartepunt in de zone midden onder vallen. • BOTTOM_RIGHT als de coördinaten van het zwaartepunt in de zone
Zie de paragraaf Coördinaten van het beeldvlak en onderverdeling in zones voor meer informatie.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
rechts onder vallen.
21
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
Instructies voor de variabelen (Variables) Icoon en naam commando
actie
parameters
Kent de waarde aan een counter toe.
Name: naam van de counter. Value: geheel getal, positief of negatief, waarop de counter wordt ingesteld.
Verlaagt of verhoogt de waarde van een counter met de gespecificeerde waarde.
Name: naam van de counter. Value:geheel getal, positief of negatief, waarop de counter wordt ingesteld.
Set Counter
Inc Counter
Kopieert de waarde van een counter naar een andere counter.
Target: naam van de doelcounter. Source: naam van de oorspronkelijke counter waarvan de numerieke waarde wordt gekopieerd naar de waarde van de doelcounter.
Copy Counter
Verhoogt de waarde van een counter met de waarde van een andere counter.
Target: naam van de doelcounter. Source: naam van de oorspronkelijke counter waarvan de numerieke waarde wordt verhoogd met de waarde van de doelcounter.
Verlaagt de waarde van een counter met de waarde van een andere counter.
Target: naam van de doelcounter. Source: naam van de oorspronkelijke counter waarvan de numerieke waarde wordt verlaagd met de waarde van de doelcounter.
Add counter
Sub Counter
22
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
23
Instructies voor het hoofd (Head) Icoon en naam commando
Head Up
Head Down
Head Left
Head Right
actie Beweegt het hoofd omhoog. Het hoofd heeft 5 mogelijke standen, vanaf 0 tot en met 4. De beweging kan absoluut of relatief zijn. Voor de relatieve bewegingen geldt dat positieve waarden corresponderen met bewegingen omhoog , negatieve waarden met bewegingen omlaag. Beweegt het hoofd omlaag. Het hoofd heeft 5 mogelijke standen, vanaf 0 tot en met 4. De beweging kan absoluut of relatief zijn. Voor de relatieve bewegingen geldt dat positieve waarden corresponderen met bewegingen omhoog , negatieve waarden met bewegingen omlaag. Beweegt het hoofd naar links. De nek heeft 13 mogelijke standen, vanaf 0 tot en met 12. De beweging kan absoluut of relatief zijn. Voor de relatieve bewegingen geldt dat positieve waarden corresponderen met bewegingen naar rechts, negatieve waarden met bewegingen naar links. Beweegt het hoofd naar rechts. De nek heeft 13 mogelijke standen, vanaf 0 tot en met 12. De beweging kan absoluut of relatief zijn. Voor de relatieve bewegingen geldt dat positieve waarden corresponderen met bewegingen naar rechts, negatieve waarden met bewegingen naar links.
Schakelt de led's van de ogen in. Led On
eigenschap
Type: Absolute of Relative Position: bereik van de relatieve beweging van het hoofd [- 4,4] of absolute stand van het hoofd [0, 4]
Type: Absolute of Relative Position: bereik van de relatieve beweging van het hoofd [- 4,4] of absolute stand van het hoofd [0, 4]
Type: Absolute of Relative Position: bereik van de relatieve beweging van de nek [- 12,12] of absolute stand van de nek [0, 12]
Type: Absolute of Relative Position: bereik van de relatieve beweging van de nek [- 12,12] of absolute stand van de nek [0, 12]
Mask: in te schakelen led's. De waarde kan zijn: LED_YELLOW: gele led's. LED_YELLOW_LEFT: gele led's links. LED_YELLOW_RIGHT: gele led's rechts. LED_GREEN: Groene led's. LED_GREEN_LEFT: groene led's links. LED_GREEN_RIGHT: groene led's rechts. LED_RED: rode led's. LED_RED_LEFT: rode led's links.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
LED_RED_RIGHT: rode LED_ALL: alle led's.
Schakelt de led's van de ogen uit
24 led's rechts.
Mask: uit te schakelen led's. Zie instructie Led On voor de waarden van het masker.
Led Off
Laat de led's van de ogen knipperen. Led Blink
Mask: led's die moeten knipperen. Zie instructie Led On voor de waarden van het masker.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
25
Instructies voor de armen (Arms)
Left Up
Left Down
Right Up
Right Down
Beweegt de linkerarm omhoog. De linkerarm heeft 16 mogelijke standen, vanaf 0 tot en met 15. De beweging kan absoluut of relatief zijn. Voor de relatieve bewegingen geldt dat positieve waarden corresponderen met bewegingen omhoog , negatieve waarden met bewegingen omlaag. Beweegt de linkerarm omlaag. De linkerarm heeft 16 mogelijke standen, vanaf 0 tot en met 15. De beweging kan absoluut of relatief zijn. Voor de relatieve bewegingen geldt dat positieve waarden corresponderen met bewegingen omhoog , negatieve waarden met bewegingen omlaag. Beweegt de rechterarm omhoog. De rechterarm heeft 16 mogelijke standen, vanaf 0 tot en met 15. De beweging kan absoluut of relatief zijn. Voor de relatieve bewegingen geldt dat positieve waarden corresponderen met bewegingen omhoog , negatieve waarden met bewegingen omlaag. Beweegt de rechterarm omlaag. De rechterarm heeft 16 mogelijke standen, vanaf 0 tot en met 15. De beweging kan absoluut of relatief zijn. Voor de relatieve bewegingen geldt dat positieve waarden corresponderen met bewegingen omhoog , negatieve waarden met bewegingen omlaag.
Type: Absolute of Relative Position: bereik van de relatieve beweging van de linkerarm[- 15,15] of absolute stand van de linkerarm [0, 15]
Type: Absolute of Relative Position: bereik van de relatieve beweging van de linkerarm[- 15,15] of absolute stand van de linkerarm [0, 15]
Type: Absolute of Relative Position: bereik van de relatieve beweging van de rechterarm [-15,15] of absolute stand van de rechterarm [0, 15]
Type: Absolute of Relative Position: bereik van de relatieve beweging van de rechterarm[- 15,15] of absolute stand van de rechterarm [0, 15]
Schakelt de tool van de linkerarm van de robot in of uit.
Mode: aan of uit {on,off}
Schakelt de tool van de rechterarm van de robot in of uit.
Mode: aan of uit {on,off}
Left Tool
Right Tool
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
Instructies voor de basis (Base) Beweegt de basis voorwaarts in een rechte lijn met de gespecificeerde snelheid.
Speed: snelheid van de beweging valt binnen het interval {1, 100}. 1 staat gelijk aan de minimumsnelheid, 100 aan de maximumsnelheid.
Beweegt de basis achterwaarts in een rechte lijn met de gespecificeerde snelheid.
Speed: snelheid van de beweging valt binnen het interval {-100, -1}. -1 staat gelijk aan de minimumsnelheid, -100 aan de maximumsnelheid.
Draait de basis tegen de klok in naar links met de gespecificeerde snelheid.
Speed: snelheid van de rotatie valt binnen het interval {1, 100}. 1 staat gelijk aan de minimumsnelheid, 100 aan de maximumsnelheid.
Draait de basis met de klok mee naar rechts met de gespecificeerde snelheid.
Speed: snelheid van de rotatie valt binnen het interval {-100, -1}. -1 staat gelijk aan de minimumsnelheid, -100 aan de maximumsnelheid.
Beweegt de basis voor- of achterwaarts in een rechte lijn met de gespecificeerde snelheid. Positieve snelheden staan gelijk aan bewegingen voorwaarts, negatieve snelheden aan bewegingen achterwaarts.
Distance: gewenste afstand in centimeters, bereik [0, 1000] Speed: snelheid van de beweging valt binnen het interval [-100, 100]. ± 1 staat gelijk aan de minimumsnelheid, ±100 aan de maximumsnelheid.
Draait de basis met de gespecificeerde hoek en snelheid. Positieve snelheden staan gelijk aan rotaties naar rechts, negatieve snelheden aan rotaties naar links.
Angle: rotatiehoek van de basis valt binnen het interval [0, 359]. Speed: snelheid van de rotatie valt binnen het interval [-100, -1]. ± 1 staat gelijk aan de minimumsnelheid, ±100 aan de maximumsnelheid.
Base Forward
Base Backward
Base Left
Base Right
Base Distance
Base Angle
Brengt de robot omhoog tot de uiterste stand.
26
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
Base Up
Brengt de robot omlaag tot de uiterste stand. Base Down
Stopt alle bewegingen van de basis.
Base Stop
Schakelt de koplampjes van de robot in of uit. Lights
Mode: aan of uit {on, off}
27
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
Instructies voor de Spraak (Voice)
Zegt een zin.
Index: nummer van de uit te spreken zin, aangegeven met een getal vanaf 5 1 tot en met 140 .
Zegt een getal. Deze instructie is altijd blokkerend.
Value: uit te spreken geheel getal, bereik [-1997,1997].
Say Phrase
Say Number
Zegt de temperatuur. Say Temperature
Geeft een geluid weer.
Index: nummer van het te reproduceren geluid, vanaf 1 tot en met 15.
Verwijdert het gespecificeerde spraakbericht.
Index: nummer van het te verwijderen bericht, interval [1, 10].
Registreert het gespecificeerde spraakbericht.
Index: nummer van het te registreren bericht, interval [1, 10].
Speelt het gespecificeerde spraakbericht af.
Index: nummer van het af te spelen bericht, interval [1, 10].
Play Sound
Delete Message
Record Message
5
Zie de paragraaf Lijst van de zinnen uitgesproken door de robot.
28
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
Play Message
Stopt de opname of het afspelen van een spraakbericht. Stop Message
29
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
30
Output commando's (Output)
Wist het display van de robot. Lcd Clear
LCD Text
Schrijft een bericht op het display van de robot, op de regel en in de kolom die gespecificeerd worden. Het display heeft 2 regels en 16 kolommen. De maximale lengte van een bericht is 16 karakters.
Row: regel van het display [1,2] Column: kolom van het display [1,16] Text: weer te geven bericht.
Schrijft de waarde van een numerieke variabele op het display van de robot op de regel en in de kolom die gespecificeerd worden.
Row: regel van het display [1,2] Column: kolom van het display [1,16] Value: weer te geven geheel getal
Stelt de waarde van een digitale 6 uitgang in.
Index: index van de te configureren digitale uitgang [1,4] Value: waarde van de uitgang {on, off}.
LCD Counter
Sinlge Output
6
Zie de paragraaf Aansturing van de GPIO's voor meer informatie over deze instructie.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
31
Configuratie commando's (Configuration) Icoon en naam commando
Digital IO
Actie
parameters
Configuratie van de vier digitale GPIO's. Een digitale GPIO kan worden geconfigureerd als digitale uitgang (Output) of digitale ingang 7 (Input) .
Pin: te configureren digitale in/uitgang: {1,2,3,4} Direction: richting van de digitale in/uitgang: {input, output}
Stelt de kleur in die wordt gebruikt door het gedrag zicht volgen.
Color: intensiteit van de RGB kleuren, bereik [0,255] Treshold: tolerantiedrempel, bereik: [0, 255]
Schakelt het gedrag geluiden volgen in of uit
Mode: aan of uit {on, off}
Schakelt het gedrag reageer op aanrakingen in of uit.
Mode: aan of uit {on, off}
Schakelt het gedrag zicht volgen in of uit.
Mode: aan of uit {on, off}
Schakelt het gedrag obstakels vermijden in of uit.
Mode: aan of uit {on, off}
Set Color
Sound Follower
Touch Behavior
Vision Follower
Obstacle Avoidance
7
Zie de paragraaf Aansturing van de GPIO's voor meer informatie over deze instructie.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
32
Het functioneren van enkele instructies Gebruik van de behaviors Zoals gezegd, bestaat een programma uit een geheel van behaviors. De uitvoering van deze behaviors moet expliciet worden aangeroepen via de instructie Start uit de Language groep. Het gedrag Main is het enige dat automatisch wordt uitgevoerd maar dat, anders dan andere behaviors, niet herhaaldelijk wordt uitgevoerd, maar zich gedraagt als een procedure. Het gedrag Main wordt over het algemeen gebruikt om andere behaviors te starten. Het gedrag Main eindigt pas als alle andere behaviors van het programma zijn geëindigd. In het volgende voorbeeld zie je hoe het gedrag Main en de instructies Start en Stop op de juiste wijze worden gebruikt. In het voorbeeld start het gedrag Main, dat automatisch wordt uitgevoerd wanneer het programma wordt gestart, op zijn beurt de uitvoering van de drie behaviors Behavior1, Behavior2 en Behavior3. Na het uitvoeren van deze operaties wacht het gedrag Main de beëindiging van de drie behaviors af.
. Behavior1 wacht op het event 'herkenning van het stemcommando nul'. Wanneer het stemcommando nul wordt herkend, stopt Behavior1 de uitvoering van Behavior2 en Behavior3 (instructies Stop) en eindigt vervolgens zelf (instructie End), waarbij het dus automatisch de beëindiging van het gedrag Main en dus van het hele programma veroorzaakt.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
33
Behavior2 en Behavior3 daarentegen, wachten respectievelijk op het event 'herkenning van het stemcommando één' en 'herkenning van het stemcommando twee'. Als de stemcommando's één of twee zijn herkend, voeren de behaviors een reeks bewegingen van het hoofd uit en wachten vervolgens op een nieuw event. Behavior2 beweegt het hoofd omlaag en naar rechts, Behavior3 beweegt het hoofd omhoog en naar links.
Het totale gedrag van de robot is als volgt: zolang de stemcommando's 'één' of 'twee' worden uitgesproken, beweegt de robot zijn hoofd omlaag en naar rechts of omhoog en naar links. Wanneer het stemcommando 'nul' wordt uitgesproken, eindigt het programma.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
34
Blokkerende en niet blokkerende instructies Met de instructie Blocking Flag uit de instructiegroep Language, kan de wijze worden ingesteld waarop de instructies moeten worden uitgevoerd die opdracht geven tot beweging van een component van de robot. Deze instructies kunnen op twee manieren worden uitgevoerd: blokkerend of asynchroon. Een asynchrone instructie brengt de beweging van een component van de robot op gang en keert onmiddellijk terug zonder de beëindiging van de beweging af te wachten. Een blokkerende instructie daarentegen keert pas terug nadat de uitvoering van de beweging is geëindigd. Om de wijze van uitvoering van de instructies in te stellen, voeg je een instructie Blocking Flag toe aan een gedrag of een procedure en stel je de eigenschap Mode in op de gewenste waarde: Blocking voor een blokkerende wijze, of Asynchronous voor de asynchrone wijze, zoals getoond in de volgende figuur.
NB: Elk gedrag heeft een eigen wijze van uitvoeren van instructies, die standaard staat ingesteld op de waarde Blocking. De instructie Blocking Flag kan meerdere keren, op verschillende punten van een gedrag, worden ingevoegd, waardoor tijdens de uitvoering de wijze van uitvoering wordt gewijzigd. Verder heeft het instellen van de wijze van uitvoering van de instructies in een gedrag geen invloed op de wijze van uitvoeren van andere behaviors. In de volgende afbeelding zie je bijvoorbeeld drie behaviors, waarvan er twee gelijk zijn maar verschillende wijze van uitvoeren van de instructies hebben. In het eerste geval staat de wijze ingesteld op Blocking, waardoor het gedrag van robot als volgt is: de robot
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
35
beweegt zijn linkerarm vijf posities omhoog en, als het commando is beëindigd, beweegt de robot zijn rechterarm vijf posities omlaag. In het tweede geval staat de wijze ingesteld op Asynchronous, waardoor het gedrag van de robot als volgt is: de robot beweegt gelijktijdig zijn linker- en rechterarm vijf posities omhoog. In het derde geval daarentegen, staat de wijze ingesteld op Asynchronous en worden achtereenvolgens twee instructies uitgevoerd voor de linkerarm; het gedrag van de robot is als volgt: de robot begint met het omhoog bewegen van de linkerarm, maar direct erna wordt de tweede instructie uitgevoerd, die de robot dwingt de beweging te onderbreken en de nieuwe instructie uit te voeren, oftewel de linkerarm omlaag te bewegen.
NB: Voor de armen en voor de basis geldt, dat als de uitvoering van een niet blokkerende instructie bezig is (zoals in voorbeeld 3), de uitvoering van een nieuwe instructie betreffende hetzelfde component – ook al is deze instructie van een ander gedrag -, noodzakelijkerwijs de uitvoering van de lopende instructie beëindigt. Als echter een blokkerende instructie, aangeroepen door een gedrag, 'in uitvoering' is, dan mislukt de uitvoering van een nieuwe instructie (noodzakelijkerwijs aangeroepen door een ander gedrag, blokkerend of niet blokkerend). NB: Voor instructies die betrekking hebben op de beweging van het hoofd – of er nu een blokkerende of niet blokkerende instructie in uitvoering is -, mislukt de uitvoering van een nieuwe instructie voor het hoofd. NB: Ook de instructies Play Sound, Say Phrase en Say Temperature uit de Voice groep kunnen asynchroon of blokkerend worden uitgevoerd. Ook in dit geval geldt, net als voor het hoofd, dat de instructie mislukt als er een andere instructie van het zelfde soort in uitvoering is, los van hoe de wijze van uitvoering staat ingesteld. De instructie Say Number is hoe dan ook blokkerend, los van de ingestelde uitvoeringswijze.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
36
Test van de sensoren De waarde van een sensor kan worden getest met een van de instructies uit de Test groep of in de conditie van de While instructie uit de Language groep. In deze gevallen is het uiterst belangrijk om, alvorens de waarde van een sensor te gebruiken, de door de sensor gemeten waarde af te lezen met de instructie Read uit de Language instructiegroep, anders is de waarde van de sensor die voor het beoordelen van de conditie wordt gebruikt de waarde van de laatste meting die gedaan is, of een onbepaalde waarde als er nog niet eerder iets is afgelezen. NB: Met de instructie Read wordt de waarde gemeten door de sensor afgelezen en vervolgens opgeslagen in een lokale kopie die wordt gebruikt door de erop volgende test instructies. Wanneer er binnen een gedrag een instructie Read wordt uitgevoerd op een sensor, wijzigt deze instructie niet de waarde van de lokale kopie van de waarde van de sensor in de andere behaviors. NB: Het aflezen van een sensor is niet nodig als er, voorafgaand aan de test, een instructie Wait For is uitgevoerd op die sensor. De instructie Wait For wacht op het event en slaat de waarde van de sensor die het event heeft geproduceerd op in de lokale kopie. In de volgende voorbeelden zie je hoe je de instructies Read en Wait For correct gebruikt in combinatie met de instructies uit de Test groep en de instructie While.
In het eerste voorbeeld wordt de temperatuursensor afgelezen: als de gemeten waarde hoger is dan 20 ºC, wordt de basis 50 cm naar voren bewogen, anders wordt de basis gestopt. Deze instructies worden door het gedrag herhaaldelijk uitgevoerd, tot aan de beëindiging van het programma, waardoor, als de gemeten temperatuur constant 25 ºC is, het uiteindelijke gedrag van de robot steeds hetzelfde is: de robot beweegt constant 50 cm naar voren. In het tweede voorbeeld daarentegen, wordt er gewacht op een wijziging van de waarde van de temperatuur. Wanneer de temperatuur is gewijzigd, wordt de door de sensor gemeten waarde getest en, net als in het voorgaande voorbeeld, als de waarde hoger is
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
37
dan 20 ºC wordt de basis 50 cm naar voren bewogen, zo niet dan wordt de basis gestopt. Na de uitvoering van deze instructies wacht het gedrag op een nieuwe verandering van de waarde van de temperatuur.
Deze instructies worden door het gedrag herhaaldelijk uitgevoerd tot aan de beëindiging van het programma, waardoor, als de gemeten temperatuur constant 25 ºC is, het uiteindelijk gedrag van de robot steeds hetzelfde is: de robot blijft constant stilstaan. In het derde voorbeeld tenslotte wordt er een instructie While uitgevoerd, die herhaaldelijk de waarde van de temperatuursensor meet. Zolang de temperatuur hoger is dan 20 ºC, wordt de basis 50 cm naar voren bewogen. Wanneer de temperatuur onder de 20 ºC komt, wordt de basis gestopt.
Deze instructies worden door het gedrag herhaaldelijk uitgevoerd, tot aan de beëindiging van het programma, waardoor, als de gemeten temperatuur constant 25 ºC is, het uiteindelijke gedrag van de robot steeds hetzelfde is: de robot beweegt constant 50 cm naar voren.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
38
Condities van de Test instructies op de sensoren Condities Equal to [value] = Not Equal to [value] Greather than [value] > Greather than or equal to [value] Less than [value] < Less than or equal to [value]
In range [from] to [to]
Not in range [from] to [to]
Beschrijving Aan de conditie is voldaan als de waarde van sensor gelijk is aan de waarde [value]. Aan de conditie is voldaan als de waarde van de sensor ongelijk is aan de waarde [value]. Aan de conditie is voldaan als de waarde van de sensor groter is dan de waarde [value]. Aan de conditie is voldaan als de waarde van de sensor groter is of gelijk aan de waarde [value]. Aan de conditie is voldaan als de waarde van de sensor lager is dan de waarde [value]. Aan de conditie is voldaan als de waarde van de sensor lager is of gelijk aan de waarde [value]. Aan de conditie is voldaan als de waarde van de sensor behoort tot het numerieke interval [from,to] Aan de conditie is voldaan als de waarde van de sensor niet behoort tot het numerieke interval [from,to]
Eigenschap Value: numerieke waarde of naam van een variabele. Value: numerieke waarde of naam van een variabele. Value: numerieke waarde of naam van een variabele. Value: numerieke waarde of naam van een variabele. Value: numerieke waarde of naam van een variabele. Value: numerieke waarde of naam van een variabele. From: numerieke waarde of naam van variabele die de ondergrens van het interval definieert. To: numerieke waarde of naam van variabele die de bovengrens van het interval definieert. From: numerieke waarde of naam van variabele die de ondergrens van het interval definieert. To: numerieke waarde of naam van variabele die de bovengrens van het interval definieert.
In het volgende voorbeeld zie je hoe je de conditie Counter 1 10 en Counter 1 Counter 2 definieert:
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
39
Aansturing van de GPIO (General Purpose In/Out) De connector in de drager van de robot voorziet in twee analoge ingangen en vier digitale in- of uitgangen. Op de onderstaande foto zie je de aansluitingen.
4. 5. 6. 7. 8. 9.
1. GND 2. I2C-SCL 3. I2C-SDA Digital I/O 4 Digital I/O 3 Digital I/O 2 Digital I/O 1 Analog IN 1 Analog IN 2 10. 3V
De twee analoge ingangen zetten analoge spanningen tussen 0V en 3V om in een digitale waarde tussen 0 en 255, die afgelezen en getest kan worden via de instructies van de Language groep en Test. De vier digitale GPIO's zijn vooraf ingesteld als digitale uitgangen en kunnen de waarde hoog of laag aannemen, waarmee uitgaande spanningen corresponderen van respectievelijk 3V en 0V. De waarde van een digitale uitgang is vooraf ingesteld op laag en kan worden veranderd met de instructie Single Output van het instructieblok Output, door het nummer van de digitale uitgang die je wilt instellen en de waarde te specificeren, via de eigenschappen Pin en Value. De eigenschap Pin specificeert de GPIO die wordt ingesteld, terwijl de eigenschap Value de ingestelde waarde specificeert: Low (0V) of High (3V). De andere vier aansluitingen van de connector worden gebruikt voor communicatiebus I2C en voor de voeding (3V).
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
40
NB: De waarde van een digitale uitgang kan ook worden gewijzigd via de spraakcommando's Aan of Uit uit woordset 1, gevolgd door uitgang 1, uitgang 2, uitgang 3, of uitgang 4. Met Aan wordt de waarde ingesteld op hoog, met Uit op laag. De vier digitale GPIO's kunnen worden geherconfigureerd als ingangen via de instructie Digital I/O uit de Configuration instructiegroep. Met deze instructie kan elke GPIO afzonderlijk worden geconfigureerd als ingang of uitgang, via de eigenschappen Pin en Direction. De eigenschap Pin specificeert welke GPIO wordt geconfigureerd, terwijl de eigenschap Direction specificeert hoe de GPIO wordt ingesteld, als ingang (Input) of uitgang (Output).
NB: Als een GPIO geconfigureerd is als digitale ingang en er, op deze GPIO, een instructie Single Output wordt uitgevoerd, dan heeft de instructie geen effect. Voor de GPIO's geconfigureerd als digitale ingangen zijn drie events voorzien: het event change, het event raise en het event fall. Het event change vindt plaats als de waarde van de digitale ingang verandert, oftewel van hoog naar laag gaat of vice versa. Het event raise vindt plaats als de waarde van de digitale ingang van laag naar hoog gaat, oftewel de ingangsspanning gaat van 0V naar 3V, terwijl het event fall zich voordoet als de waarde van de digitale ingang van hoog naar laag gaat, oftewel de ingangsspanning gaat van 3V naar 0V. In het figuur rechts zie je een voorbeeld waarin GPIO 4 geconfigureerd is als digitale ingang, terwijl de GPIO's 1 en 2 standaard ingesteld zijn als digitale uitgangen. In het voorbeeld wordt gewacht tot ingang 4 van laag naar hoog gaat (event pin4_raise) en wanneer dit gebeurt, wordt uitgang 1 ingesteld op de hoge waarde en uitgang 2 op de lage waarde. In het voorbeeld wordt verder gewacht tot ingang 4 van hoog naar laag gaat (event pin4_fall) en wanneer dit gebeurt, wordt uitgang 1 ingesteld op de lage waarde en uitgang 2 op de hoge waarde.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
41
Spraakcommando's De spraakcommando's die voor de programmering van de robot worden gebruikt, komen uit woordset 11, die elf woorden bevat: de getallen nul tot en met tien. De commando's uit woordset 11 zijn te activeren door het woord commando uit woordset 2 uit te spreken, gevolgd door een van de woorden uit woordset 11, zoals bijvoorbeeld commando + twee of commando + zeven.
Woordset 2 Basis Linkerarm Rechterarm Hoofd ... Commando
Woordset 11 Nul Een Twee Drie Vier Vijf Zes Zeven Acht Negen Tien
Naast de events update en change, die plaatsvinden als een nieuw stemcommando uit woordset 11 herkend is (update) of herkend is en anders is dan het voorgaande (change), correspondeert er met elk stemcommando van woordset 11 een event. Bijvoorbeeld, met het stemcommando commando + twee correspondeert het event two enzovoort, zoals je ziet in de volgende tabel: zero
vindt plaats wanneer het commando NUL uit woordset 11 is herkend
one
vindt plaats wanneer het commando EEN uit woordset 11 is herkend
two
vindt plaats wanneer het commando TWEE uit woordset 11 is herkend
three
vindt plaats wanneer het commando DRIE uit woordset 11 is herkend
four
vindt plaats wanneer het commando VIER uit woordset 11 is herkend
five
vindt plaats wanneer het commando VIJF uit woordset 11 is herkend
six
vindt plaats wanneer het commando ZES uit woordset 11 is herkend
seven
vindt plaats wanneer het commando ZEVEN uit woordset 11 is herkend
eight
vindt plaats wanneer het commando ACHT uit woordset 11 is herkend
nine
vindt plaats wanneer het commando NEGEN uit woordset 11 is herkend
ten
vindt plaats wanneer het commando TIEN uit woordset 11 is herkend
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
42
In het volgende voorbeeld wordt via de instructie Wait For uit de Language groep gewacht op de herkenning van het spraakcommando 'zeven' en, zodra dit commando zeven wordt herkend, wordt het hoofd van de robot een positie omhoog gebracht.
In het volgende voorbeeld wordt gewacht op het event update voor de spraakherkenning, dat plaatsvindt als een van de spraakcommando's van woordset 11 wordt herkend. Als een spraakcommando wordt herkend, wordt de instructie Voice Command uit de Test groep uitgevoerd, die voor elk herkend woord van woordset 11 een instructieblok voorziet. De instructies worden in de blokken ingevoerd.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
43
Lijst van de zinnen uitgesproken door de robot 1. 2.
Ik sla je stem op, zodat ik hem later herken Zeg het password
3.
Herhaal dat, alsjeblieft
4.
Oké
5.
Bericht
6.
8.
Als je het password activeert, praat ik alleen met jou Ik antwoord alleen als ik je herken Ik snap het niet
9.
Herhaal dat
10.
Graden
50.
Wat wil je nu?
88.
Dit spel vind ik leuk
11.
Alsjeblieft
51.
Tikkertje
89.
Je houdt me voor de gek
12.
Bedankt
52.
90.
Laat me de kleur zien
91.
Verstoppertje
92.
Dat heb ik echt nodig
93. 94.
Niemand wil met me spelen! Nee
95.
Zeg dat niet
96.
Ik heb geen zin
97.
Ik kan het niet vinden
7.
39.
Boos
77.
I-Qbot
40.
Wacht op me
78.
De beste
41.
Beslist niet
79.
De mooiste
42.
Batterijen elektronica
80.
Achtervolgertje
43.
Batterijen motoren
81.
Ik vermaak me prima
44.
Ik verveel me dood!
82.
Laat me met rust
45.
Goed
83.
Denk je echt?
46.
Zoek de schat
84.
Waar ben je geweest?
47.
Warm
85.
Minder
48.
Stout
86.
Test me maar
49.
Leuk om je te zien!
87.
Het spijt me
13.
Alsjeblieft
14.
Hallo
15.
Ik ben I-Qbot
54.
Dat zal best! Je laat mij niks doen. Dat ontbrak er nog maar aan Hoe is het gegaan?
16.
Ik heb je herkend
55.
Hoe gaat het met je?
17.
Probeer het maar niet
56.
Net als jij!
18.
Je kent het password niet
57.
19.
Hallo, ik ben I-Qbot
58.
Laten we meteen beginnen! Kom op!
20.
Welterusten
59.
Zeg eens
98.
Ik zie het niet
21.
Aan
60.
Het is leuk
99.
Raak me niet aan!
22.
Uit
61.
Het is veel
23.
Links
62.
Waarom dan?
24.
Rechts
63.
Dat is wat ik nodig heb
100. Ik heb geen zin om te spelen! 101. Ik kan de weg niet vinden
25.
Omhoog
64.
Verdrietig
26.
Omlaag
65.
Hier ben ik
27.
Vooruit
66.
Daar ben je
28.
Achteruit
67.
Obstakels vermijden
29.
Naar wie?
68.
30.
Wat zullen we spelen?
31.
Laat me even uitrusten!
69.
Laten we samen iets doen! Nog een keer! Dit is leuk!
32.
Nu kan ik je horen!
70.
Gelukkig
33.
Help
71.
Eindelijk
34.
72.
Koud
73.
Laten we gaan spelen
35.
Laten we dan iets gaan doen! Tenminste
74.
We spelen …
36.
Jij ook
75.
Nog een spelletje!
37.
Nog een keer!
76.
38.
Verveeld
Ik heb veel aandacht nodig!
53.
102. Je bent oké! 103. Ik ben niet lelijk 104. Ik ben niet moe 105. Met zo weinig lukt het je niet 106. Jij durft, zeg! 107. Ik kan je niet vinden 108. Ik zie je niet 109. Ik wil je niet zien! 110. Om te spelen 111. Waarom? 112. Uitstekend 113. Gepakt 114. Klaar 115. Punt
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
44
116. Wat is dit leuk!
126. Ik ben alleen moe
117. Alsof jij zo knap bent!
127. Heb ik het goed gedaan?
118. Leeg
128. Ik ben veel te moe
119. Knip met je vingers
129. Grappenmaker!
135. Ik vind je steeds aardiger! 136. Ik vind je te aardig om je tegen te spreken! 137. Verdrietig
120. Volg geluiden
130. Temperatuur
138. Gevonden
121. Moet jij zeggen!
131. Vind je het leuk als ik boos ben?! 132. Vond je het leuk?
139. Zicht
122. Ja 123. Zeker weten? 124. Ik ben 125. Ik ben blij dat je me aardig vindt!
133. Ik vind je toch aardig! 134. Ik vind je leuk als je zo doet!
140. Wil je met me spelen?
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
45
Coördinaten van het beeldvlak en onderverdeling in zones De beelden geregistreerd door de CMOS sensor die worden bewerkt om de gebieden met een huidskleur te identificeren of de gebieden met een specifieke kleur, hebben afmetingen van 160 x 120 pixels. Het gebruikte coördinatensysteem is het volgende:
De x-coördinaat heeft waarden die liggen in het interval [- 80,80], terwijl de y-coördinaat waarden heeft liggend in het interval [- 60,60]. Het beeld dat de CMOS sensor registreert, wordt verwerkt om de pixels van een doelkleur te vinden. De aangrenzende pixels, oftewel de pixels die horen tot eenzelfde omgeving en die dezelfde kleur hebben als de target kleur, worden samen gegroepeerd om pixel gebieden van dezelfde kleur te vormen. Het gebied met de grootste afmetingen is het gebied waarvan de zwaartepuntcoördinaten (x, y) door de instructie Wait For uit de Language groep worden gebruikt en door de instructies Tracking en Tracking Area uit de instructiegroep Test. Met de instructie Set Color uit de Configuration instructiegroep kan de target kleur, gebruikt in de verwerking van de beelden, worden veranderd. Om de kleur te veranderen, ga je naar de eigenschap Color van de instructie Set Color en selecteer je de gewenste kleur, zoals getoond in het volgende voorbeeld.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
46
Met de eigenschap Treshold van de instructie Set Color definieer je de tolerantiedrempel waarmee de kleur van een pixel wordt geaccepteerd als gelijk aan de target kleur. Om het gebruik van de instructies Wait For en Tracking Area te vergemakkelijken, is het beeldvlak verdeeld in 9 zones, drie per regel en drie per kolom, zoals getoond in het volgende voorbeeld: Y 60 TOP LEFT
TOP CENTER
TOP RIGHT
20 -80
LEFT
-25 CENTER 25
RIGHT
80
X
-20 BOTTOM LEFT
BOTTOM CENTER
BOTTOM RIGHT
-60
Het event area_change vindt plaats wanneer de coördinaten (x,y) van het zwaartepunt van het grootste gebied van de ene zone overgaan naar de andere. Met de instructie Tracking Area is het mogelijk om een andere instructiegroep uit te voeren, afhankelijk van de nieuwe zone waarin het zwaartepunt valt, zoals getoond in de volgende figuur. NB: Wanneer het gedrag Zicht volgen wordt geactiveerd, toont de feedback video op de PC Control en de Mobile Control het resultaat van de bewerking van de CMOS sensor, waardoor makkelijker te begrijpen is hoe e.e.a. functioneert.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
47
Een programma compileren en uitvoeren Wanneer een programma klaar is, kan het worden verzonden naar de robot en aldaar worden gecompileerd. De werkbalk heeft daarvoor vier iconen beschikbaar, die achtereenvolgens worden gebruikt, van links naar rechts:
Een programma verzenden naar de robot Om een programma te verzenden naar de robot, moet de software PC Control (versie 1.3.x of hoger) actief zijn en via Bluetooth verbonden zijn met de robot. Via deze software kan de Visual C-like Editor namelijk communiceren met de robot om programma's over te brengen, te compileren en uit te voeren. Nadat je hebt gecontroleerd of PC Control verbonden is met de robot, hoef je, om een programma over te brengen, alleen maar te klikken op de betreffende icoon werkbalk, of het commando Download te kiezen uit het Program menu.
op de
Het programma compileren Wanneer een programma eenmaal is verzonden, kan dit binnen de robot worden gecompileerd, door te klikken op de juiste icoon op de werkbalk, of door het commando Compile te kiezen uit het Program menu. Wanneer er tijdens de compilatie fouten optreden (bijvoorbeeld wanneer je dezelfde naam hebt gebruikt voor een variabele en een procedure, of een procedure en/of een variabele en/of een gedrag gewist zijn, maar er binnen het programma nog verwijzingen naar de verwijderde elementen zijn), dan geeft de Editor een foutmelding. Voor de meer ervaren gebruikers, is er in het Program menu het item Show source beschikbaar, waarmee de vertaling van het programma in C-like taal zichtbaar wordt.
Het programma uitvoeren Eenmaal gecompileerd, is het programma klaar om op de robot te worden uitgevoerd. De uitvoering van het programma kan op verschillende manieren worden gestart: • •
•
Via het juiste icoon op de werkbalk, of door het commando Start te kiezen uit het Program menu; Via het bedieningspaneeltje van de robot: druk enkele keren op de linker knop totdat User Program op het display verschijnt, druk vervolgens op de middelste knop totdat je User Program Start ziet, druk tenslotte op de rechter knop om het gebruikersprogramma te starten; Via het menu Robotgedrag van PC Control of van Mobile Control, waarbij je het item Gebruikersprogramma Aan/Uit selecteert.
HANDLEIDING VISUAL C-LIKE EDITOR VOOR I-QBOT
48
Het programma stoppen Wanneer het programma in uitvoering is, kan het op verschillende manieren worden gestopt: • •
•
Via het juiste icoon op de werkbalk, of door het commando Stop te kiezen uit het Program menu; Via het bedieningspaneeltje van de robot: druk enkele keren op de linker knop totdat User Program op het display verschijnt, druk vervolgens op de middelste knop totdat je User Program Stop ziet, druk tenslotte op de rechter knop om het gebruikersprogramma te stoppen; Via het menu Robotgedrag van PC Control of van Mobile Control, waarbij je het item Gebruikersprogramma Aan/Uit selecteert.
NB: wanneer het programma in uitvoering is, wordt de rechter knop op het bedieningspaneeltje van de robot alleen door het blok Wait For Keyboard Update gebruikt als het op de robot geselecteerde menu User Program – Start is gebleven. Natuurlijk kun je het display ook via Visual C-like benaderen en willekeurig welk ander bericht schrijven, maar het geselecteerde menu zal User Program – Start blijven, tenzij je via de middelste en de linker knop op de robot naar een andere menu gaat. In het laatste geval, wordt het indrukken van de rechter knop niet meer geregistreerd door het blok Wait For Keyboard Update, maar direct afgehandeld in het menu dat zichtbaar is op het display van de robot.