Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

Bölüm 9 · Yazılımın içi · Ders 45

Git: commit, dal ve birleştirme

İki geliştirici aynı robot yazılımına aynı anda özellik ekliyor

Veri. Robotun hareket kodu robot.py 7 satır. Ayşe 'engel' dalında LiDAR engel kontrolü ekliyor (2 commit), Can aynı sırada main dalında pil sınırını ekliyor (2 commit). İkisi de aynı commit'ten (hız 0,6) yola çıktı. Akşam iki dal birleşecek: Git hangi satırı kimden alacağını nasıl biliyor, ikisi aynı satırı değiştirdiyse ne oluyor?

robotun hareket kodu: 7 satırsenaryo: çakışmasız
1 / 60
git_dallari.pypython
  1. def ozet(s, h=0): # basit özet (hash)
  2. for ch in s: h = (h * 31 + ord(ch)) % 2**32
  3. return format(h, '08x')[:7] # 7 haneli kimlik
  4. G = {} # kimlik -> (ebeveynler, içerik)
  5. def commit(ust, d):
  6. G[k := ozet(str(ust) + str(d))] = (ust, d); return k # içerik + ebeveyn
  7. def degis(c, i, s):
  8. d = list(G[c][1]); d[i] = s; return commit([c], d) # bir satırı değiştir
  9. def atalar(c):
  10. return {c}.union(*[atalar(u) for u in G[c][0]]) # kendisi + ataları
  11. D = ['HIZ = 0.5', 'ESIK = 0.30', 'PIL_MIN = 0.0', # robot.py
  12. 'def adim(r):', ' r.oku()', ' pass', ' r.git(HIZ)']
  13. main = degis(commit([], D), 0, 'HIZ = 0.6') # iki commit
  14. engel = degis(main, 5, ' if r.lidar < ESIK: r.dur()') # Ayşe: yeni dal
  15. engel = degis(engel, 1, 'ESIK = 0.25')
  16. main = degis(main, 2, 'PIL_MIN = 11.1') # Can: main
  17. CAKISMA = False # kaydırıcı: senaryo
  18. main = degis(main, 1, 'ESIK = 0.40') if CAKISMA else \
  19. degis(main, 6, ' r.git(HIZ, PIL_MIN)')
  20. ortak = atalar(main) & atalar(engel)
  21. o = max(ortak, key=lambda k: len(atalar(k))) # en yeni ortak ata
  22. R = [a if b in (x, a) else b if a == x else '<<<' # üç yönlü
  23. for x, a, b in zip(G[o][1], G[main][1], G[engel][1])]
  24. print(o, R)

Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.

Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.

Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide

Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.

git_dallari.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. Commit, dosyanın o anki tam hâli ve ebeveyninin kimliğidir. Kimliği bu ikisinin özetidir (hash): içerik bir harf değişse kimlik de değişir.
  2. Dal yalnızca bir commit'e işaretçidir; yeni dal açmak kopya yapmaz. HEAD, şu an hangi dalda çalıştığımızı gösterir.
  3. Birleştirmede Git iki ucun atalarını çıkarır, ortak olanların en yenisini (ortak ata) bulur ve her satıra bakar: yalnız bir taraf değiştirdiyse onu alır.
  4. İki taraf aynı satırı farklı biçimde değiştirdiyse Git karar veremez: çakışma bildirir ve bir insanın seçmesini bekler.
  5. Şunu dene: senaryoyu 1 (çakışmalı) yap; Can da ESIK satırını değiştirir ve birleştirme o satırda durur.

Neden önemli

Robot ekiplerinde algılama, kontrol ve arayüz kodunu farklı kişiler aynı anda yazar; dallar herkesin işini ayrı tutar, birleştirme hepsini tek sürümde toplar. Aynı satırı iki kişinin değiştirmesi gerçek bir anlaşmazlıktır: Git bunu sessizce çözmek yerine durdurur, çünkü yanlış eşik değeri sahada çarpışma demektir.

ESOF 323, 11. hafta: robotlarda derin öğrenme →
Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç