Questo tutorial spiega come utilizzare l'interfaccia CAN di Pika Spark per controllare diversi tipi di robot che sfruttano il protocollo OpenCyphal.
Pika Spark è un sistema di controllo di micro robot basato su Arduino Portenta X8, che combina una quantità senza precedenti di potenza di calcolo e interfacce di comunicazione in un fattore di forma estremamente piccolo. Il Pika Spark dispone di due interfacce CAN isolate galvanicamente che possono essere utilizzate per la comunicazione con dispositivi esterni. L'isolamento galvanico previene i loop di massa, aumenta la resilienza complessiva del sistema, ed è una caratteristica importante nei sistemi di controllo di livello industriale.
Vediamo come utilizzare l'interfaccia CAN di Pika Spark per controllare diversi tipi di robot che sfruttano il protocollo OpenCyphal. Consideriamo questi robot: T07, un robot a due ruote motrici in una configurazione triciclo, T07-4WD (un robot a quattro ruote motrici che può essere costruito raddoppiando il telaio T07) e il T07-Tracked, che è un veicolo cingolato con due cingoli in gomma. Sfruttiamo quindi il sistema Pika Spark abilitato per Arduino Portenta X8 di LXRobotics, il protocollo Cyphal/CAN e ROS2 per controllare tutte le diverse configurazioni del robot. Al fine di semplificare il controllo e l'automazione, tutti e tre i robot condividono un'architettura software e hardware molto simile: sono tutti robot a trasmissione differenziale i cui attuatori sono motori a corrente continua dotati di encoder Hall che consentono il controllo del numero di giri. Per controllare questo tipo di robot è stata sviluppata una scheda di controllo robot generica chiamata CyphalRobotController07/CAN.
Il CyphalRobotController07/CAN è in grado di pilotare fino a due motori DC, acquisire e utilizzare il feedback dell'encoder per il controllo del numero di giri, valutare lo stato di un arresto di emergenza e molte altre caratteristiche e funzionalità. La scheda comunica con altri nodi Cyphal tramite CAN sfruttando la libreria 107-Arduino-Cyphal. Può essere ampiamente configurato utilizzando l'API di registro di Cyphal, che è necessaria anche per robot così simili dal punto di vista architettonico, poiché il rapporto di trasmissione e i tick per giro dell'encoder differiscono. Ciascuno dei tre diversi tipi di robot menzionati nell'introduzione contiene una scheda CyphalRobotController07/CAN, ad eccezione di T07-4WD che contiene quattro motori DC e quindi richiede due schede CyphalRobotController07/CAN. Ulteriori informazioni sono disponibili nella sezione Riferimenti.
Come l'architettura hardware, anche l'architettura software è abbastanza semplice: sul Pika Spark viene eseguito un nodo ROS2 chiamato t07_robot all'interno di un container Docker. t07_robot sta ricevendo i set point di velocità del motore per i motori sul lato sinistro e destro da un altro nodo ROS2 chiamato t07_teleop che viene eseguito sul PC e comunica con Pika Spark tramite WiFi.
t07_robot trasforma quei set point nei target RPM richiesti per i motori, genera i messaggi Cyphal richiesti e li trasmette tramite l'interfaccia CAN di Pika Spark alle schede CyphalRobotController07/CAN. Per facilitare l'installazione e l'esecuzione del nodo t07_robot ROS2 su Pika Spark, è stato preparato un intero set di Dockerfile, script di compilazione ed esecuzione docker. L'esecuzione del nodo ROS2 richiesto su Pika Spark è quindi semplice come l'esecuzione dei seguenti comandi:
git clone https://github.com/107-systems/t07_docker && cd t07_docker ./docker-build.sh sudo ./docker-run-pika-spark.sh [t07.py | t07_4wd.py | t07_tracked.py]
Al link sottostante il video del funzionamento:
https://pika-spark.io/wp-content/uploads/2024/03/2024-03-24-Pika-Spark-OpenCyphal-T07-xx.mp4?_=1
Riferimenti & Documentazione Tecnica
107-systems/T07: File CAD e STL per i robot da esterno a trasmissione differenziale T07 e T07-4WD
107-systems/T07_threaded: File CAD e STL per i robot da esterno a trasmissione differenziale cingolati T07
107-systems/t07_robot: Codice di controllo ROS per i robot mobili da esterno basati su CyphalRobotController07/CAN
107-systems/t07_teleop: Teleoperazione basata su tastiera per i robot mobili da esterno basati su CyphalRobotController07/CAN
107-systems/t07_docker: Dockerfile e script per eseguire il software di controllo richiesto su Pika Spark