↯ Robotik KodlamaTüm projeler

Depo robotu için en kısa yol bulucu

Rafların kapattığı bir depoda robotun başlangıçtan teslim noktasına en az adımda ulaşacağı yolu bul. Eşit maliyetli komşular için kuyruk tabanlı arama kur.

13+ yaş · 45 dakika · Python 3 · deney modeli

İnteraktif atölyede aç →

Neler öğreneceğiz?

Rafların kapattığı bir depoda robotun başlangıçtan teslim noktasına en az adımda ulaşacağı yolu bul. Eşit maliyetli komşular için kuyruk tabanlı arama kur.
Bu atölyede yalnız sonuca değil, tahmininin neden doğru veya yanlış çıktığına da bak. Bir deney günlüğünde giriş, beklenen sonuç, gözlenen sonuç ve düzeltme olmak üzere dört sütun aç.
Python kodu ölçüm/algoritma modelidir; GPIO pinlerine veya motora komut göndermez. Animasyon ise konuyu gösteren ayrı ve ideal bir modeldir.

Öğrenme hedefleri

  1. Kareli kâğıtta 5×4 depoyu ve üç engeli çiz.
  2. Hedef tamamen kapalıysa KeyError yerine “yol yok” sonucu verecek kontrolü ekle.
Depo robotu için en kısa yol bulucu — proje görseli
Özgün kavram ve algoritma çizimi. Yazılım örneğinin akışı resimli rehberde açıklanır; fiziksel devre kurulumu değildir.

Malzeme listesi

  1. Python 3 çalıştırabilen bilgisayar
  2. Kareli kâğıt, kalem ve deney günlüğü

Adım adım yapalım

  1. Kareli kâğıtta 5×4 depoyu ve üç engeli çiz.
  2. (0,3) başlangıcını ve (4,0) hedefini işaretle; yalnız yatay/dikey ilerle.
  3. Kuyruktan çıkan hücreyi renklendir; yeni komşuların ebeveynini okla göster.
  4. Kodu çalıştır ve yazdırılan yolun her hücresini takip et.
  5. Manhattan alt sınırını |4−0|+|0−3|=7 hesapla; bulunan yolun uzunluğuyla karşılaştır.
  6. Bir engeli taşı ve aramayı yeniden çalıştır; yolun aynı kalması gerekip gerekmediğini tahmin et.

Kod · Python 3 · deney modeli

from collections import deque
start,goal=(0,3),(4,0)
blocked={(1,1),(3,2),(3,3)}
queue=deque([start]);parent={start:None}
while queue:
 p=queue.popleft()
 if p==goal:break
 for dx,dy in [(1,0),(0,-1),(-1,0),(0,1)]:
  q=(p[0]+dx,p[1]+dy)
  if 0<=q[0]<5 and 0<=q[1]<4 and q not in blocked and q not in parent:
   parent[q]=p;queue.append(q)
path=[];p=goal
while p is not None:path.append(p);p=parent[p]
print(list(reversed(path)));print("Adım:",len(path)-1)

Kod nasıl çalışır?

BFS eşit maliyetli adımları katman katman gezer. parent hem tekrar ziyaretini önler hem yolu geri kurar. Animasyondaki rota bir örnektir; kodun seçtiği komşu sırası farklı eşit uzunlukta yol üretebilir.

Beklenen sonuç

Python modelinin çalıştırılan çıktısı (fiziksel ölçüm değildir):
[(0, 3), (1, 3), (2, 3), (2, 2), (2, 1), (3, 1), (4, 1), (4, 0)]
Adım: 7

Sıra sende

Hedef tamamen kapalıysa KeyError yerine “yol yok” sonucu verecek kontrolü ekle.

Güvenli atölye

Bu çalışma düşük gerilimli eğitim içindir. Donanımı enerji kapalıyken, bir yetişkinle kur. Şebeke elektriği kullanma. Kodun derlenmesi fiziksel devrenin test edildiği anlamına gelmez.

Çalışmıyorsa kontrol et

  1. Sonucu alamıyorsan programın ilk satırından başlayıp girdileri tek tek kontrol et.
  2. Donanım varsa enerjiyi ayır; GND, sinyal uçları ve parça yönlerini bağlantı tablosundan doğrula.
  3. Aynı anda yalnız bir şeyi değiştir; değişiklik öncesi ve sonrası sonucu günlüğe yaz.

Kontrol noktaları

  1. Başlamadan önce: gerekli malzemeleri say ve giriş değerlerini deney günlüğüne yaz.
  2. Kurulumdan sonra: her bağlantıyı aşağıdaki tabloyla karşılaştır; yazılım projesinde giriş listesini kontrol et.
  3. Testten sonra: beklenen sonucu kendi çıktınla karşılaştır. Fark varsa ilk farklı adımı bul.

Kaynakların kullanımı

Kaynak, ilgili kavramı öğrenmek ve karşılaştırmak içindir. Türkçe görev, örnek kod ve görseller bu atölye için özgün hazırlanmıştır; kaynak makalenin çevirisi veya kopyası değildir.

Algoritmanın yol haritası
Algoritmanın yol haritası
Deney günlüğü: altı adım
Deney günlüğü: altı adım

https://docs.python.org/3/library/collections.html#collections.deque