*** empty log message ***

This commit is contained in:
Antoine Drouin
2008-01-18 15:22:33 +00:00
parent ea68b1d0b8
commit 604f33e4dd
6 changed files with 253 additions and 17 deletions
+56
View File
@@ -0,0 +1,56 @@
clear();
getf('mb_utils.sci');
filename = "data/steps_stout_aero_geared.txt";
[time, throttle, rpm, amp, thrust, torque] = read_mb_log(filename);
// design an iir low pass with cutoff freq at 125Hz
hz=iir(3,'lp','ellip',[0.5 0.5],[.01 .01]);
//[hzm,fr]=frmag(hz,256);
//plot2d(fr',hzm',3)
[rpm_lp] = rtitr(hz(2), hz(3), rpm);
//if 0
xbasc();
subplot(2,1,1)
xtitle('Throttle');
plot(time(30:length(time)), throttle(30:length(throttle)), 'b-');
subplot(2,1,2)
plot(time(30:length(time)), rpm(30:length(rpm)), 'r-');
plot(time(30:length(time)), rpm_lp(30:length(rpm_lp)), 'g-');
//end
s_avg = 30;
e_avg = 118;
rpm0 = mean(rpm(s_avg:e_avg));
plot(time(s_avg:e_avg), rpm0*ones(1,e_avg - s_avg + 1), 'b-');
my_kv = 100000;
my_taukq = - 0.0003313; // plain wrong it seems :(
my_tau = 0.3; //
my_kq = my_taukq / my_tau; //
time_ode = time(s_avg:length(time));
u_ode = throttle(s_avg:length(throttle));
function rpm_dot = my_mot_ode(t, rpm)
if ((t >= 389.7960)& (t < 390.7960))
thr = 0.7;
else
thr = 0.6;
end
rpm_dot = mot_ode(my_tau, my_kq, my_kv, thr);
endfunction
rpm_sim = ode([rpm0], time(1), time_ode, my_mot_ode);
plot(time_ode, rpm_sim, 'r-');
+108
View File
@@ -0,0 +1,108 @@
clear();
getf('mb_utils.sci');
rank=[];
time_s=[];
time_r=[];
throttle_raw=[];
tacho_raw=[];
u=mopen('data/xxx_prbs.txt','r');
while meof(u) == 0,
line = mgetl(u, 1);
if strindex(line, '#') ~= 1 & length(line) ~= 0,
[nb_scan, _rank, _time_s, _time_r, _throttle_raw, _tacho_raw] = msscanf(1, line, '%x %x %x %x %x');
if nb_scan == 5,
rank = [rank _rank];
time_s = [time_s _time_s];
time_r = [time_r _time_r];
throttle_raw = [throttle_raw _throttle_raw];
tacho_raw = [tacho_raw _tacho_raw];
end
end
end
mclose(u);
// extract experiment
//EXPE_LEN = 4096;
EXPE_LEN = 100;
EXPE_START = 41;
rank = rank(EXPE_START:EXPE_START+EXPE_LEN);
time_s = time_s(EXPE_START:EXPE_START+EXPE_LEN);
time_r = time_r(EXPE_START:EXPE_START+EXPE_LEN);
throttle_raw = throttle_raw(EXPE_START:EXPE_START+EXPE_LEN);
tacho_raw = tacho_raw(EXPE_START:EXPE_START+EXPE_LEN);
// compute time
TICK_PER_S = 15625;
time = time_s + time_r / TICK_PER_S;
DT = (time(length(time)) - time(1)) / (length(time) - 1)
F_EC = 1 / DT
// normalise throttle
MAX_PPRZ = 9600;
throttle = throttle_raw / MAX_PPRZ;
// compute rpms
TICK_PER_ROTATION = 36;
rpm = tacho_raw / DT / TICK_PER_ROTATION * 60;
// integrate ODE
//kv0 = 100000;
kv0 = 22000;
//taukq = 0.0003313; //
taukq = 0.00001; //
//tau0 = 0.3; //
tau0 = 0.1; //
kq0 = taukq / tau0; //
rpm0 = rpm(1);
//idx = 1;
function rpm_dot = prbs_mot_ode(t, rpm)
idx=1;
while (time(idx) < t & idx < length(throttle)), idx=idx+1, end
// printf('%f %d %f\n', t, idx, time(idx));
rpm_dot = mot_ode(my_tau, my_kq, my_kv, throttle(idx), rpm);
endfunction
p0 = [tau0; kv0; kq0];
function e = err_prbs(p,z)
my_tau = p(1);
my_kv = p(2);
my_kq = p(3);
rpm_sim = ode([rpm0], time(1), time, prbs_mot_ode);
_diff = rpm_sim - rpm;
sq_diff = _diff^2;
e = sum(sq_diff);
endfunction
if 0
my_tau = tau0;
my_kv = kv0;
my_kq = kq0;
rpm_sim = ode([rpm0], time(1), time, prbs_mot_ode);
else
Z = [ 1; 1]; //unused...
[p, err] = datafit(err_prbs, Z, p0)
my_tau = p(1);
my_kv = p(2);
my_kq = p(3);
rpm_sim = ode([rpm0], time(1), time, prbs_mot_ode);
end
xbasc();
subplot(2,1,1);
xtitle('Throttle');
plot(time, throttle, 'b-');
subplot(2,1,2);
plot(time, rpm, 'r-');
plot(time, rpm_sim, 'b-');
+35
View File
@@ -0,0 +1,35 @@
clear();
getf('mb_utils.sci');
load('averaged_ramp_geared.dat','av_throttle','av_rpm')
// extract only data around operating point
//i_s = 20;
//i_e = 90;
i_s = 5;
i_e = 90;
t_part = av_throttle(i_s:i_e);
r_part = av_rpm(i_s:i_e);
// tau_kq kv dv
p0=[0.00001; 20000];
Z = [r_part; t_part];
//[p, err] = datafit(err_mot_lin, Z, p0);
[p, err] = datafit(err_mot_ric, Z, p0)
//p = p0;
xbasc();
//subplot(3,1,1);
xtitle('Rpms vs Throttle');
plot2d(av_throttle,av_rpm);
plot2d(t_part,r_part, 4);
r_fit = [];
for i=1:length(av_throttle)
// r_fit = [r_fit mot_lin(av_throttle(i), p)];
r_fit = [r_fit mot_ric_stat(av_throttle(i), p)];
end
plot2d(av_throttle,r_fit, 3);
+31
View File
@@ -111,3 +111,34 @@ function [] = param_fit(av_rpm, av_throttle)
plot2d(X,FF(X,p),12) //the solution
param_fitted=FF(X,p);
endfunction
function r = mot_lin(t, p)
r = p(1) * t + p(2);
endfunction
function e = err_mot_lin(p, z)
r=z(1), t=z(2);
e = r - mot_lin(t, p);
endfunction
function rpm = mot_ric_stat(throttle,param)
// maybe 1 +
tau_kq = param(1);
kv = param(2);
dv = 0.0;
rpm = (-1 + sqrt(1 + 4 * tau_kq * kv * (throttle + dv))) / (2 * tau_kq);
endfunction
function e = err_mot_ric(p, z)
r_meas = z(1);
throttle = z(2);
e = r_meas - mot_ric_stat(throttle, p);
endfunction
function rpm_dot = mot_ode(tau, kq, kv, V, rpm)
rpm_dot = -1/tau*rpm - kq * rpm^2 + kv/tau*(V);
endfunction
+22 -16
View File
@@ -2,22 +2,28 @@ clear();
getf('mb_utils.sci');
load('averaged_ramp_geared.dat','av_throttle','av_rpm')
//separating the values to 20% to 90%
start=(length(av_throttle)-1)/5
end=(length(av_throttle)-1)-(length(av_throttle)-1)/10
for i=start:end, sep_av_throttle(i-start+1)=av_throttle(i);end
for i=start:end, sep_av_rpm(i-start+1)=av_rpm(i);end
fitted_courve = param_fit(sep_av_rpm, sep_av_throttle);
//xbasc();
t_part = av_throttle(20:90);
r_part = av_rpm(20:90);
p0=[0.00001; 20000];
Z = [r_part; t_part];
//[p, err] = datafit(err_mot_lin, Z, p0);
[p, err] = datafit(err_mot_ric, Z, p0)
//p = p0;
xbasc();
//subplot(3,1,1);
//xtitle('Relative Throttle by RPM');
//plot2d(av_throttle,av_rpm);
xtitle('Rpms vs Throttle');
plot2d(av_throttle,av_rpm);
plot2d(t_part,r_part, 4);
//subplot(3,1,2);
//xtitle('Fittet Relative Throttle by RPM');
//plot2d(sep_av_throttle,[sep_av_rpm],style=[5,4]);
//subplot(3,1,3);
//xtitle('Fittet Relative Throttle by RPM');
//plot2d(sep_av_throttle,[fitted_courve],style=[4]);
r_fit = [];
for i=1:length(av_throttle)
// r_fit = [r_fit mot_lin(av_throttle(i), p)];
r_fit = [r_fit mot_ric(av_throttle(i), p)];
end
plot2d(av_throttle,r_fit, 3);
+1 -1
View File
@@ -5,7 +5,7 @@ getf('mb_utils.sci');
args = sciargs();
[nb_args, foo] = size(args)
filename = args(nb_args);
filename = "data/steps2_stout_aero_geared.txt"
[time, throttle, rpm, amp, thrust, torque] = read_mb_log(filename);