Ćwiczenia 6
αω
Robot Mindstorm NXT - podstawowe sterowanie
modelu Tribot za pomocą biblioteki NXT++
1) Zapoznaj się z możliwościami sterowania Robota Tribot w bibliotece NXT++
2) Uruchom plik re4.sln w katalogu,
C
: \ \
m i n d s t o r m s n x t
\
NXT
++\
nxtpp0
−6\
FINAL
\
e x a m p l e s
\
v s 9 0
\
r e 4
3) Napisz program śledzenia linii z prawej i lewej strony. Nasycenie światła linii i
tła pobierz zdalnie sterując robotem.
4) Napisz program symulujący zachowanie zawodnika sumo, robot nie może wy-
jechać poza czarną obręcz, gdy wykrywa przeszkodę, stara się ją przemieścić poza
czarną linię.
NXT++, kilka bazowych informacji
Podstawowe biblioteki i przestrzenie nazw,
#
i n c l u d e
”NXT++.h”
#
i n c l u d e
<
i o s t r e a m
>
#
i n c l u d e
<
c o n i o
.
h
>
u s i n g namespace
s t d
;
u s i n g namespace
NXT
;
Nawiązywanie komunikacji z robotem,
z a pomocą przewodu USB
,
i f
(
NXT
: :
Open
(&
comm
) ) // i n i t i a l i z e
t h e NXT and c o n t i n u e
i f
i t
s u c c e e d s
{
}
NXT
: :
C l o s e
(&
comm
) ; // c l o s e
t h e NXT
z a pomocą Bl ue Tooth
,
i f
(
NXT
: :
OpenBT
(&
comm
) ) // i n i t i a l i z e
t h e NXT and c o n t i n u e
i f
i t
s u c c e e d s
{
}
NXT
: :
C l o s e
(&
comm
) ; // c l o s e
t h e NXT
Ramy programu NXT++
NXT
: :
S t a r t P r o g r a m
(&
comm
, ” program1 ” ) ;
kod programu
NXT
: :
StopProgram
(&
comm
) ;
Wyświetlanie poziomu baterii i ilości dostępnej pamięci,
c o u t
<<
NXT
: :
B a t t e r y L e v e l
(&
comm
) ;
c o u t
<<
NXT
: :
G e t A v a i l a b l e F l a s h
(&
comm
) ;
Używanie generatora dzwięków,
f o r
(
i n t
i
=1;
i
<1000;
i
=
i
+10)
{
NXT
: :
PlayTone
(&
comm
,
i
,
1 ) ;
Wait
( 1 ) ;
}
Nasłuchiwanie wciśnięcia klawisza - przydatne w odświeżaniu parame-
trów sterujących
i f
(
k b h i t
( )==
t r u e
)
{
d e c y z j a
=
g e t c h
( ) ;
}
Porty serwomechanizmów - Tribot’a
-OUT A sterowanie szczypcami
-OUT B sterowanie lewym kołem
-OUT C sterowanie prawym kołem
Skręcanie w lewo - przy x<y
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT B
,
y
) ;
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT C
,
x
) ;
Skręcanie w prawo - przy x>y
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT B
,
y
) ;
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT C
,
x
) ;
Jazda na wprost z prędkością x
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT B
,
x
) ;
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT C
,
x
) ;
Jazda do tyłu z prędkością x
NXT
: :
Motor
: :
S e t R e v e r s e
(&
comm
,
OUT B
,
x
) ;
NXT
: :
Motor
: :
S e t R e v e r s e
(&
comm
,
OUT C
,
x
) ;
Przykładowe sterowanie szczypcami
i f
(
d e c y z j a
==’
C
’
| |
d e c y z j a
==’
c
’ )
{
i f
(
p o i n t e r
==0)
{
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT A
,
1 0 ) ;
Wait
( 1 0 0 0 ) ;
NXT
: :
Motor
: :
Stop
(&
comm
,
OUT A
,
0 ) ;
p o i n t e r
=1;
c o n t i n u e
;
}
i f
(
p o i n t e r
==1)
{
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT A
,
−20) ;
Wait
( 1 0 0 0 ) ;
p o i n t e r
=0;
c o n t i n u e
;
}
}
Przykładowe zwiększenie prędkości robota przy jeździe na wprost
i f
(
d e c y z j a
==’
M
’
| |
d e c y z j a
==’
m
’ )
{
x
+=10;
}
i f
(
d e c y z j a
==’
W
’
| |
d e c y z j a
==’
w
’
| |
(
xtemp
!=
x
&&
l a s t v a l u e
==’
w
’ ) )
{
xtemp
=
x
;
l a s t v a l u e
=’
w
’ ;
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT B
,
x
) ;
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT C
,
x
) ;
}
Zwalnianie serwomechnizmów
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT B
,
0 ) ;
NXT
: :
Motor
: :
SetForward
(&
comm
,
OUT C
,
0 ) ;
NXT
: :
Motor
: :
S e t R e v e r s e
(&
comm
,
OUT B
,
0 ) ;
NXT
: :
Motor
: :
S e t R e v e r s e
(&
comm
,
OUT C
,
0 ) ;
NXT
: :
Motor
: :
Stop
(&
comm
,
OUT B
,
0 ) ;
NXT
: :
Motor
: :
Stop
(&
comm
,
OUT C
,
0 ) ;
Porty sensorów
-IN 1 sensor dotyku
-IN 2 sensor dźwięku
-IN 3 sensor światła
-IN 4 sonar
Uaktywnienie sensora dotyku w porcie 1
NXT
: :
S e n s o r
: :
SetTouch
(&
comm
,
I N 1
) ;
Uaktywnienie sonaru w porcie 4 i pobranie odległości od przeszkody,
wyłączenie sensora
NXT
: :
S e n s o r
: :
S e t S o n a r
(&
comm
,
I N 4
) ;
NXT
: :
S e n s o r
: :
GetSonarValue
(&
comm
,
I N 4
) ;
NXT
: :
S e n s o r
: :
S e t S o n a r O f f
(&
comm
,
I N 4
) ;
Uaktywnienie sensora światła w porcie 3, pobranie poziomu światła, de-
aktywacja sensora
NXT
: :
S e n s o r
: :
S e t L i g h t
(&
comm
,
IN 3
,
1 ) ;
Wait
( 5 0 ) ;
v a l u e
=
NXT
: :
S e n s o r
: :
GetValue
(&
comm
,
I N 3
) ;
Wait
( 5 0 ) ;
NXT
: :
S e n s o r
: :
S e t L i g h t
(&
comm
,
IN 3
,
0 ) ;
Pobranie poziomu dźwieku,
NXT
: :
S e n s o r
: :
SetSound
(&
comm
,
I N 2
) ;
Wait
( 5 0 ) ;
v a l u e
=
NXT
: :
S e n s o r
: :
GetValue
(&
comm
,
I N 2
) ;