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 instrukcja87bi droid instrukcja82ci droid instrukcja66i droid instrukcja82ai droid instrukcja83bi droid instrukcja81ai droid instrukcja88bi droid instrukcja85ai droid instrukcja44instrukcja prezentacja2instrukcja bhp przy obsludze euro grillaDS1000PL InstrukcjaBlaupunkt CR5WH Alarm Clock Radio instrukcja EN i PLInstrukcja do cwiczenia 4 Pomiary oscyloskopoweInstrukcja F (2010)więcej podobnych podstron