Robótica Computacional - Simulado AF 3
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 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_3.- 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_3dentro do pacotesimulado_3. - 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 - Segue Circulos
Baseando-se no código base_control.py do módulo 3, crie um arquivo chamado q1.py contendo uma classe denominada MudaPista. Esta classe deve implementar um nó chamado muda_pista_node, responsável por fazer com que o robô simulado entre na linha vermelha e mude de pista conforme comando de um Orquestrador, seguindo as pistas na ordem: vermelha, verde e azul.

Utilize o comando abaixo para iniciar o simulador no mapa da prova:
ros2 launch my_gazebo pista_circulos.launch.py
O nó criado deve
- avisar que está pronto ao iniciar.
- aguardar o comando de mudar de pista do Orquestrador.
- Ao receber o comando para mudar de pista pela primeira vez, o robô deve entrar na linha vermelha no sentido informado.
- Ao receber o comando para mudar de pista, muda para a próxima pista na ordem (vermelha -> verde -> azul), sempre seguindo no sentido informado eternamente.
- O robô pode andar diretamente até a próxima pista, ignorando as outras pistas no caminho.
- Na pista azul, o robô deve ignorar comandos de mudança de pista e continuar seguindo a pista azul até completar uma volta completa, retornando diretamente para o ponto de início e enviar um comando de pronto novamente para o Orquestrador, repetindo o ciclo eternamente.
Comunicação com o Orquestrador
- Publicar e assinar ao tópico
/controlecom o tiporobcomp_interfaces.msg.MudaPista. - Ao iniciar, publicar READY no campo
statuscom horário atual e nome do aluno nos campos apropriados. - Ao receber o
statusMUDAR_HORARIO ou MUDAR_ANTIHORARIO, o robô deve mudar de pista conforme o sentido informado. como na imagens a seguir. - Ao completar a volta na pista azul e retornar ao ponto inicial, publicar READY no campo
statusnovamente, repetindo o ciclo.


Requisitos
- Deve existir o arquivo chamado
q1.py. - O programa deve ser executado sem erros.
- A classe deve se chamar
MudaPista. - A implementação deve seguir a estrutura da classe
MudaPista, conforme exemplo nobase_control.py. - A função
controldeve ser a única a publicar no tópico/cmd_vel. - A função
controldeve ser idêntica à do arquivobase_control.py. Todas as decisões de controle devem ocorrer dentro dos nós, sem alterações na funçãocontrol. - Não utilizar loops infinitos ou
sleepdurante o controle do robô.
Rúbrica
- O programa deve respeitar as restrições definidas.
- [1] & o robô consegue enviar comandos para para o Orquestrador e consegue reconhecer os comandos de mudança de pista.
- [2] & o robô consegue entrar na pista vermelha, seguindo-a corretamente e mudar para a pista verde conforme o comando recebido.
- [3] & o robô consegue seguir o fluxo de mudança de pista corretamente, entrando na pista azul, dando a volta completa e retornando ao ponto inicial, reiniciando o ciclo, mas ignora o sentido informado.
- [4] & o robô consegue seguir o fluxo de mudança de pista corretamente, entrando na pista azul, dando a volta completa e retornando ao ponto inicial, reiniciando o ciclo,obedecendo o sentido informado.
Vídeo
Grave um vídeo mostrando que o robô é capaz de realizar o comportamento completo ou algum comportamento parcial. Publique os vídeos no YouTube e inclua apenas o link no arquivo README.md do seu repositório.
Exercício 2 - Posição Angular de Figuras
Baseando-se no código base_control.py do módulo 3, crie um arquivo chamado q2.py contendo uma classe denominada EstimaPosicao. Esta classe deve implementar um nó chamado estima_posicao_node, responsável por fazer com que o robô simulado execute uma volta completa em torno de seu eixo, reconheça a posição angular das figuras e armazene essas informações em um dicionário.

Utilize o comando abaixo para iniciar o simulador no mapa da prova:
ros2 launch my_gazebo roda.launch.py
O nó criado deve
- girar o robô em torno de seu eixo central até completar uma volta completa (360 graus).
- Durante a rotação, o nó deve coletar a posição angular (em graus, 0 a 360) de cada figura detectada, com a melhor precisão possível.
- O robô deve interromper a rotação, centralizar a figura no campo de visão, PARAR e coletar a posição angular, imprimir a figura e o valor angular em graus, e então continuar a rotação.
- Armazenar as posições angulares em um dicionário, onde as chaves são os nomes das figuras (
"cat","dog","car","bicycle","person") e os valores são as posições angulares em graus. - Após completar a volta, imprimir o dicionário com as posições angulares de cada figura.
Requisitos
- Deve existir o arquivo chamado
q2.py. - O programa deve ser executado sem erros.
- A classe deve se chamar
EstimaPosicao. - A implementação deve seguir a estrutura da classe
EstimaPosicao, conforme exemplo nobase_control.py. - A função
controldeve ser a única a publicar no tópico/cmd_vel. - A função
controldeve ser idêntica à do arquivobase_control.py. Todas as decisões de controle devem ocorrer dentro dos nós, sem alterações na funçãocontrol. - Não utilizar loops infinitos ou
sleepdurante o controle do robô.
Rúbrica
- O programa deve respeitar as restrições definidas.
- [1] & o robô consegue dar uma volta completo em torno de seu eixo e parar após completar a volta com precisão de 1 grau.
- [2] & o robô consegue detectar e reconhecer a posição angular das figuras, armazenando corretamente no dicionário e imprimindo os valores. Mas não centraliza as figuras no campo de visão.
- [3] & ao detectar uma figura, o robô interrompe a rotação, centraliza a figura no campo de visão, claramente PARA, reconhece a posição angular, imprime a figura e o valor angular em graus, e então continua a rotação, armazenando corretamente no dicionário e imprimindo os valores.
Vídeo
Grave um vídeo mostrando que o robô é capaz de realizar o comportamento completo ou algum comportamento parcial, mostrando os valores e a comunicação no terminal. Publique os vídeos no YouTube e inclua apenas o link no arquivo README.md do seu repositório.