KURZ: Kompasový senzor

KAPITOLY

Kompasový senzor je vstupní zařízení sloužící pro orientaci robota. Jeho hlavní funkcí je určení natočení k magnetickému poli země (kompas). Ten je vracen jako úhel v rozsahu 0 - 179 (0 = sever; 45= východ; 90 = jih; 135 = západ); Pro výpočet natočení odpovídající běžnému kompasu musíme hodnotu vynásobit 2.

Kompasový senzor může být ovlivněn kovovými předměty v okolí (např. servomotorem). Pro návod na kalibraci ovlivněného senzoru a další informace navštivte stránku Rozšiřující moduly (NXT) > Kompasový senzor.

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

NXT-G

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

Rozcestník


Umístění bloku

Kompasový senzor je v programovacím prostředí NXT-G řízen blokem CompassSensorDragged Compass 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ů.

Compass sensor block

 

Popis bloku

Blok senzoru obsahuje osm konektorů, jejichž pomocí je možné jej propojit s dalšímy moduly.

Port Port - vyjadřuje, ke kterému z portů (1-4) je kompasový senzor připojen.

Action Action - udává, zda je zvoleno absolutní čtení, relativní čtení nebo kalibrace (Absolute Reading, Relative Reading, Calibration).

Number Target - cílové natočení ve směru, kterého chceme dosáhnout (vyjádřeno ve stupních).

A A - číslo, které vyjadřuje dolní mez rozsahu hodnot určeného pro porovnání (nastavena v sekci Compare).

B B - číslo, které vyjadřuje horní mez rozsahu hodnot určeného pro porovnání (nastavena v sekci Compare).

Boolean Yes / No - hodnota logického datového typu, která vyjadřuje, zda je hodnota v rozmezí mezi zadanými hodnotami  (Inside Range - výstup je roven Yes) nebo vně rozsahu zadaných hodnot (Outside Range - výstup je roven No).

Number RelativeHeading - výstup vyjadřující relativní hodnotu natočení senzoru (rozdíl mezi cílovým směrem (Target) a absolutní hodnotou (Absolute Heading).

AbsoluteHeading Absolute Heading - výstup vyjadřující aktuální natočení senzoru (kterým směrem je momentálně natočen).

 

Parametry bloku

Compass sensor

Port: určuje, ke kterému vstupnímu portu je kompasový senzor připojen.

Action: volba, která udává, jakým způsobem se bude s hodnotami pracovat. Absolute Reading pracuje s přesnými hodnotami od 0 do 360 stupňů. Aktuální natočení senzoru je určováno podle magnetického pólu Země.  Relative reading používá k určování pozice hodnoty od -180 do 180. Mód Relative Reading je častěji používán k řízení robota, protože jsou zde porovnávány relativní hodnoty s hodnotami snímanými senzorem, což je pro řízení jednodušší způsob než využití hodnot absolutních. Nejprve volíme aktuální pozici senzoru a následně zjišťujeme relativní přírůstky úhlu. Volba Calibrate označuje kalibraci senzoru.

Compare: volba sloužící k porovnání zadaných hodnot (rozsah hodnot při jejichž docílení je senzor aktivován). Volba Inside Range značí, zda je naměřená hodnota v rozmezí mezi zadanými hodnotami A a B. Outside Range má opačnou funkci. Vyjadřuje, zda je hodnota mimo zadané rozmezí. Target označuje cílovou pozici.

RobotC

PŘÍKAZY PRO OVLÁDÁNÍ kompasového senzoru

Rozcestník


NASTAVENÍ SENZORU

Před započetím práce s kompasovým senzorem, je nutné jej v programovacím prostředí RobotC nadeklarovat. Zápis konfigurace se skládá z klíčového slova #pragma a příkazu config(), který obsahuje čtyři parametry. Prvním parametrem je rozlišeno, zda se jedná o deklaraci motoru či senzoru (v našem případě se jedná o senzor). Druhý parametr udává, ke kterému vstupnímu portu (S1-S4) je senzor připojen (v příkladu port číslo 1). Třetí parametr je volitelný. Jedná se o název senzoru v deklaraci a je zadáván uživatelem. Poslední částí deklarace je typ senzoru (sensorI2CHiTechnicCompass = označení kompasového senzoru).

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

NASTAVENÍ TYPU SENZORU

Výše popsaná možnost deklarace senzoru není v programovacím prostředí RobotC jediná. Existuje ještě pokročilejší způsob zápisu. Kompasový senzor patří do skupiny rozšiřujících senzorů definovaných ve skupině s názvem tSensors. První co tedy musíme učinit, je říci programu, že se jedná o senzor tohoto druhu (tSensors kompas). Slovo kompas je volitelný název senzoru pro potřeby našeho programu, který budeme dále používat. K zápisu můžeme přidat ještě označení portu, ke kterému je senzor připojen (S1-S4). Následně musíme zapsat, o který konkrétní rozšiřující senzor se jedná. Použijeme příkaz SensorType[]. Jeho parametrem v hranaté závorce bude námi zvolený název senzoru, tedy kompas. Do tohoto příkazu poté přiřadíme standardizované označení kompasového senzoru (sensorI2CHiTechnicCompass).

Tento typ 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í Deklaraci motorů a senzorů v horní liště menu.

 
tSensors kompas = S1;
SensorType[kompas] = sensorI2CHiTechnicCompass;
 
 

PRÁCE S HODNOTOU SNÍMANOU SENZOREM

Při práci s každým senzorem budeme zpracovávat hodnotu, kterou nám senzor vrací. Tuto hodnotu můžeme dále porovnávat, ukládat do proměnné nebo s její pomocí ovlivňovat další chování robota. K vyjádření aktuálně zjišťované hodnoty ze senzoru se používá příkaz SensorValue[]. Jeho parametrem v závorce je uživatelem deklarovaný název senzoru. V příkladech o něco níže vidíte možné použití příkazu. Můžeme hodnotu jím vyjádřenou porovnávat s fixně zadanou hodnotou. Další možností je průběžné ukládání hodnoty do proměnné, s kterou budeme dále v programu pracovat a bude nám reprezentovat hodnotu vrácenou senzorem.

 
SensorValue[kompas] > 60; // Zjistovani, zda je hodnota zjistena senzorem vyssi nez 60.
 
a = SensorValue[kompas]; // Prirazeni hodnoty ze senzoru do promenne.
 
 

Využití předdefinovaných metod

Kompasový senzor nepatří mezi senzory obsažené v základní sadě stavebnice LEGO MINDSTORMS NXT. Při práci v programovacím prostředí RobotC máme k dispozici vývojové knihovny, které obsahují ovladače, ve kterých jsou předdefinovány metody pro práci s rozšiřujícími moduly a senzory. Knihovna pro práci s kompasovým senzorem se jmenuje hitechnic-compass a zavoláme ji v úvodu programu následovně:

 
#include "drivers/hitechnic-compass.h"
 
 

Před započetím práce s kompasovým senzorem je možné, nikoliv ovšem nezbytné senzor zkalibrovat. Postupem času může dojít k určitému ovlivnění z vnějšku, díky působení magnetického pole, nebo určitých točivých zařízení (podrobný popis kalibrace najdete ZDE). Předdefinovaná funkce, která spustí kalibraci se nazývá HTMCstartCal(). Po spuštění kalibrace by se měl senzor otočit o více než 360° podél horizontální roviny po dobu alespoň 20 vteřin. Kalibraci následně zastavíme zavoláním funkce HTMCstopCal(), díky čemuž se senzor znovu přepne do režimu snímání.

Po správném zkalibrování senzoru můžeme přejít ke zpracovávání hodnot, které s jeho pomocí zjišťujeme. První údaj, který dokážeme kompasovým senzorem zjistit, je aktuální natočení podle magnetického pólu Země (Absolute Heading). Funkce, která nám tuto hodnotu vrací se nazývá HTMCreadHeading(). Zjištěná hodnota je datového typu integer.

Druhou možností prezentace dat z kompasového senzoru je pomocí vyjádření relativní hodnoty natočení senzoru. Tato hodnota se vypočte jako rozdíl mezi požadovaným směrem, kterého chceme dosáhnout, a absolutní hodnotou natočení senzoru (Absolute Heading). Vypočtenou hodnotu nám vrací předdefinovaná funkce HTMCreadRelativeHeading(), jejíž výsledná hodnota, která může být v rozsahu od -179 do 180, je datového typu integer. Při využití této funkce budeme potřebovat ještě stanovit, kde se na zmíněném rozmezí nachází nulový bod. K tomu slouží funkce HTMCsetTarget().

U všech 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.

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

Nemáte oprávnění přidat komentář.
Komentáře mohou přidávat pouze registrovaní uživatelé, kteří neporušují pravidla diskuze.