ultimo aggiornamento 29 aprile 2011 |
Per programmare il RoboZak
VR Module è disponibile un apposito programma denominato VRbot GUI
ora nella versione 1.1.5
Una volta istallato il programma occorre connettere il PC a al robot
utilizzando il cavo che normalmente si utilizza per il trasferimento dei
programmi, selezionando poi la porta seriale per il collegamento, la
stessa usata in RoboBASIC.. Si dovrà ora cliccare sull'icona
connessione per realizzare il collegamento
Il robot risponderà con dei suoni e si porterà in posizione per attendere gli ordini.
VRbot_base
(programma di prova per Penguin)
Come prima prova ho
memorizzato quattro comandi (comandi tipo SD - Speaker Dependent): canta (emette una sequenza musicale), destra
(muove il braccio destro), sinistra ( muove il braccio sinistro), ciao
(muove entrambe le braccia simulando un abbraccio).
Al robot sono collegato solamente i servo delle braccia.
Ecco il filmato che mostra il risultato ottenuto
Segnalazione della pagina come
argomento caldo del FORUM
nella NEWSLETTER ROBOZAK n° 67 del 22/04/2009
'====================================== ' RoboPenguin - VRbot_base.bas '====================================== ' VRbot definitions and routines DIM rr AS BYTE DIM B AS BYTE DIM LED_status AS BYTE LED_status = 0 '================================================ ' VRbot definitions and routines CONST RES_ERROR = 255 CONST RES_TIMEOUT = 254 CONST RES_WAITING = 253 CONST RES_BUILTIN = 32 ' VRA = protocol command/status byte ' VRA1 = first in/out argument DIM VRA AS BYTE, VRA1 AS BYTE ' VRLED = temporary led status for blinking ' VRBLINK = blinking half-period (in ms, 0 = no blink) DIM VRLED AS BYTE, VRBLINK AS BYTE VRBLINK = 0 'still VRLED = 1 'off ' main program begins at Startup label GOTO Startup CONST CMD_BREAK = &H62 ' abort recog or ping CONST CMD_SLEEP = &H73 ' go to power down CONST CMD_KNOB = &H6B ' set si knob <1> CONST CMD_LEVEL = &H76 ' set sd level <1> CONST CMD_LANGUAGE = &H6C ' set language <1> CONST CMD_TIMEOUT = &H6F ' set timeout <1> CONST CMD_RECOG_SI = &H69 ' do si recog from ws <1> CONST CMD_RECOG_SD = &H64 ' do sd recog at group <1> (0 = trigger mixed si/sd) CONST STS_AWAKEN = &H77 ' back from power down mode CONST STS_ERROR = &H65 ' signal error code <1-2> CONST STS_INVALID = &H76 ' invalid command or argument CONST STS_TIMEOUT = &H74 ' timeout expired CONST STS_INTERR = &H69 ' back from aborted recognition (see 'break') CONST STS_SUCCESS = &H6F ' no errors status CONST STS_RESULT = &H72 ' recognised sd command <1> - training similar to sd <1> CONST STS_SIMILAR = &H73 ' recognised si <1> (in mixed si/sd) - training similar to si <1> CONST ARG_ACK = &H20 ' protocol arguments are IN the range 0x40 (-1) TO 0x60 (+31) inclusive CONST ARG_MIN = &H40 CONST ARG_MAX = &H60 CONST ARG_ZERO = &H41 CONST ARG_ONE = &H42 ' ===== VR routines ' Inputs: ' NONE VR_Wakeup: VRA = CMD_BREAK ETX 9600, VRA VR_Wakeup1: ERX 9600, VRA, VR_Wakeup1 IF VRA <> STS_SUCCESS THEN GOTO VR_Wakeup RETURN ' Inputs: ' VRA1 = timeout (in ms, 0=forever, 255=default) VR_SetTimeout: VRA = CMD_TIMEOUT ETX 9600, VRA VRA1 = VRA1 + ARG_ZERO ETX 9600, VRA1 VR_SetTimeout1: ERX 9600, VRA, VR_SetTimeout1 'IF VRA <> STS_SUCCESS THEN GOTO VR_Wakeup RETURN ' Inputs: ' VRA1 = language index (0 = english, ...) VR_SetLanguage: VRA = CMD_LANGUAGE ETX 9600, VRA VRA1 = VRA1 + ARG_ZERO ETX 9600, VRA1 VR_SetLanguage1: ERX 9600, VRA, VR_SetLanguage1 'IF VRA <> STS_SUCCESS THEN GOTO VR_Wakeup RETURN ' Inputs: ' VRA1 = sd strictness level (1=easy ... 5=hard) VR_SetLevel: VRA = CMD_LEVEL ETX 9600, VRA 'VRA1 = VRA1 + ARG_ZERO VRA1=1 ETX 9600, VRA1 VR_SetLevel1: ERX 9600, VRA, VR_SetLevel1 'IF VRA <> STS_SUCCESS THEN GOTO VR_Wakeup RETURN ' Inputs: ' VRA1 = si confidence knob (2=typical, 0=loosest ... 4=tightest) VR_SetKnob: VRA = CMD_KNOB ETX 9600, VRA 'VRA1 = VRA1 + ARG_ZERO VRA1=0 ETX 9600, VRA1 VR_SetKnob1: ERX 9600, VRA, VR_SetKnob1 'IF VRA <> STS_SUCCESS THEN GOTO VR_Wakeup RETURN ' Inputs: ' VRA1 = wordset (0=trigger) ' Ouputs: ' VRA1 = result (0-31=word, 32..=builtin, 254=timeout, 255=error) ' for trigger N>1 are custom words VR_RecognizeSI: VRA = CMD_RECOG_SI GOTO VR_Recognize0 VR_RecognizeSD: VRA = CMD_RECOG_SD VR_Recognize0: ETX 9600, VRA VRA1 = VRA1 + ARG_ZERO ETX 9600, VRA1 VRLED = 0 VR_Recognize1: OUT 52, VRLED VRA1 = RES_WAITING RETURN VR_CheckRecognition: IF VRBLINK <> 0 THEN IF VRLED = 0 THEN VRLED = 1 ELSE VRLED = 0 ENDIF DELAY VRBLINK ENDIF ERX 9600, VRA, VR_Recognize1 VRLED = 1 OUT 52, VRLED IF VRA = STS_RESULT THEN VRA = ARG_ACK ETX 9600, VRA VR_Recognize2: ERX 9600, VRA1, VR_Recognize2 VRA1 = VRA1 - ARG_ZERO ELSEIF VRA = STS_SIMILAR THEN VRA = ARG_ACK ETX 9600, VRA VR_Recognize3: ERX 9600, VRA1, VR_Recognize3 VRA1 = VRA1 - ARG_ZERO + RES_BUILTIN ELSEIF VRA = STS_TIMEOUT THEN VRA1 = RES_TIMEOUT ELSE VRA1 = RES_ERROR ENDIF RETURN '================================================ ' Main Program Startup: PTP SETON PTP ALLON '== motor diretion setting ====================== DIR G6A,1,1,1,0,0,0 DIR G6B,1,1,0,0,0,0 DIR G6C,0,0,0,0,0,0 DIR G6D,0,0,0,0,0,0 ' Settaggio degli ZERO point ZERO G6A,116,105,101,100,100,100 ZERO G6B,100,100,100,100,100,100 ZERO G6C,100,100,100,100,100,100 ZERO G6D,98,98,96,100,100,100 GETMOTORSET G6A,1,1,1,0,0,0 GETMOTORSET G6B,1,1,0,0,0,0 GETMOTORSET G6C,1,1,0,0,0,0 GETMOTORSET G6D,1,1,1,0,0,0 MOTOR G24 SPEED 10 TEMPO 230 MUSIC "CDE" GOSUB standard_position '================================================ DIM VRGROUP AS BYTE DIM VRCOMMAND AS BYTE 'start with trigger command group VRGROUP = 1 VRBLINK = 0 'still '================================================ MAIN: 'sync with VRbot GOSUB VR_Wakeup 'start Voice Recognition in current group VRA1 = VRGROUP GOSUB VR_RecognizeSD MAIN1: 'listen to VR commands GOSUB VR_CheckRecognition 'nothing heard? IF VRA1 = RES_WAITING THEN 'otherwise keep listening GOTO MAIN1 ENDIF 'unexpected reply? IF VRA1 = RES_ERROR THEN MUSIC "AG" 'try again in the same group GOTO MAIN ENDIF 'timed out? IF VRA1 = RES_TIMEOUT THEN VRGROUP = 1 ' back to trigger VRBLINK = 0 'still GOTO MAIN ENDIF 'we have a VR command! VRCOMMAND = VRA1 '<--- implement actions based on VRGROUP and VRCOMMAND 'example: IF VRGROUP = 0 THEN VRGROUP = 1 ' activate command group VRBLINK = 1 'blink ELSE VRGROUP = 0 ' back to trigger VRBLINK = 0 'still 'do command ON VRCOMMAND GOTO K1,K2,K3,K4 ENDIF GOTO MAIN main_exit: IF RR > 50 THEN RETURN RR = 0 GOTO MAIN '================================================ k1: GOSUB SUONO GOTO main_exit k2: GOSUB PUGNO_DX GOTO main_exit k3: GOSUB PUGNO_SX GOTO main_exit k4: GOSUB CIAO GOTO main_exit ' Attiva breve sequenza musicale SUONO: MUSIC "cdeccdec efgefg gagfecgagfec edcedc p,," RETURN ' Pugno destro PUGNO_DX: HIGHSPEED SETON MOVE G6C,180,30,,,, MOVE G6A,100,100,85,,, MOVE G6D,100,100,115,,, HIGHSPEED SETOFF DELAY 1000 GOSUB standard_position RETURN ' Pugno sinistro PUGNO_SX: HIGHSPEED SETON MOVE G6B,180,30,,,, MOVE G6D,100,100,85,,, MOVE G6A,100,100,115,,, HIGHSPEED SETOFF DELAY 1000 GOSUB standard_position RETURN ' GINNASTICA CIAO: DIM C AS BYTE MOVE G6A,100,100,100,,, MOVE G6B,188,10,,,, MOVE G6C,188,10,,,, MOVE G6D,100,100,100,,, SPEED 10 FOR C = 1 TO 5 MOVE G6B,188,10,,,, MOVE G6C,188,10,,,, MOVE G6B,188,70,,,, MOVE G6C,188,70,,,, WAIT NEXT C DELAY 1000 GOSUB standard_position RETURN ' Posizione standard standard_position: MOVE G6A,100,100,100,,, MOVE G6D,100,100,100,,, MOVE G6B,100,10,,,, MOVE G6C,100,10,,,, RETURN |
VRbotGUI versione 1.1.5
(programma "bridge")
Schema di collegamento
Utilizzo del programma VRbotGUI
Messaggio che appare prima della connessione con il robot
Probabilmente i cavi di ETX e ERX sono
invertiti
o il robot è spento
Gli 8 comandi già memorizzati nel Wordset 1
I 6 comandi già memorizzati nel Wordset 2
Gli 11 comandi già memorizzati nel Wordset 3
Se si utilizza il comando "Controller
Information"
del programma roboBASIC si ottiengono questi dati
Elenco revisioni | |
29/04/2011 | Aggiornato pagina |
22/07/2009 | Inserito pdf presentazione in italiano, aggiornato versione programma |
20/07/2009 | Inserito segnalazione sito vendita e filmato |
05/05/2009 | Inserito segnalazione della pagina nella NEWSLETTER ROBOZAK n° 67 del 22/04/2009 |
20/04/2009 | Emissione preliminare |