Kyohei Shinomoto
/
YNU_MPUd2h
ynu_mpu add vertical guidance
Fork of YNU_MPUd2 by
Revision 4:037fab837823, committed 2013-01-08
- Comitter:
- khoshino
- Date:
- Tue Jan 08 12:22:43 2013 +0000
- Parent:
- 3:17236ad0ff1e
- Commit message:
- add vertical guidance
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Jan 07 08:58:34 2013 +0000 +++ b/main.cpp Tue Jan 08 12:22:43 2013 +0000 @@ -34,6 +34,8 @@ //pc.baud(921600); mavc.baud(115200); + int flag = 0; + char buf_char; unsigned int buf_hex[30] = {0}; unsigned int buf_dec[10] = {0}; @@ -58,39 +60,41 @@ // ******************** HOSHINO ********************* float time = 0; //time - float xs = 0; - float ys = 0; + float xis = 0; + float ets = 0; float psis = 0; float x0 = 0; float y0 = 0; - float psi0 = 0; - float xf = 200; //syuutandaunrenji - float h0 = 200; - float hf = 10; + float drf = 800; //syuutandaunrenji + float ht0 = 200; + float htf = 10; float gm0 = 20*pi/180; float gmf = 5*pi/180; - float b0 = h0; + float b0 = ht0; float b1 = tan(gm0); - float b2 = (3*(hf-h0)-xf*(2*tan(gm0)+tan(gmf)))/(xf*xf); - float b3 = -(2*(hf-h0)-xf*(tan(gm0)+tan(gmf)))/(xf*xf*xf); - float hr = 0; - float x = 0; + float b2 = (3*(htf-ht0)-drf*(2*tan(gm0)+tan(gmf)))/(drf*drf); + float b3 = -(2*(htf-ht0)-drf*(tan(gm0)+tan(gmf)))/(drf*drf*drf); + float htc = 0; + float x = 0; //down range float ua = 10; //initial horizontal velosity - float xs1 = 0; - float ys1 = 0; - float xr = 0; - float yr = 0; + float xis1 = 0; + float ets1 = 0; + float xir = 0; + float etr = 0; float drc = 0; float dr = 0; - float dt = 0.1; - float psi = 1; + float dt = 0.1; + float psr = 0; + float htr = 0; + float avp = 0; + float avq = 0; + float avr = 0; float s = 0; //homotopy - float drf = 800.0; float rps0 = 90.0; - float rxi0 = -600.0; - float ret0 = -200.0; + float rxi0 = -600.0; //terminal xi + float ret0 = -200.0; //terminal et float ps0 = rps0*dtr; float xi0 = rxi0/drf; float et0 = ret0/drf; @@ -98,33 +102,35 @@ float ueps = 0.000001; float ier = 0.0; float sum = 0.0; - float ph0[mh] = {0.0}; - float phi[mh] = {0.0}; - float fn[mh] = {0.0}; - float wk[mh] = {0.0}; + float ph0[mh] = {0}; + float phi[mh] = {0}; + float fn[mh] = {0}; + float wk[mh] = {0}; int iwk[mh] = {0}; - float dph1[mh] = {0.0}; - float dph2[mh] = {0.0}; - float dph3[mh] = {0.0}; - float dph4[mh] = {0.0}; - float fph[mh][mh] = {0.0}; - float fpi[mh][mh] = {0.0}; - float x1[4][mt] = {0.0}; - float rl[4][mt] = {0.0}; + float dph1[mh] = {0}; + float dph2[mh] = {0}; + float dph3[mh] = {0}; + float dph4[mh] = {0}; + float fph[mh][mh] = {0}; + float fpi[mh][mh] = {0}; + float x1[4][mt] = {0}; + float rl[4][mt] = {0}; float qmax=0.0; float rdet =1.0; float idet =0.0; float t = 0.0; - float phf[mh]={0.0}; + float phf[mh]={0}; //********************* HOSHINO ********************* + //********************* OHTSU *********************** + //********************* OHTSU *********************** + FILE *fp = fopen("/sd/sdtest.txt", "w"); if(fp == NULL) { error("Could not open file for write\n"); } - while(1){ - //for(int j=0;j<1800;j++){ flag tukuru // for 2 minuts + while(flag<120){ //flag tukuru // for 2 minuts // ******************** sequence No.1 ******************** buf_char = mavc.getc(); @@ -158,34 +164,38 @@ // ******************** initialization ******************* if(t == 0){ - x0 = GPS[0]; - y0 = GPS[1]; - psi0= azi; + x0 = GPS[0]; + y0 = GPS[1]; + ps0 = azi; } - xs = GPS[0] - x0; - ys = GPS[1] - y0; - psis= azi - psi0; + xis = GPS[0] - x0; + ets = GPS[1] - y0; + psr = azi - ps0; + htr = alt; + avp = gyro[0]; + avq = gyro[1]; + avr = gyro[2]; // ******************** initialization ******************* // ******************** interpolation ******************** dr = dr + ua * dt; - xr = xr + ua * dt * cos(psi); - yr = yr + ua * dt * sin(psi); + xir = xir + ua * dt * cos(psr); + etr = etr + ua * dt * sin(psr); - if (xs != xs1 || fabs(xs-xs1)<50) { - s = (xs-xs1)*(xs-xs1)+(ys-ys1)*(ys-ys1); + if (xis != xis1 || fabs(xis-xis1)<50) { + s = (xis-xis1)*(xis-xis1)+(ets-ets1)*(ets-ets1); ua = 0.5*(ua+sqrt(s)); drc = drc+ua; dr= drc; - xr=xs; - yr=ys; + xir=xis; + etr=ets; } - xs1=xs; - ys1=ys; + xis1=xis; + ets1=ets; // ******************** interpolation ******************** // ******************** guidance law WO homo ************* - hr = b0 + b1*x + b2*x*x + b3*x*x*x; + htc = b0 + b1*dr + b2*dr*dr + b3*dr*dr*dr; /* c = drp-dr[i]; @@ -200,7 +210,7 @@ etc=c0*et[i+1]+c1*et[i]; break; } - */ + *///kurikaesituika // ******************** guidance law WO homo ************* @@ -211,7 +221,9 @@ // !!! HOSHINO !!! fprintf add guidance, velocity and control fprintf(fp, "%7.4f %7.4f %7.4f %7.3f %7.3f %7.3f %8.5f %8.1f %8.1f %8.1f\r\n", acc[0], acc[1], acc[2], gyro[0], gyro[1], gyro[2], azi, alt, GPS[0], GPS[1]); - + + flag++; + } time = time + 0.1;