i droid instrukcja87a


KROK PO KROKU
STEROWANIE D ONIŃ
STEROWANIE D%3Å‚ONIA
W JóZYKU JAVA
WJEZYKU JAVA
Na kolejnych stronach zamieszczono kod w j´zyku Java pozwalajÄ…cy sterowaç d"oniÄ…
N
a
k
o
l
e
j
n
y
c
h
s
t
r
o
n
a
c
h
z
a
m
i
e
s
z
c
z
o
n
o
k
o
d
w
j
´
z
y
k
u
J
a
v
a
p
o
z
w
a
l
a
j
Ä…
c
y
s
t
e
r
o
w
a
ç
d
"
o
n
i
Ä…
(chwytakiem) i-D01. B´dziesz móg" go szybko wykorzystaç do tworzenia w"asnych
(
c
h
w
y
t
a
k
i
e
m
)
i
-
D
0
1
.
B
´
d
z
i
e
s
z
m
ó
g
"
g
o
s
z
y
b
k
o
w
y
k
o
r
z
y
s
t
a
ç
d
o
t
w
o
r
z
e
n
i
a
w
"
a
s
n
y
c
h
programów, gdy tylko zakoÅ‚czy si´ sk"adanie r´ki robota.
p
r
o
g
r
a
m
ó
w
,
g
d
y
t
y
l
k
o
z
a
k
o
Å‚
c
z
y
s
i
´
s
k
"
a
d
a
n
i
e
r
´
k
i
r
o
b
o
t
a
.
zaprezentowanym w tym numerze przyk"adzie prze-
stawiono zasoby w j´zyku Java, pozwalajÄ…ce stero-
Wwaç 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
H
a
n
d
C
o
n
t
r
o
l
Klasa HandControl 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-
Aby korzystaç z zasobów przedstawionych na nast´pnej
jÄ…c konkretny próg  si"y , po przekroczeniu którego nap´d ma
stronie, musisz poczekaç na zeszyt nr 89, gdzie
znajdziesz p"ytk´ do sterowania d"oniÄ… (powyÅ»ej widaç,
si´ zatrzymaç. Próg ten, którego wartoĘç moÅ»e wahaç si´ od
jak b´dzie wyglÄ…da"a d"oÅ‚ po zakoÅ‚czeniu montaÅ»u).
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-
g
e
t
_
h
a
n
d
_
p
o
s
blokuje chwyt. Choç moÅ»na ustawiç dowolnÄ… wartoĘç miesz- informacje na temat stanu d"oni, trzeba si´gnÄ…ç do get_hand_pos
g
e
t
_
e
r
r
o
r
_
t
y
p
e
czÄ…cÄ… si´ w przedziale 1-10, aby uniknÄ…ç nadmiernego obciÄ…- i get_error_type. Pierwsza z tych metod zwraca wartoĘç 0, gdy
Å»enia kó" z´batych i palców, zalecana si´ uÅ»ywanie wartoĘci d"oÅ‚ znajduje si´ w pozycji nieokreĘlonej; 1, gdy jest ca"kowi-
mniejszych od 7. Z tego samego powodu zresztÄ…, w Visual cie otwarta; 2  ca"kowicie zamkni´ta; 3, gdy jest w ruchu. Prze-
C-like nie ma poziomów wyÅ»szych od 6. widziano wreszcie wartoĘç  1, aby zasygnalizowaç anomalie
Drugi tryb sterowania opiera si´ natomiast na monitorowa- w dost´pie do rejestrów i-D01. Z kolei druga metoda przyda-
niu nat´Å»enia prÄ…du elektrycznego pobieranego przez nap´d, je si´ do otrzymywania informacji o ewentualnych problemach
aby ustaliç, czy d"oÅ‚ chwyta przedmiot. Zanalizujemy teraz do- pojawiajÄ…cych si´ podczas uÅ»ywania d"oni robota. Ostatnie
h
a
n
d
_
o
p
e
n
_
c
u
r
r
e
n
t
h
a
n
d
_
c
l
o
s
e
_
c
u
r
r
e
n
t
k"adnie róŻne metody zasobów. Oprócz konstruktora klasy dwie metody, hand_open_current i hand_close_current, s"uŻą
h
a
n
d
_
o
p
e
n
pierwszymi metodami, które spotykamy, sÄ… hand_open do kontroli d"oni poprzez bazowanie na nat´Å»eniu prÄ…du p"y-
h
a
n
d
_
c
l
o
s
e
i hand_close pozwalajÄ…ce, odpowiednio, otworzyç i zamknÄ…ç nÄ…cego przez nap´d. Wi´cej szczegó"ów znajdziesz na czwartej
f
o
r
c
e
d"oÅ‚ robota przy uÅ»yciu kontroli si"y. Parametr force metody p"ycie zawierajÄ…cej dokumentacj´ technicznÄ… protoko"u I2C.
hand_close ustala próg si"y na podstawie takiej, jak podano po-
h
a
n
d
_
c
l
o
s
e
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,
hand_stop, wymusza zatrzymanie ruchu d"oni. Aby otrzymaç
h
a
n
d
_
s
t
o
p
11
KROK PO KROKU
PRZYK¸ADY PROGRAMOWANIA
Przyk"ad kodu Java wprowadzajÄ…cy zasoby do sterowania d"oniÄ… } catch (Exception e) {
i-D01. Do zarzÄ…dzania niÄ… przewidziano dwa rodzaje kontroli  e.printStackTrace();
}
jeden  si"owy , za pomocÄ… progu podanego jako liczba mi´dzy
} // hand_stop
1 a 10; drugi  na podstawie prÄ…du elektrycznego pobieranego
przez nap´d. W pierwszym trybie znajdujÄ… si´ metody hand_open
int get_hand_pos() {
i hand_close; zaĘ w drugim hand_open_current i hand_close_cur-
int[] buf = new int[1];
rent. Inne metody obecne w zasobach pozwolÄ… uzyskaç pewne
try {
szczegó"owe informacje na temat stanu d"oni i-D01.
internal.readRegister(InternalModule.HAND,
HandRegister.COMMAND, buf);
return buf[0];
} catch (Exception e) {
e.printStackTrace();
return -1;
CLASSE HANDCONTROL
}
} // get_hand_pos
package communication.examples;
int get_error_type() {
int[] buf = new int[1];
import communication.handler.internal.InternalHandler;
try {
import communication.handler.internal.InternalModule;
internal.readRegister(InternalModule.HAND, 6, buf);
import communication.handler.internal.HandData;
return buf[0];
import communication.handler.internal.HandRegister;
} catch (Exception e) {
import java.io.IOException;
e.printStackTrace();
return -1;
}
public class HandControl {
} // get_error_type
void open_hand_current(int level) {
private InternalHandler internal;
int[] buf = new int[1];
if ((level < 0) || (level > 80)) return;
public HandControl(InternalHandler internal) {
buf[0] = level;
this.internal = internal;
try {
} // class constructor
internal.writeRegister(InternalModule.HAND,
HandRegister.OPEN_CURRENT, buf);
void hand_open() {
} catch (Exception e) {
int[] buf = new int[1];
e.printStackTrace();
// Poziom si"y otwarcia
}
buf[0] = HandData.OPEN;
// Próg prądu przy otwieraniu
try {
buf[0] = HandData.OPEN_CUR;
internal.writeRegister(InternalModule.HAND,
try {
HandRegister.COMMAND, buf);
internal.writeRegister(InternalModule.HAND,
} catch (Exception e) {
HandRegister.COMMAND, buf);
e.printStackTrace();
} catch (Exception e) {
}
e.printStackTrace();
} // hand_close
}
} // open_hand_current
void hand_close(int force) {
int[] buf = new int[1];
void close_hand_current(int level) {
if ((force < 1) || (force > 10)) return;
int[] buf = new int[1];
buf[0] = force;
if ((level < 0) || (level > 80)) return;
try {
buf[0] = level;
internal.writeRegister(InternalModule.HAND,
try {
HandRegister.FORCE_LEVEL, buf);
internal.writeRegister(InternalModule.HAND,
} catch (Exception e) {
HandRegister.CLOSE_CURRENT, buf);
e.printStackTrace();
} catch (Exception e) {
}
e.printStackTrace();
buf[0] = HandData.CLOSE; // Poziom si"y zamkni´cia
}
try {
// Próg prądu przy zamykaniu
internal.writeRegister(InternalModule.HAND,
buf[0] = HandData.CLOSE_CUR;
HandRegister.COMMAND, buf);
try {
} catch (Exception e) {
internal.writeRegister(InternalModule.HAND,
e.printStackTrace();
HandRegister.COMMAND, buf);
}
} catch (Exception e) {
} // hand_close
e.printStackTrace();
}
void hand_stop() {
} // close_hand_current
int[] buf = new int[1];
buf[0] = HandData.STOP; // stop
try {
} // class HandControl
internal.writeRegister(InternalModule.HAND,
HandRegister.COMMAND, buf);
12


Wyszukiwarka

Podobne podstrony:
i droid instrukcja87b
i droid instrukcja82c
i droid instrukcja66
i droid instrukcja82a
i droid instrukcja83b
i droid instrukcja81a
i droid instrukcja88b
i droid instrukcja85a
i droid instrukcja44
instrukcja prezentacja2
instrukcja bhp przy obsludze euro grilla
DS1000PL Instrukcja
Blaupunkt CR5WH Alarm Clock Radio instrukcja EN i PL
Instrukcja do cwiczenia 4 Pomiary oscyloskopowe
Instrukcja F (2010)

więcej podobnych podstron