9 DOF sensörle yaw açısı hesaplamada hata var.

Başlatan armas, 30 Nisan 2016, 15:25:43

armas

Merhabalar,

Elimde lsm9ds0 accelerometre, gyro ve magnetometre içeren bir sensör var. Bu bilgileri lpc4337 ile okuyorum. Madwick algoritması ile konum açılarını alabiliyorum. Fakat pitch açısı değiştiğinde, sensörün yönünü sabit tutmama rağmen yaw açısı da değişiyor. Sensörü sadece z ekseninde oynattığımda yaw açısında sıkıntı yaşamıyorum. Bu sorunumu nasıl çözebilirim? Adamların bu algoritmayı kullanarak çektikleri videolar da böyle bir sorun gözükmüyor.

berat23

copy paste iş yapıp, insanların müneccim modunda hata bulmasını bekliyorsunuz.

bu hata normalde dcm de bir hata olunca olması lazım fakat böyle uzaktan anlamak mümkün değil. copy paste yapacağınıza şu aşağıdaki linkte anlatılanları anlayarak yapamamak emin olun çok daha faydalı olacaktır.
http://www.mdpi.com/1424-8220/11/4/3816/htm

armas

Alıntı yapılan: armas - 30 Nisan 2016, 15:25:43
Merhabalar,

Elimde lsm9ds0 accelerometre, gyro ve magnetometre içeren bir sensör var. Bu bilgileri lpc4337 ile okuyorum. Madwick algoritması ile konum açılarını alabiliyorum. Fakat pitch açısı değiştiğinde, sensörün yönünü sabit tutmama rağmen yaw açısı da değişiyor. Sensörü sadece z ekseninde oynattığımda yaw açısında sıkıntı yaşamıyorum. Bu sorunumu nasıl çözebilirim? Adamların bu algoritmayı kullanarak çektikleri videolar da böyle bir sorun gözükmüyor.

Cevabınız için teşekkürler. Oturup madwick algoritmasını baştan yazmak pek mantıklı gelmedi. Ben de 5 yıldan beri IMU ile uğraşmıyorum. İlk defa bugün oturup yazmaya başladım. Kafama takılan aynı algoritmayı kullanmamıza rağmen neden benimki farklı çalışıyor.

Cemre.

Alıntı yapılan: armas - 30 Nisan 2016, 15:25:43
Merhabalar,

Elimde lsm9ds0 accelerometre, gyro ve magnetometre içeren bir sensör var. Bu bilgileri lpc4337 ile okuyorum. Madwick algoritması ile konum açılarını alabiliyorum. Fakat pitch açısı değiştiğinde, sensörün yönünü sabit tutmama rağmen yaw açısı da değişiyor. Sensörü sadece z ekseninde oynattığımda yaw açısında sıkıntı yaşamıyorum. Bu sorunumu nasıl çözebilirim? Adamların bu algoritmayı kullanarak çektikleri videolar da böyle bir sorun gözükmüyor.
Hocam kalibrasyon konusunu halledebildiniz mi?

LG-H735 cihazımdan Tapatalk kullanılarak gönderildi


armas

Kalibrasyon ile alakalı küçük bir kod yazdım ama doğruluğunu nasıl test edeceğimi bilmiyorum. Kod şekilde;
for(countSample = 0 ; countSample < 1000 ; countSample++){

		while(!Chip_GPIO_ReadPortBit(LPC_GPIO_PORT, gpiosForintrerrupt[0].port, gpiosForintrerrupt[0].pin)){ } //interrupt gyro
			readGyro();
			gyro_bias[0] += gx;
			gyro_bias[1] += gy;
			gyro_bias[2] += gz;

		while(!Chip_GPIO_ReadPortBit(LPC_GPIO_PORT, gpiosForintrerrupt[1].port, gpiosForintrerrupt[1].pin)){} //interrupt accel
			readAccel();
            accel_bias[0] += ax;
            accel_bias[1] += ay;
            accel_bias[2] += az;

	}
     gyro_bias[0] /= countSample; // ortalamalar alınıyor
     gyro_bias[1] /= countSample;
     gyro_bias[2] /= countSample;

     gbias[0] = (float)gyro_bias[0]*(245.0 / 32768.0);
     gbias[1] = (float)gyro_bias[1]*(245.0 / 32768.0);
     gbias[2] = (float)gyro_bias[2]*(245.0 / 32768.0);

     accel_bias[0] /= countSample; // ortalama
     accel_bias[1] /= countSample;
     accel_bias[2] /= countSample;

     abias[0] = (float)accel_bias[0]*(4 / 32768.0); // 
     abias[1] = (float)accel_bias[1]*(4 / 32768.0);
     abias[2] = (float)accel_bias[2]*(4 / 32768.0);



örnek bias değerlerim şu şekilde;
gbias[0] = 0.089
gbias[1] = 0.05
gbias[2] = -0.2

abias[0] = 0.003
abias[1] = 0.001
abias[2] = 0.0009

berat23


armas

Alıntı yapılan: berat23 - 01 Mayıs 2016, 14:52:04
yaw sabit durduğunda da değişiyor mu?

Hayır değişmiyor. z ekseni ve x ekseni etrafında değiştirdiğimde yaw ve roll açıları sorunsuz çalışıyor. y ekseninde konumu değiştirdiğimde saçmalamaya başlıyor. Ben bu kalibrasyon olayını tam yapamadım herhalde. Kalibrasyon ile ilgili bir öneriniz var mı?

berat23

kalibrasyon derken neyin kalibrasyonu? gyro u accelerometer mi yoksa magnetometer mi? hepsi ayrı bir konu.

birde kalibrasyonsal bir hatan olsa böyle bir sonuç olmaz. yani ortalama ile ofset bulmada bu hata olmaz. hadi misalignment işine girsen neyse. bence sorun açık net dcm kısmında. bence attığım linkteki metodu uygulayın, en azından anlarsınız. ben zamanında bu yayını okumuştum, bias esimation lar quarternion lar havada uçuyor, bunu bilmeyen biri en fazla copy paste yapar. verdiğim link olayı en basit biçimde anlatıyor.

Cemre.

Alıntı yapılan: berat23 - 01 Mayıs 2016, 21:07:18
kalibrasyon derken neyin kalibrasyonu? gyro u accelerometer mi yoksa magnetometer mi? hepsi ayrı bir konu.

birde kalibrasyonsal bir hatan olsa böyle bir sonuç olmaz. yani ortalama ile ofset bulmada bu hata olmaz. hadi misalignment işine girsen neyse. bence sorun açık net dcm kısmında. bence attığım linkteki metodu uygulayın, en azından anlarsınız. ben zamanında bu yayını okumuştum, bias esimation lar quarternion lar havada uçuyor, bunu bilmeyen biri en fazla copy paste yapar. verdiğim link olayı en basit biçimde anlatıyor.

Hocam farklı bir soru sorayım izninizle. Tasarlamaya çalıştığım bir cihaz iki eksenle hareket edebiliyor ve sensörler de sistemle birlikte hareket halindeler. Amacım misal sistemi yaw=90* roll=45* pitch=0* (zaten iki eksenli) pozisyonuna getirmek. Ancak cihazın metal aksamı yüzünden yaw açısı sapıtıyor. Magnetometer kalibrasyonunu max min değerler alarak yapıyorum. Kalibrasyon yapmama rağmen yaw açısı hatalı. Ancak metallerden uzakta herhangi bir hata yok. Bu durumda yaw açısını tespit etmek imkansız mıdır?