Skip to content
January 28, 2013 / Ricardo Dias

Modelo do Software

Neste post iremos mostrar-vos como vamos distribuir os diferentes processos no Linux e como vamos implementar a comunicação entre eles.

A sincronização e passagem de mensagens entre os processos pode tornar-se algo complexo. Por isso decidimos usar a alternativa open-source ROS (Robot Operating System), que é um conjunto de ferramentas, algoritmos e utilidades prontos a utilizar para robótica. A linguagem de programação usada é o C++.

No nosso robot, teremos basicamente 3 processos a correr: vision, agent e hwcomm.

Vision

É o processo responsável por abrir comunicação com a câmara USB, processar a imagem e enviar uma mensagem de sincronismo para o hwcomm.

Hwcomm

Ao inicializar o processo, este abre comunicação com o canal I2C da Raspberry Pi. Durante a execução, ao receber a mensagem de sincronismo da visão, o hwcomm começa por recolher a informação de todos os sensores instalados no robô para depois preencher estruturas partilhadas e enviar uma mensagem de sincronismo com esta informação para o agent.

Agent

Neste processo encontra-se toda a Inteligência Artificial do robô. Utiliza a informação da visão e a informação dos sensores para tomar uma decisão. No fim, envia uma mensagem de sincronismo para o hwcomm, que enviará informação para os actuadores.

Implementação

Em termos de implementação específica do ROS, e usando a linguagem adequada, o que temos na prática são 3 processos que se registam como 3 nodes. O node vision publica mensagens do tipo VisionInfo.msg num topic /vision.

Os restantes nodes (agent e hwcomm) são Subscribers deste topic, sendo que o primeiro recebe a VisionInfo.msg para guardar informação referente ao farol e o segundo faz uso da mensagem apenas para fins de sincronismo e despoletar o início da leitura de todos os sensores.

O hwcomm, ao concluír a leitura de todos os sensores, publica uma mensagem HWInfo.msg no topic /hw, que contém toda a informação dos sensores. O node agent é Subscriber deste topic e utiliza a mensagem recebida para iniciar todo o tratamento de dados e tomada de decisão.

No fim da tomada de decisão, o agent publica uma mensagem AgentInfo.msg no topic /agent, que é tratado pelo node hwcomm como um conjunto de dados a enviar para os actuadores.

Conclusões

Esta abordagem torna fácil a distribuição do uso do CPU na Raspberry, que como já dissemos, é um recurso escasso e concorrido.

O ROS irá permitir ainda agilizar o processo de debugging, uma vez que nos permite, estando ligados na mesma rede da RaspberryPi, subscrever qualquer um dos tópicos acima a partir de um computador externo. Assim, torna fácil a implementação de ferramentas gráficas para, por exemplo, a visualização dos valores dos sensores.

Leave a comment