İçeriğe geç

Aldebaran Uçuş Kontrol Sistemi – RTOS AHRS Core

Bundan 2 ay önce, bir süredir donanımsal olarak üzerinde çalıştığım ve Aldebaran adını verdiğim otonom uçuş kontrol kartının, donanımsal tasarımını bitirmiş ve paylaşmıştım. Donanım tarafını bitirdiğimden -en azından şimdilik- beri, tüm yoğunluğumu yazılım tarafına verdim.

Geçen iki ayda özellikle STM32 adına hem birçok yeni kavram ve bilgi öğrencim, hem de birçok sensörün ve yöntemin uyarlamasını yaptım. İşe ilk başta HAL kütüphanelerini yazarak başladım ve GPS, Barometre, IMU gibi gibi temel sensörlerin STM32 için gerekli kodlarını yazdım. Bunun yanında sensörlerle alakalı birçok yeni bilgi ve yöntem de keşfettim. Öncesine kadar Arduino’da hazır kütüphaneleri indirip import ederek kullanan birisi olarak, sıfırdan bir sensörü kullanmaya çalışmak ve registerlar ile uğraşmak, zorlayıcı ama öğretici bir deneyim oldu.

Uçuş kontrol sistemleri RTOS yani Real Time Operating System ile çalışır. RTOS’un detayları başka bir makalenin konusu olsun, ancak kabaca aktarmam gerekirse, Bu tip işletim sistemleri, adının da belirttiği gibi gerçek zaman kısıtı olan sistemlerde kullanılırlar. Genelde mikroişlemci seviyesinde olan sistemlerde ve özellikle çok hızlı olmaları gereken ve sensörlere dayalı kartlarda sıkça karşımıza çıkar.

Önceki makalem olan Quaternion Based AHRS Estimation Using MPU9250 and STM32G431 yazısına da baktıysanız, IMU’lar için filtreleem sistemlerinde zamanın kritik olduğunu görmüşsünüzdür. Uçuş kontrol sisteminin geneli de bundan farklı değildir aslında. GPS’lerin çalışması ve konum çözümleri ya da IMU’ların filtrelenmesi ya da navigasyonun sağlanması ya da rota takibi gibi birçok konuda zaman kritiktir.

Sensörlere gelirsek; barometre için BMP388’i, IMU için MPU9250’yi ve GPS/GNSS için de uBlock Neo M8N modellerini tercih ettim. BMP ve MPU I2C üzerinden, kendi yazdığım kütüphanelerle, GPS ise UART üzerinden UBX protokolü kullanarak haberleşiyor.

BMP ve GPS modeli direkt olarak kartımda da tercih ettiğim modeller. BMP388’in Bosch tarafından yazılmış API’sinin bulunması da artı bir özellik

RTOS’u demo etmek için, CubeIDE de kullandığımdan CMSISv1’i ve FreeRTOS’u tercih ettim. 4 thread oluşturdum, bunlardan IMU’yu kontrol eden MPU9250 threadi en yüksek öneme sahip zira Quaternion hesaplamaları zamana oldukça duyarlı.

Bunun yanında GPS’i de her 1/3 saniyede güncelleme yapacak şekilde ayarladım. Programın overflow olmasını istemedim zira ilk kez deneyimliyorum.

Sonuç olarak sistem gayet güzel çalıştı ve böylelikle temel bir AHRS sistemim olmuş oldu. Sonraki adımlar, bunu sürekli geliştirmek ve navigasyon özellikleri eklemekle geçecek.

Tüm kodlar açık kaynak olarak mevcut. Ulaşmak için, GitHub sayfamı ziyaret edebilirsiniz:

https://github.com/ibrahimcahit/aldebaran-rtos-core

Okuduğunuz için teşekkür ederim. 🙂

Kategori:Uncategorized