O editor de arenas do sBotics é uma das ferramentas mais complexas e poderosas do simulador, permitindo a criação e personalização de cenários detalhados para competições e atividades educacionais. Embora a interface possa exigir um período de adaptação, especialmente no controle da câmera, o editor oferece um controle preciso sobre a criação de arenas.
A base do editor é um cursor de ladrilhos, que se move nas coordenadas da arena para realizar alterações. Os comandos de movimentação são intuitivos: W
, A
, S
e D
para deslocamento lateral, e Z
e X
para movimentação vertical. Ao selecionar um ladrilho na barra inferior (ilustrada na imagem abaixo), ele é inserido na posição do cursor. Para manipulações adicionais, como rotação, elevação ou exclusão, posicione o cursor sobre o ladrilho desejado e utilize as teclas R
para rotacionar, +
ou -
para elevar ou descer, e delete
para remover.
Note: No vídeo acima é possível ver a câmera sendo rotacionada para melhorar a visibilidade de alguns pontos (já que a movimentação do cursor de edição de ladrilho não é tão livre quanto a câmera do simulador). Para girar a câmera no editor, basta utilizar as teclasC
eV
.
A segunda aba do editor se trata do Editor de Ladrilhos, uma outra interface com outra usabilidade e conceitos, e por esta razão não foi agrupada nesta página.
O editor de arenas também oferece configurações avançadas, permitindo um controle granular sobre o comportamento da arena e dos ladrilhos. Essas configurações são armazenadas em formato JSON, oferecendo flexibilidade e precisão na personalização.
O objeto JSON de pontuação é utilizado para configurar a pontuação dos ladrilhos e penalidades na arena. Ele segue o seguinte padrão:
{ "points": 0, "multiplier": 1, "attempt_points": [], "attempt_multipliers": [] }
“points”:
Define a pontuação base do ladrilho ou penalidade.“multiplier”
: Define o multiplicador de pontuação.“attempt_points”
: Permite definir pontuações diferentes para cada tentativa. Por exemplo, [5, 4, 3]
atribui 5 pontos na primeira tentativa, 4 na segunda e 3 na terceira. Tentativas subsequentes ignoram essa configuração.“attempt_multipliers”
: Semelhante a “attempt_points”, mas para multiplicadores.
As seguintes configurações avançadas permitem personalizar diversos aspectos da arena. Objetos de pontuação (explicados acima) estão representados aqui como { … }
.
Dados Básicos:
"name": "Robocup Arena 12", // Nome da arena "description": "Arena", // Descrição da arena "time_of_day": "15:00", // Horário do dia (6:00 - 18:00), controla a posição do sol "time_limit_minutes": 5, // Limite de tempo em minutos "hard_evacuation_point": false, // Área de resgate difícil (falso: N1, difícil: N2)
Importante:
"stop_game_on_time_limit": true, // Jogo termina ao atingir o limite de tempo "path_arena": true, // Indica se a arena possui um trajeto definido "ignore_dead_victim_if_any_living_left": true, // Ignora pontuação das vítimas mortas se houverem vivas "advance_button": false, // Deixa o botão "Avançar" sempre habilitado, caso contrário vai usar o threshold "skip_path_threshold": 3, // Número de tentativas para habilitar o "pulo de trilha" (avançar) "end_on_endgoal": true, // Rotina termina ao atingir o ladrilho final "advance_penalty": 0, // Número de segundos que é preciso esperar depois de uma nova tentativa para clicar em "nova tentativa" "max_time_if_incomplete": true, // Rotinas incompletas levam o tempo máximo (5 minutos, 7, etc) "lack_of_progress": true, // Habilita penalidades por falta de progresso "scoring": true, // Habilita pontuação "force_advance": false, // Força o avanço para o próximo trajeto após o threshold "randomize_victim_position": true, // Randomiza a posição das vítimas "end_on_rescue_victims": false, // Rotina termina ao resgatar todas as vítimas "short_lack_of_progress_time": 10, // Tempo para o contador "leve" da falha de progresso "long_lack_of_progress_time": 50, // Tempo para o contador "grave" da falha de progresso "ramp_entrance_score": { ... }, // Pontuação ao entrar em qualquer rampa na arena "ramp_exit_score": { ... }, // Pontuação ao sair de qualquer rampa na arena "use_rescue_checkpoint_lack_of_progress_penalty": true, // Habilita penalidade por cada falha de progresso na rotina para deduzir do ladrilho final "end_goal_lack_of_progress_penalty": { ... }, // Valor da penalidade por cada falha de progresso para deduzir do ladrilho final "rescue_checkpoint_lack_of_progress_penalty": 0.025, // Valor da penalidade de multiplicadores por falha de progresso em trechos que contém sala de resgate "path_size_checkpoint_entrance_score": { ... }, // Pontuação que será atribuida ao entrar em um checkpoint pelo tamanho do trajeto que foi concluído. Valor padrão é 5,3,1 pois na primeira tentativa sera 5*numero de ladrilhos de um determinado trajeto "path_size_checkpoint_exit_score": { ... }, // Pontuação que será atribuida ao sair de um checkpoint pelo tamanho do trajeto anterior que foi concluído.
Pedagógico:
"change_position_in_routine": false, // Permite alterar a posição e depurar o robô durante a rotina "robot_constraints": { // Restrições do robô, permite que a arena limite os robôs para criar verdadeiros desafios "use_constraints": false, // Habilita restrições "constraints_violation_penalty": { ... }, // Penalidade por violar de restrições, pode ser 999 pontos ou qualquer valor escolhido "max_price": 50, // Preço máximo do robô, use -1 para ignorar restrição "max_weight": 100, // Peso máximo do robô, use -1 para ignorar restrição "max_ultrasonic": 10, // Número máximo de sensores ultrassônicos, use -1 para ignorar restrição "max_servomotor": 10, // Número máximo de servomotores, use -1 para ignorar restrição "max_light": 10, // Número máximo de sensores de luz, use -1 para ignorar restrição "max_buzzer": 10, // Número máximo de buzzers, use -1 para ignorar restrição "max_color": 10, // Número máximo de sensores de cor, use -1 para ignorar restrição "max_touch": 10, // Número máximo de sensores de toque, use -1 para ignorar restrição "max_camera": 10, // Número máximo de câmeras, use -1 para ignorar restrição "max_pen": 10 // Número máximo de canetas, use -1 para ignorar restrição }
Incompletos:
"use_medals": false, // Utiliza o sistema de medalhas para pontuar
Depreciado:
"start_with_rescue_kit": false, // Robô inicia com kit de resgate no início da rodada "starter_rescue_kit_score": { ... }, // Pontuação por entregar kit de resgate inicial "return_rescue_kits_with_robot": true, // Kits de resgate retornam com o robô em novas tentativas "randomize_safe_area": false, // Randomiza uma área de resgate (incompatível com múltiplas áreas de resgate) "multiplier_powered_by_victims_rescued": false, // Antigo cálculo para atribuição de multiplicadores "placeable_checkpoints": 0, // Número de checkpoints posicionáveis manualmente "placeable_checkpoint_entrance_score": { ... }, // Pontuação ao entrar em checkpoint posicionado manualmente "placeable_checkpoint_exit_score": { ... }, // Pontuação ao sair de checkpoint posicionado manualmente "placeable_checkpoint_margin": 0, // Margem de ladrilhos para posicionar outro checkpoint manualmente
Funções depreciadas não necessariamente não funcionam (a verdade é que todas elas funcionam se configuradas corretamente), apenas deixaram de serem utilizadas pela OBR e não oferecemos mais suporte.