Actualmente estamos diseñando un robot móvil + brazo montado con múltiples grados controlados de libertad y sensores.
Estoy considerando una arquitectura en dos partes:
Un conjunto de controladores en tiempo real (ya sea Raspeberry Pis que ejecuta un RTOS como Xenomai o microcontroladores de metal desnudo) para controlar los motores y codificadores del brazo. Llamemos a estas máquinas RTx, con x = 1,2,3 ... dependiendo del número de microcontroladores. Este bucle de control se ejecutará a 200Hz.
Una potente máquina Linux de vainilla que ejecuta ROS para calcular SLAM, mocap y ejecutar lógica de alto nivel (decidir la tarea del robot y calcular la posición y velocidad deseadas de los motores). Este bucle de control se ejecutará a 30Hz.
Sé que mi marco debe ser escalable para tener en cuenta más motores, más sensores, más PC (por ejemplo, para mocap externo).
Mi principal problema es decidir cómo hacer que los diferentes RTx se comuniquen con PC1. He examinado documentos relacionados con la arquitectura de robots (por ejemplo, HRP2 ), la mayoría de las veces describen la arquitectura de control de alto nivel, pero aún no he encontrado información sobre cómo hacer que el nivel bajo se comunique con el nivel alto y de forma escalable. ¿Me he perdido algo?
Para conectar las máquinas RT rápidas que aseguran el control del motor con PC1, he considerado TCP / IP, CAN y UART:
- TCP / IP: no determinista pero fácil de implementar. ¿Es el no determinismo un problema real (ya que de todos modos solo se usará a una velocidad lenta de 30Hz)?
- CAN: lento, muy confiable, dirigido a automóviles (he visto que hay algunos ejemplos que usan CAN con robots pero se veía exótico)
- UART: si solo hubiera tenido una máquina RT para el control del motor, habría considerado UART pero supongo que este puerto no escala bien con muchas RTx ¿Es realmente TCP / IP un no ir debido a sus características no deterministas? Es tan facil de usar…
Por el momento, ninguna solución realmente me parece obvia. Y como no puedo encontrar ningún ejemplo serio de robot usando una solución específica confiable y escalable, no me siento seguro de tomar una decisión.
¿Alguien tiene una visión clara sobre este punto o literatura para señalar? ¿Existen soluciones de comunicación típicas o convencionales utilizadas en los robots?