Robotik Simülasyon Araçları
Devre yakmadan, robot düşürmeden, bir kuruş harcamadan deneyin. Tinkercad ile tarayıcıda Arduino devreleri kurun; Gazebo, CoppeliaSim ve Webots ile fizik motoru olan 3D dünyalarda robotlarınızı test edin. Her araç için kurulum, ilk deneme kodu ve uygulama görevleri bu sayfada.
Hangisinden başlamalı?
Deneyiminize göre önerilen sıra:
Neden Simülasyon?Sanal ortamda test etmenin beş nedeni
Robotik projelerde bir hatanın bedeli yanan bir LED olabileceği gibi masadan düşen bir robot kolu da olabilir. Simülasyon, kodunuzu ve tasarımınızı gerçek donanıma dokunmadan denemenizi sağlar. NASA'dan otonom araç şirketlerine kadar profesyoneller de bir algoritmayı gerçek robota yüklemeden önce binlerce kez simülasyonda çalıştırır.
Dört aracın karşılaştırması
| Özellik | Tinkercad Circuits | Webots | CoppeliaSim | Gazebo |
|---|---|---|---|---|
| Ne simüle eder? | Elektronik devre ve Arduino / micro:bit kodu | 3D mobil robot, kol, araç, drone | 3D robot kolu, mobil robot, fabrika hücresi | 3D robot, sensör ve çoklu robot dünyaları |
| Çalıştığı yer | Tarayıcı | Windows, macOS, Linux | Windows, macOS, Linux | En iyi Ubuntu Linux |
| Programlama | Bloklar, Arduino C++ | Python, C, C++, Java, MATLAB | Lua, Python ve harici API | C++ eklentiler, ROS 2 (Python / C++) |
| Lisans | Ücretsiz hesap | Açık kaynak (Apache 2.0) | Eğitim için ücretsiz Edu sürümü | Açık kaynak (Apache 2.0) |
| Seviye | Başlangıç (8+ yaş) | Orta (lise, üniversite) | Orta–ileri | İleri (ROS bilgisi gerekir) |
| En güçlü yanı | Kurulumsuz, sınıf yönetimi | Hazır robot kütüphanesi, kolay başlangıç | Robot kolu, ters kinematik, hızlı prototip | ROS 2 ile tam entegrasyon, endüstri standardı |
Tinkercad CircuitsAutodesk · tarayıcıda devre ve Arduino simülasyonu
Tinkercad, Autodesk'in ücretsiz tarayıcı tabanlı tasarım platformudur. Circuits bölümünde sanal bir breadboard üzerine Arduino Uno, LED, direnç, sensör ve motorlar sürükleyip bırakarak devre kurabilir, yazdığınız kodu gerçek karttaymış gibi çalıştırabilirsiniz. Hiçbir şey kurmanıza gerek yoktur.
Neler yapılabilir?
- Arduino Uno ve micro:bit ile devre kurma
- Blok, blok + metin veya yalnızca Arduino C++ ile kodlama
- Seri Port Ekranı ve adım adım hata ayıklama
- Multimetre ve osiloskopla ölçüm yapma
- Öğretmen sınıfları ve öğrenci hesapları oluşturma
Sınırları
- Yalnızca hazır listedeki bileşenler kullanılabilir
- Harici kütüphane yükleme desteği çok sınırlıdır
- Raspberry Pi, ESP32 gibi kartlar yoktur
- Fiziksel hareket (robotun yürümesi) simüle edilmez
- Zamanlama gerçek karttan biraz farklı olabilir
İlk devrenizi 5 adımda kurun
Hesap açın
tinkercad.com adresinden ücretsiz kayıt olun. Öğretmenseniz sınıf oluşturup öğrencilerinizi e-posta gerektirmeyen bir sınıf koduyla ekleyebilirsiniz.
Yeni devre oluşturun
Panelde Oluştur › Devre seçeneğine tıklayın. Sağdaki bileşenler panelinden "Arduino Uno R3" ve bir "Breadboard" sürükleyin.
Bileşenleri bağlayın
Bileşenlerin bacaklarına tıklayıp sürükleyerek kablo çekin. Kabloya tıklayıp rengini değiştirin: kırmızı 5V, siyah GND. Direncin değerini üzerine tıklayıp ayarlayın.
Kodu yazın
Üstteki Kod düğmesine basın. Açılır menüden "Metin" seçip aşağıdaki kodu yapıştırın; ya da "Bloklar" ile sürükle-bırak programlayın.
Simülasyonu başlatın
Simülasyonu Başlat düğmesine basın. Seri Port Ekranı kod panelinin altındadır. Sensörlere tıklayınca çıkan kaydırıcıyla mesafe, ışık veya sıcaklığı değiştirebilirsiniz.
Örnek: Mesafeye göre renk değiştiren uyarı
Bileşenler: Arduino Uno, 4 pinli ultrasonik mesafe sensörü (HC-SR04), yeşil ve kırmızı LED, iki adet 220 Ω direnç. Bağlantı: Trig → D9, Echo → D10, yeşil LED → D5, kırmızı LED → D6. Simülasyon sırasında sensöre tıklayıp önündeki nesneyi sürükleyerek mesafeyi değiştirin.
// Tinkercad: HC-SR04 ile mesafe uyarısı
const int trigPin = 9;
const int echoPin = 10;
const int yesilLed = 5;
const int kirmiziLed = 6;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(yesilLed, OUTPUT);
pinMode(kirmiziLed, OUTPUT);
Serial.begin(9600);
}
long mesafeOlc() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
return pulseIn(echoPin, HIGH) * 0.034 / 2;
}
void loop() {
long cm = mesafeOlc();
Serial.print("Mesafe: ");
Serial.print(cm);
Serial.println(" cm");
bool yakin = cm < 50;
digitalWrite(kirmiziLed, yakin);
digitalWrite(yesilLed, !yakin);
delay(200);
}
Uygulama görevleri
Multimetreyle LED'in akımını ölçün. Direnci 220 Ω, 1 kΩ ve 10 kΩ yaparak akımın nasıl değiştiğini tabloya yazın.
Üç LED ile trafik lambası kurun ve kodlayın; ardından yaya butonu ekleyin.
TMP36 sıcaklık sensörü ve LCD ekranla sıcaklığı gösterin; 30 °C'nin üstünde buzzer çalsın.
Potansiyometreyle servo motoru kontrol edin; sonra PIR sensörüyle otomatik kapıya dönüştürün.
Öğretmen bilerek hatalı bir devre paylaşır; öğrenciler multimetreyle hatayı bulup düzeltir.
Tinkercad'de çalışan devreyi gerçek malzemelerle kurun ve sonuçları karşılaştırın.
GazeboAçık kaynak · ROS 2'nin varsayılan simülatörü
Gazebo, Open Robotics tarafından geliştirilen ve ROS (Robot Operating System) dünyasında standart kabul edilen açık kaynaklı 3D robot simülatörüdür. Fizik motoru, kamera, LiDAR, IMU ve GPS gibi sensör modelleri ve aynı dünyada birden çok robot çalıştırabilmesiyle araştırma ve endüstride yaygın olarak kullanılır.
gazebo komutu) içindir. Yeni Gazebo'da (eski adıyla Ignition) komut gz sim'dir. Güncel önerilen eşleşmeler: Ubuntu 24.04 + ROS 2 Jazzy + Gazebo Harmonic veya Ubuntu 26.04 + ROS 2 Lyrical + Gazebo Jetty. ROS 2 sürümünüzle eşleşmeyen bir Gazebo kurmak çoğu sorunun kaynağıdır.Temel kavramlar
| Kavram | Açıklama |
|---|---|
| Dünya (world) | Zemin, ışık, yerçekimi ve tüm nesneleri içeren sahne. .sdf uzantılı dosyada tanımlanır. |
| Model | Robot veya nesne. Bağlantılardan (link) ve eklemlerden (joint) oluşur. |
| SDF / URDF | Robotu tanımlayan XML dosya biçimleri. ROS tarafında genellikle URDF, Gazebo'da SDF kullanılır. |
| Eklenti (plugin) | Modele davranış ekleyen kod: diferansiyel sürüş, sensör, eklem kontrolü. |
| Konu (topic) | Gazebo ve ROS'ta programların mesajlaştığı adlandırılmış kanallar. |
| ros_gz_bridge | Gazebo konularını ROS 2 konularına bağlayan köprü programı. |
Kurulum ve ilk çalıştırma (Ubuntu 24.04 + ROS 2 Jazzy)
ROS 2 Jazzy'yi kurun
docs.ros.org adresindeki Jazzy kurulum rehberini izleyerek ros-jazzy-desktop paketini kurun.
Gazebo köprüsünü kurun
Aşağıdaki ilk komut, ROS 2 ile uyumlu Gazebo Harmonic sürümünü ve köprü paketlerini birlikte kurar.
Örnek dünyayı açın
gz sim diff_drive.sdfkomutu iki küçük araçlı bir dünya açar. Alt soldaki turuncu Oynat düğmesine basarak fiziği başlatın.Robotu hareket ettirin
Yeni bir terminalde mavi araca hız mesajı gönderin; araç dairesel bir yol çizmeye başlar.
# 1) ROS 2 Jazzy ile eşleşen Gazebo ve köprü paketleri
sudo apt install ros-jazzy-ros-gz
# 2) İki araçlı örnek dünyayı aç
gz sim diff_drive.sdf
# 3) (yeni terminal) Mavi araca ileri ve dönüş hızı gönder
gz topic -t "/model/vehicle_blue/cmd_vel" -m gz.msgs.Twist -p "linear: {x: 0.5}, angular: {z: 0.3}"
# Aracı durdurmak için
gz topic -t "/model/vehicle_blue/cmd_vel" -m gz.msgs.Twist -p "linear: {x: 0.0}, angular: {z: 0.0}"
ROS 2 düğümüyle robotu sürmek
Gerçek projelerde robotu terminal komutlarıyla değil, ROS 2 düğümleriyle (node) kontrol edersiniz. Önce köprüyü başlatın; ardından aşağıdaki Python düğümü mavi araca saniyede 10 kez hız komutu gönderir. Aynı düğüm, aynı konuyu dinleyen gerçek bir robotta da değişiklik yapmadan çalışır; simülasyonun asıl gücü budur.
# ROS 2 Twist mesajlarını Gazebo'ya aktaran köprü
source /opt/ros/jazzy/setup.bash
ros2 run ros_gz_bridge parameter_bridge /model/vehicle_blue/cmd_vel@geometry_msgs/msg/Twist]gz.msgs.Twist
# ROS 2 düğümü: aracı 5 saniye ileri sürüp döndürür
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
class Surucu(Node):
def __init__(self):
super().__init__("surucu")
self.yayinci = self.create_publisher(Twist, "/model/vehicle_blue/cmd_vel", 10)
self.sayac = 0
self.create_timer(0.1, self.gonder) # Saniyede 10 kez
def gonder(self):
mesaj = Twist()
if self.sayac < 50: # İlk 5 saniye: düz git
mesaj.linear.x = 0.5
else: # Sonra: yerinde dön
mesaj.angular.z = 0.8
self.yayinci.publish(mesaj)
self.sayac += 1
def main():
rclpy.init()
rclpy.spin(Surucu())
if __name__ == "__main__":
main()
Düğümü çalıştırmak için ROS ortamını yükledikten sonra python3 surucu.py yazmanız yeterli. Ayrı bir terminalde ros2 topic echo /model/vehicle_blue/cmd_vel ile gönderilen mesajları izleyebilirsiniz.
Uygulama görevleri
Gazebo arayüzünden kutu, küre ve silindir ekleyin; kütle ve sürtünme değerlerini değiştirip düşme davranışını gözlemleyin.
Python düğümünü, aracın 2 metrelik bir kare çizip başladığı yere döneceği şekilde düzenleyin.
Örnek SDF dosyasını kopyalayıp duvarlardan bir labirent ekleyin.
Araca LiDAR sensörü ekleyip ölçümleri köprüyle ROS 2'ye aktarın; engele yaklaşınca dönen bir düğüm yazın.
CoppeliaSimCoppelia Robotics · eski adıyla V-REP
CoppeliaSim, özellikle robot kolları ve endüstriyel otomasyon simülasyonunda güçlü olan, Windows, macOS ve Linux'ta çalışan bir robot simülatörüdür. İçinde ABB, KUKA ve UR gibi gerçek endüstriyel robotların modelleri, konveyörler, tutucular ve sensörler hazır gelir. Eğitim kurumları ve öğrenciler için CoppeliaSim Edu sürümü ücretsizdir.
Arayüzü tanıyın
Kurulum
coppeliarobotics.com adresinden işletim sisteminize uygun Edu sürümünü indirip kurun.
Model tarayıcısı
Sol taraftaki model tarayıcısında robots › mobile klasöründen "Pioneer p3dx" modelini sahneye sürükleyin.
Sahne hiyerarşisi
Hiyerarşi panelinde robotun altında sol ve sağ motor eklemlerini (leftMotor, rightMotor) ve ultrasonik sensörleri görün.
Simülasyonu başlatın
Üst menüdeki Oynat düğmesine basın. Pioneer modeli, içinde gelen hazır betikle engellerden kaçarak dolaşmaya başlar.
Harici Python programıyla kontrol
CoppeliaSim'i kendi Python programınızdan ZeroMQ tabanlı uzaktan API ile yönetebilirsiniz. Önce istemci kütüphanesini kurun, ardından CoppeliaSim açıkken sahneye bir Pioneer p3dx ekleyin ve aşağıdaki kodu çalıştırın. Modelin içindeki hazır betik kendi hız komutlarını gönderdiği için, denemeden önce robotun alt öğesi olan betiği silmeniz veya devre dışı bırakmanız gerekir.
pip install coppeliasim-zmqremoteapi-client
# CoppeliaSim: Pioneer p3dx robotunu Python'dan sürmek
import time
from coppeliasim_zmqremoteapi_client import RemoteAPIClient
client = RemoteAPIClient() # CoppeliaSim açık olmalı
sim = client.require("sim")
# Motor eklemlerine erişim (sahnedeki adlarla aynı olmalı)
sol = sim.getObject("/PioneerP3DX/leftMotor")
sag = sim.getObject("/PioneerP3DX/rightMotor")
def sur(sol_hiz, sag_hiz, sure):
sim.setJointTargetVelocity(sol, sol_hiz) # rad/s
sim.setJointTargetVelocity(sag, sag_hiz)
time.sleep(sure)
sim.startSimulation()
for _ in range(4): # Kare çiz
sur(2.0, 2.0, 3.0) # İleri
sur(1.0, -1.0, 1.6) # Yerinde dön
sur(0, 0, 0.5) # Dur
sim.stopSimulation()
print("Simulasyon tamamlandi.")
client.require("sim") yerine client.getObject("sim") kullanılır.Uygulama görevleri
Hazır bir robot kolu ve tutucu ekleyin; ters kinematik hedefini sürükleyerek bir küpü masanın bir ucundan diğerine taşıyın.
Konveyör bandı ve yakınlık sensörü kullanarak, sensör önüne gelen kutuyu durduran bir hat kurun.
Python örneğini kullanarak robotun başladığı noktaya en az hatayla dönmesini sağlayın.
Görme sensörüyle kutunun rengini algılayıp robot koluyla doğru kutuya ayıran bir fabrika hücresi tasarlayın.
WebotsCyberbotics · açık kaynak, başlangıca en uygun 3D simülatör
Webots, 1996'da İsviçre'deki EPFL'de araştırma aracı olarak doğan ve 2018'den beri açık kaynak olan bir robot simülatörüdür. Kurulumu kolaydır, Windows, macOS ve Linux'ta çalışır ve içinde e-puck, TurtleBot, NAO, Pioneer ve DJI Mavic gibi yüzlerce hazır robot modeli bulunur. Python ile robot programlamaya başlamak için en kolay 3D simülatörlerden biridir.
Öne çıkanlar
- Robot kontrolcüsü Python, C, C++, Java veya MATLAB ile yazılır
- Kendi içinde kod editörü; ayrı bir geliştirme ortamı gerekmez
- ROS 2 desteği (webots_ros2 paketi)
- Simülasyonu web'de paylaşma ve video kaydı
Temel yapı
- World (.wbt): sahne dosyası
- Scene tree: sahnedeki tüm nesnelerin ağacı
- Controller: robotu yöneten program
- Device: motor, sensör, kamera gibi robot parçaları
Kurulum ve ilk dünya
Webots'u kurun
cyberbotics.com adresinden kurulum dosyasını indirin. Linux'ta
sudo snap install webotskomutu da kullanılabilir. Python 3'ün bilgisayarınızda kurulu olduğundan emin olun.Hazır bir dünya açın
File › Open Sample World menüsünden robots › gctronic › e-puck klasöründeki e-puck dünyasını açın.
Yeni kontrolcü oluşturun
Wizards › New Robot Controller ile Python dilinde "engelden_kac" adlı bir kontrolcü oluşturun ve aşağıdaki kodu yapıştırın.
Robota atayın
Scene tree'de e-puck'ın controller alanına tıklayıp yeni kontrolcünüzü seçin. Kaydedip Oynat düğmesine basın.
Örnek: Engelden kaçan e-puck
e-puck robotunun gövdesinin çevresinde 8 adet kızılötesi mesafe sensörü (ps0–ps7) vardır. Ön sağdaki (ps0–ps2) veya ön soldaki (ps5–ps7) sensörler bir engel algıladığında robot ters yöne döner.
# Webots: e-puck ile engelden kaçma
from controller import Robot
MAKS_HIZ = 6.28 # e-puck motor hız sınırı (rad/s)
robot = Robot()
adim = int(robot.getBasicTimeStep())
# Mesafe sensörlerini etkinleştir
sensorler = []
for i in range(8):
s = robot.getDevice("ps" + str(i))
s.enable(adim)
sensorler.append(s)
# Motorları hız kontrol moduna al
sol_motor = robot.getDevice("left wheel motor")
sag_motor = robot.getDevice("right wheel motor")
sol_motor.setPosition(float("inf"))
sag_motor.setPosition(float("inf"))
while robot.step(adim) != -1:
d = [s.getValue() for s in sensorler]
sagda_engel = d[0] > 80 or d[1] > 80 or d[2] > 80
solda_engel = d[5] > 80 or d[6] > 80 or d[7] > 80
sol_hiz = 0.5 * MAKS_HIZ
sag_hiz = 0.5 * MAKS_HIZ
if solda_engel: # Sağa dön
sol_hiz = 0.5 * MAKS_HIZ
sag_hiz = -0.5 * MAKS_HIZ
elif sagda_engel: # Sola dön
sol_hiz = -0.5 * MAKS_HIZ
sag_hiz = 0.5 * MAKS_HIZ
sol_motor.setVelocity(sol_hiz)
sag_motor.setVelocity(sag_hiz)
| Kod satırı | Ne işe yarar? |
|---|---|
robot.getBasicTimeStep() | Dünyanın simülasyon adım süresini (ms) verir. Sensörler ve döngü bu adımla senkron çalışır. |
s.enable(adim) | Sensörü açar. Webots'ta sensörler varsayılan olarak kapalıdır ve değer üretmez. |
setPosition(float("inf")) | Motoru konum kontrolünden çıkarıp sürekli dönen hız kontrol moduna alır. |
robot.step(adim) != -1 | Simülasyonu bir adım ilerletir; simülasyon durdurulunca -1 döner ve döngü biter. |
d[0] > 80 | e-puck sensörlerinde değer engel yaklaştıkça büyür. 80, engel var kabul edilen eşik değeridir. |
Uygulama görevleri
80 eşik değerini 50 ve 150 yaparak robotun duvarlara ne kadar yaklaştığını karşılaştırın.
Robotun sol duvarı sabit mesafeden takip ederek odanın çevresini dolaşmasını sağlayın.
e-puck'ın zemin sensörleri eklentisiyle siyah bir pisti takip edin.
Sahneye 5 e-puck ekleyip birbirine çarpmadan aynı alanda dolaşmalarını sağlayın.
Sanaldan GerçeğeSimülasyonda çalıştı, gerçekte neden çalışmadı?
Simülasyonda kusursuz çalışan bir robotun gerçek dünyada beklenmedik davranması çok yaygındır. Mühendisler buna simülasyon-gerçeklik farkı (reality gap) der. Bu farkı tanımak, simülasyonu doğru kullanmanın en önemli parçasıdır.
| Fark | Simülasyonda | Gerçekte | Ne yapmalı? |
|---|---|---|---|
| Sensör gürültüsü | Değerler temiz ve kararlı | Ölçümler titrer, bazen hatalı gelir | Ortalama alın; simülasyona yapay gürültü ekleyin. |
| Sürtünme ve kayma | Tekerlekler idealdir | Zemine, lastiğe ve pile göre değişir | Süre yerine enkoder veya jiroskop kullanın. |
| Gecikme | Komut anında uygulanır | Haberleşme ve motor tepkisi gecikir | Yavaş hızlarla başlayıp kademeli artırın. |
| Güç | Pil hiç bitmez | Pil azaldıkça motorlar yavaşlar | Testleri dolu pille yapın, voltajı izleyin. |
| Ortam | Işık ve zemin sabit | Güneş ışığı ve zemin renkleri sensörü etkiler | Eşik değerlerini sahada yeniden ayarlayın. |
Gerçek robota geçmeden önce kontrol listesi
- Kod, simülasyonda farklı başlangıç konumlarında da çalışıyor mu?
- Sensör değerleri sabit sayılar yerine eşik değişkenleriyle mi kontrol ediliyor?
- Robotu her an durdurabileceğiniz bir "acil dur" yöntemi var mı?
- İlk denemeyi düşük hızda ve robot tekerlekleri havadayken yaptınız mı?
- Gerçek ölçümlerle simülasyon sonuçlarını karşılaştırmak için kayıt alıyor musunuz?

