Softivation

Canlı laboratuvar

Her görevde bir araç ve bir eksik satır var. Önce ne olacağını tahmin edin, çalıştırın, izi grafikte görün; sonra eksik satırı yazıp görevi tamamlayın. Araçlar gerçek otopilot gibi davranır: ön kontroller, uçuş modları, batarya ve sanal çit emniyetleri.

  • Kod sitenin geri kalanından ayrı bir alanda çalışır; hesabınıza, bu sayfaya ve internete erişemez.
  • İlk çalıştırmada Python tarayıcınıza iner (birkaç saniye), sonra hızlıdır.

Multikopter: kalk, git, eve dön

GUIDED modda kalkış ve konum komutu, sonra RTL. Önce tahmin edin: RTL komutundan sonra araç doğrudan eve mi uçar, yoksa önce başka bir şey mi yapar?

from sv_lab import Arac, Gorev

iha = Arac("multikopter", ad="SV-1")
iha.bekle(4)              # GPS 3D Fix'i bekleyin; beklemeden arm deneyin ve ne olduğunu görün
iha.mod("GUIDED").arm().kalk(10)
iha.git(40, 0)            # 40 m kuzey
# TODO: aracı eve döndürün (ipucu: iha.mod(...))

iha.calistir(60)
iha.ozet()
Gorev("Kalk, git, eve dön", [
    ("10 m'ye çıktı", lambda a: max(p[3] for p in a.iz) >= 9.5),
    ("40 m kuzeye gitti", lambda a: max(p[1] for p in a.iz) >= 39),
    ("eve döndü ve indi", lambda a: abs(a.kuzey) < 2 and abs(a.dogu) < 2 and not a.armed),
]).denetle(iha)
iha.ciz()
Takıldınız mı?

RTL komutu yok: araç 40 m kuzeyde havada kalıyor. Kodu kendi yapay zekânıza da sorabilirsiniz; önerdiği satırı burada çalıştırın, ölçütlerin hangisini karşıladığına bakın.

Bu konunun tamamı: Python ile Sıfırdan İHA Kontrolü

Sabit kanat: havada duramayan araç

Sabit kanatlı İHA bir noktada asılı kalamaz. Hedefe varınca ne yapar? Kodu çalıştırmadan önce izin şeklini tahmin edin, sonra grafikle karşılaştırın.

from sv_lab import Arac, Gorev

ucak = Arac("sabit_kanat", ad="Kartal")
noktalar = [(300, 0, 40), (300, 300, 40), (0, 300, 40)]
# TODO: görev noktalarını araca yükleyin (ipucu: ucak.gorev(noktalar))

ucak.bekle(4).mod("GUIDED").arm().kalk(40).mod("AUTO")
ucak.calistir(120)
ucak.ozet()
Gorev("Üç noktalı görev", [
    ("40 m'ye tırmandı", lambda a: max(p[3] for p in a.iz) >= 39),
    ("bütün görev noktaları", lambda a: a.gorev_i == 3),
    ("görev bitince daire çiziyor (havada kalmak için)", lambda a: a.havada and a.hedef is None),
]).denetle(ucak)
ucak.ciz()
Takıldınız mı?

Görev yüklenmedi: AUTO modu reddediliyor. Kodu kendi yapay zekânıza da sorabilirsiniz; önerdiği satırı burada çalıştırın, ölçütlerin hangisini karşıladığına bakın.

Bu konunun tamamı: Yapay Zeka ve İHA Simülasyon Eğitimi

VTOL: dikey kalk, uçak gibi git

VTOL dikey kalkışta QHOVER, ileri uçuşta GUIDED kullanır. Kalkış komutunu hangi modda vermeniz gerekir? Yanlış modda verip reddedilmesini izleyin.

from sv_lab import Arac, Gorev

vtol = Arac("vtol", ad="Doğan")
vtol.bekle(4)
vtol.mod("QSTABILIZE")   # TODO: dikey kalkışın kabul edildiği moda geçin
vtol.arm().kalk(20)
vtol.mod("GUIDED").git(200, 100)

vtol.calistir(60)
vtol.ozet()
Gorev("Dikey kalkış ve ileri uçuş", [
    ("20 m'ye dikey çıktı", lambda a: max(p[3] for p in a.iz) >= 19.5),
    ("hedefe vardı", lambda a: abs(a.kuzey - 200) < 3 and abs(a.dogu - 100) < 3),
]).denetle(vtol)
vtol.ciz()
Takıldınız mı?

Kalkış yanlış modda veriliyor. Kodu kendi yapay zekânıza da sorabilirsiniz; önerdiği satırı burada çalıştırın, ölçütlerin hangisini karşıladığına bakın.

Bu konunun tamamı: Yapay Zeka ve İHA Simülasyon Eğitimi

İKA: sınırdaki kara aracı

İnsansız kara aracı sanal çitle (geofence) korunuyor. Çiti aşan bir hedef verildiğinde emniyet ne yapar? Önce tahmin edin, sonra çiti aşmadan hedefe varan rotayı yazın.

from sv_lab import Arac, Gorev

ika = Arac("ika", ad="Toprak", cit=60)
ika.bekle(4).mod("GUIDED").arm()
ika.git(80, 0)   # TODO: çitin (60 m) içinde kalan bir hedef seçin, ör. 50 m kuzey

ika.calistir(40)
ika.ozet()
Gorev("Çit içinde görev", [
    ("çit aşılmadı", lambda a: not any("çit" in m for _, m in a.olaylar)),
    ("45 m'den uzağa gitti", lambda a: max(p[1] for p in a.iz) >= 45),
]).denetle(ika)
ika.ciz()
Takıldınız mı?

Hedef çitin dışında: emniyet aracı geri çağırıyor. Kodu kendi yapay zekânıza da sorabilirsiniz; önerdiği satırı burada çalıştırın, ölçütlerin hangisini karşıladığına bakın.

Bu konunun tamamı: Sıfırdan Mission Planner Eğitimi

İDA: akıntıda konum tutmak

ArduRover'da HOLD motorları keser, LOITER konumu motorla tutar. Akıntıda HOLD'a geçen tekne nereye gider? Tahmin edin, grafikte görün, sonra doğru modu seçin.

from sv_lab import Arac, Gorev

ida = Arac("ida", ad="Martı", akinti=(0.4, 0.0))   # kuzeye 0,4 m/sn akıntı
ida.bekle(4).mod("GUIDED").arm().git(0, 40)
ida.mod("HOLD")   # TODO: akıntıda konumu tutan moda geçin

ida.calistir(60)
ida.ozet()
Gorev("Akıntıda konum", [
    ("hedefe vardı", lambda a: any(abs(p[2] - 40) < 2 for p in a.iz)),
    ("sonunda hedefe 5 m'den yakın", lambda a: abs(a.dogu - 40) < 5 and abs(a.kuzey) < 5),
]).denetle(ida)
ida.ciz()
Takıldınız mı?

HOLD modunda araç akıntıyla sürükleniyor. Kodu kendi yapay zekânıza da sorabilirsiniz; önerdiği satırı burada çalıştırın, ölçütlerin hangisini karşıladığına bakın.

Bu konunun tamamı: İHA Haberleşme Teknolojileri Eğitimi

Denizaltı: dal, ilerle, yüzeye çık

Denizaltıda irtifa eksidir: -10, 10 m derinlik demek. Batarya emniyeti devreye girerse denizaltı ne yapar, RTL mi, başka bir şey mi?

from sv_lab import Arac, Gorev

su = Arac("denizalti", ad="Yunus")
su.bekle(4).mod("GUIDED").arm().dal(10)
su.git(20, 0, -10)
# TODO: görev bitince yüzeye çıkın (ipucu: su.mod(...))

su.calistir(120)
su.ozet()
Gorev("Dalış görevi", [
    ("10 m derine indi", lambda a: min(p[3] for p in a.iz) <= -9.5),
    ("20 m ilerledi", lambda a: max(p[1] for p in a.iz) >= 19),
    ("yüzeye çıktı", lambda a: a.irtifa > -0.5),
]).denetle(su)
su.ciz()
Takıldınız mı?

Yüzeye çıkma komutu yok. Kodu kendi yapay zekânıza da sorabilirsiniz; önerdiği satırı burada çalıştırın, ölçütlerin hangisini karşıladığına bakın.

Bu konunun tamamı: Yapay Zeka ve İHA Simülasyon Eğitimi

Karma sürü: hava, kara ve deniz birlikte

Bir multikopter, bir İKA ve bir İDA aynı hedefe formasyonla gidiyor. Hat formasyonunda araçlar birbirine çok yaklaşıyor mu? Aralığı değiştirip en yakın mesafeyi izleyin.

from sv_lab import Arac, Suru, Gorev

suru = Suru([Arac("multikopter", ad="Hava"), Arac("ika", ad="Kara"), Arac("ida", ad="Deniz")])
suru.hepsi("bekle", 4).hepsi("mod", "GUIDED").hepsi("arm")
suru.araclar[0].kalk(10)
suru.git(40, 0, irtifa=10, bicim="hat", aralik=3)   # TODO: aralığı en yakın mesafe 5 m'yi geçecek kadar büyütün

suru.calistir(40)
suru.ozet()
Gorev("Karma sürü formasyonu", [
    ("üç araç da hedef bölgede", lambda s: all(abs(a.kuzey - 40) < 3 for a in s.araclar)),
    ("araçlar arası en az 5 m", lambda s: s.en_yakin_mesafe() >= 5),
]).denetle(suru)
suru.ciz("Karma sürü")
Takıldınız mı?

Aralık çok küçük: araçlar 5 m'den fazla yaklaşıyor. Kodu kendi yapay zekânıza da sorabilirsiniz; önerdiği satırı burada çalıştırın, ölçütlerin hangisini karşıladığına bakın.

Bu konunun tamamı: Yapay Zeka ve İHA Simülasyon Eğitimi