Robotica.RoboZak.Programmi


6/1/2008, ultimo aggiornamento:29/3/2008

In questa pagina raccolgo i programmi relativi a RoboZak o ai suoi componenti.

Generici:

Programmi raccolti qua e la' per la rete:
HMI_Servo_Programer-V1.0.2.zip serve per impostare i limiti di rotazione del servo, per assegnargli un ID univoco o per modificarle le prestazioni (velocita', accelerazione, precisione...)

HMITest.zip i piu' smanettoni si possono divertire con Visual Basic a vedere come vengono impartiti i comandi al servo. E' comunque presente un eseguibile per leggere il feedback del servo e impostare la posizione angolare.


RoboArt HMI:

Software che che ho creato personalmente.
Occorre il cavo HMI che trovate nella sezione Risorse oppure l'interfaccia fornita dalla DeAgostini.
Ecco il mio software per pilotare il/i servo da PC tramite protocollo seriale:

Download RoboArt HMI v1.9.6 per Linux
Download RoboArt HMI v1.9.6.exe per Windows

Nella prima tabella c'e' quanto serve per collegarsi al servo. Collegare il cavo della seriale al servo. Se usate un convertitore USB-RS232 l'impostazione di default dovrebbe gia' funzionare con Ubuntu, altrimenti cliccate su Ricerca automatica.
Se usate una porta seriale normale allora cliccate su 'Lista' e scegliete dal menu a tendina la porta corretta. Per quelli che sono abituati a Windows: /dev/ttyS0 = COM1 , ttyS1 = COM2 , ecc..

A questo punto alimentate il servo e cliccate su connetti e, se non vi sono stati problemi, leggerete nella riga in basso che la connessione e' avvenuta, altrimenti apparira' un messaggio di errore. Salvate la configurazione cliccando su Salva impostazioni che memorizzera' il percorso Speciale in un file. E' presente anche un pulsante di Imposta Servo ID. Assicurarsi di aver un solo servo collegato e impostargli un ID per comandarlo. Per essere pilotato dalla pagina di programmazione movimenti impostare un ID tra 1 e 24.


*Corrente e tensione: Cliccando su questo tasto verra' inviato un comando (degub in esadecimale visibile a destra) che ritornera' il valore di corrente e quello di tensione. Il programma mostrera' dei valori approssimativi in mA e V. Quando il servo sara' pilotato in una posizione, provate a forzarlo e cliccate contemporaneamente su questo tasto, vedrete che consumera' corrente per rimanere in posizione.
*Legge versione FW e ID: Ritorna la versione del Firmware del servo e il suo numero identificativo.
Legge posizione e imposta velocita': Permette di leggere in che posizione effettiva sia il servo (a prescindere da dove gli abbiamo comandato di andare) e di impostare la velocita' di rotazione. Lo slider permette di regolare la velocita' e la textbox permette di inserire un eventuale ID manualmente. Muovendo lo slider il comando partira' automaticamente.
Imposta posizione servo: Regolare lo slider per muovere il servo.
Abilita area attiva: Un rettangolo di colore rosso rappresensentera' una zona in cui muovendo il mouse verranno emessi comandi in tempo reale di posizionamento del servo (il cui ID e' quello scritto nel campo sopra).
Start ricezione comandi: Il servo considerera' i comandi di movimento.
Stop ricezione comandi: Il servo ignorera' i comandi di movimento.
* NOTA: i comandi con l'asterisco richiedono che vi sia un solo servo collegato alla linea seriale.

Ultima annotazione, sulla destra c'e' un campo per inviare manualmente caratteri sulla seriale, usato solo per debug.

Potete scrivere un programma, i comandi li trovate cliccando su Aiuto comandi.

Carica: carica un programma in formato testo.

Salva: salva il programma corrente.

Nuovo programma: annulla il programma corrente e vi permette di crearne uno nuovo. Digitate il nome (es. Prog1.txt) e premete invio.

Passo-Passo: se selezionate questa check box potete eseguire una linea alla volta, ottimo per il debug.

Catch'n'Play: parte un assistente (wizard) per catturare le varie posizioni. Alla fine, se volete che vengano ripetute, inserite ad inizio programma START: e alla fine GOTO START.

Auto limiti: parte un assistente (wizard) per trovare i limiti angolari della vostra configurazione di servo. Muovete i servo lentamente in tutte le posizioni possibili, poi cliccate su Stop auto limiti e ad inizio programma verranno aggiunti i comandi $LIMIT con i giusti parametri.




In questa sezione si possono aggiungere e muovere i comandi o i visualizzatori virtuali.
Per inserirli basta cliccare sui pulsanti a destra. Per muoverli basta cliccare sugli oggetti inseriti e cliccare sui pulsanti su, giu', dx e sx.
LCD testo:
Tramite l'oggetto LCDTEXT e' possibile visualizzare un messaggio proveniente dal programma, tramite istruzione RAPANEL.LCDTEXT.TEXT = mio messaggio.
Cliccando sul pulsante LCD testo verra' aggiunta una riga ad inizio programma con RAPANEL.LCDTEXT.ADD 8,345 che aggiungera' in runtime un LCD testuale virtuale al pannello comandi.
Pulsanti:
Tramite l'oggetto BUTTON e' possibile assegnare a una variabile 1 se premuto e 0 se non lo e', tramite istruzione RAPANEL.BUTTON.PRESSED N,X dove N e' il numero del pulsante e X la variabile da assegnare.
Cliccando sul pulsante "Pulsante" verra' aggiunta una riga ad inizio programma con RAPANEL.BUTTON.ADD 0,10,100,Puls0 che aggiungera' in runtime un pulsante al pannello comandi.
Slider:
L'oggetto slider permette di assegnare a una variabile il valore della posizione impostata dall'utente. Per la sintassi vedere l'aiuto comandi.



ChangeLog:
v1.9.5:
-inserito comando $LIMIT con pulsante per rilievo automatico
-trovato e risolto bug di Catch&Play: se il servo veniva posizionato ad un valore sotto lo zero (extra corsa), il move scriveva 255, ora scrive 10 (angolo minimo)
-risolto bug di conteggio label, dopo la prima esecuzione venivano falsate le posizioni delle etichette se venivano aggiunte o rimosse linee (grazie Mac!)

v1.9.4:
-sistemato crash in caso di programma con singola istruzione di movimento (serial.flush dovrebbe vuotare il buffer seriale, non inchiodare tutto, mah!)
-ridotti i tempi di timout della mancata risposta da parte del servo
-aggiunti 8 slider al pannello di controllo utente

v1.9.2, v1.9.3:
-aggiunti pulsanti al pannello, ora se ne possono inserire fino a 16
-cambiata logica del programma: non piu' basata su timer a causa di problemi con il compilatore Windows
-inserito pulsante per il popolamento dell'elenco seriali (in sistemi con molte seriali virtuali puo' dare problemi se automatico, grazie Rino!)

v1.9.1:
-aggiuti i pulsanti (4) nel pannello di controllo
-aggiunto comando RAPANEL.BUTTON.ADD N,X,Y,nome (N=numero pulsante; X e Y=coordinate di posizione; nome=etichetta del pulsante)
-aggiunta proprieta' RAPANEL.BUTTON.PRESSED N,X (N=numero pulsante; X=variabile che varra' 1 se pulsante premuto e 0 se non premuto)

v1.9.0:
-risolto problema crash sotto Win (spero!)
-sistemata lettura Return con file programma che passano da un sistema operativo all'altro

v1.8.9:
-aggiunti bordi a LCDTEXT se caricato da programma
-inserito comando X=RATIMER, per fare conti sul tempo ciclo
-sistemato Aiuto programma dopo inserimento del pannello di controllo
-vari debug

v1.8.8:
-sistemato LCDtext
-inserito comando RAPANEL.LCDTEXT.TEXT = mio commento
-aggiornato Aiuto comandi con gli oggetti del Pannello comandi
-risolto bug dopo inserimento di X=RAVBATT: problemi con X = 100.

v1.8.7:
-iniziata gestione pannello di controllo utente, inserito LCDtext
-inserito comando RAPANEL.LCDTEXT.ADD X,Y dove X e' la coordinata X e Y quella Y della posizione dell'LCDTEXT sul pannello
-risolto (non so come!) un problema di crash sotto windows in corrispondenza di una certa sequenza di comandi

v1.8.6:
-inserita funzione RAMSG per mostrare messaggi all'utente
-inserita funzione RAVBATT per caricare una variabile con il valore della tensione di batteria

v1.8.5:
-inserita funzione GOSUB; RETURN.
-inserita funzione IF / THEN; ENDIF

v1.8.4:
-sistemato goto a label, dopo nuova struttura saltava la riga dopo la label.
-sistemate le indicazioni di velocita' e posizione secondo lo standard di robobasic (1-15 e 10-190)
-sistemato invio di comandi di posizionamento diretti nel caso in cui un programma stia girando (inserisce una linea temporanea nel programma)
-inserito calcolo su variabili tipo A=3, A=3+B, A=B+C o A=B+3
-sistemati comandi SERVO, RASERVO e MOVE per lavorare con le variabili

v1.8.3: aggiunto comando e help per RASERVO x,y,z dove x=[0-23] numero servo, y=[10-190] posizione da raggiungere e z=[1-15] velocita'

v1.8.2: aggiornato help comandi con GOTO e SERVO; inserite avvertenze per bug FW dopo stop motori; velocizzato riconoscimento servo collegati in catch e play; aggiunto comando SERVO x,y dove x=[0-23] numero servo, y=[10-190] posizione da raggiungere

v1.8.1: Aggiunto comando speciale RACHKBATT X per dare un allarme se la batteria scende sotto un livello X (tipo 6.2). Fatte anche ottimizzazioni per far funzionare meglio il sistema con moduli radio tipo XBee (ritardi, bassa latenza ecc..).

v1.8.0: Sistemata compatibilita' con robobasic per il comando WAIT: ora occorre inserire un comando wait dopo ogni move che riguarda il servo. In pratica si possono eseguire piu' move in cascata che riguardano servo diversi, ma se riguardano lo stesso servo inserire wait per attendere che arrivi prima di eseguire il nuovo move. Inserito primo comando speciale: RAFLUID. Questo comando permette di far partire ed arrivare lento un servo. Parte lento, raggiunge la velocita' impostata da speed, poi rallenta prima di arrivare. Il parametro da passare e' tra 0 e 100. 0 lo disabilita, numeri bassi = accelerazione lenta..

v1.7.0: Modificato il core del programma in modo da funzionare anche con collegamenti con riposte lente come convertitori USB-RS232 non molto performanti o moduli di connessione wireless.

v1.6.0: Connessione piu'veloce; esecuzione programma in robobasic piu' fluida; aggiunto comando STOP in esecuzione passo-passo; risolto bug su funzione MOTORIN in esecuzione passo-passo.

v1.5.5: Risolto problema con comando MOTORIN(), sotto Windows saltava la linea successiva (misteri della fede!).

v1.5.4: Risolto problema con barra delle applicazioni che scompare sotto Windows.

v1.5.3: Risolto problema con assegnazione servo = 0 e 1.

v1.5.2: Migliorata funzionalita' Catch'n'Play.

v1.5.1: Corretto bug nella versione Windows, facendo Connetti con una COM disponibile ma senza il servo collegato venivano molte finestre di messaggio di errore.

v1.5: Aggiunta funzionalita' Catch'n'Play; Compilato anche per Windows; Sistemata pagina Seriale e Setup per Windows, ora presenta solo le COM disponibili; aggiornato il file "Impostazioni" che si crea con "Salva impostazioni" per memorizzare la COM utilizzata sotto Windows.

v1.4: Aggiunta zona attiva in cui muovendo il puntatore del mouse si muove istantaneamente il servo; Aggiunta possibilita' di caricare e salvare il file di programma Robobasic; Aggiunti comandi DELAY, WAIT, DIM, Commenti, Etichette, GOTO e MOTORIN; in oltre ora si possono passare variabili al comando MOVE; aggiuta possibilita' di eseguire il passo-passo del programma. v1.3: Piccoli bug fix della v1.2.

v1.2: Aggiunto un pulsante per impostare l'ID del servo collegato. Aggiunta una tabella per programmare una sequenza di comandi. Al momento e' disponibile solo SPEED e MOVE.

v1.1: Aggiunto un pulsante per il rilevare automaticamente la porta USB (per chi ha un convertitore USB-RS232). Aggiunto anche un pulsante per salvare le impostazioni, al successivo riavvio verranno caricate in automatico.

v1.0: Rilascio iniziale.



Roadmap:
Priorita' 1:
-Tutti devono poter eseguire il programma con le stesse potenzialita' e stabilita'

Priorita' 2:
-fare pannello di debug variabili
-fare pannello di situazione servo (pos voluta, pos attuale e velocita') e info generiche
-fare save as
-inserire rafloat
-inserie sin e cos

Priorita' 3:
PTP ALLON/ALLOFF SETON/OFF
DIM X as RAFLOAT (sistemare X=RAVBATT)
ELSE
if >= e <=
FOR / STEP / NEXT


Indice: Risorse Programmi 1-5 6-9 10-13