O UnBall SSL Client é um sistema modular para controle de robôs na RoboCup Small Size League (SSL). O projeto implementa uma arquitetura baseada em threads para comunicação em tempo real com:
- 🎥 SSL-Vision: Recebe e processa dados de visão (posições de robôs, bola, geometria do campo)
 - 🎮 SSL Game Controller: Manipula comandos do árbitro e o estado do jogo
 - 🤖 Controle de Robôs: Gerencia ações de robôs via simulação (grSim) ou interfaces para robôs reais (IRL)
 - 🧠 Lógica Comportamental: Implementa máquinas de estado para diferentes papéis de robôs (Goleiro, Defensor, Atacante)
 - 🗺️ Planejamento de Trajetória: Utiliza o algoritmo A* para navegação de robôs e desvio de obstáculos
 - 🖥️ Interface Gráfica: GUI baseada em PyQt5 para visualização em tempo real, controle e depuração
 - 📊 Sistema de Logging: Sistema centralizado de logs com níveis configuráveis para debug eficiente
 - 🐛 Utilitários de Debug: Ferramentas avançadas para análise de performance e comportamento
 
Este projeto é compatível com Python 3.10.12.
Para criar um ambiente virtual e instalar as dependências:
python3.10 -m venv env
source env/bin/activate
pip install -r requirements.txt
pip install -e .Para instalar as ferramentas Qt necessárias para a interface gráfica:
sudo apt-get install qttools5-dev┌─────────────────────────────────────────────────────────────────────────────┐
│                           ENTRADA DE DADOS                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│  SSL-Vision ──┐                                                             │
│               │ UDP Multicast                                               │
│  SSL Game     ├──────────────► Game Logic (Main Loop)                       │
│  Controller ──┘                        │                                    │
│                                         │                                   │
│  config.json ───────────────────────────┘                                   │
└─────────────────────────────────────────────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                      PROCESSAMENTO CENTRAL                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│  Robot State Machines (RobotBehavior)                                       │
│                        │                                                    │
│                        ▼                                                    │
│  Path Planner (PathPlanning - A*)                                           │
│                        │                                                    │
│                        ▼                                                    │
│  Robot Controllers (RobotBehavior - GrSim/IRL)                              │
│                        │                                                    │
│                        ▼                                                    │
│  Logger & Debug Utils (utils/)                                              │
└─────────────────────────────────────────────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                      SAÍDA E INTERAÇÃO                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│  Robot Controllers ──┬──► grSim Simulator                                   │
│                      │                                                      │
│                      └──► Robôs Reais (IRL)                                 │
│                                                                             │
│  Game Logic ─────────────► Interface Gráfica (PyQt)                         │
│                      │                                                      │
│  Logger ─────────────┴──► Arquivos de Log / Console                         │
└─────────────────────────────────────────────────────────────────────────────┘
O sistema utiliza múltiplas threads para garantir processamento em tempo real:
- Thread Principal (Game): Loop principal a 60 FPS
 - Thread Vision: Recebe pacotes UDP do SSL-Vision
 - Thread GameController: Recebe comandos do árbitro
 - Thread UI (PyQt): Interface gráfica responsiva
 - Threads de Controle: Uma thread por robô para envio de comandos
 
Sincronização: Utiliza threading.Lock() para acesso seguro aos dados compartilhados.
{
  "network": {
    "multicast_ip": "224.5.23.2",
    "vision_port": 10020,
    "referee_ip": "224.5.23.1",
    "referee_port": 10003,
    "yellow_port": 10004,
    "blue_port": 10005,
    "blue_control_port": 10301,
    "yellow_control_port": 10302
  },
  "match": {
    "team_1": "UnBall",
    "team_2": "Opponent",
    "event": "Test",
    "team_side": "left",
    "team_color": "blue",
    "division": "Entry Level",
    "num_robots_our_team": 3,
    "time_logging": false,
    "control_mode": "grSim",
    "fps": 60
  },
  "debug_flags": {
    "vision": false,
    "referee": false,
    "threads": false,
    "timing": false,
    "path_planning": true,
    "robot_behavior": true,
    "all": false
  },
  "logging": {
    "level": "INFO",
    "file_output": true,
    "console_output": true,
    "max_file_size": "10MB",
    "backup_count": 5
  }
}- Classe Principal: 
Game - Responsabilidade: Coordena visão, árbitro, controle de robôs, planejamento de trajetória e UI
 - Destaques:
- Loop principal a 60 FPS
 - Gerenciamento de configuração
 - Inicialização dinâmica de robôs
 - Manipulação de comandos do árbitro
 - Sistema de logging integrado
 
 
- Função: Sistema centralizado de logging com níveis configuráveis
 - Características:
- Níveis: DEBUG, INFO, WARNING, ERROR, CRITICAL
 - Output para console e arquivo
 - Rotação automática de logs
 - Formatação consistente com timestamps
 
 
Uso:
from utils.logger import get_logger
logger = get_logger("module_name")
logger.debug("Mensagem de debug")
logger.info("Informação importante")
logger.error("Erro ocorreu", exc_info=True)- Performance Monitor: Análise de tempo de execução
 - Memory Profiler: Monitoramento de uso de memória
 - Thread Monitor: Visualização de threads ativas
 - Data Inspector: Inspeção de estruturas de dados em tempo real
 
- Seleção de Time: Escolha entre "Time Azul" ou "Time Amarelo"
 - Seleção de Divisão: "Entry Level", "Division B", ou "Division A"
 - Modo de Controle: "grSim" (simulação) ou "IRL" (robôs reais)
 
- Comandos Básicos: HALT, STOP, FORCE START
 - Situações de Jogo: (Em desenvolvimento)
- FREE-KICK POSITION
 - KICK-OFF
 - PENALTY
 - GOAL KICK
 - CORNER KICK
 - BALL PLACEMENT
 
 
- Campo Central: Posições em tempo real dos robôs e bola
 - Trajetórias A:* Visualização de caminhos planejados
 - Status dos Robôs: Papel e estado atual
 - Console de Debug: Logs em tempo real (Menu > Debug)
 
# Executar o cliente principal
python main.py
# Testes específicos
python -m tests.integration.test_behavior
python -m tests.system.test_cli --role goalkeeper --duration 30
# Debug com níveis específicos
LOG_LEVEL=DEBUG python main.py
# Análise de performance
python -m utils.performance_analyzerCada robô utiliza uma máquina de estados finitos (FSM):
- IDLE: Robô parado
 - MOVING_TO_POSITION: Movendo-se para um alvo
 - RETURNING: Retornando à posição inicial
 
Atacante:
- MOVING_TO_BALL: Indo em direção à bola
 - APPROACHING_BALL: Aproximação final (em desenvolvimento)
 - ALIGNING_TO_GOAL: Alinhamento para chute (em desenvolvimento)
 - KICKING: Executando chute
 
Goleiro:
- DEFENDING_GOAL: Posicionamento defensivo
 - INTERCEPTING: Tentando interceptar a bola
 - CLEARING_BALL: Afastando a bola da área
 
Defensor:
- MARKING: Marcando adversário
 - BLOCKING: Bloqueando linha de passe
 - SUPPORTING: Apoiando o ataque
 
O planejador de trajetória considera:
- Obstáculos estáticos (limites do campo)
 - Obstáculos dinâmicos (outros robôs)
 - Zonas proibidas (área do goleiro adversário)
 - Otimização de caminho (suavização de curvas)
 
# Em config.json
"logging": {
  "level": "DEBUG",  # DEBUG, INFO, WARNING, ERROR, CRITICAL
  "modules": {
    "vision": "INFO",
    "path_planning": "DEBUG",
    "robot_behavior": "DEBUG"
  }
}- 
Performance Profiler
python -m utils.profiler --module path_planning
 - 
Thread Monitor
python -m utils.thread_monitor
 - 
Data Flow Analyzer
python -m utils.data_flow_analyzer
 
tests/
├── unit/           # Testes unitários
├── integration/    # Testes de integração
├── system/        # Testes de sistema
└── performance/   # Testes de performance
# Todos os testes
python -m pytest
# Testes específicos
python -m pytest tests/unit/test_path_planning.py
python -m pytest tests/integration/test_robot_behavior.py -v
# Com cobertura
python -m pytest --cov=. --cov-report=html- 
Documentação Oficial SSL
 - 
Artigos Recomendados
- "Multi-Robot Path Planning in Dynamic Environments" (2023)
 - "Coordinated Team Play in Robot Soccer" (2022)
 - "Real-time Motion Planning for SSL Robots" (2021)
 
 - 
Conceitos Importantes
- Threads em Python: 
threadingvsmultiprocessing - Comunicação UDP: Sockets e multicast
 - Máquinas de Estado: Design patterns para robótica
 - Algoritmo A*: Pathfinding em grids
 
 - Threads em Python: 
 
- 
Use o Logger, não print()
# ❌ Evite print(f"Debug: {value}") # ✅ Prefira self.logger.debug(f"Value: {value}")
 - 
Thread Safety
with self.data_lock: # Acesso seguro a dados compartilhados self.shared_data = new_value
 - 
Tratamento de Exceções
try: risky_operation() except SpecificException as e: self.logger.error(f"Erro específico: {e}", exc_info=True)
 
- Sistema base de visão e controle
 - Planejamento de trajetória A*
 - Interface gráfica básica
 - Sistema de logging
 - Estrutura de máquinas de estado
 
- Melhorias na aproximação da bola
 - Lógica avançada do goleiro
 - Comportamento defensivo inteligente
 - Botões de situações de jogo na UI
 
- Sistema de táticas coletivas
 - Machine Learning para predição
 - Análise pós-jogo
 - Modo de treinamento
 
- Fork o projeto
 - Crie sua feature branch (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add: AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
 
- Issues: Use o GitHub Issues para reportar bugs
 - Discussões: GitHub Discussions para dúvidas
 - Email: [email protected]