Lewati ke konten
Bahasa Indonesia

Penanda dinding

Penanda dinding (wall token) menyumbang sebagian besar poinmu, dan setiap laporan yang salah mengurangi 5 poin. Jadi, untuk setiap penanda yang kamu temukan, kamu harus menentukan jenisnya:

Penanda itu… Yang harus dilakukan
Korban huruf (Φ, Ψ, Ω) Laporkan H, S, atau U
Korban palsu (simbol yang sama, tetapi tiga dimensi) Jangan laporkan, dan jangan masukkan ke peta
Target kognitif dengan jumlah 0 sampai 3 Laporkan F, P, C, atau O
Target kognitif dengan jumlah lainnya Penanda palsu: jangan laporkan, dan jangan masukkan ke peta

Lihat Aturan untuk definisi yang tepat, dan Komunikasi untuk cara mengirim laporan.

Kamera robot pemula beresolusi 64 × 40 piksel. Pada resolusi itu, penanda hanya terdiri atas beberapa piksel sampai robot cukup dekat, jadi sebaiknya cari kandidat dari kejauhan, lalu mendekat untuk membacanya. Ingat bahwa laporan mensyaratkan robot berada dalam jarak setengah ubin dari penanda, dan bahwa kamera kustom bisa punya resolusi lebih tinggi, dengan biaya tambahan.

Empat gambar kamera robot pemula saat robot makin mendekati korban huruf

Target kognitif dilihat oleh kamera 64 kali 40

Korban huruf adalah simbol hitam di atas kotak putih, dan bisa diputar ke sudut mana pun, jadi metodemu tidak boleh bergantung pada orientasinya.

Korban huruf di dinding dalam simulator

Target kognitif terdiri atas lima bagian konsentris, jadi kamu tidak perlu mengenali bentuknya: setelah kamu menemukan titik tengah dan jari-jari luarnya, kamu bisa mengambil sampel warna di tengah setiap bagian. Jari-jari bagian-bagiannya adalah 0,5; 1; 1,5; 2; dan 2,5 cm, jadi titik tengahnya berada di 0; 0,3; 0,5; 0,7; dan 0,9 kali jari-jari luar.

Target kognitif dengan titik-titik tempat membaca warna setiap bagian, di 0; 0,3; 0,5; 0,7; dan 0,9 kali jari-jari luar

Fungsi ini melakukannya dengan OpenCV di Python. Untuk menemukan titik tengah dan jari-jarinya, kamu bisa misalnya menggunakan kontur target, seperti di Menavigasi labirin.

import cv2 as cv
import numpy as np
# Colour of each part in BGR order, as seen by the camera
COLORS = {
'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 rings

Dalam permainan sungguhan, target mungkin terlihat dari sudut miring sehingga tampak seperti elips. Memosisikan robot di depannya, menganggap warna yang tampak salah sebagai peringatan, atau membaca beberapa frame akan membuat hasilnya lebih andal.

Target kognitif yang dilihat dari sudut miring oleh kamera robot pemula

Setelah kamu mendapatkan kelima warna, kode yang dilaporkan berasal dari jumlahnya. Setiap bagian dari kelima bagian itu selalu dihitung, bahkan saat warna yang bersebelahan sama.

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)

Misalnya, ['Y', 'B', 'R', 'K', 'G'] berjumlah 0, jadi jenisnya F, dan ['B', 'Y', 'K', 'K', 'K'] berjumlah -4, jadi penanda itu palsu.

Korban palsu menampilkan simbol yang sama dengan korban asli, tetapi hurufnya tiga dimensi. Dari depan, kamera saja mungkin tidak bisa membedakannya:

Korban palsu dilihat dari depan

Aturan menyatakan bahwa kedalamannya bisa dideteksi dengan salah satu sensor yang tersedia di Robot Customizer. Beberapa ide untuk dijelajahi:

  • Bandingkan pengukuran jarak di sepanjang penanda, dengan Lidar atau sensor jarak, untuk mencari perbedaan ketinggian.
  • Lihat penanda dari sudut miring, karena relief mengubah bentuk simbolnya.

World world3.wbt dan world4.wbt berisi korban palsu, dan World Editor bisa menambahkannya ke petamu sendiri. Erebus juga menyertakan skrip scripts/update_maps_with_fakes.py, yang secara acak mengubah korban di world yang sudah ada menjadi palsu.

Melaporkan penanda palsu mengurangi 5 poin sebagai salah identifikasi, sedangkan korban asli di ubin linear di Area 1 bernilai 15 poin jika jenisnya juga benar, dan lebih tinggi lagi di area lain. Ingatlah hal itu saat menentukan seberapa yakin robotmu perlu sebelum melaporkan penanda.