Sürü simülasyonunda ikinci SITL aracı bağlanmıyor
Sürü simülasyonunda ikinci SITL aracı bağlanmıyorsa sebep kablo değil port. Her örneğin ana kapısı 5760 + 10 × örnek numarası; ikinci aracı 5770'te ara.
Tek araçla çalışırken hiçbir sorun yok. İkinci aracı açıyorsun, yer kontrol istasyonu ya hiç bağlanmıyor ya da ekranda hâlâ birinci aracı gösteriyor. Kablo yok, telsiz yok, ikisi de aynı bilgisayarda duruyor.
Cevap neredeyse her zaman aynı yerde: ikinci araç senin bağlanmaya çalıştığın kapıda durmuyor. Başka bir kapı açmış, sen eski kapıyı çalıyorsun.
Her araç kendi kapısını açıyor
Simülasyonu başlatırken verdiğin örnek numarası, aracın ayağa kalkarken dinleyeceği kapıyı belirliyor. Birinci araç bir kapı açıyor, ikincisi ondan on adım ötede başka bir kapı açıyor.
Her aracın ana kapısı (SERIAL0) bir öncekinden on numara ileride. Yani ikinci aracı ilk aracın kapısında ya da hemen yanındaki kapıda aramak sonuç vermiyor. Aşağıdaki şekilde mavi kapıların onar onar atladığına bak.
Her örnek kendi kapısını açar: 5760 + 10 × örnek numarası
Bu ayrım kâğıt üstünde küçük görünüyor, ama sürü kurarken beş aracın beşini de elle takip etmen gerekiyor. Numarayı bir kez kaçırdığında hangi aracın hangi kapıda olduğunu bulmak uzun sürüyor.
Örnek: Sürü görevine hazırlanırken üç aracı -I0, -I1 ve -I2 ile başlattın ve yer istasyonunda üçünü de görmek istiyorsun. Üç ayrı bağlantı açarsın: 5760, 5770 ve 5780. Üçüncü araç için 5780 yerine 5771 yazarsan bağlantı anında geri çevrilir; süreç listesinde üç araç da duruyorsa sorun araçta değil, adresteki numaradadır.
Aynı belirtinin iki ayrı sebebi var
"İkinci araç bağlanmıyor" cümlesi iki bambaşka durumu birden anlatıyor ve ikisinin çözümü aynı değil. Hangisinde olduğunu anlamanın en hızlı yolu süreç listesine bakmak.
| Süreç ölmüş | Süreç sağlıklı | |
|---|---|---|
| Ne oldu | İki araç aynı kapıyı istedi, ikincisi açılır açılmaz kapandı. | İki araç da ayakta, ikisine de bağlanabiliyorsun. |
| Nerede görürsün | Süreç listesinde yok, kayıtta bağlanma hatası var. | İkisi aynı kimliği gösteriyor, istasyon tek araç sanıyor. |
| İlk hamle | Kapı numarasını ayır. | Kimliği tekilleştir. |
Soldaki durumda arayacak bir araç bile yok, çünkü ikinci araç doğduğu anda kapanmış. Sağdaki durumda iki araç da ayakta duruyor, sorun yer kontrol istasyonunun ikisini ayırt edememesi.
Hiçbir aracın açmadığı bir numaraya yapılan bağlantı denemesi askıda kalmıyor, anında geri çevriliyor; bu yüzden ağ ya da güvenlik duvarı aramak zaman kaybı.
Kapıyı kendin doğrula
İki aracı ayağa kaldırıp hangi kapıyı açtıklarını doğrudan kendi kayıtlarından okuyabilirsin. Aşağıdaki komut ikisini de başlatıyor ve kayıt dosyalarındaki kapı satırını süzüyor.
cd ~/sitl
# Birinci arac
./arducopter -I0 --model + --speedup 5 --defaults copter.parm \
--sysid 1 --home 37.1591,38.7969,500,0 > s0.log 2>&1 &
# Ikinci arac: yalniz -I ve --sysid degisiyor
./arducopter -I1 --model + --speedup 5 --defaults copter.parm \
--sysid 2 --home 37.1591,38.7969,500,0 > s1.log 2>&1 &
sleep 15
grep "TCP port" s0.log s1.logKapı numaraları belli olunca sıra bağlanmaya geliyor. Telemetri akışını açıkça istemezsen veri gelmez; bu satır atlandığında bağlantı kurulmuş görünür ama ekran boş kalır.
from pymavlink import mavutil
for port in (5760, 5770):
arac = mavutil.mavlink_connection("tcp:127.0.0.1:%d" % port)
kalp = arac.wait_heartbeat(timeout=20)
if kalp is None:
print(port, "-> heartbeat yok")
continue
arac.mav.request_data_stream_send(
arac.target_system, arac.target_component,
mavutil.mavlink.MAV_DATA_STREAM_ALL, 4, 1)
print(port, "-> sistem kimligi", arac.target_system)İki aracı da başlatıp bu iki kodu çalıştırırsan şunu alırsın. İki farklı kapı, iki farklı sistem kimliği:
s0.log:SERIAL0 on TCP port 5760
s1.log:SERIAL0 on TCP port 5770
5760 -> sistem kimligi 1
5770 -> sistem kimligi 2En sık yapılan hata
İkinci aracı başlatırken örnek numarasını değiştirip bağlantı adresini eski hâlinde bırakmak. Numara değişse bile adreste sabit bir kapı yazıyorsa araç o kapıyı açmaya çalışır, birinci araç orayı zaten tuttuğu için ikinci araç açılır açılmaz kapanır.
Bu durumda ekranda "bağlanamıyorum" değil, hiçbir şey görmezsin. Süreç listesine baktığında ikinci araç orada bile değildir.
Sistem kimliği ikinci tuzak
Kapıları düzelttikten sonra ikinci bir sorun çıkabiliyor. İki araç da ayağa kalkıyor, ikisine de bağlanabiliyorsun, ama yer kontrol istasyonu ikisini tek araç sanıyor. Bu, sistem kimliğinin tekilleşmemiş olmasından kaynaklanıyor.
Kimliği belirleyen parametrenin adı firmware sürümleri arasında değişti. Yeni bir sürümden çektiğin parametre listesinde eski adı bulamayabilirsin.
Bu yüzden kimliği elle ayarlayacaksan parametre listesini ada göre değil desene göre ara. Beklediğin adı bulamazsan büyük ihtimalle parametrenin adı değişmiştir.
Hata Mesajları ve Anlamları
Aşağıdaki satırlar simülasyonun ve Python'un birebir ürettiği metinlerdir.
bind failed on port 5760 - Address already in use
İki araç aynı kapıyı açmaya çalıştı. Bu satırı yazan araç ayakta kalmaz, hemen kapanır; bu yüzden süreç listesinde göremezsin. Örnek numarasını artır ya da bağlantı adresindeki sabit kapı numarasını kaldır.
ConnectionRefusedError: [Errno 111] Connection refused
O kapıda dinleyen kimse yok. Ya numara yanlış ya da o araç hiç ayağa kalkmadı. Önce süreç listesine, sonra aracın kayıt dosyasına bak.
Waiting for connection ....
Araç sağlıklı, seni bekliyor. Bu satırda takılı kalıyorsa sorun bağlandığın kapı numarasında.
Setting MAV_SYSID=2
Bu bir hata değil, onay satırı. Başlangıçta bunu göremiyorsan verdiğin kimlik bayrağı işlenmemiş demektir.
Bu konu simülasyonda kalıyor
Buradaki her şey tek bilgisayarda çalışan simülasyon içindir. Gerçek bir sürüde araçlar aynı makinede olmadığı için kapı çakışması yaşanmaz; orada ayrım telsiz kanalı ve sistem kimliği üzerinden yapılır.
Sürü mantığını önce simülasyonda kurmanın sebebi de bu. Kimlik ve adresleme hatalarını havada değil masada bulmak istiyorsun.
Sürüyü baştan sona kurmak istersen
Simülasyon kurulumundan görüntü işlemeye ve sürü senaryolarına kadar tüm akış Yapay Zeka ve İHA Simülasyon eğitimi içinde adım adım anlatılıyor. Bu yazıdaki konunun devamı olan ders de o eğitimin içinde yer alıyor.
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ı?
Bu konuyu baştan sona öğrenin
Sezon: altı eğitimin hepsi 9 ay, ayda ₺790. Lise ve üniversite öğrencisine ayda ₺390, üye kodunuzla ilk ay ₺351. İstediğiniz ay bırakırsınız. Sezon'a başlayın · Öğrenciyim