Ostatní možnosti prostředí
• zaznamenávání a vizualizace hodnot,
• časovače.

KURZ: Časovače

Robotická stavebnice Lego Mindstorms NXT obsahuje vestavěné časovače, které nám při programování umožňují řídit jednotlivé úkony robota. Hlavní funkcí časovače je řídit dobu, po kterou bude určitý pohyb, funkce nebo pouze příkaz prováděn. Práci s časovači využijeme v rozsáhlých úkolech, ve kterých budeme potřebovat, aby na sebe události správně navazovali. Pomocí časovačů toho můžeme jednoduše dosáhnout.

POPIS V PROGRAMOVACÍM PROSTŘEDÍ

NXT-G

Časovače a oddálení vykonávání příkazů

Rozcestník


VYUŽITÍ ČASOVAČŮ

Časovač můžeme ovládat pomocí bloku TimerDragged Timer, který nalezneme v programovacím prostředí NXT-G v paletě icon completeComplete > SensorHilight Sensor.

 

Timer blok

 

Blok  TimerDragged Timer obsahuje celkem šest konektorů, pomocí kterých jej můžeme propojit s dalšími bloky:

TimerSelection Timer - konektor vyjadřující, který ze tří dostupných časovačů je používán (1-3).

TriggerPoint Trigger Point - vyjadřuje hodnotu, která je určena k porovnání se vstupem.

GreaterLess Greater/Less - hodnota logického datového typu sloužící pro srovnání dvou hodnot (větší nebo menší).

ResetA Reset - logický vstup sloužící k nulování časovače (True - vynulovat, False - nevynulovat).

Boolean YES/NO - hodnota logického datového typu vyjadřující výsledek porovnání.

Timer Timer Value - hodnota časovače vyjádřená v milisekundách.

 

Timer

Timer: označuje, který z časovačů (1-3) je používán.

Action: sekce, ve které volíme, zda chceme z časovače číst jeho aktuální hodnotu (Read) nebo jej vynulovat (Reset).

Compare: pole sloužící k porovnání vstupní hodnoty s aktuální hodnotou časovače.


ODDÁLENÍ VYKONÁVÁNÍ PŘÍKAZU

Oddálit vykonávání dalšího příkazu můžeme v programovacím prostředí NXT-G pomocí bloku WaitForTimeDrag Wait umístěného v paletě Paleta Complete Complete > Easy Common.

WaitForTimeDrag

Blok WaitForTimeDrag Wait neobsahuje žádné vstupní ani výstupní konektory, pomocí kterých by ho bylo možné propojit s dalšími bloky.

 

V nastavení bloku nalezneme v sekci Control dvě volby pro oddálení vykonávání dalšího příkazu. První volbou je možnost Time. Umožňuje nám nastavit dobu, po které se bude provádět vykonávání dalšího příkazu (bloku) umístěného za blokem  WaitForTimeDrag Wait.

Wait time

Druhou možností je čekání na vykonání akce řízené některým ze senzorů. Pro nastavení této možnosti musíme nejprve v sekci Control zvolit možnost Sensor. Zobrazí se pole Sensor, kde v rozbalovacím menu nalezneme seznam všech dostupných senzorů. Po zvolení senzoru se v pravé části pole zobrazí jeho funkce, pomocí kterých můžeme řídit další činnost programu. Na obrázku můžete vidět využití bloku Wait s řízením pomocí dotykového senzoru. Můžeme například nastavit, aby další příkaz byl prováděn až po stisknutí tlačítka (Pressed). Program se tedy v místě, kde bude umístěn blok Wait zastaví a bude čekat na vstup v podobě stisku tlačítka. Stejně můžeme využívat i další senzory. Bude se například čekat, až určitá veličina snímaná senzorem dosáhne požadované úrovně a podobně.

Wait sensor

RobotC

ČASOVAČE A ODDÁLENÍ VYKONÁVÁNÍ PŘÍKAZŮ

Rozcestník


Využití časovačů

V programovacím prostředí RobotC můžeme pro práci s robotem využít celkem čtyři časovače, které jsou označovány T1, T2, T3 a T4. V programování nám slouží k přesnému časovému řízení určitých úkonů.

Nulování časovače

Před každým použitím časovače je nutné jej nejprve vynulovat. K nulování slouží příkaz ClearTimer(). Jeho parametrem v závorce je zmíněné označení právě používaného časovače (T1, T2, T3 nebo T4).

 
ClearTimer(T1); // nulovani casovace T1
 
Práce s časovačem

Stejně jako hodnoty snímané senzorem, můžeme i hodnotu časovače (časový úsek) získávat, popřípadě ukládat do proměnných. Slouží nám k tomu tři pole hodnot. Jedná se o time1[]time10[]time100[]. Rozdíl mezi nimi je pouze v jednotkách, které vrací. První vrací hodnotu časovače vyjádřenou v jednotkách milisekund, druhé v desíkách a třetí ve stovkách. Krátký příklad můžete vidět o něco níže. Nejprve vynulujeme časovač T1. Následně si nadeklarujeme proměnnou cas datového typu integer, do které se hodnota časovače bude ukládat. Do ní následně uložíme hodnotu časovače vyjádřenou v jednotkách milisekund.

 
ClearTimer(T1); // nuluje citac
 
int cas; // promenna pro ulozeni hodnoty
 
cas = time1[T1];
 

Časovač slouží hlavně k přesnému řízení určitých úkonů robota. Ukážeme si tedy jeho činnost na krátkém příkladu. Budeme chtít, aby se motor otáčel 5 vteřin a poté aby se zastavil. Čas bude řízen časovačem. Jak jsme uvedli v úvodu, před každým použitím musí být časovač vynulován. Zde tomu nebude jinak. Použijeme tedy nejprve příkaz ClearTimer(). Následně chceme zařídit, aby se motor otáčel, dokud nebude hodnota časovače rovna 5 sekund. Použijeme tedy cyklus s podmínkou na začátku while(). Jeho podmínkou bude time10[T1] < 500 - prováděj, dokud časovač nebude roven 500 milisekund = 5 sekund. Do těla cyklu umístíme příkaz pro ovládání motoru. Jakmile časovač dosáhne hodnoty 5 sekund, motor se zastaví.

 
ClearTimer(T1);
 
 while(time10[T1] < 500)
 {
   motor[motorB] = 50;
 }
 
 motor[motorB] = 0;
 
 

ODDÁLENÍ VYKONÁVÁNÍ PŘÍKAZU

U některých úkonů, které bude robot vykonávat potřebujeme, aby trvaly pouze určitou dobu. Naším cílem tedy bude zajistit, aby se další příkaz vykonával až s určitým časovým odstupem. Může se jednat například o popojetí o určitý úsek, který víme, že robot vykoná například za 2 vteřiny. Oddálení vykonávání dalšího příkazu zajišťují v programovacím prostředí RobotC dva příkazy. Jsou jimi wait1Msec() a wait10Msec(). Jak již jejich název napovídá, rozdíl mezi nimi je v jednotkách, se kterými pracují. Prvně jmenovaný má jako parametr uvedený v závorce číslo, které vyjadřuje jednotky milisekund, kdežto druhý desítky milisekund.

 
wait1Msec(1mSec); // oddali vykonavani dalsiho prikazu o jednotky milisekund
wait10Msec(10mSec); // oddali vykonavani dalsiho prikazu o desitky milisekund
 

Praktický příklad využití můžete vidět zde:

 
motor[motorA] = 100; // Motor je pripojen k portu A a otaci se smerem vpred s maximalnim vykonem.
wait1Msec(4000); // Otaceni motoru je provadeno 4 sekundy, po kterych je pohyb ukoncen a program pokracuje dale.
motor[motorA] = 0; // Vykon motoru je nastaven na nulu.
 

1 1 1 1 1 1 1 1 1 1 Hodnocení 0.00 (0 hodnocení)

KURZ: Zaznamenávání a vizualizace hodnot

Obě programovací prostředí nabízejí kromě možnosti vytváření programového kódu i mnoho dalších funkcí. Jednou z nich je vizuální zobrazení dat. Ověření, zda senzor pracuje správně a jaké hodnoty vrací musíme pro ověření určitým způsobem interpretovat a vyjadřovat. Často se tato činnost v programu provádí pomocí výpisu na displej řídící jednotky. My si ovšem můžeme určité hodnoty a konfiguraci zjistit přímo v programovacích prostředích, díky jejich vestavěným funkcím.

POPIS V PROGRAMOVACÍM PROSTŘEDÍ

NXT-G

Vizualizace hodnot

Programovací prostředí NXT-G obsahuje vestavěnou utilitu, která umožňuje zaznamenávat hodnoty a vyjadřovat jejich průběh do grafu. Záznam hodnot v programu se ovládá pomocí dvou bloků, které si nejprve představíme a popíšeme.

Rozcestník


Spuštění záznamu

Programový blok StartDatalogDragged Start Datalog, který slouží ke spuštění záznamu hodnot, je umístěn v paletě icon completeComplete > Advanced Advanced.

start datalog blok

 

Popis bloku

Blok StartDatalogDragged Start Datalog obsahuje tři konektory sloužící k propojení s dalšími bloky:

Duration Duration - vyjadřuje dobu trvání analýzy dat.

datalogRate Rate - konektor vyjadřující počet snímků za sekundu, který má být zaznamenáván.

Filename Logname - název souboru, do kterého jsou ukládány výsledky analýzy.

 

 Parametry bloku

start datalog

Name: pole sloužící k zadání názvu záznamu dat.

Duration: volba pro nastavení doby trvání záznamu.

  • Seconds - ve vteřinách,
  • Minutes - v minutách,
  • Unlimited - nekonečný záznam,
  • Single Measurement - pouze jeden záznam.

Rate: možnost označující počet snímků za vteřinu (Samples per Second) nebo frekvenci pořizování snímků (Seconds between Samples).

Wait: čekání na dokončení prováděné činnosti.

V pravé části se nachází sekce, která slouží k definování vstupního či výstupního zařízení, které je připojeno k řídící jednotce a jehož hodnoty budeme analyzovat. K definování je nutné vybrat typ daného senzoru a port, ke kterému je připojen.


Zastavení záznamu

K zastavení záznamu dat slouží programový blok StopDatalogDragged Stop Datalog, který je umístěn v paletě icon completeComplete > Advanced Advanced.

stop datalog blok

 

Popis bloku

Programový blok StopDatalogDragged Stop Datalog obsahuje pouze jeden konektor umožňující propojení s dalšími bloky:

Filename Logname - název souboru, do kterého jsou ukládány výsledky analýzy.

 

Parametry bloku

stop datalog

Name: pole sloužící k výběru názvu bloku pro spuštění analýzy, která má být ukončena. Analýz může běžet v programu více a každá může být zastavována na jiném místě.


Použití v programovacím prostředí

Vestavěnou funkci pro vizualizaci hodnot můžeme v programovacím prostředí NXT-G spustit dvěma způsoby. Prvním je manuální spuštění pomocí tlačítka umístěného v horní části prostředí. Přesné umístění můžete vidě na obrázku.

 

datalog menu

 

Druhou možností je použití výše popsaných bloků pro záznam hodnot a následné spuštění programu. Pokud je řídící jednotka připojena k počítači pomocí USB, otevře se následně okno, ve kterém jsou prezentována data.

 

Pro demonstraci použití jsme k řídící kostce připojili světelný senzor (port 1) a zvukový senzor (port 2). Budeme chtít zaznamenávat hodnoty jimi zjištěné do grafu po dobu 10 vteřin. Použijeme tedy blok StartDatalogDragged Start Datalog. Nastavíme dobu trvání na 10 sekund a zaznamenávání například na 5 snímků za vteřinu. Na příslušných portech zadáme typy jednotlivých senzorů. Program následně nahrajeme do řídící jednotky a spustíme pomocí tlačítka Download and run (nahrát a spustit) uprostřed ovládacího panelu v pravé spodní části prostředí.

 

datalog priklad

 

Po spuštění programu se otevře nové okno, které slouží k zobrazení snímaných hodnot a jejich vykreslení do grafu. Jednotlivé části okna můžete vidět barevně odlišeny. V levé části je červeně zvýrazněna svislá osa hodnot. Můžeme zde vidět hned dvě, z nichž jedna patří světelnému senzoru (červená osa) a druhá zvukovému (žlutá osa).

Největší část okna zabírá graf, zvýrazněný modře. Po spuštění programu se do něj zaznamenávané hodnoty začnou vykreslovat s frekvencí, kterou jsme v nastavení bloku Start Datalog zadali. V našem případě se do grafu zaznamenávaly dvě křivky najednou, pro každý senzor jedna, které jsou stejně barevně odlišeny jako svislé osy hodnot.

Třetí částí okna je tabulka zaznamenaných hodnot zvýrazněná zeleně. Do ní se zapisují naměřené hodnoty frekvencí, kterou jsme zadali v úvodu (5x za vteřinu). Opět zde nalezneme barevně odlišeny oba dva připojené senzory.

 

datalog graf barvy

RobotC

Zaznamenávání a vizualizace hodnot

Rozcestník


Zjišťování a zobrazení hodnot

V programovacím prostředí RobotC můžeme zjišťovat hodnoty pomocí funkce, kterou nalezneme v záložce Robot > NXT Brick pod volbou Poll NXT Brick.

Poll menu

Následně se otevře nové okno, ve kterém můžeme vidět tři menší podokna, ve kterých se zobrazují různá data. Upozorňujeme na to, že okno se otevře pouze v případě, že je řídící jednotka NXT připojena k počítači pomocí kabelu USB.

 

Sekce motor

První a zároveň největší sekce, se zaměřuje na motory. Jsou zde zobrazeny všechny tři motory, které je možné k řídící jednotce připojit. Jednotlivé hodnoty, které zde zjistíme, jsou následující:

Motor: sekce zobrazující označení motoru.

Speed: vyjádření aktuální rychlosti otáčení motoru v procentech.

PID: udává, zda je aktivována regulace rychlosti otáčení motoru (pro zajištění přesného požadového otáčení na různých površích).

Mode: informace o nastavení motoru - zda je připojen (On), odpojen (Off), způsob napájení motoru (Brake - defaultní mód, Float - pokročilejší nastavení).

Regulate: způsob regulace otáček motoru (None - žádná, Encoder regulated - ovlivněna pomocí čítače otáček atd.).

Run State: vyjádření současného stavu motoru (Running - v chodu, Idle - nečinný).

Tach (Encoder) User: hodnota otáček načítaná pomocí čítače otáček.

Tach (Encoder) Move: hodnota otáček, kterou uživatel zadal k vykonání.

Tach (Encoder) Limit: hodnota, na které bude zastaveno otáčení.

Tach (Encoder) Total: kompletně nasčítané otáčky motoru od spuštění programu.

 

Sekce senzor

Druhá sekce umístěná pod oknem Motor z pohledu uživatele vlevo se nazývá Sensor. O připojených senzorech zde získáme tyto informace:

Sensor: vstupní port, ke kterému je senzor připojen.

Type: typ senzoru, ze kterého jsou informace získávány.

Mode: způsob vyjádření navrácených dat ze senzoru (RAW, procenta, číslo atd.).

Value: hodnota zjištěná senzorem v normalizovaném tvaru.

Raw: hodnota zjišťěná senzorem ve formátu RAW.

A-to-D: řídící jednotkou převedená hodnota z analogové podoby do digitální.

 

Sekce proměnná

Sync Type: informace o tom, zda je nastavena sychronizace motorů (AB, AC, BA atd.).

Sync Turn: nastavený synchronizační poměr.

Battery: aktuální napětí baterie řídící jednotky.

Sleep Time: nastavení doby, po které systém "uspí".

Volume: nastavená úroveň hlasitosti zvukového výstupu

 

Poll less

Pomocí tlačítka Refresh Once můžeme načítané hodnoty vynulovat a začít znovu od začátku. Tlačítko Poll Continuos/Stop Polling spouští nebo zastavuje simulaci.

Po kliknutí na tlačítko More se rozbalí spodní část okna, která nabízí další funkce pro práci s hodnotami ze senzorů či motorů.

 

Poll more


nastavení hodnot NXT (SET VALUES INTO NXT)

V této sekci můžeme ovlivňovat motory a senzory připojené k řídící jednotce nastavováním jejich typů nebo hodnot. Konkrétně se jedná o tyto možnosti:

Motory (Motors)

Speed: možnost manuálního nastavení otáček motoru (v rozmezí od -100 do +100). Hodnota se okamžitě zobrazí v horní části okna v kolonce Speed (rychlost).

Target Rot: nastavení cílových otáček čítači, po jejichž provedení se motor zastaví. Hodnota se okamžitě přičte do kolonky Tach (Encoder) Move v horní části okna.

Mode: změna módu, v kterém motor pracuje (Brake, Float, On, Off).

Reg: možnost vypnutí regulace otáček motoru.

 
Hodnoty regulace otáček motoru (PID Factors)

P: nastavení hodnoty P (proporcionální - rozdíl mezi aktuálními a požadovanými rychlostmi) zvolenému motoru.

I: nastavení hodnoty I (integrální) zvoleného motoru.

D: nastavení hodnoty D (derivační) zvoleného motoru.

Factor Type: pole, ve kterém volíme, zda chceme regulaci otáček řídit pomocí rychlosti (Speed) nebo čítače otáček (Encoder).

 

Sekce pro řízení senzorů (Sensor Section)

Type: možnost pro manuální změnu typu používaného senzoru připojeného k vstupnímu portu.

Mode: možnost manuální změny módu, ve kterém připojený senzor pracuje.

 

Nulování čítače otáček (Encoder Reset)

User Reset: nuluje uživatelem zadané hodnoty čítače otáček motoru.

Tacho Reset: nuluje systémový čítač otáček (jedná se o hodnoty, které uživatel nemůže zadávat).


Reset Devices: tlačítko sloužící k navrácení motorů a senzorů do původního nastavení.


Programové zaznamenávání hodnot

Kromě funkce Poll NXT Brick je programovacím prostředí RobotC možné zaznamenávat data také programově. Představíme si proto také několik příkazů, které k tomuto účelu slouží.

  • AddToDatalog(const long data) - zapíše hodnotu ukládanou do zvolené proměnné do souboru.
  • nDatalogSize - určuje velikost loggovacího souboru.
  • nMaxDataFiles - určuje maximální počet loggovacích souborů, které bude možné uložit do paměti řídící jednotky.
  • nMaxDataFileSize - určuje maximální velikost logovacího souboru v bajtech.
  • SaveNxtDatalog() - uloží zaznamenaná data z paměti RAM do paměti řídící jednotky ve formátu .rdt.

1 1 1 1 1 1 1 1 1 1 Hodnocení 0.00 (0 hodnocení)

KURZ: Deklarace motorů a senzorů

Při použití motorů a senzorů v programovacím prostředí RobotC je pro přehlednost a úplnost programu dobré provést jejich deklaraci. Její zápis je možné provést ručně v úvodu programu (popis deklarace senzorů je uveden v kapitolách týkajících se jednotlivých senzorů v sekcích Vstupní moduly a Rozšiřující vstupní moduly.

POPIS V PROGRAMOVACÍM PROSTŘEDÍ

RobotC

Volbu pro deklaraci a nastavení senzorů a motorů nalezneme v horní části menu v záložce Robot zvolením možnosti Motors and Sensors Setup.

Konfigurace menu

 

Deklarace motorů

Konfigurace motors

Po zvolení možnosti Motors and Sensors Setup se otevře nové dialogové okno, které obsahuje čtyři záložky. Zaměříme se na poslední dvě nazvané Motors a Sensors. Deklarace motorů se skládá z několika částí. V sekci Port můžeme vidět všechny tři výstupní porty (A, B a C). Podle toho, ke kterému výstupnímu portu je náš motor připojen si zvolíme příslušný řádek deklarace. V sekci Name zadává uživatel vlastní název motoru. U sekce Type je defaultně zvolen typ používaných motorů, tedy NXT. Následují tři možnosti pro zaškrnutí. V části Reversed vyjadřujeme, že chceme motor používat také jako reverzivní s možností dopředného i zpětného otáčení. Volba Encoder vyjadřuje využití čítače otáček pro řízení otáčení a PID Control zajišťuje řízení a synchronizaci motorů.

 

Deklarace senzorů

Konfigurace sensors

Deklarace senzorů se provádí v záložce Sensors. V levé sekci Port jsou zobrazeny všechny čtyři vstupní porty (S1 - S4). K příslušnému vstupnímu portu napíšeme volitelný název v sekci Name podle toho, ke kterému z portů je připojen. Následně si zvolíme druh senzoru ze seznamu v sekci Type.

Celou deklaraci poté aplikujeme kliknutím na tlačítko Použít a potvrdíme kliknutím na tlačítko OK.

1 1 1 1 1 1 1 1 1 1 Hodnocení 0.00 (0 hodnocení)

KURZ: Ostatní možnosti prostředí

Seznam článků kapitoly

  1. Časovače
  2. Zaznamenávání a vizualizace hodnot
  3. Deklarace motorů a senzorů
  4. Instalace rozšiřujících modulů

Úvod

Jak programovací prostředí NXT-G, tak i RobotC nabízí programátorům několik rozšiřujících funkcí, které výborně poslouží k pohodlnějšímu vytváření programu.

V kapitole nazvané Časovače se dozvíte, jakým způsobem je možné v obou programovacích prostředích řídit činnosti pomocí času nebo očekávaného úkonu.

Řízení složitějších činností robota si v některých případech vyžádá přesné zaznamenání a vyhodnocení hodnot. Jakým způsobem můžeme v programovacích prostředích zobrazit hodnoty graficky a kde tyto funkce nalezneme, se dozvíte v kapitole Zaznamenávání a vizualizace hodnot.

Kapitola Deklarace motorů a senzorů se týká pouze programovacího prostředí RobotC. Pokaždé, když v programu v něm vytvářeném použijeme některý ze senzorů, musíme jej deklarovat a nakonfigurovat. Jak se tento úkon provádí, pomocí jednoduchého průvodce, se dozvíte právě v této kapitole.

Programovací prostředí NXT-G obsahuje pouze základní programové bloky pro ovládání součástí obsažených v základní sadě stavebnice. Pokud chceme v programování využívat některý z dalších modulů, musíme si nejprve stáhnout jeho programový blok, který nejčastěji nalezneme na stránkách výrobce. Následně jej musíme nainstalovat do programovacího prostředí. Jak celou instalaci zvládnout se dozvíte v kapitole Instalace rozšiřujících modulů.

1 1 1 1 1 1 1 1 1 1 Hodnocení 3.00 (2 hodnocení)

KURZ: Instalace rozšiřujících modulů

Základní instalace programovacího prostředí NXT-G obsahuje pouze sadu nejběžněji používaných senzorů. Budeme-li ale pracovat s dalšími rozšiřujícími moduly, budeme potřeboval do palety nástrojů přidat blok, pro jejich ovládání. Instalace modulu je distribuována v podobě balíku souborů, který je nutné importovat do programovacího prostředí NXT-G. Po jeho nahrání se příslušný blok zobrazí v dané paletě nástrojů. 

Popis v programovacím prostředí

NXT-G

Instalace nového modulu

Možnost nahrání nového bloku nalezneme pod volbou Tools v horní liště nastrojů, kde následně vybereme položku Block Import and Export Wizard.

menu volba

Otevře se nové dialogové okno s aktivní záložkou Import. Zde pomocí tlačítka Browse vybereme příslušnou složku, ve které se nachází datové soubory pro daný programový blok. Zvolený blok se poté zobrazí v prostředním okně Select Blocks to Import (v našem případě Gyro Sensor). Kliknutím na něj a vybráním volby nahrát pomocí tlačítka Import se provede nahrání bloku do programovacího prostředí. Ještě předtím, než blok nahrajeme si můžeme pomocí volby Add Blocks to Palette vybrat, do které palety nástrojů chceme zvolený blok přidat.

import sensor

Druhá záložka s názvem Manage obsahuje přehled všech nahraných bloků v programovacím prostředí (v našem případě je nahrán pouze Gyro Sensor). Také zde se nachází dvě volby pro práci s bloky. První z nich je Export, která po zvolení bloku v přehledu provede opačný proces než Import. Do námi zvoleného místa v počítači exportuje složku se soubory příslušného programového bloku. Druhá volba Remove odstraní zvolený blok z programovacího prostředí NXT-G.

 manage

1 1 1 1 1 1 1 1 1 1 Hodnocení 0.00 (0 hodnocení)