Duvar işaretleri
Robotun yapması gerekenler
Bölüm başlığı “Robotun yapması gerekenler”Duvar işaretleri (wall tokens) puanlarının çoğunu oluşturur ve her yanlış bildirim 5 puana mal olur. Bu yüzden bulduğun her işaret için şunlar arasında karar vermelisin:
| İşaret… | Ne yapmalı |
|---|---|
| Bir harf kazazede (Φ, Ψ, Ω) | H, S ya da U bildir |
| Bir sahte kazazede (aynı semboller, ama üç boyutlu) | Bildirme ve haritaya ekleme |
| Toplamı 0 ile 3 arasında olan bir bilişsel hedef | F, P, C ya da O bildir |
| Toplamı başka bir değer olan bilişsel hedef | Sahtedir: bildirme ve haritaya ekleme |
Kesin tanımlar için Kurallar sayfasına, bildirimin nasıl gönderileceği için İletişim sayfasına bak.
Kameranın gördükleri
Bölüm başlığı “Kameranın gördükleri”Başlangıç robotunun kamerası 64 × 40 pikseldir. Bu çözünürlükte bir işaret, robot yaklaşana kadar yalnızca birkaç pikselden ibarettir. Bu yüzden adayları uzaktan arayıp sonra okumak için yaklaşmak en iyisidir. Bildirim yapabilmek için robotun işarete en fazla yarım kare uzaklıkta olması gerektiğini ve özel kameraların daha yüksek çözünürlüğe sahip olabileceğini, ama bunun bir maliyeti olduğunu unutma.

![]()
Harf kazazedeler beyaz bir kare üzerindeki siyah sembollerdir ve herhangi bir açıyla döndürülmüş olabilirler, bu yüzden yöntemin yönelime bağlı olmamalıdır.

Bilişsel hedefi okuma
Bölüm başlığı “Bilişsel hedefi okuma”Bilişsel hedef beş eş merkezli parçadan oluşur, bu yüzden şeklini tanımana gerek yoktur: merkezini ve dış yarıçapını bulduktan sonra her parçanın ortasındaki rengi örnekleyebilirsin. Parçaların yarıçapları 0,5, 1, 1,5, 2 ve 2,5 cm’dir; bu yüzden orta noktaları dış yarıçapın 0, 0,3, 0,5, 0,7 ve 0,9’undadır.
Bu fonksiyon bunu Python’da OpenCV ile yapar. Merkezi ve yarıçapı bulmak için örneğin Labirentte yol bul sayfasındaki gibi hedefin konturunu kullanabilirsin.
import cv2 as cvimport numpy as np
# Colour of each part in BGR order, as seen by the cameraCOLORS = { 'K': (0, 0, 0), # Black 'R': (0, 0, 255), # Red 'Y': (0, 255, 255), # Yellow 'G': (0, 255, 0), # Green 'B': (255, 0, 0), # Blue}
def nearestColor(bgr): # Returns the name of the colour that is closest to a pixel distances = {name: np.linalg.norm(np.array(color) - bgr) for name, color in COLORS.items()} return min(distances, key=distances.get)
def readRings(image, centerX, centerY, radius): # image is a BGR image, as in the RGB Camera tutorial # Returns the 5 colours from the center outwards, for example ['Y', 'B', 'R', 'K', 'G'] rings = [] for position in [0, 0.3, 0.5, 0.7, 0.9]: x = int(round(centerX + position * radius)) y = int(round(centerY)) rings.append(nearestColor(image[y, x].astype(float))) return ringsGerçek bir oyunda hedef eğik bir açıdan görülebilir; bu durumda elips gibi görünür. Hedefin karşısına geçmek, yanlış görünen renkleri bir uyarı işareti olarak değerlendirmek ya da birkaç görüntü karesini okumak sonucu daha güvenilir hale getirir.

Türü hesaplama
Bölüm başlığı “Türü hesaplama”Beş rengi elde ettikten sonra bildireceğin kod, bu renklerin toplamından çıkar. Komşu renkler aynı olsa bile beş parçanın her biri her zaman ayrı sayılır.
VALUES = {'K': -2, 'R': -1, 'Y': 0, 'G': 1, 'B': 2}CODES = {0: 'F', 1: 'P', 2: 'C', 3: 'O'}
def targetCode(rings): # rings is the list of the 5 colours of the target # Returns the code to report, or None if the target is fake total = sum(VALUES[color] for color in rings) return CODES.get(total)#include <map>#include <vector>
using namespace std;
// rings has the 5 colours of the target: 'K', 'R', 'Y', 'G' or 'B'// Returns the code to report, or 0 if the target is fakechar targetCode(const vector<char>& rings) { map<char, int> values = {{'K', -2}, {'R', -1}, {'Y', 0}, {'G', 1}, {'B', 2}}; int total = 0; for (char color : rings) total += values[color];
switch (total) { case 0: return 'F'; case 1: return 'P'; case 2: return 'C'; case 3: return 'O'; default: return 0; }}Örneğin ['Y', 'B', 'R', 'K', 'G'] toplamı 0 eder, yani F’dir; ['B', 'Y', 'K', 'K', 'K'] ise toplamı -4 eder, yani sahtedir.
Sahte kazazedeleri tespit etme
Bölüm başlığı “Sahte kazazedeleri tespit etme”Sahte kazazedeler gerçek olanlarla aynı sembolleri gösterir, ama harfleri üç boyutludur. Önden bakıldığında tek başına bir kamera onları ayırt edemeyebilir:

Kurallar, derinliğin Robot Customizer’daki sensörlerden biriyle tespit edilebileceğini belirtir. Keşfedebileceğin bazı fikirler:
- Bir yükseklik farkı aramak için işaretin üzerinden boydan boya Lidar ya da mesafe sensörleriyle aldığın mesafe ölçümlerini karşılaştır.
- İşarete eğik bir açıdan bak; bu açıdan bakıldığında kabartma, sembolün şeklini değiştirir.
world3.wbt ve world4.wbt dünyaları sahte kazazedeler içerir ve World Editor onları kendi haritalarına ekleyebilir. Erebus ayrıca mevcut dünyalardaki kazazedeleri rastgele sahteye dönüştüren scripts/update_maps_with_fakes.py betiğini içerir.
Bir sahteyi bildirmek yanlış tanımlama olarak 5 puana mal olur; buna karşılık doğrusal bir karedeki gerçek bir kazazede, türüyle birlikte 1. alanda 15 puan, diğer alanlarda daha fazla değerindedir. Robotunun bildirimden önce ne kadar emin olması gerektiğine karar verirken bunu aklında tut.
