İvme ölçer ve Jiroskop verilerini kullanarak Pitch, Roll ve Yaw açılarının hesaplanması

Bu yazıda bir ivmeölçer ve jiroskoptan nasıl veri okunacağından ziyade bu sensörlerden elde edilen veriyi kullanarak oryantasyon açılarının nasıl hesaplanacağını anlatacağım. Bu yöntemi, Atmega328p ve STM32F411 mikrodenetleyicilerini kullanarak MPU6050 sensörü ile test ettim fakat siz aynı teoriyi herhangi bir ivmeölçer ve jiroskop içinde uygulayabilirsiniz. Tüm bu işlemlere başlamadan önce elimizde ivmeölçer ve jiroskop verilerinin olduğunu varsayacağız. Eğer bu veriler elinizde yoksa MPU6050 sensöründen veri okuma işlemini anlattığım yazımı inceleyebilirsiniz.

Aşağıda anlattığım yöntemi tasarımın bitirdiğim ve ilk prototipini test ettiğim bir uçuş kontrol kartı(quadcopter-x için)’nda kullandım.

İvme değerleri kullanılarak açıların hesaplanması

MPU6050 içerisindeki ivme ölçer sensörü 3 eksende çizgisel ivme ölçebilmektedir. Bu çizgisel ivme değerini yerçekimi ivmesine eşit olan g(9,81 (m/s^2)) cinsinden vermektedir.

İstenilen açı, yerçekimi ivmesinin sensör üzerindeki eksenlerdeki bileşenlerini ölçerek uygun geometrik hesaplamalara tabi tutularak bulunabilir. Bu hesaplamalarda ivme değerleri birer vektör olacağı için sensör çıktısının birimi bizim için bir anlam ifade etmemektedir.

Yukarıdaki denklemde ölçtüğümüz ivme değerlerinin toplamından oluşan eşdeğer ivme değerini hesaplıyoruz.

Bizim modelimizde dikket etmemiz gereken şey yer çekimi ivmesini ölçüyor olduğumuz için bu eşdeğer vektör yer çekimi ivmesine eşittir ve yer yüzeyine diktir. Sadece teoride modelleme yapıyor olsaydık bu değeri her defa hesaplamamıza gerek olmayacaktı fakat kullandığımız sensörün sahip olduğu sapmaları ve toleransları düşününce daha doğru sonuçlar için bu değeri hesaplıyoruz.

Şekil üzerinde görmüş olduğumuz eksenler(X, Y ve Z) sensör üzerinde bulunan referans eksenlerdir. Bahsettiğimiz açılar bu eksenlerin yeryüzeyi ile yaptığıları açılardır

Örneğin X ekseninin yer yüzeyi ile yaptığı açıyı(a) hesaplamak istediğimizde yukarıdaki  gibi bir hesaplama  yapmamız gerekmektedir.

Aynı işlem ile Y eksenininde yer yüzeyi ile yaptığı açıyı hesaplayabiliriz. Bu iki ekseni kendi modelimizde Pitch ve Roll açılarını denk gelecek şekilde konumlandırarak Pitch ve Roll açılarını hesaplamış bulunuyoruz.

İvme ölçer kullanarak bu açıları hesaplamak çok kolay olsa da bizim burada göz önünde bulundurmamız gereken birkaç nokta var.

-İlk olarak bu hesaplamaların yapılabilmesi için sistemimizin herhangi bir eksende çizgisel ivmeye sahip olmaması veya sadece yer çekimi ivmesine duyarlı olması gerekmektedir. Yani farklı eksenlerde hareketlere sebeb olacak ivmelere sahip bir model tasarladığımız için bu hesaplar bu haliyle sistemimize uygulanamıyor.

-Bir başka neden ise drone gibi yüksek titreşime maruz kalan bir sistemde ivme ölçer değerlerinin beklenilenden farklı olarak büyük sapmalara sahip olduğu gözlemlenmiştir.

Yani bu haliyle kullanabilmemiz için sistemin yerçekimi ivmesinden başka bir ivmeye sahip olmaması ve titreşime maruz kalmaması gerekmektedir.

Jiroskop verileri kullanılarak açıların hesaplanması

İvme ölçer çıktılarını birer vektör olarak kullandığımız için birim bizim için önemli değildi fakat açısal hız dan konum hesaplama işleminde birimleri göz ardı edemeyiz.

Hız- Konum ilişkisi

Yukarıdaki formülde gördüğümüz üzere konum bilgisi hız fonksiyonun zamana göre integre edilmesi ile elde edilir. Yukarıdaki formül çizgisel hız ve konum için verilmiş olsada aynı formül açısal hız ve açısal konum ilişkisi içinde aynıdır.

Sistemimizde yukarıdaki formülü doğrudan kullanabilmemiz için ölçtüğümüz açısal hız değerinin bir fonksiyona bağlı olması gerekmektedir. Bizim sistemimizdeki hız değeri herhangi bir fonksiyona bağlı olmadığı için küçük bir dt zamanı belirleyerek bu denklemi ortalama hız konum denklemi haline getireceğiz.

Yukarıdaki formülde dt zamanını 0 a ne kadar yaklaştırırsak gerçek değere o kadar yakın sonuçlar hesaplayabiliriz. Fakat dt Zamanını küçültmenin bazı dezavantajlarıda vardır. Biz her geçen dt zamanından sonra sensörümüzden veri okuyacağımız için bu değer ne kadar küçük olursa mikroişlemcimizi o kadar çok meşgül etmiş oluruz. Sensörden veri okuma dışındaki işlemlerede yeterli zaman ayırabilmemiz için optimum bir dt zamanı seçmemiz gerekiyor. Sadece sensörden okuma yapılan bir uygulamada 4ms olarak belirlenen dt zamanı ile gerçeğe çok yakın değerler elde etmiş olsam da işlemci her 4 ms de bir sensörden ölçüm yaptığı için diğer işlere zaman yeterli olmuyordu bu sebeble dt zamanını 5 ms saniye olarak belirliyorum.

Yukarıdaki formülün V*dt kısmı konumdaki değişikliği X0 ise bir önceki konumu ifade etmektedir yani her ölçümden sonraki  konumdaki değişim bir önceki konuma eklenmektedir. Aslında bu işlem İle hızı ortalama kabul edip bir integrasyon yapıyoruz. X ekseni için sensörden okunan açısal hız değeri vx olsun ve yaptılan açıda θ olsun.

Sensör çıktısı “ °/s ” olduğu için 5ms lik zaman farkını saniye biriminde kullanmalıyız.

Burada ki en önemli nokta bu işlemin 5 ms periyodla sürekli yapıyor olaması gerekiyor. Bu işlemi yapabilmek için bir zamanlayıcı kullanarak her 5ms de bir oluşacak bir kesme rutini oluşturdum ve bu rutin içerisinde sensörden veri okuyunup yukarıdaki işlemi gerçekleştirdim.

Pitch ve Roll açılarının hesaplanması jiroskop kullanarak çok basittir fakat  dikkat edilmesi gereken bir diğer nokta ise bu açıların birbirine aktarılma durumu.

Figürde gördüldüğü üzere sensör 45 derece pitch açısı yaptığı konumda 90 derece yaw açısı yapınca Pitch ve Roll eksenleri yer değiştirmiş oluyor fakat bu eksenlerde bir açısal hız değişimi olmadığı için ölçülen değerler sensörün eski konumundaki değerler olarak kalıyor.

Bu sorun eksen aktarılması olarak adlandırılıyor. Çözümü ise Yaw eksenindeki hareketi kullanarak bu değerleri uygun şekilde birbirine aktarmak.

Fakat, Jiroskop da oryantasyon açıları bulma işleminde yalnız başına yetersiz kalıyor. İlk olarak formüllerdeki ilk konum değerini jiroskop kullanarak belirlememiz mümkün değil. Buna ek olarak ivme ölçerde de benzer olduğu üzere bu sensörler teoride olduğu gibi ideal çalışmamaktadır. Ve Jiroskop İvme ölçerden farklı hata türlerine sahiptir. Örneğin  yapılan testlerde herhangi bir eksende hiç hareket olmamasına rağmen Sensörün 3 eksende de çok küçük hareketler algıladığı gözlemlenmiştir ve bu küçük hareketler kısa vadede bir sorun olmasada  yapacağımız İşlemde yeni konumu sürekli bir önceki konuma ekleyerek yaptığımız integrasyon dan kaynaklı belirli bir zaman geçtikten sonra konum bilgisi tolere edilemez hataya sahip oluyor. Jiroskobun bu hatası drifting olarak adlandırılmaktadır.

Jiroskop ve İvmeölçerin beraber kullanılması

İVME ÖLÇERJİROSKOP
İlk konumu belirlememizi sağlarİlk konumdan sonraki değişimleri ölçer.
Kısa vadeli hareketlerde hatalı ölçüm yapabilir ve titreşimden etkilenir.Kısa vadede hareketleri daha doğru ölçer.
Uzun vadede daha doğru sonuçlar verir.Kısa vadede daha doğru sonuçlar verir.

Yukarıda ki tabloda ki avantajlara ve dezavantajlara göre bu iki sensörden sadece birinin kullanılması ile açı hesaplanması çok verimli olmayacaktır. Fakat, bu sensörlerin ikisinide senkron bir şekilde kullanarak birbirlerinin hataları elenebilir.

Tamamlayıcı Filtre

Aşağıda ki Şekilde de gördüldüğü üzere jiroskop ve ivme ölçer değerlerini yüksek geçirgen ve alçak geçirgen filtrelere maruz bırakılarak ve daha sonra bu değerleri toplayarak daha doğru sonuçlar elde edebilir.

α’yı 0.0005 olarak seçiyorum ve veriler yüksek ve alçak geçirgen filtreye mağruz bırakılmış oluyor.

anglepitchout = anglepitchGYRO* 0.9995 + anglepitchACC * 0.0005

anglerollout = anglerollGYRO* 0.9995 + anglerollACC * 0.0005

örnek C kodu

cGy, cGx ve cGz değerleri sensörüm için belirlediğim kalibrasyon değerleri. Bu sayede sensörde oluşan offset hatasını minimize ediyorum. 0.0000763 değeri ise sensörden okuduğum verinin scale i ile 5 ms zamanın çarpımından geliyor. Bu değerler kullandığınız sensörün çıktı birimine ve formatına bağlı. 57.296 değeri ise ivme ölçerden elde edilen açıyı radyan dan derece ye çeviriyor.

Yukarıdaki grafikte ivmeölçer, Jiroskop ve tümleyici filtre çıktısı gösterilmiştir. Tümleyici filtrenin görevini anlamak grafik üzerinden daha verimli olacaktır.

NOT: Eğer yüksek hassasiyet gerektiren bir uygulamada kullanmayı planlıyorsanız, MPU6050 gibi ucuz MEMS sensörlerin belirli oranda hata payına sahip olduğunu hatırlatmak isterim.

Referanslar

[1] Ahmed Fahem Albaghdadi , Abduladhem Abdulkareem Ali (2019) ‘’ An Optimized Complementary Filter for An Inertial Measurement Unit Contain MPU6050 Sensor ’’

[2] Cemil Altın , Orhan Er (2015) ‘’ Complementary Filter Application for Inertial Measurement Unit ‘’

[3] N. H. Zani, J. M. Sultan(2021) ” Analysis of inertial measurement accuracy using complementary filter for MPU6050 sensor”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s