Nous concevons actuellement un robot mobile + bras monté avec plusieurs degrés de liberté contrôlés et des capteurs.
J'envisage une architecture en deux parties:
Un ensemble de contrôleurs en temps réel (Raspeberry Pis exécutant un RTOS tel que Xenomai ou des microcontrôleurs en métal nu) pour contrôler les moteurs de bras et les encodeurs. Appelons ces machines RTx, avec x = 1,2,3… en fonction du nombre de microcontrôleurs. Cette boucle de contrôle fonctionnera à 200 Hz.
Une puissante machine Linux vanilla exécutant ROS pour calculer SLAM, mocap et exécuter une logique de haut niveau (décider de la tâche du robot et calculer la position et la vitesse souhaitées des moteurs). Cette boucle de contrôle fonctionnera à 30 Hz.
Je sais que mon framework doit être évolutif pour prendre en compte plus de moteurs, plus de capteurs, plus de PC (par exemple pour une mocap externe).
Mon principal problème est de décider comment faire communiquer les différents RTx avec PC1. J'ai regardé des articles liés à l'architecture des robots (par exemple HRP2 ), le plus souvent ils décrivent l'architecture de contrôle de haut niveau mais je n'ai pas encore trouvé d'informations sur la façon de faire communiquer le bas niveau avec le haut niveau et de manière évolutive. Ai-je oublié quelque chose?
Afin de connecter les machines RT rapides assurant la commande du moteur avec PC1, j'ai considéré TCP / IP, CAN et UART:
- TCP / IP: pas déterministe mais facile à mettre en place. Le non-déterminisme est-il un vrai problème (car il ne sera utilisé qu'à une vitesse lente de 30 Hz de toute façon)?
- CAN: lent, très fiable, ciblé sur les voitures (j'ai vu qu'il y a quelques exemples d'utilisation de CAN avec des robots mais ça avait l'air exotique)
- UART: si je n'avais eu qu'une seule machine RT pour le contrôle du moteur, j'aurais considéré UART mais je suppose que ce port ne s'adapte pas bien avec beaucoup de RTx. TCP / IP est-il vraiment un no go en raison de ses caractéristiques non déterministes? C'est tellement simple à utiliser…
Pour le moment, aucune solution ne me semble vraiment évidente. Et comme je ne trouve aucun exemple de robot sérieux utilisant une solution spécifique fiable et évolutive, je ne suis pas confiant de faire un choix.
Quelqu'un a-t-il une vision claire de ce point ou de la littérature à signaler? Existe-t-il des solutions de communication typiques ou grand public utilisées sur les robots?