@@ -31,7 +31,13 @@ AirDC::AirDC(int pid)
3131 _uqc=5.0 ;
3232 _uIAS=0.0 ;// To be calculated, 0 default value
3333 _uTAT=0.0 ;// To be calculated, 0 default value
34-
34+ // Inertial Unit
35+ _Ip=0 ;
36+ _Iq=2.6 ;
37+ _Ir=0 ;
38+ _Ipdot=0.00 ;
39+ _Iqdot=0.00 ;
40+ _Irdot=0.00 ;
3541}
3642// RhoAir(Pressure,Temperature,Relative Humidity,mode)
3743// Mode 1 is the default BasicAirData routine
@@ -252,10 +258,10 @@ String AirDC::OutputSerial(int mode)
252258 String s4 (_qc, 6 );
253259 String s5 (_AOA, 6 );
254260 String s6 (_AOS, 6 );
255- StreamOut=' $' +s1+' ,' +s2+' ,' +s3+' ,' +s4+' ,' +s5+' ,' +s6;
261+ StreamOut=' $TMO, ' +s1+' ,' +s2+' ,' +s3+' ,' +s4+' ,' +s5+' ,' +s6;
256262// To read string on the other side
257263 /*
258- if (Serial.find("$")) {
264+ if (Serial.find("$TMO, ")) {
259265 _p = Serial.parseFloat(); //
260266 _T = Serial.parseFloat();//
261267 _RH = Serial.parseFloat();//
@@ -276,7 +282,7 @@ String AirDC::OutputSerial(int mode)
276282 String s8 (_h, 6 );
277283 String s9 (_mu, 6 );
278284 String s10 (_Re, 6 );
279- StreamOut=' $' +s1+' ,' +s2+' ,' +s3+' ,' +s4+' ,' +s5+' ,' +s6+' ,' +s7+' ,' +s8+' ,' +s9+' ,' +s10;
285+ StreamOut=' $TAD, ' +s1+' ,' +s2+' ,' +s3+' ,' +s4+' ,' +s5+' ,' +s6+' ,' +s7+' ,' +s8+' ,' +s9+' ,' +s10;
280286 break ;
281287 }
282288 case 3 : // Measurements uncertainty output
@@ -286,7 +292,7 @@ String AirDC::OutputSerial(int mode)
286292 String s2 (_uT, 6 );
287293 String s3 (_uRH, 6 );
288294 String s4 (_uqc, 6 );
289- StreamOut=' $' +s1+' ,' +s2+' ,' +s3+' ,' +s4;
295+ StreamOut=' $TMU, ' +s1+' ,' +s2+' ,' +s3+' ,' +s4;
290296 break ;
291297 }
292298 case 4 : // Air data uncertainty output
@@ -298,7 +304,7 @@ String AirDC::OutputSerial(int mode)
298304 String s4 (_uTAS, 6 );
299305 String s5 (_uTAT, 6 );
300306 String s6 (_uh, 6 );
301- StreamOut=' $' +s1+' ,' +s2+' ,' +s3+' ,' +s4+' ,' +s5+' ,' +s6;
307+ StreamOut=' $TAU, ' +s1+' ,' +s2+' ,' +s3+' ,' +s4+' ,' +s5+' ,' +s6;
302308 break ;
303309 }
304310 return StreamOut;
@@ -327,24 +333,29 @@ void AirDC::PitotCorrection(int mode)
327333 PB[1 ][1 ]=0.5 ; // Installation position respect c.o.g.
328334 PB[2 ][1 ]=0 ;
329335 PB[3 ][1 ]=0 ;
330- WB[1 ][1 ]=0.5 ; // Angular rates . P, q, r from sensors
331- WB[2 ][1 ]=0.5 ;
332- WB[3 ][1 ]=0.5 ;
336+ WB[1 ][1 ]=_Ip ; // Angular rates . P, q, r from sensors
337+ WB[2 ][1 ]=_Iq ;
338+ WB[3 ][1 ]=_Ir ;
333339
334340 R[1 ][1 ]=cos (_AOA)*cos (_AOS);
335341 R[1 ][2 ]=sin (_AOS);
336342 R[1 ][3 ]=sin (_AOA)*sin (_AOS);
337- R[2 ][1 ]=-cos (_AOA)*sin (_AOS);
343+ R[2 ][1 ]=-1 * cos (_AOA)*sin (_AOS);
338344 R[2 ][2 ]=cos (_AOS);
339- R[2 ][3 ]=-sin (_AOA)*sin (_AOS);
340- R[3 ][1 ]=-sin (_AOA);
345+ R[2 ][3 ]=-1 * sin (_AOA)*sin (_AOS);
346+ R[3 ][1 ]=-1 * sin (_AOA);
341347 R[3 ][2 ]=0 ;
342348 R[3 ][3 ]=cos (_AOA);
349+ Serial.Println (" Debug" )
350+ Matrix.Print ((float *)R,3 ,3 ," R" );
343351
344352// Calculation of Position vector in wind axes
345353 Matrix.Multiply ((float *)R,(float *)PB,3 ,3 ,1 ,(float *)PW);
346- // Calculation angular rates at tip in wind frame, attention low angular acceleration assumed . High rates in method 2 .
354+ // Calculation of angular rates at tip in wind frame. Attention, assumed low angular acceleration. High rates in another method .
347355 Matrix.Multiply ((float *)R,(float *)WB,3 ,3 ,1 ,(float *)WW);
356+ Serial.Println (" Debug" )
357+ Matrix.Print ((float *)PW,3 ,1 ," PW" );
358+ Matrix.Print ((float *)WW,3 ,1 ," WW" );
348359// Calculation of velocity vector at tip in wind coordinates
349360// Cross product WWxPW
350361 PWDOT[1 ][1 ]=WW[2 ][1 ]*PW[3 ][1 ]-WW[3 ][1 ]*PW[2 ][1 ];
@@ -354,6 +365,8 @@ void AirDC::PitotCorrection(int mode)
354365 VCorrected[1 ][1 ]=_TAS-PWDOT[1 ][1 ];
355366 VCorrected[2 ][1 ]= -PWDOT[2 ][1 ];
356367 VCorrected[3 ][1 ]= -PWDOT[3 ][1 ];
368+ Serial.Println (" Debug" )
369+ Matrix.Print ((float *)VCorrected,3 ,1 ," VCorrected" );
357370 // _TASPCorrected=sqrt(pow(VCorrected[1][1],2)+pow(VCorrected[2][1],2)+pow(VCorrected[3][1],2));
358371 _TASPCorrected=0 ;
359372 break ;
0 commit comments