Softivation

SITL'de geofence ihlali RTL tetiklemiyor

SITL'de geofence tanımlı ama ihlal olmuyor, RTL_AND_LAND tetiklenmiyor. FENCE_TYPE yetmez; FENCE_ENABLE kapalıyken otopilot sınırı hiç kontrol etmiyor.

Furkan IŞIKAY 4 dk okuma

SITL'de drone'u evden kasıtlı olarak 400 metre uzaklaştırıyorsun. Ekranda geofence tanımlı görünüyor ama hiçbir şey olmuyor: ne mod değişiyor ne de bir uyarı geliyor.

Otopilot sanki hiç çit yokmuş gibi davranıyor. Çoğu zaman sorun çitin şeklinde değil, açık olup olmadığındadır.

Çit tanımlı ama kapalı olabilir

ArduPilot'ta çitin iki ayrı ayarı var. Biri hangi sınır türlerinin tanımlı olduğunu seçer: yükseklik sınırı, dairesel sınır, poligon sınırı. Öteki bunların hepsini tek başına açıp kapatan ana anahtardır.

Ana anahtar varsayılan olarak kapalıdır. Sınır türleri tanımlı görünse de anahtar kapalıyken hiçbir ihlal sayılmaz, çünkü otopilot ihlal kontrolüne hiç girmez.

Anahtar kapalıyken ve açıkken

Şekildeki iki panel aynı durumu gösteriyor: drone evden 400 metre uzakta, çit 150 metrelik bir daire. Soldakinde anahtar kapalı, sağdakinde açık.

Çit ve drone aynı yerde; değişen tek şey ana anahtar

Solda FENCE_ENABLE 0: 150 metrelik daire tanımlı, drone 400 metrede, mod GUIDED kalıyor. Sağda FENCE_ENABLE 1: aynı konumda otopilot LAND moduna geçiyor.
Nereye bak: iki panelde drone'un konumu ve çit aynı. Soldaki kesikli daire tanımlı ama kapalı bir çit; sağda anahtar açılınca aynı konum ihlal sayılıyor.

Anahtar kapalıyken drone'u 400 metreye götürürsen hiçbir ihlal mesajı gelmez, mod GUIDED'da kalır. Aynı konumdayken anahtarı açarsan otopilot birkaç saniye içinde LAND moduna geçer ve ihlali bir MAVLink mesajıyla bildirir. RTL yerine LAND görmen normal: çitin 100 metreden fazla dışındaysan otopilot RTL'i denemeden doğrudan LAND'e geçer; 400 metrede durum budur.

Ayarların adı ve varsayılanları

Sınır türlerini FENCE_TYPE seçer, ana anahtar FENCE_ENABLE'dır. AC_Fence.cpp içindeki tanım net: FENCE_ENABLE'ın varsayılan değeri 0, yani kapalı.

Copter'da FENCE_TYPE varsayılan olarak üç biti birden taşır: ALT_MAX(1) + CIRCLE(2) + POLYGON(4) = 7. Ekranda bu 7'yi görmek çitin açık olduğu anlamına gelmez.

Örnek: Çitin yarıçapını uçuş alanına göre 150 metre yazdın, parametre listesinde FENCE_TYPE 7 görünüyor ve çiti hazır sanıyorsun. Drone alanın dışına çıktığında hiçbir şey olmaz, çünkü ana anahtar hâlâ 0 değerindedir. Listede FENCE_TYPE yerine FENCE_ENABLE satırına bak; 1 değilse çit yok demektir.

Çözüm

Dört parametreyi MAVLink üzerinden PARAM_SET ile yaz, her birini dönen PARAM_VALUE ile teyit et. Aşağıdaki kod FENCE_TYPE=2 (yalnızca daire), FENCE_RADIUS=150 ve FENCE_ACTION=1 (RTL_AND_LAND) yazar, en son FENCE_ENABLE'ı 1 yapar.

FENCE_ENABLE'ı en son yazmak önemli. Tip ve aksiyon zaten tanımlıyken anahtarı açtığın an ihlal kontrolü devreye girer. Kodu SITL açıkken çalıştır.

Python
from pymavlink import mavutil

m = mavutil.mavlink_connection('tcp:127.0.0.1:5760')
m.wait_heartbeat()

for name, val in [('FENCE_TYPE', 2), ('FENCE_RADIUS', 150),
                   ('FENCE_ACTION', 1), ('FENCE_ENABLE', 1)]:
    m.mav.param_set_send(m.target_system, m.target_component,
                          name.encode(), float(val),
                          mavutil.mavlink.MAV_PARAM_TYPE_REAL32)
    print(m.recv_match(type='PARAM_VALUE', blocking=True, timeout=5))

Her satırda yazdığın parametrenin adını ve değerini taşıyan bir PARAM_VALUE görmelisin. Drone o sırada çitin dışındaysa mod değişimi hemen arkasından gelir.

Hata Mesajları

"PreArm: Vehicle breaching Circle fence"

Bu birebir mesaj, FENCE_ENABLE açıkken ve drone sınırın dışındayken geliyor. Kaynağı AC_Fence.cpp içindeki ihlal kontrolü: hal.util->snprintf(failure_msg, failure_msg_len, "Vehicle breaching %s", ...).

Kursta devamı

Bu mantığı poligon yükleme adımına, log imzalarına ve saha farklarına kadar Yapay Zeka ve İHA Simülasyon eğitiminde adım adım işliyoruz.

Yapay Zeka ve İHA Simülasyon Sanal Makinesi: ArduPilot SITL, ROS Noetic ve Gazebo 11 kurulu gelir; simülasyonu kurulumla uğraşmadan başlat.

Bu yazı işinize yaradı mı?

Ücretsiz kaynakArduPilot SITL kurulum rehberiSimülasyonu kendi bilgisayarınızda kurun: Ubuntu, Windows WSL ya da sanal makine, baştan sona.