Attualmente stiamo progettando un robot mobile + braccio montato con più gradi di libertà e sensori controllati.
Sto considerando un'architettura in due parti:
Una serie di controller in tempo reale (o Raspeberry Pis che esegue un RTOS come Xenomai o microcontrollori bare metal) per controllare i motori e gli encoder del braccio. Chiamiamo queste macchine RTx, con x = 1,2,3… a seconda del numero di microcontrollori. Questo circuito di controllo funzionerà a 200Hz.
Una potente macchina Linux vanilla che esegue ROS per calcolare SLAM, mocap ed eseguire logiche di alto livello (decidere il compito del robot e calcolare la posizione e la velocità desiderate dei motori). Questo circuito di controllo funzionerà a 30Hz.
So che il mio framework deve essere scalabile per tenere conto di più motori, più sensori, più PC (ad es. Per mocap esterni).
Il mio problema principale è decidere come far comunicare i diversi RTx con PC1. Ho esaminato i documenti relativi all'architettura dei robot (ad esempio HRP2 ), molto spesso descrivono l'architettura di controllo di alto livello, ma devo ancora trovare informazioni su come far comunicare il livello basso con l'alto livello e in modo scalabile. Ho dimenticato qualcosa?
Per collegare le macchine RT veloci garantendo il controllo del motore con PC1, ho considerato TCP / IP, CAN e UART:
- TCP / IP: non deterministico ma facile da implementare. Il non determinismo è un vero problema (in quanto verrà utilizzato solo a bassa velocità a 30Hz)?
- CAN: lento, molto affidabile, mirato alle auto (ho visto che ci sono alcuni esempi che utilizzano CAN con i robot ma sembrava esotico)
- UART: se avessi avuto solo una macchina RT per il controllo del motore avrei considerato UART ma suppongo che questa porta non si ridimensiona bene con molti RTx TCP / IP è davvero un non andare a causa delle sue caratteristiche non deterministiche? É così facile da usare…
Al momento nessuna soluzione mi sembra davvero ovvia. E poiché non riesco a trovare alcun esempio di robot serio utilizzando una soluzione specifica affidabile e scalabile, non mi sento sicuro di fare una scelta.
Qualcuno ha una visione chiara su questo punto o sulla letteratura a cui puntare? Esistono soluzioni di comunicazione tipiche o tradizionali utilizzate sui robot?