KURZ: Gyroskopický senzor

  • Vytisknout

Gyroskopický senzor slouží k orientaci robota v prostoru. Měří rychlost otáčení v horizontální rovině senzoru připevněného k robotu a také jeho směr otáčení. Návratovou hodnotou senzoru je rychlost otáčení ve stupních za sekundu. Rozsah měření se pohybuje od +360° do -360° za sekundu. To nám umožňuje určit, kterým směrem se robot otáčí a díky tomu upravovat jeho polohu. Při použití, musíme pečlivě zvažovat umístění gyroskopu, protože snímá otáčení pouze v jediné ose.

PRÁCE S GYROSKOPICKÝM SENZOREM V PROGRAMOVACÍCH PROSTŘEDÍCH

NXT-G

Blok pro ovládání gyroskopického senzoru

Rozcestník


UMÍSTĚNÍ BLOKU

Gyroskopický senzor je v programovacím prostředí NXT-G řízen blokem GyroSensorDragged Gyro Sensor. Tento blok není součástí základní instalace. Pro jeho použití je nutné jej do prostředí importovat. Návod k importu rozšiřujících modulů naleznete v kapitole Instalace rozšiřujících modulů.


Gyro sensor block

POPIS BLOKU

Port Port - označuje, ke kterému ze vstupních portů je je senzor připojen.

TriggerPoint Trigger Point - značí vstupní nastavenou hodnotu senzoru, která je určena k porovnávání s hodnotami snímanými senzorem. Možný rozsah hodnoty je od -400 do +400 stupňů za sekundu.

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

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

Number Offset - výstup vyjadřující vstupní posun nastavený v poli Offset.

RawValue Raw Value - výstup udávající čistou naměřenou hodnotu rychlosti otáčení v RAW.

 

PARAMETRY BLOKU

Gyro sensor

Port: vyjadřuje, ke kterému ze vstupních portů (1-4) je senzor připojen.

Offset: hodnota, jejímž zadáním určuje vstupní hodnotu posuvu.

Compare: pole, které slouží k zadání hodnoty od -400 do +400 stupňů za sekundu, která je poté porovnávána s hodnotami snímanými senzorem.

RobotC

Příkazy pro ovládání gyroskopického senzoru

Rozcestník


Nastavení senzoru

Na úvod práce s gyroskopickým senzorem v programovacím prostředí RobotC je nutné provést jeho deklaraci. Programový zápis deklarace se skládá z klíčového slova #pragma a příkazu config(), který obsahuje čtyři parametry. Jelikož je možné deklarovat také motory, tak první parametr konkretizuje, že se v našem případě jedná o sensor. Druhý parametr označuje, ke kterému ze vstupních portů (S1 - S4) je senzor připojen. Třetí parametr je volitelný a zadává jej uživatel. Jedná se o název senzoru, který je poté dále používán při odkazování na senzor. Naopak poslední parametr je předdefinovaný a jedná se o standardizované označení gyroskopického senzoru (sensorI2CHiTechnicGyro).

 
#pragma config(Sensor, S1, gyroskopicky, sensorI2CHiTechnicGyro) // Kod je automaticky generovan pruvodcem deklaraci RobotC.
 

Poznámka: Deklaraci lze provést ručním zapsáním deklarace v příkladu nebo v menu programovacího prostředí RobotC. Postup deklarace je uveden v kapitole Deklarace motorů a senzorů.


Nastavení typu senzoru

Senzory je také možné deklarovat pomocí příkazu SensorType[], jehož parametrem je název senzoru. K tomuto příkazu je také nutné přiřadit oficiální název senzoru pro programovací prostředí RobotC (u gyroskopického senzoru sensorI2CHiTechnicGyro). Volitelný název uváděný jako parametr příkazu musí být nejprve definován pro třídu senzoru tSensors, která definuje rozšiřují moduly. Příklad deklarace senzoru je uveden níže.

Tento postup deklarace je doporučeno provádět zkušenějším uživatelům. Začátečníkům se doporučuje deklarovat moduly pomocí Deklarace motorů a senzorů v horní liště menu.

 
tSensors gyroSensor;
SensorType[gyroSensor] = sensorI2CHiTechnicGyro;
 

Práce s hodnotou snímanou senzorem

Pro práci s hodnotami snímanými senzorem nebo pro jejich vyhodnocování či porovnávání budeme potřebovat použít příkaz, který nám použití hodnoty umožní. V programovacím prostředí RobotC je jím příkaz SensorValue[]. Jeho parametrem uvedeným v hranaté závorce je název senzoru. Senzoru pomocí tohoto příkazu můžeme nastavit vstupní fixně zadanou hodnotu nebo hodnotu, která bude určena pro porovnání s hodnotou snímanou gyroskopickým senzorem.

 
SensorValue[gyroSensor] = 60; // Nastaveni vstupni hodnoty senzoru (u gyroskopickeho senzoru napriklad hodnota posunu - offset).
 

Využití předdefinovaných metod

Gyroskopický senzor patří mezi rozšiřující senzory. Pro jeho využívání nalezneme po nainstalování programovacího prostředí RobotC vývojovou knihovnu, která obsahuje další předdefinované funkce pro ovládání gyroskopu. Knihovnu ovšem musíme nejprve v programu zavolat. Provedeme to v jeho úvodu následovně:

 
#include "drivers/hitechnic-gyro.h"
 

Při zjišťování hodnoty rotace využijeme několik předdefinovaných funkcí, které si nyní představíme. První metoda se nazývá HTGYROstartCal(). Využijeme jí v úvodu programu. Slouží totiž pro kalibraci gyroskopického senzoru, díky které docílíme přesnějšího snímání. Pokud máme senzor správně zkalibrovaný, můžeme zjisit jeho posun oproti stavu po kalibraci. K tomuto účelu slouží příkaz HTGYROreadCal().

Hlavním účelem používání gyroskopického senzoru je ale detekce rotačního pohybu. Ke zjištění aktuální rychlosti otáčení slouží předdefinovaná funkce HTGYROreadRot().

U všech tří funkcí zadáváme pouze jediný parametr umístěný v závorce. Jedná se o volitelný název senzoru, který uživatel zadává při deklaraci.


MOŽNOSTI PRAKTICKÉHO VYUŽITÍ

Gyroskopický senzor slouží ke snímání rotačního pohybu robota. Senzor vyhodnocuje míru natočení ve stupních za sekundu. Jeho praktické využití nalezneme u zařízení, ve kterých potřebujeme přesně detekovat jeho pohyb a míru natočení. Nejznámější takové zařízení je vozítko Segway. Díky vestavěným gyroskopům je přesně snímán jeho pohyb a v každém okamžiku určována jeho aktuální pozice. Je tak možné přesně a včas reagovat a udržovat tak zařízení v rovnováze. Gyroskopický senzor je ovšem pouze jednoosý senzor. Snímá hodnoty pouze v jedné rovině. Není tedy tak komplexní jako senzor akcelerace, který měří zrychlení ve třes osách.

Využití gyroskopického senzoru

Příklady s využitím gyroskopického senzoru jsou většinou složité programové konstrukty. Jeho činnost si ukážeme na jednoduchém příkladu. Vytvoříme si model pohyblivého vozítka na který připevníme gyroskopický senzor. Následně vytvoříme program, díky kterému se bude vozítko pohybovat a natáčet v různých směrech. Hodnotu snímanou gyroskopickým senzorem budeme zaznamenávat, abychom tak viděli jak při pohybu robota senzor reaguje. Více o zaznamenávání a vizualizaci hodnot naleznete ZDE.

NXT-G

Zobrazení snímané hodnoty

Pro analýzu hodnoty, kterou vrací v určitých situacích gyroskopický senzor si musíme nejprve vytvořit vhodný program. Část programu, kterou chceme analyzovat je poté nutné v programovacím prostředí NXT-G vymezit pomocí bloků pro analýzu dat. Až poté můžeme program spustit a zjistit snímané hodnoty.

Vytvoření programu

Nejprve si představíme program, během jehož chodu jsme analyzovaly hodnoty snímané gyroskopickým senzorem. Program je pouze krátký, slouží jen k jednoduché demonstraci. Robot se díky němu tři vteřiny pohybuje vpřed. Následně se natočí o 360° vpravo, poté o 360° vlevo a nakonec se pohybuje opět tři vteřiny vpřed. První úsek vpřed se pohybuje rychlostí 50%, koncový úsek rychlostí 80%. Pohyb vpřed je realizován pomocí bloku MovePaletteDragged Move. Během natáčení do stran jsou motory ovládány blokem MotorDragged Motor (více o ovládání robota pomocí motorů naleznete v kapitolách Motor a jeho pohyb a Synchronizace pohybu dvou motorů).

gyro program

Aby mohla být data zaznamenávána, musíme na začátek programu umístit blok StartDatalogDragged Start Datalog, který spustí zaznamenávání dat. Na konec programu poté vložíme blok StopDatalogDragged Stop Datalog pro ukončení záznamu.

U bloku StartDatalogDragged Start Datalog musíme nastavit parametry záznamu. Dobu trvání jsme zvolili 10 sekund. Pro přesnější záznam hodnot jsme zvolili frekvenci záznamu 10 snímků za sekundu. Poslední věcí, kterou nastavíme, je typ senzoru připojený na příslušném portu.

gyro datalog nastaveni

Analýza dat

Senzor je umístěn na čelní straně robota ve vodorovné poloze a namířen směrem vpřed. Po spuštění programu se začala zaznamenávat data do grafu. Na obrázku můžete vidět křivku vyjadřující jeho průběh. Vodorovná osa grafu označuje čas běhu programu a svislá osa hodnotu, kterou vracel gyroskopický senzor (ve stupních za sekundu). První tři sekundy se robot pohyboval přímo vpřed. Na grafu je vidět, že hodnota gyroskopického senzoru se po tuto dobu pohybovala kolem nuly. Drobné odchylky jsou způsobeny nerovnostmi povrchu, po kterém se robot pohyboval. Dále se robot natočil o 360° vlevo. Hodnota okamžitě klesla až na -100 stupnňů za sekundu. Jakmile se robot začal natáčet o 360° vpravo, stoupla hodnota až na +100 stupňů za sekundu. Při opětovném pohybu vpřed se hodnota znovu pohybovala kolem nuly.

Z tohoto příkladu je patrné, že robot díky gyroskopickému senzoru dokáže reagovat pouze na natočení v jediné ose senzoru. Ačkoliv byl pohyb vpřed v úvodu a na konci programu prováděn rozdílnou rychlostí, z grafu tuto skutečnost nezjistíme. Na křivce je pouze dobře patrné, že bylo provedeno natočení nejprve na jednu stranu (senzor vrací zápornou hodnotu) a následně na druhou stranu (vrácená hodnota je kladná).

 

gyro

RobotC

ZOBRAZENÍ SNÍMANÉ HODNOTY

Analýzu hodnot, které vrací gyroskopický senzor v programovacím prostředí RobotC provedeme na příkladu pojídzného robota. Ten se bude pohybovat vpřed a během pohybu se natočí na obě dvě strany. Měnit bude také svoji rychlost. Pomocí funkce Poll NXT Brick poté zjistíme, na kolik je možné analyzovat v tomto programovací prostředí data ze senzoru.

Vytvoření programu

Nejprve si představíme program, během jehož chodu jsme analyzovaly hodnoty snímané gyroskopickým senzorem. Program je krátký, slouží jen k jednoduché demonstraci. Robot se díky němu tři vteřiny pohybuje vpřed. Následně se natočí o 360° vpravo, poté o 360° vlevo a nakonec se pohybuje opět tři vteřiny vpřed. První úsek vpřed se pohybuje rychlostí 50%, koncový úsek rychlostí 80%. Pokud nevíte, jak takovýto program vytvořit, více o ovládání robota pomocí motorů naleznete v kapitolách Motor a jeho pohyb a Synchronizace pohybu dvou motorů.

Analýza dat

Po spuštění funkce Poll NXT Brick a spuštění vizualizace pomocí tlačítka Poll Continuous začnou být zobrazována aktuálně snímaná data (více o zobrazování hodnot v RobotC v kapitole Zaznamenávání a vizualizace hodnot). Na prvním obrázku můžete vidět náhled při zobrazování hodnot úvodního pohybu robota vpřed. V horním okně se zobrazují informace o motorech. Můžeme vyčíst jak jejich rychlost, tak i počet otáček. Nás bude ale zajímat gyroskopický senzor. Nalezneme jej v dolním okně z pohledu uživatele vlevo. Byl připojen k portu S3. Jelikož patří mezi rozšiřující senzory, nebylo jej možné přiřadit ke třetímu portu a tak se zde zobrazuje popisek No Sensor. Hodnota je ovšem snímána, a to v podobě RAW. Můžete vidět, že v aktuálním okamžiku pořízení snímku byla hodnota 613.

rovne 1

Nyní se zaměříme na okamžik, kdy se robot natáčel do stran. Začneme natočením vpravo. Nahoře vidíme, že se otáčel pouze motor C. Změnu hodnoty zaznamenáme i u tabulky zobrazující hodnotu ze senzoru. Ta oproti pohybu vpřed nepatrně vzrostla.

vpravo

Při natočení na levou stranu je již změna hodnoty patrná více. Při natočení vpravo hodnota rostla, při natočení v opačném směru klesla až na 473. Vidíme tak, že senzor skutečně i v tomto okamžiku zaznamenal odklonění od přímého směru.

vlevo

Jako poslední si můžeme prohlédnout hodnoty naměřené při závěrečném zrychlení. Hodnota ze senzoru je pouze nepatrně nižší. To je způsobeno jak zrychlením, tak také otřesy způsobenými pohybem po drobných nerovnostech podkladu.

rovne 2

 

Jelikož programovací prostředí RobotC umožňuje pouze zaznamenávání v reálném čase, není snímání hodnot z gyroskopického senzoru příliš efektivní. Můžeme sice při pohybu robota pozorovat, v jakém rozmezí se pohybují hodnoty, ale nemůžeme je zaznamenávat. Překážkou také může být skutečnost, že robot musí být připojen k počítači pomocí USB kabelu. Přesto bychom mohli získat přibližnou představu o tom, jak vysoké hodnoty v jednotlivých okamžicích jsou. Reakci na ně následně využijeme při vytváření programu.

 

1 1 1 1 1 1 1 1 1 1 Hodnocení 5.00 (1 hodnocení)