Kodlama kılavuzu
Bu belge, Robomation'ın geliştirdiği 'robot hareketi akış hizmeti için çalıştırma motoru ve bütünleşik geliştirme ortamı' çalışmasının bir parçası olan robot kodlama eğitim platformu RobomationLAB'i anlatır.
Ayrıntılı anlatım şu sırayla verilir:
- RobomationLAB'in başlıca özellikleri
- RobomationLAB robot programlama yöntemi
- RobomationLAB robot kodlamasının temel sözdizimi
İçindekiler
RobomationLAB robot kodlama eğitim platformu
1-1) Robot kodlama programları
1-2) Blok ↔ Python gerçek zamanlı çift yönlü dönüşüm
1-3) Kodlama programlarının başlıca özellikleri
1-4) Gerçek zamanlı robot denetimiRobomationLAB robot programlama yöntemi
2-1) Sıralı çalışma ve paralel çalışma
2-2) setup fonksiyonu
2-3) loop fonksiyonuRobomationLAB robot kodlamasının temel sözdizimi
3-1) robomation paketini içe aktarma
3-2) Robot örneği oluşturma
3-3) Robot denetim yöntemleri
3-4) Sensör ve durum okuma
3-5) Olay algılama
3-6) İşlemin bitmesini bekleme (wait)
3-7) Yardımcı fonksiyonlar (Utils)
RobomationLAB robot kodlama eğitim platformu
RobomationLAB, yapay zekâ ve robotik yazılım eğitimi için tasarlanmış bir platformdur;
ilkokul ve ortaokul öğrencilerine yönelik robot kodlama eğitimi için Chrome web tarayıcısı üzerinde çalışan bütünleşik bir geliştirme ortamı sunar.
RobomationLAB blok kodlama ve betik kodlama gibi farklı yöntemlerle çalışan robot kodlama eğitim programları sağlar.
Yalnızca kodlamanın kuramını öğrenmekle kalmaz, Robomation ürünleriyle robotları gerçekten hareket ettirip denetlerken
kodlamayı ve robotları aynı anda öğrenme olanağı sunar.
Robot kodlama programları
Block Composer
Block Composer, blok kodlamayla Robomation robotlarını kolayca ve hızlıca denetlemenizi ve robot denetiminin temellerini öğrenmenizi sağlayan bir araçtır.
Fiziksel bilişim için tasarlanmış bir geliştirme ortamı
Blokları sürükleyip bırakma yöntemiyle yeni başlayanların bile kolayca kod yazabilmesi
Temel kavramlardan başlayarak sözdizimi hatası olmayan bir öğrenme ortamı
Python betik koduna kendiliğinden dönüşme
Her robot için önceden hazırlanmış blok kümeleri ve çeşitli deneme örnekleri
Kodu çalıştırarak sonucu anında görebilme
Blokları birleştirerek problem çözme becerisi ve yaratıcılık geliştirme
Yapay zekâ tabanlı betik kodu çözümlemesiyle en uygun geri bildirim
Script Composer
Script Composer, Python kodlamasıyla Robomation robotlarını kolayca ve hızlıca denetlemenizi, Python sözdizimini ve robot kodlamasının temellerini öğrenmenizi sağlayan bir araçtır.
Python düzenleyici
Dile göre kod tamamlama ve kod ekleme özellikleri
Her robot için çeşitli deneme örnek kodları
Kodu çalıştırarak sonucu anında görebilme
Yapay zekâ tabanlı betik kodu çözümlemesiyle en uygun geri bildirim
Kodlama programlarının başlıca özellikleri
RobomationLAB'in sunduğu robot kodlama programlarının başlıca özellikleri şunlardır.
- Chrome web tarayıcısı üzerinde çalıştığı için işletim sistemi kısıtlaması yoktur
- Web Serial iletişimiyle, USB dongle üzerinden robot donanımını doğrudan denetler
- Aynı anda birden çok robotu denetleme desteği — robot türü ve sayısı sınırsızdır
- Dosya kaydedilirken sonuç JSON metin dosyasına dönüştürülerek saklanır
Gerçek zamanlı robot denetimi
RobomationLAB'in robot kodlama programları robotu şu adımlarla gerçek zamanlı olarak denetler.
- Blok kodlama ya da betik kodlamayla, robotu denetlemek için Effector ve Command nesnelerinin değerlerini ayarlayan ya da robotun Sensor değerlerini ve Event oluşumlarını kullanan kod yazılır.
- Kod çalıştırılır.
- Web Serial iletişimiyle robottan Sensor ve Event verilerini taşıyan paketler alınır ve robot Device nesnesine işlenir.
- Kod gerçek zamanlı olarak yorumlanır; Effector ve Command nesnelerine veri yazılır ya da Sensor ve Event nesnelerinin değerleri okunur.
- Robot Device nesnesinin verilerini taşıyan bir paket oluşturulup Web Serial iletişimiyle robota gönderilir ve robotun gerçekten çalışıp çalışmadığı görülür.
- Kod çalıştığı sürece 3 ile 5 arasındaki adımlar yaklaşık 10 ile 20 ms'de bir yinelenir.
Blok ↔ Python gerçek zamanlı çift yönlü dönüşüm
RobomationLAB blok kodlama düzenleyicisiyle Python kodlama düzenleyicisini birlikte sunar ve iki düzenleyici gerçek zamanlı olarak çift yönlü eşitlenir.
- Blok kodlama düzenleyicisinde blok eklediğinizde, değiştirdiğinizde ya da sildiğinizde bu değişiklik anında Python koduna yansır.
- Tersine, Python kodlama düzenleyicisinde kodu değiştirdiğinizde bu değişiklik anında bloklara yansır.
Bloklarla Python kodu bire bir karşılık gelip çift yönlü dönüştüğü için,
yapıyı bloklarla hızlıca kurup ayrıntıları Python'da inceltmek ya da bloklarla karşılaştırarak Python sözdizimini öğrenmek gibi
blok kodlamayla betik kodlama arasında gidip gelen bütünleşik bir çalışma yapabilirsiniz.
Ancak Python → blok dönüşümü yalnızca bloklarla anlatılabilen kod için gerçekleşir.
(Sözdizimi hatalıysa ya da bloklara dönüştürülemeyen bir kodsa geçiş yapılamayabilir.
Ayrıntılar için Kodlama kuralları belgesine bakın.)
RobomationLAB robot programlama yöntemi
Sıralı çalışma ve paralel çalışma
Robot programlamanın iki yolu vardır: sıralı çalışma ve paralel çalışma.
Sıralı çalışmada bir işlem bittikten sonra bir sonraki işlem yapılır; basit davranışları kodlamak için uygundur.
Örneğin robotu ileri gönderip sonra durdurup LED'i yakmak isterseniz, her işleme karşılık gelen kodu sırayla dizip zaman içinde çalıştırabilmeniz, yani sıralı çalışma gerekir.
Paralel çalışmada birden çok işlem aynı anda yapılır; daha karmaşık ve gelişmiş davranışları programlamak için gereklidir.
Örneğin iki ayaklı bir robotun yürümesini gerçekleştirmek isterseniz, robotun ayaklarını ve bacaklarını aynı anda hareket ettirmeniz gerektiğinden paralel çalışan kod yazabilmeniz gerekir.
RobomationLAB'in sunduğu robot kodlama programları,
Arduino'nun donanım geliştirme ortamına benzeyen setup / loop yapısı üzerine kurulmuştur ve sıralı çalışmayla paralel çalışmayı birlikte destekler.

Block Composer'a ilk girdiğinizde çalışma alanında iki boş fonksiyon bloğu görünür;
'setup fonksiyonu' bloğu setup fonksiyonunu, 'loop fonksiyonu' bloğu loop fonksiyonunu gösterir.
Bloklar gerçek zamanlı olarak Python koduna dönüşür
ve kod şu temel yapıya sahiptir.
# Python kodunun temel yapısı
from robomation import *
# bir kez çalıştırılacak başlangıç kodunu buraya yazın:
def setup():
pass
# tekrar tekrar çalıştırılacak kontrol kodunu buraya yazın:
def loop():
passRobotu denetlemek için kodun en üstüne
from robomation import *satırını koyun ve kullanacağınız robotu örnek olarak bildirin. (örneğinhamster_s = HamsterS(0))
setup fonksiyonu
setup fonksiyonu 'kodu çalıştır' dediğiniz anda yalnızca bir kez çalışır.
setup fonksiyonunda genellikle değişkenlere başlangıç değeri veren ya da robotun modunu ve seçeneklerini ayarlayan kod yazılır.
Örneğin tekerlekle hareket eden bir robotu denetlerken setup fonksiyonunda tekerleklerin başlangıç hızını ayarlayabilirsiniz.
Fonksiyon içinde zaman gecikmesi gerekiyorsa Utils.wait(...) fonksiyonuyla, eşzamanlı çalışıyormuş gibi zaman sırasına göre ilerleyen kod yazabilirsiniz.Utils.wait(...) belirttiğiniz süre (saniye) kadar bekledikten sonra sonraki kodu çalıştırır; yani belirlenen süre ya da işlem bittikten sonra uyanıp kodu kaldığı yerden sürdürür.
Bu özelliği kullandığınızda yalnızca basit sıralı çalışma değil, paralel çalışan loop fonksiyonuyla birleştirerek güçlü robot programlaması da yapabilirsiniz.
Aşağıda HamsterS robotunun 1 saniye ileri, ardından 1 saniye geri gittiği bir kod örneği vardır.
Bu işlemi paralel çalışan loop fonksiyonu içinde gerçekleştirmek isterseniz, zaman hesabıyla denetim kodu karışır ve kod çok karmaşıklaşır.
Bunun yerine setup fonksiyonu içinde Utils.wait gecikme fonksiyonunu kullanarak eşzamanlı çalışıyormuş gibi zaman sırasına göre ilerleyen kod yazabilirsiniz.
( Utils.wait fonksiyonu daha sonra Yardımcı fonksiyonlar (Utils) bölümünde yeniden anlatılır. )
Örnek kod (Python)
from robomation import *
hamster_s = HamsterS(0)
# bir kez çalıştırılacak başlangıç kodunu buraya yazın:
def setup():
# İki tekerleğin hızını 50 yaparak ileri git
hamster_s.set_wheel_speed('both', 50)
Utils.wait(1) # 1 saniye bekle
# İki tekerleğin hızını -50 yaparak geri git
hamster_s.set_wheel_speed('both', -50)
Utils.wait(1) # 1 saniye bekle
hamster_s.stop()
# tekrar tekrar çalıştırılacak kontrol kodunu buraya yazın:
def loop():
pass( Robot örneği ve yöntem sözdizimi daha sonra RobomationLAB robot kodlamasının temel sözdizimi bölümünde yeniden anlatılır. )
loop fonksiyonu
loop fonksiyonu paralel çalışmayı destekler ve kod çalıştığı sürece yaklaşık 10 ms'de bir yinelenir.
loop fonksiyonunda genellikle değişken değerlerini sürekli ayarlayan ya da robotun belirli olaylarını algılayıp işleyen kod yazılır.
Aşağıda zamanla HamsterS robotunun tekerlek hızının ve LED renginin değiştiği bir kod örneği vardır.
( setup / loop fonksiyonlarının dışında bildirilen bir değişkeni fonksiyon içinde değiştirirken global anahtar sözcüğüyle bildirin. )
from robomation import *
hamster_s = HamsterS(0)
frame = 0
# bir kez çalıştırılacak başlangıç kodunu buraya yazın:
def setup():
global frame
frame = 0
# tekrar tekrar çalıştırılacak kontrol kodunu buraya yazın:
def loop():
global frame
frame += 1 # loop fonksiyonu her çağrıldığında frame değişkeninin değeri 1 artar
# Değişen frame değeriyle iki tekerleğin hızını ve iki LED'in RGB değerlerini ayarla
hamster_s.set_wheel_speed('both', frame % 100)
hamster_s.set_led_color('left', frame % 256, 0, 0)
hamster_s.set_led_color('right', 0, 0, frame % 256)( Robot örneği ve yöntem sözdizimi daha sonra RobomationLAB robot kodlamasının temel sözdizimi bölümünde yeniden anlatılır. )
Aşağıda HamsterS robotunun gövdesine hafifçe vurulduğunda (Tap) LED'i kırmızı yakan bir kod örneği vardır.
from robomation import *
hamster_s = HamsterS(0)
# bir kez çalıştırılacak başlangıç kodunu buraya yazın:
def setup():
pass
# tekrar tekrar çalıştırılacak kontrol kodunu buraya yazın:
def loop():
# Tap işlemi gerçekleştiği anda olayı algıla
if hamster_s.tap(): # Olay algılandığında True
hamster_s.set_led_color('both', 'red') # İki LED'i kırmızı yak
else:
hamster_s.turn_off('both') # İki LED'i söndür( Olay algılama (tap()) gibi sözdizimi konuları daha sonra RobomationLAB robot kodlamasının temel sözdizimi bölümünde yeniden anlatılır. )
RobomationLAB robot kodlamasının temel sözdizimi
RobomationLAB'in robot kodlama programlarında kod yazarken uyulması gereken temel sözdizimi şudur.
Robot denetimi robomation Python paketiyle yapılır;
robot bir örnek olarak oluşturulduktan sonra o örneğin yöntemleri çağrılarak kod yazılır.
robomation paketini içe aktarma
Robot denetimi için gereken sınıfları (robotları) ve yardımcıları (Utils) kullanmak için kodun en üstüne şu satırı ekleyin.
from robomation import *Robot örneği oluşturma
Kullanacağınız robotu örnek olarak bildirin.
Sınıfın adı robotun türünü, parantez içindeki sayı ise örnek numarasını (0'dan başlar) gösterir.
hamster_s = HamsterS(0) # 1 adet Hamster SRobotlara göre sınıf adları ve varsayılan değişken adları şunlardır.
| Robot | Sınıf adı | Varsayılan değişken adı |
|---|---|---|
| Hamster S | HamsterS | hamster_s |
| Hamster | Hamster | hamster |
| Pio | Pio | pio |
| Turtle | Turtle | turtle |
| Beagle | Beagle | beagle |
| RaccoonBot | RaccoonBot | raccoon |
| CheeseStick | CheeseStick | cheesestick |
Aynı türden birden çok robot kullanacaksanız numarayı 0, 1, 2 … diye artırarak bildirin.
hamster_s = HamsterS(0)
hamster_s_1 = HamsterS(1)Robot denetim yöntemleri
Robotu denetlerken örneğin yöntemleri çağrılır.
Yöntemler tekerlek hızı ayarlama, hareket, LED, ses gibi robot işlemlerini yapar.
hamster_s.set_wheel_speed('both', 50) # İki tekerleğin hızını ayarla
hamster_s.move_distance(10, 'cm') # 10 cm ileri git
hamster_s.set_led_color('both', 'red') # İki LED'i kırmızı yapHer robotta kullanılabilen yöntemlerin listesi ve parametreleri için ilgili robot belgesine ('Hamster-S' gibi) bakın.
Sensör ve durum okuma
Sensör değerlerini ya da robotun durumunu okurken de yöntem çağrılır ve yöntem o değeri döndürür.
left = hamster_s.floor('left') # Sol zemin sensörünün değerini oku
dist = hamster_s.proximity('right') # Sağ yakınlık sensörünün değerini okuOlay algılama
Durum ya da çevre değişikliğinden doğan olaylar, ilgili olay yönteminin
olay gerçekleştiği anda True döndürmesiyle algılanır.
if hamster_s.tap(): # Vurma (Tap) olayı gerçekleştiği anda True
hamster_s.set_led_color('both', 'red')İşlemin bitmesini bekleme (wait)
Hareket, dönme, ses çalma gibi bitmesi zaman alan yöntemlerin wait parametresi vardır.
wait=True(varsayılan): işlem bitene kadar bekleyip sonraki kodu çalıştırır.wait=False: işlemi başlatıp hemen sonraki kodla sürdürür.
hamster_s.move_distance(10, 'cm', wait=True) # Hareket bitene kadar bekler
hamster_s.move_distance(10, 'cm', wait=False) # Hareketi başlatıp hemen sonraki kodu çalıştırırYardımcı fonksiyonlar (Utils)
Zaman gecikmesi, ses çalma, günlük yazdırma, renk gibi robot türünden bağımsız ortak işlevler Utils sınıfının yöntemleriyle kullanılır.
Utils.wait(1) # 1 saniye bekle
Utils.speak('Merhaba') # Metni sese dönüştürerek (TTS) çal
Utils.log(0, '', '') # Konsola günlük yazdır