Este documento fornece um tutorial sobre como construir, executar e interagir com o projeto Culling Games ROS 2.
Antes de executar qualquer parte do projeto, você precisa construir os pacotes. Navegue até a raiz do workspace e execute:
colcon buildEste comando irá compilar todos os pacotes (cg, cg_interfaces, cg_teleop).
Lembre-se de "source" o workspace em qualquer novo terminal que você abrir:
source install/setup.bashO jogo principal é uma janela Pygame que exibe o labirinto e o movimento do robô.
Para iniciar o jogo, execute o seguinte comando em um terminal:
ros2 run cg mazeVocê pode especificar como o labirinto é carregado usando argumentos adicionais:
- Carregar um Labirinto Aleatório (Padrão): Se nenhum argumento for fornecido, o jogo selecionará um labirinto aleatório do diretório
src/cg/maps.ros2 run cg maze
- Carregar um Labirinto Específico: Para carregar um labirinto pelo nome do arquivo (por exemplo,
test.csv):ros2 run cg maze -- --map test.csv
- Gerar um Novo Labirinto: Para gerar um novo labirinto aleatório e usá-lo imediatamente (esta opção tem precedência sobre
--map):ros2 run cg maze -- --generate
Existem duas maneiras de controlar o robô: usando o nó de teleoperação fornecido ou enviando chamadas de serviço.
Esta é a maneira mais fácil de jogar.
- Em um terminal separado (enquanto o comando
ros2 run cg mazeainda estiver em execução), inicie o nó de teleoperação:ros2 run cg_teleop teleop_keyboard
- O terminal exibirá as teclas de atalho. Use as seguintes teclas neste
terminal para mover o robô na janela do jogo:
- Cima:
w,k, ou a tecla Seta para Cima - Baixo:
s,j, ou a tecla Seta para Baixo - Esquerda:
a,h, ou a tecla Seta para Esquerda - Direita:
d,l, ou a tecla Seta para Direita
- Cima:
Você também pode enviar comandos de movimento individuais usando o serviço
/move_command. Isso é útil para scripts ou depuração.
Para mover o robô um passo, use o comando ros2 service call. Por exemplo, para
mover para cima:
ros2 service call /move_command cg_interfaces/srv/MoveCmd "{direction: 'up'}"Substitua 'up' por 'down', 'left' ou 'right' para outras direções.
O robô publica continuamente seus arredores imediatos em um tópico. Isso simula dados de sensores, mostrando o que está nas 8 células adjacentes (incluindo diagonais).
- Tópico:
/culling_games/robot_sensors - Tipo de Mensagem:
cg_interfaces/msg/RobotSensors
Para ver esses dados em tempo real, abra um novo terminal e execute:
ros2 topic echo /culling_games/robot_sensorsVocê verá um fluxo de mensagens mostrando o que está nas células up, down,
left, right, up_left, etc., em relação ao robô.
O serviço /reset permite reiniciar o tabuleiro do jogo. Ele suporta dois
modos.
Se você quiser tentar o mesmo labirinto novamente desde o início.
- Com Teleoperação: Pressione a tecla
rno terminalcg_teleop. - Comando Manual:
ros2 service call /reset cg_interfaces/srv/Reset "{is_random: false}"
Se você quiser um novo desafio com um labirinto novo e selecionado aleatoriamente.
- Com Teleoperação: Pressione a tecla
nno terminalcg_teleop. - Comando Manual:
ros2 service call /reset cg_interfaces/srv/Reset "{is_random: true}"
A resposta do serviço informará o nome do arquivo do novo labirinto que foi carregado.
Se você quiser obter o layout de todo o labirinto atual (por exemplo, para
construir um mapa externo), você pode usar o serviço /get_map.
ros2 service call /get_map cg_interfaces/srv/GetMapIsso retornará uma representação "achatada" da grade do labirinto e suas dimensões.