• Provas
  • Simulados AF
  • Simulado AF 1
  • Enunciado

Robótica Computacional - Simulado AF 1

Atualização do Pacote (ROS 2)

Execute os comandos abaixo para atualizar os pacotes da ros2 obrigatórios para a prova:

cd ~/colcon_ws/src/my_simulation
git add .
git stash
git pull
cb

Configuração do Pacote (ROS 2)

  • Preparação Inicial: O repositório é informado no Blackboard (veja Sobre as APS). Clone-o dentro da pasta colcon_ws/src/ no seu SSD.
  • Criação do Pacote ROS 2: Dentro do diretório do seu repositório, crie um novo pacote chamado simulado_1.

    • Dica: Para utilizar os módulos desenvolvidos no capitulo 3, inclua o pacote robcomp_util e o pacote robcomp_interfaces como dependência do seu pacote, e então, importe como nos exemplos do capitulo 3.

Exercício 0 - Organização & Qualidade

Este exercício avalia a organização e a qualidade dos vídeos dos exercícios e do arquivo README.md.

Critérios de Avaliação:

  • O pacote foi corretamente configurado.
  • As dependências do pacote estão corretas.
  • Os diretórios e arquivos estão organizados de forma adequada.
  • Todos os scripts estão na pasta simulado_1 dentro do pacote simulado_1.
  • A configuração dos nós foi realizada corretamente.
  • Os nós da ROS 2 foram executados utilizando o comando ros2 run.
  • Vídeo: A ação do robô é claramente compreensível pelo vídeo.
  • README.md: O link do vídeo foi adicionado corretamente no campo indicado.
  • README.md: O arquivo README.md contém o nome completo e o e-mail do estudante.

Exercício 1 - Quadrilha Robótica

Baseando-se no código base_control.py do capítulo 3, crie um arquivo chamado q1.py contendo uma classe denominada JogadorQuadrilha. Esta classe deve implementar um nó chamado jogador_quadrilha_node, responsável por fazer com que o robô simulado participe de uma quadrilha robótica.

No início da execução, o robô deve publicar uma mensagem para o Marcador da Quadrilha informando que está pronto para iniciar a dança. A mensagem inicial deve conter o horário atual e o nome do jogador nos campos apropriados da mensagem.

Após receber a mensagem inicial do robô, o Marcador da Quadrilha começará a cantar a quadrilha, publicando mensagens temáticas no tópico da prova. Depois disso, o robô deve iniciar o comportamento de seguir a linha.

Primeiramente como é prova de sua atencao exemplar e como é uma comemoração, ele deve ficar cantando com o Marcador da Quadrilha, publicando "elaia!" cada vez que o Marcador publicar uma mensagem temática.

Durante a execução, o Marcador da Quadrilha poderá publicar os seguintes eventos:

  • Ponte tá quebrada: o robô deve girar 180° e continuar seguindo a linha pelo outro lado.
  • Deixa a vaca passar: o robô deve parar e aguardar. Enquanto a vaca estiver passando, o Marcador publicará repetidamente tá passando. Quando o Marcador publicar passou, o robô deve voltar a se mover.
  • Volta pra casa vermelha, Volta pra casa verde ou Volta pra casa azul: o robô deve salvar a posição atual, aproximar-se da casa da cor indicada e aguardar. Quando receber a mensagem pode voltar, o robô deve retornar para a posição em que estava antes de ir até a casa e continuar a execução.
  • Dá uma volta: o robô deve girar 360° e depois continuar seguindo a linha.

O Marcador da Quadrilha escolherá 7 eventos aleatoriamente, garantindo que pelo menos 1 evento de cada tipo seja enviado durante a execução. Ao final, o Marcador publicará a mensagem:

muito bem, pode parar

Confirmação dos comandos

Sempre que receber um comando do Marcador, o robô deve responder no tópico da prova indicando o andamento da execução. Em geral, a sequência deve ser:

  1. publicar que recebeu o comando;
  2. executar a ação solicitada;
  3. publicar que terminou a execução;
  4. quando houver retorno ou segunda etapa, publicar também a conclusão final.

Exemplos de mensagens publicadas pelo robô para cada comando:

Ponte tá quebrada

O robô deve girar 180° e confirmar a execução.

recebi: Ponte tá quebrada
robo: girei 180 graus

Dá uma volta

O robô deve girar 360° e confirmar a execução.

recebi: Dá uma volta
robo: girei 360 graus

Deixa a vaca passar

O robô deve parar ao receber o comando. Enquanto receber tá passando, deve permanecer parado. Depois de receber passou, deve voltar a andar e confirmar a execução.

recebi: Deixa a vaca passar
robo: esperei a vaca passar

Volta pra casa {cor}

O robô deve salvar a posição atual, ir até a casa da cor indicada e confirmar que chegou. Depois, ao receber pode voltar, deve retornar para a posição anterior e confirmar a conclusão final.

recebi: Volta pra casa vermelha
robo: cheguei na casa vermelha
robo: voltei onde comecei

A mesma lógica vale para casa verde e casa azul.

Simulador

Utilize o comando abaixo para iniciar o simulador no mapa da prova:

ros2 launch my_gazebo circuito.launch.py

O nó criado deve:

  • Publicar e assinar no tópico /quadrilha, utilizando o tipo de mensagem específico do tópico.
  • Ao iniciar, publicar uma mensagem informando que o robô está pronto para iniciar a quadrilha, com nome do aluno e horário atual.
  • Após a quadrilha começar, seguir a linha automaticamente.
  • Processar corretamente todos os comandos enviados pelo Marcador da Quadrilha.
  • Responder a cada comando recebido com uma mensagem temática.
  • Parar enquanto recebe tá passando e voltar a andar somente após receber passou.
  • Girar 180° ao receber Ponte tá quebrada.
  • Girar 360° ao receber Dá uma volta.
  • Ir até a casa da cor indicada ao receber Volta pra casa {cor}.
  • Retornar à posição anterior ao receber pode voltar.
  • Parar e finalizar a execução ao receber muito bem, pode parar.

Requisitos

  • Deve existir o arquivo chamado q1.py.
  • O programa deve ser executado sem erros.
  • A classe deve ser chamada JogadorQuadrilha.
  • A implementação deve seguir a estrutura da classe e de máquina de estados do exemplo base_control.py.
  • A função control deve ser a única a publicar no tópico /cmd_vel.
  • Todas as decisões de controle devem ocorrer dentro dos nós, sem alterações na função control.
  • Não utilizar loops infinitos ou sleep durante o controle do robô.
  • Não utilizar loops while dentro dos estados de controle; a máquina de estados e as ações devem ser acionadas apenas por callbacks de mensagens ou timers.
  • Deve publicar e assinar corretamente no tópico de comunicação com o Marcador da Quadrilha.
  • Deve seguir as regras da quadrilha corretamente.
  • Deve ser capaz de executar corretamente os 7 eventos enviados pelo Marcador.
  • Deve finalizar o nó automaticamente ao receber a mensagem final.

Rúbrica

O programa deve respeitar as restrições definidas.

  • Configuração correta do pacote, nó roda corretamente pelo comando ros2 run ....

  • Publica e assina corretamente no tópico /quadrilha, sem spamar mensagens, enviando a mensagem inicial com nome e horário.

  • O robô segue a linha corretamente durante a execução normal da quadrilha.

  • Executa corretamente os comandos Ponte tá quebrada e Dá uma volta, realizando os giros de 180° e 360° no mesmo estado ou sequência de estados.

  • Executa corretamente o comando Deixa a vaca passar.

  • Executa corretamente o comando Volta pra casa {vermelha, verde, azul}, aproximando-se da casa indicada, aguardando pode voltar e retornando à posição anterior.

  • Para e finaliza corretamente ao receber muito bem, pode parar.

Vídeo

Grave um vídeo mostrando:

  • o terminal do robô;
  • o terminal da simulação;
  • o echo do tópico de comunicação com o Marcador da Quadrilha;
  • o robô executando a quadrilha completa.

No vídeo, o robô deve aparecer recebendo e executando os 7 eventos enviados pelo Marcador.

Publique o vídeo no YouTube e inclua apenas o link no arquivo README.md do seu repositório.

Soluções parciais são aceitas. O aluno deve explicar no README.md e na descrição do vídeo até onde conseguiu implementar.