paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [4564]


From: antoine drouin
Subject: [paparazzi-commits] [4564]
Date: Tue, 23 Feb 2010 17:46:24 +0000

Revision: 4564
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4564
Author:   poine
Date:     2010-02-23 17:46:24 +0000 (Tue, 23 Feb 2010)
Log Message:
-----------


Modified Paths:
--------------
    paparazzi3/trunk/sw/simulator/scilab/q3d/povray/q3d.inc
    paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_diff_flatness.sci
    paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_display.sci
    paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_sbb.sci
    paparazzi3/trunk/sw/simulator/scilab/q3d/test_stop_stop.sce

Added Paths:
-----------
    paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_fo_traj_misc.sci
    paparazzi3/trunk/sw/simulator/scilab/q3d/test_circle.sce

Modified: paparazzi3/trunk/sw/simulator/scilab/q3d/povray/q3d.inc
===================================================================
--- paparazzi3/trunk/sw/simulator/scilab/q3d/povray/q3d.inc     2010-02-23 
17:44:54 UTC (rev 4563)
+++ paparazzi3/trunk/sw/simulator/scilab/q3d/povray/q3d.inc     2010-02-23 
17:46:24 UTC (rev 4564)
@@ -43,8 +43,8 @@
 #declare cam_look_y = 0;
 #declare cam_look_z = 0;
 
-//#declare cam_a = 32;
-#declare cam_a = 10;
+#declare cam_a = 32;
+//#declare cam_a = 10;
 
 camera
 {
@@ -53,21 +53,21 @@
        angle cam_a
 }
 
-#local lgt1_pos_x = 340;
-#local lgt1_pos_y = 510;
-#local lgt1_pos_z = 260;
+#local lgt1_pos_x = 3400;
+#local lgt1_pos_y = 5100;
+#local lgt1_pos_z = 2600;
 #local lgt1_intense = 0.763488;
-#local lgt2_pos_x = -340;
-#local lgt2_pos_y = 510;
-#local lgt2_pos_z = 260;
+#local lgt2_pos_x = -3400;
+#local lgt2_pos_y = 5100;
+#local lgt2_pos_z = 2600;
 #local lgt2_intense = 0.763488;
-#local lgt3_pos_x = 340;
-#local lgt3_pos_y = 510;
-#local lgt3_pos_z = -170;
+#local lgt3_pos_x = 3400;
+#local lgt3_pos_y = 5100;
+#local lgt3_pos_z = -1700;
 #local lgt3_intense = 0.763488;
-#local lgt4_pos_x = -340;
-#local lgt4_pos_y = 510;
-#local lgt4_pos_z = -170;
+#local lgt4_pos_x = -3400;
+#local lgt4_pos_y = 5100;
+#local lgt4_pos_z = -1700;
 #local lgt4_intense = 0.763488;
 
 light_source{<lgt1_pos_x,lgt1_pos_y,lgt1_pos_z> White*lgt1_intense}
@@ -75,4 +75,19 @@
 light_source{<lgt3_pos_x,lgt3_pos_y,lgt3_pos_z> White*lgt3_intense}
 light_source{<lgt4_pos_x,lgt4_pos_y,lgt4_pos_z> White*lgt4_intense}
 
+
+//plane { -y, 3000 texture{T_Chrome_2D normal{waves 0.1 frequency 3000.0 scale 
30.0}} translate<0,0,0>}
+//plane { -z, 3000 texture{T_Chrome_2D normal{waves 0.1 frequency 3000.0 scale 
30.0}} translate<0,0,0>}
+
+plane { -y, 3000 texture{T_Chrome_2D}}
+//plane { -z, 3000 texture{T_Chrome_2D}}
+
+sky_sphere {pigment {Navy}
+pigment {bozo turbulence 0.65 octaves 7 omega 0.7 lambda 2
+color_map {
+[0.0 0.1 color rgb <0.85, 0.85, 0.85> color rgb <0.75, 0.75, 0.75>]
+[0.1 0.5 color rgb <0.75, 0.75, 0.75> color rgbt <1, 1, 1, 1>]
+[0.5 1.0 color rgbt <1, 1, 1, 1> color rgbt <1, 1, 1, 1>]}
+scale <0.1, 0.5, 0.1>} rotate 90*z}
+
 background{Gray50}
\ No newline at end of file

Modified: paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_diff_flatness.sci
===================================================================
--- paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_diff_flatness.sci      
2010-02-23 17:44:54 UTC (rev 4563)
+++ paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_diff_flatness.sci      
2010-02-23 17:46:24 UTC (rev 4564)
@@ -51,37 +51,6 @@
 endfunction
 
 
-// 
-function [fo] = df_get_traj_polynomial(Xin, Xout, Uin, Uout, time)
 
-  fo = zeros(DF_OSIZE*DF_ORANK, length(time));
-  // boundary conditions
-  fo(1,1)  = Xin(FDM_SX);
-  fo(2,1)  = Xin(FDM_SZ);
-  fo(3,1)  = Xin(FDM_SXD);
-  fo(4,1)  = Xin(FDM_SZD);
-  fo(5,1)  = -Uin(1)*sin(Xin(FDM_STHETA));
-  fo(6,1)  =  Uin(1)*(cos(Xin(FDM_STHETA)) - 1);
-  fo(7,1)  = 0;
-  fo(8,1)  = 0;
-  fo(9,1)  = 0;
-  fo(10,1) = 0;
-  
-  fo(1, length(time)) = Xout(FDM_SX);
-  fo(2, length(time)) = Xout(FDM_SZ);
-  fo(3, length(time)) = Xout(FDM_SXD);
-  fo(4, length(time)) = Xout(FDM_SZD);
-  fo(5, length(time)) = -Uout(1)*sin(Xout(FDM_STHETA));
-  fo(6, length(time)) =  Uout(1)*(cos(Xout(FDM_STHETA)) - 1);
-  fo(7, length(time)) = 0;
-  fo(8, length(time)) = 0;
-  fo(9, length(time)) = 0;
-  fo(10,length(time)) = 0;  
 
- 
-endfunction
 
-
-
-
-

Modified: paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_display.sci
===================================================================
--- paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_display.sci    2010-02-23 
17:44:54 UTC (rev 4563)
+++ paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_display.sci    2010-02-23 
17:46:24 UTC (rev 4564)
@@ -104,27 +104,27 @@
 function display_fo_ref(time, diff_flat_ref)
 
   subplot(2,3,1);
-  plot2d(fdm_time, diff_flat_ref(FDM_SX, :));
+  plot2d(time, diff_flat_ref(FDM_SX, :));
   xtitle('X');
 
   subplot(2,3,2);
-  plot2d(fdm_time, diff_flat_ref(FDM_SZ, :));
+  plot2d(time, diff_flat_ref(FDM_SZ, :));
   xtitle('Z');
 
   subplot(2,3,3);
-  plot2d(fdm_time, deg_of_rad(diff_flat_ref(FDM_STHETA, :)));
+  plot2d(time, deg_of_rad(diff_flat_ref(FDM_STHETA, :)));
   xtitle('Theta');
 
   subplot(2,3,4);
-  plot2d(fdm_time, diff_flat_ref(FDM_SXD, :));
+  plot2d(time, diff_flat_ref(FDM_SXD, :));
   xtitle('Xd');
 
   subplot(2,3,5);
-  plot2d(fdm_time, diff_flat_ref(FDM_SZD, :));
+  plot2d(time, diff_flat_ref(FDM_SZD, :));
   xtitle('Zd');
 
   subplot(2,3,6);
-  plot2d(fdm_time, deg_of_rad(diff_flat_ref(FDM_STHETAD, :)));
+  plot2d(time, deg_of_rad(diff_flat_ref(FDM_STHETAD, :)));
   xtitle('Thetad');
   
   endfunction
\ No newline at end of file

Added: paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_fo_traj_misc.sci
===================================================================
--- paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_fo_traj_misc.sci               
                (rev 0)
+++ paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_fo_traj_misc.sci       
2010-02-23 17:46:24 UTC (rev 4564)
@@ -0,0 +1,50 @@
+
+
+function [fo_traj] = fo_traj_circle(time, _center, radius, omega)
+  
+  n_comp = 2;
+  order = 5;
+  fo_traj = zeros(n_comp, order, length(time));
+
+  for i=1:length(time)
+    
+    alpha = omega*time(i);
+    fo_traj(1,1,i) = _center(1) + radius * cos(alpha);
+    fo_traj(2,1,i) = _center(1) + radius * sin(alpha);
+
+    fo_traj(1,2,i) = -omega * radius * sin(alpha);
+    fo_traj(2,2,i) =  omega * radius * cos(alpha);
+    
+    fo_traj(1,3,i) = -omega^2 * radius * cos(alpha);
+    fo_traj(2,3,i) = -omega^2 * radius * sin(alpha);
+
+    fo_traj(1,4,i) =  omega^3 * radius * sin(alpha);
+    fo_traj(2,4,i) = -omega^3 * radius * cos(alpha);
+
+    fo_traj(1,5,i) =  omega^4 * radius * cos(alpha);
+    fo_traj(2,5,i) =  omega^4 * radius * sin(alpha);
+  
+  end  
+
+
+endfunction
+
+
+function [time_out, traj_out] = merge_traj(time_in, traj_in)
+  time_out = [];
+  for t=time_in
+    time_out = [time_out t];
+  end
+  traj_out = 0;
+  [nb_comp, nb_order, foo] = size(traj_in(1));
+  traj_out = zeros(nb_comp, nb_order, length(time_out));
+
+  l=1;
+  for i=1:length(time_in)
+    for j=1:length(time_in(i))
+      ti = traj_in(i);
+      traj_out(:,:,l) = ti(:,:,j);
+      l=l+1;
+    end
+  end
+endfunction

Modified: paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_sbb.sci
===================================================================
--- paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_sbb.sci        2010-02-23 
17:44:54 UTC (rev 4563)
+++ paparazzi3/trunk/sw/simulator/scilab/q3d/q3d_sbb.sci        2010-02-23 
17:46:24 UTC (rev 4564)
@@ -4,59 +4,61 @@
 //
 //
 
-sbb_omega = rad_of_deg(500);
-sbb_ksi = 0.70;
-sbb_tolerance = 0.05;
+sbb_tolerance = 0.025;
 
-function [fo_traj] = sbb_gen_traj(time, max_xd, max_theta, b0, b1)
+function [fo_traj] = sbb_gen_traj(time, dyn, max_speed, max_accel, b0, b1)
   n_comp = 2;
   order = 5;
   fo_traj = zeros(n_comp, order, length(time));
 
-  // compute trajectory caracteristics
-  dx = b1(1)-b0(1);
-  step_dt = -log(sbb_tolerance)/(sbb_ksi*sbb_omega*sqrt(1-sbb_ksi^2));
-  step_xdd = dx / (2*step_dt^2);
-  max_xdd = 9.81 * tan(max_theta);
+  for compo=1:n_comp 
+    // compute trajectory caracteristics
+    dist = b1(compo)-b0(compo);
+    if (abs(dist) > 0.01)
+      step_dt = 
-log(sbb_tolerance)/(dyn(compo,2)*dyn(compo,1)*sqrt(1-dyn(compo,2)^2));
+      step_xdd = dist / (2*step_dt^2);
   
-  if step_xdd < max_xdd
-    if step_xdd > max_xd/step_dt
-      step_xdd = max_xd/step_dt;
-    end
-  else
-    step_xdd = max_xdd;
-    if step_xdd <= max_xd/step_dt
-      step_dt = max_xd/step_xdd;
+      if step_xdd < max_accel(compo)
+        if step_xdd > max_speed(compo)/step_dt
+          step_xdd = max_speed(compo)/step_dt;
+        end
+      else
+        step_xdd = max_accel(compo);
+        if step_xdd <= max_speed(compo)/step_dt
+          step_dt = max_speed(compo)/step_xdd;
+        else
+          step_xdd = max_speed(compo)/step_dt;
+        end
+      end
+      t_tot = (dist - 2*step_dt*(step_xdd*step_dt))/(step_xdd*step_dt) + 
4*step_dt;
     else
-      step_xdd = max_xd/step_dt;
+      step_dt = 0;
+      step_xdd = 0;
+      t_tot = 0;
     end
-  end
-
-  t_tot = (dx - 2*step_dt*(step_xdd*step_dt))/(step_xdd*step_dt) + 4*step_dt;
-
-  printf('dx        :%f\n', dx);
-  printf('step_dt   :%f\n', step_dt);
-  printf('step_xdd  :%f\n', step_xdd);
-  printf('total time:%f\n', t_tot);
+    printf('dist      :%f\n', dist);
+    printf('step_dt   :%f\n', step_dt);
+    printf('step_xdd  :%f\n', step_xdd);
+    printf('total time:%f\n', t_tot);
   
   
-  fo_traj(1,1,1) = b0(1);
-  for i=2:length(time)
-    if time(i) < step_dt
-      sp = step_xdd;      
-    elseif time(i) < t_tot - step_dt & time(i) >= t_tot -  2 * step_dt
-      sp = -step_xdd;      
-    else
-      sp = 0;
+    fo_traj(compo,1,1) = b0(compo);
+      for i=2:length(time)
+        if time(i)-time(1) < step_dt
+          sp = step_xdd;      
+        elseif time(i)-time(1) < t_tot - step_dt & time(i)-time(1) >= t_tot -  
2 * step_dt
+          sp = -step_xdd;      
+        else
+          sp = 0;
+        end
+        fo_traj(compo,:,i) = propagate_traj(fo_traj(compo,:,i-1), 
dyn(compo,:), sp, time(i) - time(i-1)); 
+      end
     end
-    fo_traj(1,:,i) = propagate_traj(fo_traj(1,:,i-1), sp, time(i) - 
time(i-1)); 
-  end
-
+    
 endfunction
 
-
-function [Xi1] = propagate_traj(Xi, sp, dt)
+function [Xi1] = propagate_traj(Xi, dyn, sp, dt)
   Xi1 = zeros(1,5);
   Xi1(1:4) = Xi(1:4) +  Xi(2:5)*dt;
-  Xi1(5) = -2*sbb_ksi*sbb_omega*Xi1(4)-sbb_omega^2*(Xi1(3)-sp);
+  Xi1(5) = -2*dyn(2)*dyn(1)*Xi1(4)-dyn(1)^2*(Xi1(3)-sp);
 endfunction

Added: paparazzi3/trunk/sw/simulator/scilab/q3d/test_circle.sce
===================================================================
--- paparazzi3/trunk/sw/simulator/scilab/q3d/test_circle.sce                    
        (rev 0)
+++ paparazzi3/trunk/sw/simulator/scilab/q3d/test_circle.sce    2010-02-23 
17:46:24 UTC (rev 4564)
@@ -0,0 +1,79 @@
+clear()
+exec('q3d_utils.sci');
+
+exec('q3d_polynomials.sci');
+exec('q3d_fo_traj_misc.sci');
+
+exec('q3d_diff_flatness.sci');
+exec('q3d_fdm.sci');
+exec('q3d_display.sci');
+exec('q3d_povray.sci');
+
+
+t0 = 0;
+t1 = 5.;
+t2 = 15.;
+t3 = 20.;
+dt = 1/512;
+time1 = t0:dt:t1;
+time2 = t1:dt:t2;
+time3 = t2:dt:t3;
+
+[fo_traj2] = fo_traj_circle(time2, [0 0], 2, rad_of_deg(45));
+
+b0 = [-5 0 0 0 0; 0 0 0 0 0];
+b1 = [ fo_traj2(1,:,1); fo_traj2(2,:,1)];
+[coefs] = poly_get_coef_from_bound(time1, b0, b1);
+[fo_traj1] = poly_gen_traj(time1, coefs);
+
+b0 = [ fo_traj2(1,:,$); fo_traj2(2,:,$)];
+b1 = [-5 0 0 0 0; 0 0 0 0 0];
+[coefs] = poly_get_coef_from_bound(time3, b0, b1);
+[fo_traj3] = poly_gen_traj(time3, coefs);
+
+
+[time, fo_traj] = merge_traj(list(time1, time2, time3), list(fo_traj1, 
fo_traj2, fo_traj3));
+ 
+ 
+diff_flat_cmd = zeros(2,length(time));
+diff_flat_ref = zeros(FDM_SSIZE, length(time));
+for i=1:length(time)
+  diff_flat_cmd(:,i) = df_input_of_fo(fo_traj(:,:,i));
+  diff_flat_ref(:,i) = df_state_of_fo(fo_traj(:,:,i));
+end
+
+fdm_init(time, df_state_of_fo(fo_traj(:,:,1))); 
+for i=2:length(time)
+  u1 = diff_flat_cmd(1,i-1);
+  u2 = diff_flat_cmd(2,i-1);
+  m1 = 0.5*(u1+u2);
+  m2 = 0.5*(u1-u2);
+  fdm_run(i, [m1 m2]')
+end
+
+set("current_figure",0);
+clf();
+f=get("current_figure");
+f.figure_name="Flat Outputs Trajectory";
+display_fo(time, fo_traj);
+
+set("current_figure",1);
+clf();
+f=get("current_figure");
+f.figure_name="Commands";
+display_commands(time, diff_flat_cmd);
+
+set("current_figure",2);
+clf();
+f=get("current_figure");
+f.figure_name="Reference";
+display_fo_ref(time, diff_flat_ref);
+
+set("current_figure",3);
+clf();
+f=get("current_figure");
+f.figure_name="FDM";
+display_fdm();
+
+
+povray_draw(time, diff_flat_ref);

Modified: paparazzi3/trunk/sw/simulator/scilab/q3d/test_stop_stop.sce
===================================================================
--- paparazzi3/trunk/sw/simulator/scilab/q3d/test_stop_stop.sce 2010-02-23 
17:44:54 UTC (rev 4563)
+++ paparazzi3/trunk/sw/simulator/scilab/q3d/test_stop_stop.sce 2010-02-23 
17:46:24 UTC (rev 4564)
@@ -3,6 +3,7 @@
 
 exec('q3d_polynomials.sci');
 exec('q3d_sbb.sci');
+exec('q3d_fo_traj_misc.sci');
 
 exec('q3d_diff_flatness.sci');
 exec('q3d_fdm.sci');
@@ -11,8 +12,8 @@
 
 
 t0 = 0;
-t1 = 4.5;
-dt = 0.01;
+t1 = 10.;
+dt = 1/512;
 time = t0:dt:t1;
 
 if (0)
@@ -21,13 +22,22 @@
   b1 = [2 0 0 0 0; 0 0 0 0 0];
   [coefs] = poly_get_coef_from_bound(time, b0, b1);
   [fo_traj] = poly_gen_traj(time, coefs);
-else
+end
+if (0)
 // differential equation
-  [fo_traj] = sbb_gen_traj(time, 5, rad_of_deg(29.983325), [-1 0], [1 0]);
-  printf('xfinal:%f\n',fo_traj(1,1,$)); 
-
+  dyn = [rad_of_deg(500) 0.7; rad_of_deg(500) 0.7];
+  max_speed = [5 2.5];
+  max_accel = [ 9.81*tan(rad_of_deg(29.983325)) 0.5*9.81];
+  b0 = [-5 0];
+  b1 = [ 5 -2];
+  [fo_traj] = sbb_gen_traj(time, dyn, max_speed, max_accel, b0, b1);
+  printf('xfinal %f, zfinal:%f\n',fo_traj(1,1,$), fo_traj(2,1,$));
 end
-
+if (1)
+ [fo_traj] = fo_traj_circle(time, [0 0], 2, rad_of_deg(45));
+end
+ 
+ 
 diff_flat_cmd = zeros(2,length(time));
 diff_flat_ref = zeros(FDM_SSIZE, length(time));
 for i=1:length(time)
@@ -44,9 +54,6 @@
   fdm_run(i, [m1 m2]')
 end
 
-
-povray_draw(time, diff_flat_ref);
-
 set("current_figure",0);
 clf();
 f=get("current_figure");
@@ -69,4 +76,7 @@
 clf();
 f=get("current_figure");
 f.figure_name="FDM";
-display_fdm();
\ No newline at end of file
+display_fdm();
+
+
+povray_draw(time, diff_flat_ref);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]