Indice
Esta seção visa explicar como o código funciona no NAO de maneira mais abstrata e geral, já tendo explicado os módulos fornecidos pela framework.
Cyclers
Atualmente existem seis threads rodando no NAO, em jargão de Tamboerijn (e HULKs) são chamados de cyclers
:
Control
VisionTop
VisionBottom
Audio
SPLNetwork
ObjectDetectionTop
De forma resumida elas são responsáveis por:
Controle
Este Cycler é responsável pelo controle alto-nível do robô, isso inclui tasks relacionadas à comportamento, seleção de ações para execução, relacionadas à movimentação como execução de ações selecionadas como driblar, chutar, ficar em pé, entre outras.
A thread de controle roda com maior prioridade que as outras com uma frequência maior de 83 Hz, ou seja, a cada 12 ms.
Se estiver mais curioso da uma fuçada no código, nos diretórios de behavior
na crate control
VisionTop e VisionBottom
Esses dois Cyclers processam as imagens das câmeras do NAO, a VisionTop
processa a imagem da câmera superior e a VisionBottom
a inferior. Isso inclui segmentação de imagem, detecção de bola, de linhas, entre outros.
Ambos rodam a 30 Hz (a frequência das câmeras), ou seja, a cada 33 ms.
Audio
Esse Cycler é responsável por processar o áudio captado pelos microfones do NAO, ou seja, a detecção de apito.
SPLNetwork
Essa thread lida com todas mensagens recebidas e enviadas pela rede SPL, então, é responsável pela comunicação com o GameController e com os outros robôs do time.
ObjectDetectionTop
Esse Cycler ainda não é presente no Tamboerijn, mas é presente no código da HULKs. Ele é responsável por detectar gestos do árbitro. Nossa liga ainda não utiliza essa funcionalidade, mas futuramente pode ser necessário implementar.
Podemos dividir a robótica em três áreas principais
Na Rino estruturamos de uma forma um pouco diferente da HULKs, então existem disparidades entre este documento e o oficial da equipe alemã.
Sensoriamento
Como o robô percebe o mundo ao seu redor. No caso do NAO, temos câmeras, microfones, sensores de toque, ultrassom,giroscópios, acelerômetros, etc. Essa área é responsável por:
Comportamento e Estratégia
Como o robô decide o que fazer, comunicação com GameController (SPLNetwork) e time, e roles
(papéis) dos robôs em campo.
Movimentação
Toda a parte física do robô, como modelo matemático, planejamento de passos, caminhar, chutar, etc.