8 Kasım 2012 Perşembe

2 Eksen Uçak Simülatörünün Gerçeklenmesi


Bu çalışmada 2 eksen bir uçak simülatörü geliştirilmiş olup, Matlab mühendislik programı kullanılarak uçak simülatörünün kullanıcı arayüzü geliştirilmiştir. Joystick ile alınan veriler Matlab ile işlendikten sonra RS232 haberleşme protokolü üzerinden 2 eksenli servo motor mekanizmasına uygun verileri gönderilmektedir. Bu çalışmayla havacılık  sanayinde kullanalıbilecek olan eğitim simülatörü ve savunma sektöründe kullanılabilecek olan insansız hava aracı  kullanıcı kontrol arayüzü  uygulamalarının temeli  oluşturulmuştur.
GİRİŞ
Uçak simülatörü kullanıcı kontrol arayüzünde eş yükselti bilgileri haritası olarak bilinen dted dosyalarının grafik gösterimi,kamera ile 2 eksen servo mekanizmanın hareketlerinin gösterilmesi,uçağın rotasının grafik gösterimi,kayan harita uygulaması,konum bilgisinin gösterildiği  navigasyon ekranı, roll-pitch (sağ-sol hareketi) ve altitude-barometer (yükseklik basınç değeri)  değişimlerini gösteren activex kontroller   yer almaktadır. Otopilot uygulaması ile başlangıç koordinatları ile gidilmesi istenen koordinatlar  arasında otonom uçuş yapılabilmektedir. Böylece geliştirilmiş olan uçak simülatörü uygulamasına  otopilot yazılımının geliştirilmesi ile insansız araçlarda kullanılacak seviyeye gelmiş olacaktır. Joystickten alınan veriler Matlab uçak simülatörü  arayüzü ile işlendikten hangi motorun hangi hareketi yapacağı RS232 protokolü üzerinden arduino Uno R3 mikrokontrolör kitine aktarılmıştır. Arduino da  gelen veriye göre 2 eksen servo mekanizmanın hareketi sağlamıştır.
UÇAK SİMÜLATÖRÜNÜN BİRİMLERİNİN İNCELENMESİ
Uçak Simülatörü yazılımının dted dosyalarını okuyabilmesi, activex kontrollerini gerçekleyebilmesi ,joystickten gelen verilerin kolay bir şekilde okuyabilmesi , arduino Uno R3 kiti ile RS232 üzerinden haberleşmesini sağlanması ,ileriye dönük gerçek zamanlı ortam görselleştirilmeleri için Matlab programı GUİ (Kullanıcı Grafik Arayüzü) arayüzü seçilmiştir. Uçak Simülatörüne ait genel blok diyagramı Şekil-1 de yer almaktadır. Sistemin blok şemasına ait bir tam döngü 1.7 saniyede bir tekrarlanmaktadır.
 Şekil 1: Simülatör Genel Blok Diyagramı
     Gerçek bir uçak 3 eksende hareket hareket yapmaktadır. Gerçeklenen 2 eksen uçak simülatörü ise  roll ve pitch hareketlerini gerçekleştirmektedir.Gerçek bir uçağa ait 3 eksen hareketi Şekil 2 de verilmiştir.
Şekil 2:Gerçek bir uçağa ait eksenler ve hareketler
    ARDUİNO İLE SERVOMOTOR KONTROLÜ
    Bu bölümde arduino uno R3 kiti aracılığıyla RS232 üzerinde alınan verilere göre servo motor kontrolü yapılmıştır.Matlabta joystickten alınan verilerin RS232 üzerinden arduinoya gönderilmesi için yazılan matlab kodu aşağıdaki şekildedir:
Source code   
p = pov(joy, 1);
s = serial('COM9');
set(s,'BaudRate',9600,'DataBits', 8, 'Parity', 'none','StopBits', 1, 'FlowControl', 'none','Terminator','CR/LF');
fopen(s);
% if(axe(1)== -1)
if (p==90)
y=y+0.01;
d=d-1;
fprintf(s,'2');%sağ
fwrite(s,'2');
end
%  if(axe(1)== 1)
if (p==270)
y=y-0.01;
d=d+1;
fprintf(s,'1');%sol
fwrite(s,'1');
end%   if(axe(2)== -1)
if (p==0)
x=x-0.01;
e=e-1;
z=z-100;
fprintf(s,'3');%f%aşağıya
fwrite(s,'3');
end
%          if(axe(2)== 1)
if (p==180)
x=x+0.01;
e=e+1;
z=z+100;
fprintf(s,'4');%Y%yukarıya
fwrite(s,'4');
end
fclose(s);
delete(s);
clear s;
Arduino programı aşağıdaki şekildedir:
Source code   
#include <Servo.h> 
�
Servo servo1,servo2;char veri=0;int i,j;void setup (){
�
  Serial.begin (9600); 
�
  servo1.attach(10);
�
  servo2.attach(9);
�
  delay(10);
�
  servo1.write(90);
�
 servo2.write(90);}
�
 
�
 
�
void loop (){
�
 
�
  if (Serial.available() > 0) { 
�
    veri=Serial.read();
�
    Serial.println(veri);
�
    delay(200);
�
    if (veri=='g')
�
    {
�
   i=i-1;
�
 
�
    }
�
    else if (veri=='o'){
�
    i=i+1;
�
    }
�
     else if (veri=='f'){
�
    j=j-1;
�
    }
�
   else if (veri=='Y'){
�
    j=j+1;  
�
    }
�
    servo1.write (i);
�
    servo2.write (j);
�
  }}
�
 
KAYAN HARİTA UYGULAMASI
Kayan harita uygulaması uçağın konumu harita üzerinde belirtilmiş olup uçak haritanın tam ortasında yer almaktadır. Simülatörün çalışmaya başladığı andaki görüntüsü Şekil-3te gösterilmiştir.
Şekil 3: Kayan Harita Uygulaması

 Kayan harita uygualaması matlab kodları aşağıdaki şekildedir:
Source code   
i.html">i=0;x=40.07;y=26.25;z=0;d=0;e=0;
�
key='ABQIAAAAteHND9YP6ctZEpCJsGZpWxRQWo9-sWXbVvdU2wQSDpuKctuXhBQYpf8Mm2875572Jwd2ge0XshBKBg';
�
 
�
 
�
x_map=num2str(x);
�
y_map=num2str(y);
�
address=strcat('http://maps.google.com/staticmap?center=',x_map, ',',y_map, '&zoom=10&size=512x512&key=',key);
�
 
�
 
�
 
�
[i.html">I map]=imread(address,'gif');
�
RGB=ind2rgb(i.html">I,map);
�
eksen6=handles.axes6;
�
 axes(eksen6);
�
imshow(RGB);
�
 
    KOKPİT GÖSTERGELERİ
   
Kokpit göstergeleri  manuel olarak sliderlardan değiştirilebileceği gibi “Simülasyonu  Başlat” butonu tıklandığı zaman joystickten gelen verilere göre roll-pitch ve altitude-barometer activex (farklı yazılım geliştirme ortamlarında gerçeklenmiş modüller)  kontrollerinden gerçek zamanlı olarak hareketler gözlemlenmektedir.

Suni ufuk göstergesi uçağın roll – pitch hareketlerini göstermek için kullanılmaktadır. Gerçek bir uçakta suni ufuk göstergesi gyrodan (ivmeölçer) alınan verilere göre işlem görmektedir. Suni ufuk göstergesindeki mavi renk gökyüzünü,kahverengi renk ise yeryüzünü temsil etmekte olup birleşme noktası ise ufuk çizgisi belirtmektedir.

Altimetre göstergesi uçağın denizden feet cinsinden yüksekliğini göstermek için kullanılmaktadır. Statik basınç ile çalışmaktadır. Kullanılan aktivex ile hem yükseklik (altitude) hem de basınç değerleri yer almaktadır. Kadranlı göstergede basınç gösterilmiş olup, tek kol ise yüksekliği göstermiştir. Kalkış yapılan veya inilecek yerin barometrik basıncı ayarlanarak doğru yükselti bilgisi elde edilir. Basınç ve yükselti değerleri ters orantılı bir şekilde değişmektedir.

Bu özellikler dikkate alınarak suni ufuk göstergesi ve altimetre göstergesi Şekil-4’teki gibi tasarlanmıştır.
Şekil 4: Kokpit Göstergeleri

Kokpit göstergelerine ait matlab kodu aşağıdaki şekildedir:
Source code   
set(handles.slider1,'Value',d);
�
handles.activex8.ahroll=get(handles.slider1,'Value');
�
% guidata(hObject, handles.activex8);set(handles.slider2,'Value',e);
�
handles.activex8.ahpitch=get(handles.slider2,'Value');
�
% guidata(hObject, handles.activex8);
�
 
�
set(handles.slider3,'Value',z);
�
handles.activex9.altitude=get(handles.slider3,'Value');
�
% guidata(hObject, handles.activex9);
�
f=9000-z;
�
set(handles.slider4,'Value',f);
�
handles.activex9.altbarometer=get(handles.slider4,'Value');
�
guidata(hObject, handles.activex8);
�
guidata(hObject, handles.activex9);
�
 
     DTED GRAFİK GÖSTERİMİ
Eş yükselti eğrileri kullanılarak bir bölgenin yükseklik

profilinin oluşturulmasıyla uçakların bulunduğu konuma göre çevre koşullarının ve hareket şekillerinin belirlenmesi amaçlanmaktadır.Bu çalışmada  uçuş Çanakkale ilinden başlatıldığı için Çanakkale iline ait olan dt0 eş yükseklik eğrisi grafiksel olarak Şekil-5 de gösterilmiştir.
Şekil 5: Simülatörde dted dosyasını gösterilmesi

    Dted dosyalarının okunmasına ait matlab kodu aşağıdaki şekildedir:
Source code   
dted_dosya=imgetfile;
�
dted_form = dted(dted_dosya);
�
eksen1=handles.axes1;
�
axes(eksen1);
�
surf(dted_form);
�
eksen2=handles.axes2;
�
axes(eksen2);
�
contour(dted_form);
    NAVİGASYON BÖLÜMÜ
   
Navigasyon, bir noktadan başka bir noktaya gitmek için elverişli yolu tayin etme ,anlık bulunulan noktayı enlem ve boylam cinsinden göstermektir.

Kayan harita uygulamasındaki konum ve yükseklik

bilgisi  kullanıldığından bu bölüm navigasyon bölümü olarak  isimlendirilmiştir. Şekil 6 da navigasyon bölümünün bir görüntüsü yer almaktadır.
Şekil 6:Navigasyon Bölümü

Navigasyon bölümüne ait matlab kodu aşağıdaki şekildedir:
Source code   
set(handles.edit1,'String',x);
�
set(handles.edit2,'String',y);
�
set(handles.edit5,'String',z);
    ROTA BÖLÜMÜ
Joystickten alınan verilere göre uçağın konum ve yükseklik bilgisinin 3 boyutlu bir şekilde gösterilmesiyle oluşan grafiksel bölümdür. Uçağın yükseklik bilgisi uçağın hareketinden alınırken, konum bilgisi kayan harita uygulamasından alınmıştır. Şekil 7 de rota bölümü gösterilmiştir.
Şekil 7:Rota Bölümü

Rota bölümüne ait matlab kodu aşağıdaki şekildedir:
Source code   
joy = vrjoystick(1,'forcefeedback');
�
 
�
while(1)i.html">i=i.html">i+1;
�
 a(i.html">i)=x;
�
 b(i.html">i)=y;
�
 c(i.html">i)=z;
�
 eksen3=handles.axes3;
�
 axes(eksen3);
�
 plot3(a,b,c,'--');
�
%  [axe, buttons, povs] = read(joy);% if(buttons(1)==1)%    z=z+1; %    % end% if(buttons(3)==1)%    z=z-1; % end
�
p = pov(joy, 1);   
�
% if(axe(1)== -1)if (p==90)
�
   y=y+0.01; 
�
   
�
end%  if(axe(1)== 1)if (p==270)
�
   y=y-0.01; 
�
 end
�
 
�
%   if(axe(2)== -1)if (p==0)
�
   x=x-0.01; 
�
   
�
  end  
�
%          if(axe(2)== 1)if (p==180)
�
   x=x+0.01; 
�
endend

Uçak simülatörünün çalıştırılması ile elde edilen görüntü Şekil 8’deki  gibidir:
Şekil 8:Uçak Simülatörü Kullanıcı Arayüzü Görüntüsü

    Bu çalışmaya ait tüm dosyalar aşağıdaki linkten indirilebilir:ucak_simulatoru

    SONUÇLAR

Bu çalışma temel seviye bir uçak simülatörü için gerekli olan gerçek zamanlı kokpit uygulaması, rota gösterimi, kayan harita uygulaması, otopilot uygulaması, dted dosyalarının okunması, uçağın hangi konumda olduğunu belirten navigasyon ekranları  yer almaktadır. Geliştirilmiş olan uçak simülatörüne havanın durumu ve uçağın özelliklerinin simülasyona yansıtılmasıyla ve uçuş koşullarının Flightgear gibi bir alternatif program ile görselleştirilmesiyle ve sesli komutların pilota iletilmesiyle gerçek uçuş koşulları sağlanmış olacaktır. Otopilot  yazılımının geliştirilmesi ile insansız hava araçlarına adapte edilebilecek bir sistem mümkün olacaktır. Dted grafik gösterimi geliştirilerek uçağın konum ve yüksekliğine bağlı olarak sesli mesajlar ile “yüksel” ,”alçal” gibi uyarılar üretilebilir. Uçak–dış tehdit ilişkisi kullanılarak senaryo üretimi ve simülasyonu gerçeklenebilir.                  

Hiç yorum yok: