No momento, estamos projetando um robô móvel + braço montado com vários graus de liberdade e sensores controlados.
Estou considerando uma arquitetura em duas partes:
Um conjunto de controladores em tempo real (Raspeberry Pis executando um RTOS como Xenomai ou microcontroladores bare metal) para controlar os motores e codificadores de braço. Vamos chamar essas máquinas de RTx, com x = 1,2,3… dependendo do número de microcontroladores. Esse loop de controle será executado em 200Hz.
Uma poderosa máquina linux de baunilha executando o ROS para calcular SLAM, mocap e executar lógica de alto nível (decida a tarefa do robô e calcule a posição e a velocidade desejadas dos motores). Este loop de controle será executado em 30Hz.
Eu sei que minha estrutura precisa ser escalável para dar conta de mais motores, mais sensores, mais PCs (por exemplo, para mocap externo).
Meu principal problema é decidir como os diferentes RTx se comunicam com o PC1. Examinei artigos relacionados à arquitetura de robôs (por exemplo, HRP2 ), na maioria das vezes eles descrevem a arquitetura de controle de alto nível, mas ainda não encontrei informações sobre como fazer com que o baixo nível se comunique com o alto e de forma escalável. Perdi algo?
Para conectar as máquinas RT rápidas que garantem o controle do motor com o PC1, considerei TCP / IP, CAN e UART:
- TCP / IP: não determinístico, mas fácil de implementar. O não determinismo é um problema real (já que, de qualquer forma, só será usado em baixa velocidade 30Hz)?
- CAN: lento, muito confiável, direcionado para carros (vi alguns exemplos usando CAN com robôs, mas parecia exótico)
- UART: se eu tivesse apenas uma máquina RT para controle do motor, consideraria o UART, mas acho que essa porta não se adapta bem a muitos RTx. O TCP / IP é realmente um não-devido às suas características não determinísticas? É tão fácil de usar…
No momento, nenhuma solução realmente parece óbvia para mim. E como não consigo encontrar um exemplo sério de robô usando uma solução confiável e escalável específica, não me sinto confiante em fazer uma escolha.
Alguém tem uma visão clara sobre esse ponto ou literatura para apontar? Existem soluções de comunicação comuns ou comuns usadas em robôs?