Questo progetto (ancora in fase di sviluppo) ha l’obiettivo di creare un software per controllare un braccio robotico articolato.

Il progetto è composto da due script Python:
RoboLink
Il primo programma è l’interfaccia tra l’utente e il braccio robotico: consente all’utente di selezionare il punto di destinazione verso cui il braccio robotico deve muoversi, semplicemente puntando il mouse su una finestra che rappresenta lo schema del braccio robotico.
Il programma calcola quindi gli angoli per spostare i due segmenti del braccio robotico e infine invia gli angoli al controller del robot.
La posizione della “spalla” è fissa, la posizione della “mano” è selezionata dall’utente e le lunghezze dei due segmenti da “spalla” a “gomito” e da “gomito” a “mano” sono note.
Lo script si basa su calcoli matematici per ricavare gli angoli che i due segmenti devono formare per puntare la mano dove indicato dall’utente.
Per prima cosa, la posizione del “gomito” viene calcolata come l’intersezione dei due cerchi centrati sulla “spalla” e sulla “mano”.
Una volta determinate le coordinate dei tre punti (“spalla”, “gomito” e “mano”), il programma calcola gli angoli tra i segmenti, cioè gli angoli per muovere i motori del braccio robotico.
Delle due possibili posizioni del “gomito”, lo script esclude la soluzione più vicina alla posizione neutra: a causa delle limitazioni nell’implementazione del braccio robotico, i movimenti ad angoli stretti sono meno precisi.
Infine, il programma invia la coppia di angoli calcolati al controller del braccio robotico attraverso una connessione MQTT.
ArmController
Il secondo programma controlla il movimento del robot: riceve comandi dall’interfaccia utente RoboLink e sposta di conseguenza i segmenti del braccio robotico.
Il programma è fatto per funzionare su un Raspberry Pi a cui il braccio robotico è collegato tramite le porte GPIO.
Il programma apre una connessione MQTT e resta in ascolto su un canale su cui l’interfaccia utente RoboLink trasmette gli angoli per il movimento dei motori montati sui bracci del robot.
Quando riceve i dati, il programma crea due thread per spostare i motori contemporaneamente agli angoli desiderati.
Il movimento dei motori passo passo richiede un controllo di basso livello: una apposita funzione crea un elemento PWM (Pulse Width Modulation) con una frequenza di 50 Hz, poi inizia ad inviare il segnale PWM con un ciclo di lavoro dello 0% (posizione neutra) e quindi passa dall’angolo di partenza all’angolo di fine calcolando il ciclo di lavoro per impostare la posizione del motorino passo passo.
In questo modo, ArmController è in grado di spostare i segmenti del braccio robot in base all’input dell’utente per posizionare la “mano” dove richiesto.
Prossimi passi
Per utilizzare il sistema Robot Arm come complemento al progetto Tris with Computer Vision, ho in programma di:
- aggiungere la possibilità di sollevare e abbassare la penna montata sulla “mano” del braccio robotico
- crea una libreria di coordinate per disegnare il simbolo “X” in tutte le posizioni possibili sul tabellone di gioco