c_… / py_… klasörlerine iner.| Fonksiyon | Açıklama |
|---|---|
sim_connect() |
Simülasyona Bağlan |
sim_disconnect() |
Simülasyon Bağlantısını Kes |
drive(int yon) |
Aracı Sür |
steer(int aci) |
Direksiyon Kontrolü |
int d = lidar_read(int aci) |
Lidar Sensörü Oku |
int v = drive_read() |
Sürüş Durumu Oku |
int s = steer_read() |
Direksiyon Açısı Oku |
int c = collision_read() |
Çarpışma Sensörü Oku |
C, C++ ve Python gibi programlama dillerinin başlangıç eğitimi genellikle konsol uygulamaları üzerinden anlatılmaktadır. Dolayısıyla, geliştirilen kodun çıktıları konsol üzerinden gösterilmektedir. Bu durum öğrencinin program akışını hayal edememe ve davranışını tam olarak anlayamamasına neden olur.
Bu simülasyonun amacı öğrencinin geliştirdiği kodun nasıl çalıştığını simüle edebileceği bir ortam sağlamaktır. Gerçekçiliği arttırmak için lidar sensörleri, sürüş motoru, direksiyon ve çarpışma sensörü ayrı ayrı kontrol edilebilir ve her sensörün çıkış değeri okunabilir.
UDUSimp programını indirip kurduktan sonra istediğiniz simülasyonu çalıştırıp tercih ettiğiniz bir editörü kullanarak kod geliştirmeye başlayabilirsiniz. Tavsiye edilen editör: Visual Studio Code.
Otonom sürüş simülasyonunun zorluk derecesi 10 üzerinde 9 olarak değerlendirilmiştir.
1 – Özellikler
• İleri / Geri / Dur sürüş motoru
• Açıya bağlı direksiyon kontrolü (−60° / +60°)
• 360° Lidar mesafe sensörü *
• Çarpışma sensörü *
• Sürüş durumu göstergesi *
• Direksiyon açısı göstergesi *
2 – Görev ve Tanım
Günlük hayatta kullanılan otonom araçları ve çalışma mantığını inceleyin. Aracın sensörlerden gelen verileri kullanarak engellerden kaçınması, parkurda ilerlemesi ve hedefe ulaşması için gereken kodu geliştirin.
Örnek senaryolar:
1- Önündeki engel 50 birimden yakına gelirse aracı durdurması
2- Sağ tarafta boşluk varsa sağa dönmesi, yoksa sola dönmesi
3- Çarpışma anında motoru durdurup operatöre haber vermesi
Gerekir.
Not: Lidar verileri simülasyonun her adımında (yaklaşık 30 ms) güncellenir; karar mantığını her döngüde yeniden okuma yaparak kurun. Tek seferlik okuma ile hareket kararı vermek hatalı sonuçlara yol açabilir.
sim_connect()Simülasyon ile kod ortamı arasında bağlantı kurar.
#include "otonom.h"
int main() {
sim_connect();
return 0;
}
from otonom import * sim_connect()
sim_disconnect()Simülasyon ile kod ortamı arasındaki bağlantıyı sonlandırır.
#include "otonom.h"
int main() {
sim_connect();
sim_disconnect();
return 0;
}
from otonom import * sim_connect() sim_disconnect()
drive(int yon)Aracın motorunu çalıştırır.
1. parametre:
DRIVE_FORWARD (1) = İleri
DRIVE_BACKWARD (-1) = Geri
DRIVE_STOP (0) = Dur
Örnek:
drive(DRIVE_FORWARD) → araç ileri gider
drive(DRIVE_BACKWARD) → araç geri gider
drive(DRIVE_STOP) → araç durur
#include "otonom.h"
int main() {
sim_connect();
drive(DRIVE_FORWARD); // ileri
drive(DRIVE_BACKWARD); // geri
drive(DRIVE_STOP); // dur
return 0;
}
from otonom import * sim_connect() drive(DRIVE_FORWARD) # ileri drive(DRIVE_BACKWARD) # geri drive(DRIVE_STOP) # dur
steer(int aci)Aracın direksiyonunu istenen açıya çevirir.
1. parametre: derece cinsinden açı
0 = düz git
+x = sola dön (örn: 48 = 48° sola)
-x = sağa dön (örn: -30 = 30° sağa)
Örnek:
steer(0) → düz
steer(48) → 48° sola
steer(-30) → 30° sağa
Açı -60 ile +60 arasında sınırlanır (daha büyük değerler 60 kabul edilir).
#include "otonom.h"
int main() {
sim_connect();
steer(0); // duz
steer(48); // sola
steer(-30); // saga
return 0;
}
from otonom import * sim_connect() steer(0) # duz steer(48) # sola steer(-30) # saga
int d = lidar_read(int aci)Belirtilen açıdaki lidar ışınının ölçtüğü mesafeyi okur.
1. parametre: açı (0-360 derece, araca göre, saat yönünün tersine)
0 = aracın sağı
90 = aracın önü
180 = aracın solu
270 = aracın arkası
Çözünürlük 2 derecedir (tek sayılı açı bir önceki çift açıyı okur).
Dönen değer: 1-100 arası mesafe, 0 = menzilde engel yok
Örnek:
lidar_read(90) → öndeki engelin mesafesi
lidar_read(0) → sağdaki engelin mesafesi
lidar_read(180) → soldaki engelin mesafesi
#include "otonom.h"
int main() {
sim_connect();
int d = lidar_read(90); // on
if(d > 0 && d < 50) // 0 = engel yok
drive(DRIVE_STOP); // engel yakin, dur
return 0;
}
from otonom import *
sim_connect()
d = lidar_read(90) # on
if 0 < d < 50: # 0 = engel yok
drive(DRIVE_STOP) # engel yakin, dur
int v = drive_read()Aracın anlık sürüş durumunu okur.
Dönen değer:
0 → araç duruyor
1 → ileri gidiyor
-1 → geri gidiyor
#include "otonom.h"
int main() {
sim_connect();
int v = drive_read();
if(v == 1)
printf("Arac ileri gidiyor");
return 0;
}
from otonom import *
sim_connect()
v = drive_read()
if v == 1:
print("Arac ileri gidiyor")
int s = steer_read()Direksiyonun anlık açısını okur (derece).
Dönen değer:
0 → düz
+x → sola dönük (örn: 48 = 48° sola)
-x → sağa dönük (örn: -30 = 30° sağa)
#include "otonom.h"
int main() {
sim_connect();
int s = steer_read();
if(s > 0)
printf("Direksiyon sola donuk");
return 0;
}
from otonom import *
sim_connect()
s = steer_read()
if s > 0:
print("Direksiyon sola donuk")
int c = collision_read()Aracın çarpışıp çarpışmadığını okur.
Dönen değer 1 → araç çarptı
Dönen değer 0 → çarpışma yok
#include "otonom.h"
int main() {
sim_connect();
int c = collision_read();
if(c == 1) {
drive(DRIVE_STOP);
printf("Carpisma! Dur.");
}
return 0;
}
from otonom import *
sim_connect()
c = collision_read()
if c == 1:
drive(DRIVE_STOP)
print("Carpisma! Dur.")