i droid instrukcja87a

background image

PROGRAMOWANIE

11

N

Na

a k

ko

olle

ejjn

ny

ycch

h ssttrro

on

na

acch

h zza

am

miie

esszzcczzo

on

no

o k

ko

od

d w

w jj´

´zzy

yk

ku

u JJa

av

va

a p

po

ozzw

wa

alla

ajjà

àccy

y sstte

erro

ow

wa

açç d

d∏∏o

on

niià

à

((cch

hw

wy

ytta

ak

kiie

em

m)) ii--D

D0

01

1.. B

´d

dzziie

esszz m

óg

g∏∏ g

go

o sszzy

yb

bk

ko

o w

wy

yk

ko

orrzzy

ysstta

açç d

do

o ttw

wo

orrzze

en

niia

a w

w∏∏a

assn

ny

ycch

h

p

prro

og

grra

am

ów

w,, g

gd

dy

y tty

yllk

ko

o zza

ak

ko

ƒcczzy

y ssii´

´ ssk

k∏∏a

ad

da

an

niie

e rr´

´k

kii rro

ob

bo

otta

a..

W

zaprezentowanym w tym numerze przyk∏adzie prze-
stawiono zasoby w j´zyku Java, pozwalajàce stero-
waç d∏onià i-D01. Zanim b´dziesz móg∏ ich u˝yç, mu-

sisz poczekaç na zeszyt nr 89, do którego zostanie do∏àczona
p∏ytka elektroniczna do sterowania d∏onià. W odró˝nieniu od
przyk∏adów przedstawionych w poprzednich numerach, tym
razem nie wprowadzamy ˝adnego interfejsu graficznego – ty
sam b´dziesz móg∏ go stworzyç, tak jak zechcesz, zgodnie
z w∏asnymi potrzebami. JeÊli nie masz na to ochoty, b´dziesz
móg∏ ograniczyç si´ do stosowania metod z zasobów, u˝ywa-
jàc ich do kolejnych twoich programów.

KLASA HANDCONTROL

Klasa H

Ha

an

nd

dC

Co

on

nttrro

oll oddaje do dyspozycji szereg metod do ste-

rowania chwytakiem i-D01. W odró˝nieniu od j´zyka C-like czy
Visual C-like w Javie przewidziano dwa tryby sterowania. Pierw-
szy, prostszy, pozwala kontrolowaç zamkni´cie d∏oni, ustawia-
jàc konkretny próg „si∏y”, po przekroczeniu którego nap´d ma
si´ zatrzymaç. Próg ten, którego wartoÊç mo˝e wahaç si´ od
1 do 10, jest odwrotnie proporcjonalny do „delikatnoÊci” i-D01
podczas chwytania przedmiotu. Przy wartoÊci równej 1 nap´d
sterujàcy d∏onià zatrzyma uchwyt, gdy tylko napotka lekki opór.
Przy wy˝szym progu przeciwnie – ÊciÊnie mocniej, zanim za-
blokuje chwyt. Choç mo˝na ustawiç dowolnà wartoÊç miesz-
czàcà si´ w przedziale 1-10, aby uniknàç nadmiernego obcià-
˝enia kó∏ z´batych i palców, zalecana si´ u˝ywanie wartoÊci
mniejszych od 7. Z tego samego powodu zresztà, w Visual
C-like nie ma poziomów wy˝szych od 6.

Drugi tryb sterowania opiera si´ natomiast na monitorowa-

niu nat´˝enia pràdu elektrycznego pobieranego przez nap´d,
aby ustaliç, czy d∏oƒ chwyta przedmiot. Zanalizujemy teraz do-
k∏adnie ró˝ne metody zasobów. Oprócz konstruktora klasy
pierwszymi metodami, które spotykamy, sà h

ha

an

nd

d_

_o

op

pe

en

n

i h

ha

an

nd

d_

_ccllo

osse

e pozwalajàce, odpowiednio, otworzyç i zamknàç

d∏oƒ robota przy u˝yciu kontroli si∏y. Parametr ffo

orrcce

e metody

h

ha

an

nd

d_

_ccllo

osse

e ustala próg si∏y na podstawie takiej, jak podano po-

wy˝ej. Metoda otwarcia d∏oni nie wymaga ˝adnego parame-
tru: w tym wypadku poziom si∏y zostaje ustawiony automa-
tycznie przez oprogramowanie robota. Kolejna metoda,
h

ha

an

nd

d_

_sstto

op

p, wymusza zatrzymanie ruchu d∏oni. Aby otrzymaç

informacje na temat stanu d∏oni, trzeba si´gnàç do g

ge

ett_

_h

ha

an

nd

d_

_p

po

oss

i g

ge

ett_

_e

errrro

orr_

_ttyyp

pe

e. Pierwsza z tych metod zwraca wartoÊç 0, gdy

d∏oƒ znajduje si´ w pozycji nieokreÊlonej; 1, gdy jest ca∏kowi-
cie otwarta; 2 – ca∏kowicie zamkni´ta; 3, gdy jest w ruchu. Prze-
widziano wreszcie wartoÊç –1, aby zasygnalizowaç anomalie
w dost´pie do rejestrów i-D01. Z kolei druga metoda przyda-
je si´ do otrzymywania informacji o ewentualnych problemach
pojawiajàcych si´ podczas u˝ywania d∏oni robota. Ostatnie
dwie metody, h

ha

an

nd

d_

_o

op

pe

en

n_

_ccu

urrrre

en

ntt i h

ha

an

nd

d_

_ccllo

osse

e_

_ccu

urrrre

en

ntt, s∏u˝à

do kontroli d∏oni poprzez bazowanie na nat´˝eniu pràdu p∏y-
nàcego przez nap´d. Wi´cej szczegó∏ów znajdziesz na czwartej
p∏ycie zawierajàcej dokumentacj´ technicznà protoko∏u I2C.

Aby korzystaç z zasobów przedstawionych na nast´pnej
stronie, musisz poczekaç na zeszyt nr 89, gdzie
znajdziesz p∏ytk´ do sterowania d∏onià (powy˝ej widaç,
jak b´dzie wyglàda∏a d∏oƒ po zakoƒczeniu monta˝u).

KROK PO KROKU

STEROWANIE DLONIA
W JEZYKU JAVA

STEROWANIE D¸ONIÑ
W J¢ZYKU JAVA

background image

KROK PO KROKU

12

PRZYK¸ADY PROGRAMOWANIA

CLASSE HANDCONTROL

package communication.examples;

import communication.handler.internal.InternalHandler;
import communication.handler.internal.InternalModule;
import communication.handler.internal.HandData;
import communication.handler.internal.HandRegister;
import java.io.IOException;

public class HandControl {

private InternalHandler internal;

public HandControl(InternalHandler internal) {

this.internal = internal;

} // class constructor

void hand_open() {

int[] buf = new int[1];
// Poziom si∏y otwarcia
buf[0] = HandData.OPEN;
try {

internal.writeRegister(InternalModule.HAND,

HandRegister.COMMAND, buf);

} catch (Exception e) {

e.printStackTrace();

}

} // hand_close

void hand_close(int force) {

int[] buf = new int[1];
if ((force < 1) || (force > 10)) return;
buf[0] = force;
try {

internal.writeRegister(InternalModule.HAND,
HandRegister.FORCE_LEVEL, buf);

} catch (Exception e) {

e.printStackTrace();

}
buf[0] = HandData.CLOSE; // Poziom si∏y zamkni´cia
try {

internal.writeRegister(InternalModule.HAND,

HandRegister.COMMAND, buf);

} catch (Exception e) {

e.printStackTrace();

}

} // hand_close

void hand_stop() {

int[] buf = new int[1];
buf[0] = HandData.STOP; // stop
try {

internal.writeRegister(InternalModule.HAND,

HandRegister.COMMAND, buf);

} catch (Exception e) {

e.printStackTrace();

}

} // hand_stop

int get_hand_pos() {

int[] buf = new int[1];
try {

internal.readRegister(InternalModule.HAND,

HandRegister.COMMAND, buf);

return buf[0];

} catch (Exception e) {

e.printStackTrace();
return -1;

}

} // get_hand_pos

int get_error_type() {

int[] buf = new int[1];
try {

internal.readRegister(InternalModule.HAND, 6, buf);
return buf[0];

} catch (Exception e) {

e.printStackTrace();
return -1;

}

} // get_error_type

void open_hand_current(int level) {

int[] buf = new int[1];
if ((level < 0) || (level > 80)) return;
buf[0] = level;
try {

internal.writeRegister(InternalModule.HAND,

HandRegister.OPEN_CURRENT, buf);

} catch (Exception e) {

e.printStackTrace();

}
// Próg pràdu przy otwieraniu
buf[0] = HandData.OPEN_CUR;
try {

internal.writeRegister(InternalModule.HAND,
HandRegister.COMMAND, buf);

} catch (Exception e) {

e.printStackTrace();

}

} // open_hand_current

void close_hand_current(int level) {

int[] buf = new int[1];
if ((level < 0) || (level > 80)) return;
buf[0] = level;
try {

internal.writeRegister(InternalModule.HAND,

HandRegister.CLOSE_CURRENT, buf);

} catch (Exception e) {

e.printStackTrace();

}
// Próg pràdu przy zamykaniu
buf[0] = HandData.CLOSE_CUR;
try {

internal.writeRegister(InternalModule.HAND,

HandRegister.COMMAND, buf);

} catch (Exception e) {

e.printStackTrace();

}

} // close_hand_current

} // class HandControl

Przyk∏ad kodu Java wprowadzajàcy zasoby do sterowania d∏onià
i-D01. Do zarzàdzania nià przewidziano dwa rodzaje kontroli –
jeden „si∏owy”, za pomocà progu podanego jako liczba mi´dzy
1 a 10; drugi – na podstawie pràdu elektrycznego pobieranego
przez nap´d. W pierwszym trybie znajdujà si´ metody hand_open
i hand_close; zaÊ w drugim hand_open_current i hand_close_cur-
rent. Inne metody obecne w zasobach pozwolà uzyskaç pewne
szczegó∏owe informacje na temat stanu d∏oni i-D01.


Wyszukiwarka

Podobne podstrony:
i droid instrukcja44
i droid instrukcja75
i droid instrukcja35
i droid instrukcja85a
i droid instrukcja43
i droid instrukcja82a
i droid instrukcja83b
i droid instrukcja87b
i droid instrukcja88b
i droid instrukcja81a
i droid instrukcja84a
i droid instrukcja82c
i droid instrukcja66
i droid instrukcja88a

więcej podobnych podstron