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_utile o pacoterobcomp_interfacescomo dependência do seu pacote, e então, importe como nos exemplos do capitulo 3.
- Dica: Para utilizar os módulos desenvolvidos no capitulo 3, inclua o pacote
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_1dentro do pacotesimulado_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.mdconté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.
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á repetidamentetá passando. Quando o Marcador publicarpassou, o robô deve voltar a se mover.Volta pra casa vermelha,Volta pra casa verdeouVolta pra casa azul: o robô deve salvar a posição atual, aproximar-se da casa da cor indicada e aguardar. Quando receber a mensagempode 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:
- publicar que recebeu o comando;
- executar a ação solicitada;
- publicar que terminou a execução;
- 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á passandoe voltar a andar somente após receberpassou. - 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
controldeve 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
sleepdurante o controle do robô. - Não utilizar loops
whiledentro 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á quebradaeDá 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, aguardandopode voltare 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
echodo 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.