Softivation

SITL'de drone hep Avustralya'da başlıyor

SITL'de drone hep Avustralya'da başlıyorsa simülatör konumu komut satırından ya da SIM_OPOS parametrelerinden alıyordur. Kendi sahanızda başlatmayı görün.

Furkan IŞIKAY 5 dk okuma

Simülasyonu açıyorsunuz, Mission Planner'ın haritasında tanımadığınız bir arazi var. Koordinatlara bakınca drone'un Avustralya'da, Canberra yakınında durduğunu görüyorsunuz. Rotayı kendi sahanız için çizdiyseniz bütün görev drone'dan binlerce kilometre uzakta kalıyor.

Sahadan bir örnek: takım yarışma parkurunu kendi sahasının koordinatlarıyla planlıyor ve önce SITL'de prova etmek istiyor. Görevi yüklemeden önce drone'un konumuna bakıyor: 37.1591, 38.7969 olması gereken nokta yerine -35.36, 149.17 yazıyor, yani saha ile drone arasında yaklaşık 13.900 kilometre var.

Drone neden Avustralya'da açılıyor

SITL'de GPS modülü yok. Otopilot konumunu simülatörden alır, simülatör de drone'u açılışta bir noktaya koymak zorundadır. Bu noktayı üç yerden okur. Hangisini kullandığı, programı nasıl başlattığınıza bağlı.

Şemada soldan sağa ilerleyin: başlatma biçimini bulun, ortadaki kutuda arducopter'in hangi bilgiyi okuduğunu görün, sağda drone'un nerede açıldığına bakın. Kırmızı kutuların ikisi de aynı yere çıkıyor.

SITL başlangıç konumunu nereden alır

SITL başlangıç konumunu nereden alır
Kırmızı kutulara düşen her yol drone'u Canberra'daki CMAC sahasında açar; senin sahan yalnız mavi kutulardan gelir.

Konum vermeden açarsanız simülatör SIM_OPOS_LAT, SIM_OPOS_LNG, SIM_OPOS_ALT ve SIM_OPOS_HDG parametrelerine bakar. Hiç değiştirmediyseniz bu dördü Canberra'daki CMAC sahasını gösterir: enlem -35.363261, boylam 149.165230, deniz seviyesinden 584 metre, burun 353 derece. -w seçeneği bu dört parametreyi siler, drone yine oraya döner.

--home ile dört sayı verirseniz simülatör onları sırayla enlem, boylam, deniz seviyesinden irtifa (metre) ve burun yönü (derece) olarak okur. Enlem ile boylamın ikisi de 0 olursa simülatör yine CMAC'ı seçer. 0,0 okyanusun ortasıdır.

Mission Planner'ın SIMULATION ekranı da aynı yolu kullanır: haritadaki H işaretinin konumunu, işaretin altındaki arazi yüksekliğini ve yön kutusunu arducopter'e -O seçeneğiyle verir. Flight Plan'da daha önce bir home konumu belirlemediyseniz H işareti CMAC'ta açılır. Aracı seçmeden önce işareti kendi sahanıza sürüklemezseniz drone orada başlar.

En sık hata: SIMULATION ekranında önce aracı seçip sonra H işaretini taşımak. Konum, araca tıkladığınız anda arducopter'e gider. İşareti sonradan sürüklemek çalışan simülasyonu yerinden oynatmaz.

Kendi sahanızda başlatın

Komut satırından açıyorsanız sahanızın dört değerini --home'a yazın. Aşağıdaki örnek drone'u 37.1591, 38.7969 noktasına, deniz seviyesinden 500 metreye ve burnu doğuya (90 derece) bakacak şekilde koyar:

Kabuk
./arducopter -S -I0 --model + --defaults copter.parm --home 37.1591,38.7969,500,90

sim_vehicle.py kullanıyorsanız aynı dört değeri -l seçeneğiyle verirsiniz. Mission Planner'da SIMULATION ekranını açın, H işaretini sahanıza sürükleyin, yön kutusuna burnun bakacağı açıyı girin, ancak ondan sonra aracı seçin.

Simülasyon açıldıktan sonra drone'un sahada olup olmadığını aşağıdaki Python koduyla kontrol edin. SAHA satırına kendi enlem ve boylamınızı yazın. Kod GPS'in 3D fix vermesini bekler, sonra drone'un sahanıza uzaklığını yazar.

Pythonkonum_kontrol.py
import math
from pymavlink import mavutil

SAHA = (37.1591, 38.7969)          # kendi sahanin enlem ve boylami
BAGLANTI = "tcp:127.0.0.1:5760"    # Mission Planner'in SITL'i icin de ayni port

m = mavutil.mavlink_connection(BAGLANTI)
m.wait_heartbeat()
m.mav.request_data_stream_send(m.target_system, m.target_component,
                               mavutil.mavlink.MAV_DATA_STREAM_ALL, 4, 1)

while True:                        # 3D fix ve en az 6 uydu
    g = m.recv_match(type="GPS_RAW_INT", blocking=True, timeout=5)
    if g and g.fix_type >= 3 and g.satellites_visible >= 6:
        break
lat, lon, irtifa = g.lat / 1e7, g.lon / 1e7, g.alt / 1000

dlat = math.radians(lat - SAHA[0])
dlon = math.radians(lon - SAHA[1])
a = (math.sin(dlat / 2) ** 2 + math.cos(math.radians(lat))
     * math.cos(math.radians(SAHA[0])) * math.sin(dlon / 2) ** 2)
uzaklik = 2 * 6371000 * math.asin(math.sqrt(a))

print(f"Drone burada: {lat:.6f}, {lon:.6f}")
print(f"Deniz seviyesinden {irtifa:.1f} m")
print(f"Sahana uzaklik: {uzaklik / 1000:.1f} km")
print("Drone sahada" if uzaklik < 100 else "Baslangic konumu sahan degil")
  • Gir: --home 37.1591,38.7969,500,90 ile açın, sonra python3 konum_kontrol.py. Gör: Sahana uzaklik: 0.0 km. Değilse: komut satırında --home'un yer aldığını ve dört değerin virgülle ayrıldığını kontrol edin.
  • Gir: Mission Planner'da H işaretini sürükleyip aracı seçin. Gör: Messages sekmesinde Field Elevation Set satırında sahanın yüksekliği. Değilse: 584m yazıyorsa simülasyon CMAC'ta açılmıştır. Durdurun, işareti taşıyın, aracı yeniden seçin.
  • Gir: konum vermeden açın. Gör: Baslangic konumu sahan degil. Değilse: daha önce SIM_OPOS parametrelerini değiştirmişsinizdir, drone o değerlerde açılır.

Ne göreceksiniz

Simülasyonu --home 37.1591,38.7969,500,90 ile açıp konum_kontrol.py'yi çalıştırırsanız şu çıktıyı alırsınız:

Çıktı
Drone burada: 37.159100, 38.796900
Deniz seviyesinden 500.1 m
Sahana uzaklik: 0.0 km
Drone sahada

Konum vermeden ve -w ile açarsanız drone CMAC'ta başlar:

Çıktı
Drone burada: -35.363262, 149.165237
Deniz seviyesinden 584.1 m
Sahana uzaklik: 13916.6 km
Baslangic konumu sahan degil

Simülatörün kendi terminalinde de ilk satırlardan biri konumu söyler. Örneğin --home ile açtıysanız Home: 37.159100 38.796900 alt=500.000000m hdg=90.000000 satırını görürsünüz.

Hata mesajları

Failed to find location 'Ankara'

--home'a virgülsüz bir ad yazdınız ve arducopter bu adı kendi içindeki konum listesinde bulamadı. Program bu satırdan sonra kapanır. Dört sayıyı yazın, ad burada çalışmaz.

Failed to parse yaw

--home'a üç değer yazdınız, dördüncüyü (burun yönü) unuttunuz. Hemen ardından Failed to parse home string satırı gelir ve program kapanır. Sona virgülle bir açı ekleyin, örneğin ,0.

Field Elevation Set: 584m

Mission Planner'ın Messages sekmesinde görünür ve otopilotun açılış yüksekliğini söyler. 584 CMAC'ın yüksekliği. Kendi sahanızın değerini görmüyorsanız drone hâlâ Avustralya'dadır.

Devamı

Yapay Zeka ve İHA Simülasyon Eğitimi simülasyon bölümünde saha konumunu SIM_OPOS parametrelerine kalıcı yazmayı, kendi konum listenizi sim_vehicle.py'ye tanıtmayı ve Mission Planner'ın varsayılan noktasının SITL'inkinden neden farklı olduğunu kaynak koddan anlatıyor.

Bu yazı işinize yaradı mı?