WebotsDönem projesi
Görsel kılavuzlu robot kol
Kamerayla masadaki renkli küpleri bulan, ters kinematikle uzanıp kavrayan ve renklerine göre kutulara ayıran bir kol.
Senaryo
Kol masanın üstündeki kameradan üç renkte küp görür, her küpün konumunu piksel → dünya dönüşümüyle hesaplar, ters kinematikle küpün üstüne iner, kavrar ve rengine uygun kutuya bırakır. Görev akışı: TARA, SEC, YAKLAS, KAVRA, TASI, BIRAK.
Kabul ölçütleri
- 10 küpten en az 9'u doğru kutuya bırakılıyor.
- Kavrama konum hatası 1 cm'den küçük (homografi + IK).
- Erişilemeyen bir hedef verildiğinde kol çarpmadan "erişilemez" durumuna geçiyor.
- Bir küp düşerse kol yeniden TARA durumuna dönüyor.
Simülasyonu kurmak
- Webots R2025a kur; File → Open Sample World → robots/abb/irb/inverse_kinematics.wbt örneğini incele (ikpy ile ters kinematik).
- Python ortamına ikpy, numpy ve opencv-python kur.
- Dünyaya masa, üç renkte küp, üç kutu ve tepeden bakan bir kamera ekle; kola bir kavrayıcı (gripper) ekle.
- Kamerayı kalibre et: masanın dört köşesinin piksel ve dünya koordinatından bir homografi hesapla.
- Görev mantığını durum makinesi, yörüngeyi ayrı bir modül olarak yaz; IK ve homografi için birim testler.
Başlangıç kodu
# Webots denetleyicisi: kolun URDF'inden ikpy zinciri kur, hedef noktaya ters kinematikle uzan.
import tempfile
import ikpy.chain
from controller import Supervisor
robot = Supervisor()
step = int(robot.getBasicTimeStep())
with tempfile.NamedTemporaryFile(suffix=".urdf", delete=False) as f:
f.write(robot.getUrdf().encode("utf-8"))
chain = ikpy.chain.Chain.from_urdf_file(f.name, active_links_mask=[False, True, True, True, True, True, True, False])
motors = []
for link in chain.links:
if "motor" in link.name.lower() or "joint" in link.name.lower():
m = robot.getDevice(link.name)
if m:
m.getPositionSensor().enable(step)
motors.append(m)
def reach(x, y, z):
q0 = [0] + [m.getPositionSensor().getValue() for m in motors] + [0]
q = chain.inverse_kinematics([x, y, z], initial_position=q0)
for i, m in enumerate(motors):
m.setPosition(q[i + 1])
while robot.step(step) != -1:
reach(0.6, 0.2, 0.4) # TODO: homografiden gelen küp konumuAra teslimler
- 8. haftaÖneri ve gereksinimler
İki sayfalık öneri: test edilebilir kabul ölçütleri, ilk mimari (durum makinesi ya da ROS 2 grafiği), risk listesi, haftalık plan. Depo açıldı, CI ilk testi çalıştırıyor.
Ara sınav - 9. haftaKol hareket ediyor
Eklem açılarıyla kolu sür; ileri kinematiği Webots konumuyla karşılaştır.
Yol planlama ve konum belirleme - 10. haftaKüp tespiti ve homografi
Renk ayırma + homografiyle küplerin dünya konumu; hata tablosu.
Robotlar için bilgisayarlı görü - 11. haftaAra kontrol: al-bırak
Tek bir küp için tam al-bırak döngüsü; IK birim testleri.
Robotlarda derin öğrenme ve uçta yapay zekâ - 12. haftaMimari ve hata durumları
Durum makinesi, erişilemez hedef ve düşen küp durumları; ROS 2 ya da modül mimarisi.
ROS 2 ve simülasyon - 13. haftaBütünleştirme ve ölçüm
10 küplük otomatik deneme; başarı oranı ve konum hatası grafiği.
Hava robotları: uçuş denetimi, otonomi ve sürüler - 14. haftaSunum ve rapor
10 dakikalık sunum, canlı ya da kayıtlı simülasyon, kabul ölçütlerinin her biri için kanıt (grafik, kayıt, test), final raporu ve depo.
Proje sunumları