mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-06 16:58:48 +08:00
*** empty log message ***
This commit is contained in:
@@ -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-');
|
||||
@@ -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-');
|
||||
@@ -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);
|
||||
@@ -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
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user