Ölçme hesaplama işlemleri saniyede 50-100- 500 kez olabilir. Ne kadar fazla olursa o kadar iyi. Tabii bu kullandığın gyro, acc. in band genişliği ile de sınırlı.
Gyro dan 20 derece/sn lik bir bilgi aldığında bu en son ölçümünden sonra olan olay. Diyelimki saniyede 100 ölçüm yapıyorsun. Saniyede 20 derecelik bir sapma yapacak hızda döndüğüne göre 1/100 saniyede ne kadar dönmüş olabilirim hesabı sürekli olarak yapılıp eğim bulunacak.
Bu eğimi düzeltmek için ne kadar süre ve/veya ne şiddette motorlara güç vereceğin ise hesap kadar deneme yanılma da.
Bunun için de PID kullanabilirsin. Deneyerek uygun katsayıları bulacaksın. Tabii katsayılar için frame, motor, pervane vs. ye göre aracını modelleyip hesap da yapabilirsin tabii.
Hesap yöntemi ise genelde söyle.
Bir hava aracından bahsettiğimiz için statik bir şey yok. MPU6000 üzerinde hem gyro hemde acc. var. Ve bu ikisi birlikte kullanılıyor. Statik durumda yerçekimi ivmesinin 3 eksene ne kadar etki ettiğini ivmeölçer ile ölçüp eğimi hesaplamak kolay. Ancak dinamik ortamda yerçekimi ivmesinin yanı sıra aracın hareketli olmasından kaynaklanan ivmeler de var.
Bunun için dinamik ortamda gyro yu eğimi hesaplamak için ivmeölçeri de ne kadar sağa-sola, aşağı-yukarı hareket ettiğimizi ölçmek için kullanıyoruz. Gyro ile eğim nasıl hesaplanırın mantığını yukarıda yazmıştım. Buna göre eğim artık bilindiğine bu eğimde her eksene ne kadar yerçekimi ivmesi etki edecek hesaplanabilir. Her bir eksende hesaplanan yerçekimi ivmelerini ivmeölçer den her bir eksen de okuduğumuz ivmelerden çıkartırsak geriye eksenlerde ki saf ivme kalacak. Yani sadece aracın hareketinden kaynaklanan ivmeler. Buna göre şu kadar zamanda bu kadar ivme olursa dan hız, şu zamanda bu hız dan yol ve aracın konumu çıkar. Yani bir integral hızı ikincisi yolu verecek. Küçük zaman aralıklarında hesaplanan hız ve yol toplanacak. Buna göre aracın olması gereken konumla fark hesaplanıp motorlara gereken komut gönderilir. Bu işlem sürekli yapıldığında olması istenen konuma geldiğimizde sistem zaten motorlara ona göre komuta edecek. Motor yönlendirmeleri için PID olmazsa olmaz. Katsayıları iyi ayarlarsan ne sağır olur ne de agresif.
Bütün bu hesapları lineer cebir kullanılarak yapıldığında ortaya rotasyon matrisi çıkıyor. DCM (direction cosine matrix) denen yöntemi iyi incele. Ha bu arada illa da bu şekilde yapmak zorunda da değilsin.
Rotasyon matrisi oluştururken dikkat edilecek nokta her bir eksende ki rotasyon sırasına uygun oluşturulması gerekliliği. Matrisin satırları yeryüzeyine göre vektörleri gösterirken sütünları araca göre vektörleri gösterecek. Eksenlerin sıralanışı ile de rotasyon işleminin sıralanması uyumlu olmalı.
Sözle anlatılabilecek genel mantığı bu şekilde. Matematiği için de;
A Guide To using IMU (Accelerometer and Gyroscope Devices) in Embedded Applications. « Starlino Electronics bu daha çok gyro, acc. nasıl kullanılır. DCM kullanmadan nasıl hesaplarım konusu. Yukarıda lafla anlatmaya çalıştığım kısım.
http://gentlenav.googlecode.com/files/rotation_matrix.jpg rotasyon matrisi
http://gentlenav.googlecode.com/files/DCMDraft2.pdf Bu döküman DCM ile hesabı sonuna kadar anlatıyor. Sitelerinde hazirladıkları kit için örnek bir proje de var. İstersen bu proje üzerine kendi kartını, MPU6000'i monte edebilirsin.
Rotation Matrix -- from Wolfram MathWorld
DCM Tutorial ? An Introduction to Orientation Kinematics « Starlino Electronics
DCM kullanan, kullanmayan bir sürü örnek proje var. Hesap kitap kısmını halledersen MPU6000 ile ilgili kısımda yardımım olabilir. dsPIC veya ARM kodlamada da takıldığın yerlerde.
MPU6000 kullanan hazır board henüz görmedim ama illa MPU6000 kullanıcam demezsen üzerine kodunu yazabileceğin hazır IMU kitlerine bir bak derim. Baskılı devre vs. işlerinden yırtarsın. Aslında hazır alıp kullanılabilecek çok sayıda kit var.
Örnek olarak gentlenav-matrixpilot uygulamasının hazır kiti var.
Hafızam yanıltmıyorsa RAZOR'un MPU6000 li bir uygulaması da olacaktı. Bunlar için sparkfun'a bakabilirsin. Örnek kod vs için de iyi bir kaynaktır.
Ne kullanayım diye sorduğuna göre henüz işlemci vs. de seçmemişsin.
Önerim 16 bit dsp veya 32 lik işlemciler olur. 16 bitlik dsPIC, TI MSP veya 32bit ARM işlemcileri öneririm. Özellikle fpu dan dolayı STM32F4.. Uygun fiyatlı bir kiti de var.
Kolay gelsin.