From 8f784d470cd193dcc463ec87ac8b4c45cbd4d74c Mon Sep 17 00:00:00 2001 From: "Ciccarelli, Edoardo (PG/R - Comp Sci & Elec Eng)" <e.ciccarelli@surrey.ac.uk> Date: Wed, 22 Mar 2023 15:40:00 +0000 Subject: [PATCH] IT WORKS! --- Analisys_With_Features.m | 78 +++++++ CovarianceAnalysisParameters.m | 7 +- Measurement_read.m | 68 ++++++ Observables_model_with_Features.m | 189 +++++++++++++++++ Observations_Generation.m | 20 +- Observations_with_features.m | 76 ++++--- PlotGeometryAndLight.m | 8 +- Results.m | 330 ++++++++++++++++++++++++++++++ Test_Features.m | 53 +++++ UKF_Tool.m | 301 +++++++++++++++++++++++++++ YObs.mat | Bin 0 -> 84280 bytes features_list.m | 11 + visible_features.m | 5 +- 13 files changed, 1103 insertions(+), 43 deletions(-) create mode 100644 Analisys_With_Features.m create mode 100644 Measurement_read.m create mode 100644 Observables_model_with_Features.m create mode 100644 Results.m create mode 100644 Test_Features.m create mode 100644 UKF_Tool.m create mode 100644 YObs.mat create mode 100644 features_list.m diff --git a/Analisys_With_Features.m b/Analisys_With_Features.m new file mode 100644 index 0000000..b62aae3 --- /dev/null +++ b/Analisys_With_Features.m @@ -0,0 +1,78 @@ +clear +close all +clc + +%% Setup + + warning('off', 'all'); format longG; + set(0,'DefaultTextInterpreter','latex'); + set(0,'DefaultAxesFontSize', 16); + +% Mac + restoredefaultpath + addpath('../useful_functions/'); + addpath('../dynamical_model/'); + addpath(genpath('../mice/')); + addpath(genpath('../computer-vision/')); + addpath(genpath('../paper/')); + addpath(genpath('../generic_kernels/')); + addpath(genpath('../paper/MMX_Fcn_CovarianceAnalyses/')); + addpath(genpath('../paper/MMX_Product/MMX_BSP_Files_GravLib/')); + MMX_InitializeSPICE + cspice_furnsh(which('mar097.bsp')); + cspice_furnsh(which('MARPHOFRZ.txt')); + cspice_furnsh(which('MMX_QSO_049_2x2_826891269_828619269.bsp')); + cspice_furnsh(which('Phobos_826891269_828619269.bsp')); + + +%% Load observations and path for syntethic pictures + + load("YObs.mat"); + + +%% Initial conditions for the analysis + +% Model parameters + [par, units] = MMX_DefineNewModelParametersAndUnits; + +% Time of the analysis + data = '2026-03-16 00:00:00 (UTC)'; + data = cspice_str2et(data); + day = 86400; + par.et0 = data; + [Ph,par] = Phobos_States_NewModel(data,par); + +% Covariance analysis parameters + [par, units] = CovarianceAnalysisParameters(par, units); + par.sigma = 1e-10/(units.vsf*units.tsf); + par.sigmaPh = 0/(units.vsf*units.tsf); + +% Initial Phobos's state vector + Ph0 = Ph./units.sfVec2; + +% Initial MMX's State vector + MMX0 = cspice_spkezr('-34', data, 'MarsIAU', 'none', '499'); + MMX0 = MMX0./units.sfVec; + +% Analysis initial state vector + St0 = [MMX0; Ph0; par.I2; par.bias]; + + Est0.X = St0; + Est0.dx = zeros(size(St0,1),1); + Est0.P0 = par.P0; + Est0.t0 = data*units.tsf; + +%% Analysis + + par.alpha = 1; + par.beta = 2; + file_features = 'Principal_Phobos_Ogni10.mat'; + + [Est] = UKF_Tool(Est0,@Dynamics_MPHandMMX_Inertia,... + @Cov_Dynamics_Good, @Observables_model_with_Features,... + par.R,YObs,par,units,file_features); + + + Results(Est, YObs, par, units) + + diff --git a/CovarianceAnalysisParameters.m b/CovarianceAnalysisParameters.m index 3c31b03..0e1d8df 100644 --- a/CovarianceAnalysisParameters.m +++ b/CovarianceAnalysisParameters.m @@ -1,7 +1,7 @@ function [pars, units] = CovarianceAnalysisParameters(pars, units) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% [pars, units] = New_MMX_CovarianceAnalysisParameters(pars, units) +% [pars, units] = CovarianceAnalysisParameters(pars, units) % % This function adds some units and parameters useful to the covariance % analysis @@ -16,6 +16,9 @@ function [pars, units] = CovarianceAnalysisParameters(pars, units) % pars.ObsNoise.range_rate Standard deviation of the relative velocity measure % pars.ObsNoise.lidar Standard deviation of the lidar measure % pars.ObsNoise.camera Standard deviation of the camera measure +% pars.ObsNoise.pixel Standard deviation of the pixel error +% pars.camera_intrinsic Camera intrinsic matrix +% pars.FOV Camera Filed Of View % pars.interval Seconds between observations % pars.Clm Vector with all the Clm coefficients % pars.Slm Vector with all the Slm coefficients @@ -99,7 +102,7 @@ units.CovDim = (repmat(units.Dim, 1, length(units.Dim)).*... % A-priori covariance pars.P0 = diag(([.3*ones(3,1); .3e-3*ones(3,1);... - 1e-1; 1e-4; 1e-5; 1e-7; 3e-1; 1e-3; 3e-1; 1e-3; 1e-2*ones(pars.nCoeff,1);... + 1e-1; 1e-4; 1e-5; 1e-7; 1; 1e-2; 1e-1; 1e-3; 1e-2*ones(pars.nCoeff,1);... 1; 1e-3; 1]./units.Dim).^2); end \ No newline at end of file diff --git a/Measurement_read.m b/Measurement_read.m new file mode 100644 index 0000000..89729c3 --- /dev/null +++ b/Measurement_read.m @@ -0,0 +1,68 @@ +function [Yobs, R, Stat_ID_Range, Stat_ID_Rate, check_Lidar, Features_ID] = Measurement_read(Measures,O,units) + + Y_obs = []; + R = []; + Stat_ID_Range = []; + Stat_ID_Rate = []; + Features_ID = []; + + if ~isempty(Measures.Range) + which = ~isnan(Measures.Range); + count = sum(~isnan(Measures.Range)); + + if ~isnan(Measures.Range(1)) + Stat_ID_Range = [Stat_ID_Range; 1]; + end + + if ~isnan(Measures.Range(2)) + Stat_ID_Range = [Stat_ID_Range; 2]; + end + + if ~isnan(Measures.Range(3)) + Stat_ID_Range = [Stat_ID_Range; 3]; + end + + Ranges = Measures.Range(which); + Y_obs = Ranges./units.lsf; + R = ones(count,1)*O(1,1); + + end + + if ~isempty(Measures.Rate) + which = ~isnan(Measures.Rate); + count = sum(~isnan(Measures.Rate)); + + if ~isnan(Measures.Rate(1)) + Stat_ID_Rate = [Stat_ID_Rate; 1]; + end + + if ~isnan(Measures.Rate(2)) + Stat_ID_Rate = [Stat_ID_Rate; 2]; + end + + if ~isnan(Measures.Rate(3)) + Stat_ID_Rate = [Stat_ID_Rate; 3]; + end + + Rates = Measures.Rate(which); + Y_obs = [Y_obs; Rates./units.vsf]; + R = [R; ones(count,1)*O(2,2)]; + end + + if ~isempty(Measures.Lidar) + check_Lidar = 1; + Lidar = Measures.Lidar; + Y_obs = [Y_obs; Lidar./units.lsf]; + R = [R; O(3,3)]; + end + + Yobs.meas = Y_obs; + + if ~isempty(Measures.Features) + Features_ID = Measures.Features(end,:); + Yobs.cam = Measures.Features; + else + Yobs.cam = []; + end + +end \ No newline at end of file diff --git a/Observables_model_with_Features.m b/Observables_model_with_Features.m new file mode 100644 index 0000000..0443873 --- /dev/null +++ b/Observables_model_with_Features.m @@ -0,0 +1,189 @@ +function [G, Rm] = Observables_model_with_Features(et, X, St_ID_Range, St_ID_Rate,... + Lidar_check, Feature_ID, pars, units, O, file_features) +%========================================================================== +% [G, R] = Observables_model_with_Features(et,Obs,X,St_ID_Range,St_ID_Rate, Feature_ID, par,units) +% +% Compute the Range, Range Rate, Lidar's and camera's measures +% +% INPUT: Description Units +% +% et - Time Epoch s +% +% stationID - Available Observables at the epoch t +% +% X - State Vector defined in the Phobos rotating frame +% at the time being considered (42x1) +% .MMX Position Vector (3x1) km +% .MMX Velocity Vector (3x1) km/s +% .Phobos Position Vector (3x1) km +% .Phobos Velocity Vector (3x1) km/s +% .Clm harmonics coefficients +% .Slm Hamronics coefficients +% .State Transition Matrix +% +% par - Parameters structure +% +% +% OUTPUT: +% +% G - G +% +% DO NOT FORGET TO USE RESHAPE LATER IN THE PROJECT +% +% Coupling: +% None +% +% Author: Edoardo Ciccarelli +% Date: 06/2022 +% +%========================================================================== + +% Dimensions of the problem + n = pars.d/2; + d = pars.d; + +% Output initialization + range_Camb = []; + range_rate_Camb = []; + range_Gold = []; + range_rate_Gold = []; + range_Mad = []; + range_rate_Mad = []; + lidar = []; + + Rm = []; + +% Unpacking of the state vector + X_MMX = X(1:d); + r_MMX = X_MMX(1:3); + v_MMX = X_MMX(4:6); + r_Phobos = pars.perifocal2MARSIAU*X(d+1)*[cos(X(d+3)); sin(X(d+3)); 0]; + + switch size(X,1) + case 17 + bias = pars.bias; + case 18 + bias = X(16:end); + case 20 + bias = X(18:end); + end + +% Definition of Mars position WRT Earth J2000 + [Mars, ~] = cspice_spkezr('499',et,'MARSIAU','none','399'); + Mars = Mars./units.sfVec; + + +% Which station is working +% Camberra's Position in the J2000 Earth-centered + [Camb, ~] = cspice_spkezr('DSS-45', et, 'MARSIAU', 'none', 'EARTH'); + Camb = Camb./units.sfVec; +% Goldstone's Position in the J2000 Earth-centered + [Gold, ~] = cspice_spkezr('DSS-24', et, 'MARSIAU', 'none', 'EARTH'); + Gold = Gold./units.sfVec; +% Madrid's Position in the J2000 Earth-centered + [Mad, ~] = cspice_spkezr('DSS-65', et, 'MARSIAU', 'none', 'EARTH'); + Mad = Mad./units.sfVec; + + if sum((St_ID_Range == 1)==1) +% Camberra antennas available + r = norm(Mars(1:n) + r_MMX - Camb(1:n)); + range_Camb = r + bias(1); + Rm = [Rm; O(1,1)]; + end + + if sum((St_ID_Rate == 1)==1) +% Camberra antennas available + R = norm(Mars(1:n) + r_MMX - Camb(1:n)); + r_dot = 1/R*sum((Mars(n+1:d) + v_MMX - Camb(n+1:d)).*(Mars(1:n) + r_MMX - Camb(1:n))); + range_rate_Camb = r_dot + bias(2); + Rm = [Rm; O(2,2)]; + end + + if sum((St_ID_Range == 2)==1) +% Goldstone antennas available + r = norm(Mars(1:n) + r_MMX - Gold(1:n)); + range_Gold = r + bias(1); + Rm = [Rm; O(1,1)]; + end + + if sum((St_ID_Rate == 2)==1) +% Goldstone antennas available + R = norm(Mars(1:n) + r_MMX - Gold(1:n)); + r_dot = 1/R*sum((Mars(n+1:d) + v_MMX - Gold(n+1:d)).*(Mars(1:n) + r_MMX - Gold(1:n))); + range_rate_Gold = r_dot + bias(2); + Rm = [Rm; O(2,2)]; + end + + if sum((St_ID_Range == 3)==1) +% Madrid antennas available + r = norm(Mars(1:n) + r_MMX - Mad(1:n)); + range_Mad = r + bias(1); + Rm = [Rm; O(1,1)]; + end + + if sum((St_ID_Rate == 3)==1) +% Camberra antennas available + R = norm(Mars(1:n) + r_MMX - Mad(1:n)); + r_dot = 1/R*sum((Mars(n+1:d) + v_MMX - Mad(n+1:d)).*(Mars(1:n) + r_MMX - Mad(1:n))); + range_rate_Mad = r_dot + bias(2); + Rm = [Rm; O(2,2)]; + end + + if Lidar_check + +% Lidar rispetto alla superficie + I = r_Phobos/X(7); + k = pars.perifocal2MARSIAU*[0; 0; 1]; + j = cross(k,I); + NO = [I,j,k]; + ON = NO'; + + Xsi = X(13); + BO = [cos(Xsi), sin(Xsi), 0; -sin(Xsi), cos(Xsi), 0; 0, 0, 1]; + + rsb = r_MMX-r_Phobos; + +% Posizione di MMX nel Phobos Body-fixed reference frame + r_bf = BO*ON*rsb; + + lat = asin(r_bf(3)/norm(r_bf)); + lon = atan2(r_bf(2), r_bf(1)); + +% Phobos radius as function of latitude and longitude + alpha = pars.Phobos.alpha; + beta = pars.Phobos.beta; + gamma = pars.Phobos.gamma; + + R_latlon = (alpha*beta*gamma)/sqrt(beta^2*gamma^2*cos(lon)^2 +... + gamma^2*alpha^2*sin(lon)^2*cos(lat)^2 + alpha^2*beta^2*sin(lon)^2*sin(lat)); + + lidar = norm(rsb) - R_latlon/units.lsf + bias(3); + + Rm = [Rm; O(3,3)]; + + end + + if ~isempty(Feature_ID) + +% There should be features + [Sun, ~] = cspice_spkezr('10',et,'MARSIAU','none','499'); + + R2Rot = [cos(X(9)), sin(X(9)), 0; -sin(X(9)), cos(X(9)), 0; 0, 0, 1]; + v_Phobos = pars.perifocal2MARSIAU*R2Rot'*([X(8); 0; 0] + ... + cross([0; 0; X(10)],[X(7)*cos(X(9)); X(7)*sin(X(9)); 0])); + Phobos = [r_Phobos.*units.lsf; v_Phobos.*units.vsf]; + + [~, Y_pix] = visible_features(X_MMX.*units.sfVec, Phobos, Sun, Xsi, file_features, pars, units); + else + Y_pix = []; + end + +% Ready to exit + G.meas = [range_Camb; range_rate_Camb; range_Gold; range_rate_Gold; ... + range_Mad; range_rate_Mad; lidar]; + G.cam = Y_pix; + + G.meas(isnan(G.meas)) = []; + + +end \ No newline at end of file diff --git a/Observations_Generation.m b/Observations_Generation.m index 708b8df..eb51eb6 100644 --- a/Observations_Generation.m +++ b/Observations_Generation.m @@ -23,11 +23,12 @@ clc cspice_furnsh(which('MMX_QSO_049_2x2_826891269_828619269.bsp')); cspice_furnsh(which('Phobos_826891269_828619269.bsp')); +%% Initial conditions per la analisi - % Time of the analysis - data = '2026-03-21 00:00:00 (UTC)'; +% Time of the analysis + data = '2026-03-16 00:00:00 (UTC)'; data = cspice_str2et(data); - Ndays = 1; + Ndays = 4; t = Ndays*86400; date_end = data+t; @@ -37,18 +38,15 @@ clc % Covariance analysis parameters pars.et0 = data; [pars, units] = CovarianceAnalysisParameters(pars, units); - + file_features = 'Principal_Phobos_Ogni10.mat'; % Positin of my target bodies at that date Sun = cspice_spkezr('10', data, 'J2000', 'none', 'MARS'); MMX = cspice_spkezr('-34', data, 'J2000', 'none', 'MARS'); Phobos = cspice_spkezr('-401', data, 'J2000', 'none', 'MARS'); - Phi = deg2rad(0); - -% [Y_LOS, Y_pix] = visible_features(MMX, Phobos, Sun, Phi,... -% 'Principal_Phobos_Ogni10.mat', par, units); + + +%% Creazione lista osservabili - file_features = 'Principal_Phobos_Ogni2.mat'; YObs = Observations_with_features(data, date_end, file_features, pars, units); - -% Plotfeatures_Pic(YObs(685).Features, pars) + save('YObs'); \ No newline at end of file diff --git a/Observations_with_features.m b/Observations_with_features.m index a72a4cb..9207438 100644 --- a/Observations_with_features.m +++ b/Observations_with_features.m @@ -1,20 +1,23 @@ -function YObs = Observations_with_features(date0, date_end, file_features, pars, units) +function YObs = Observations_with_features(date_0, date_end, file_features, pars, units) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% dx = Mars_Phobos_Circular_FullState(t,x,pars) +% YObs = Observations_with_features(date0, date_end, file_features, pars, units) % -% Calculate the acceleration vector in the N-Body Problem with Mars and -% Phobos only and the derivative of the coefficients to be estimated +% Creation of the structure containing the timestamp, of the observables +% and the available observables to be processed % % Input: % -% orbit String with the name of the type of orbit -% date0 Date of the beginning of the analysis -% date_end Date of the end of the analysis +% date0 Date of the beginning of the analysis +% date_end Date of the end of the analysis +% file_features Name of the file containing the features positions in +% the body-fixed reference frame +% pars Struct with useful parameters +% units Struct with useful units % % Output: % -% YObs_Full Vector of observations and time of observations +% Obs Struct of observations and time of observations % % Author: E.Ciccarelli % @@ -36,21 +39,36 @@ function YObs = Observations_with_features(date0, date_end, file_features, pars, sigma_range_rate = pars.ObsNoise.range_rate*units.vsf; sigma_lidar = pars.ObsNoise.lidar*units.lsf; +% Minimum interval between two different observables of the same kind + min_interval = min([interval_Range; interval_Range_rate;... + interval_lidar; interval_camera]); + + +%% Needed to find the Phobos libration angle at different timestamps + + [Ph, pars] = Phobos_States_NewModel(date_0,pars); + Ph = Ph./units.sfVec2; + St0 = [Ph; reshape(eye(pars.d2),[pars.d2^2,1])]; + tspan = (0:min_interval:date_end-date_0)*units.tsf; + RelTol = 1e-13; + AbsTol = 1e-16; + opt = odeset('RelTol',RelTol,'AbsTol',AbsTol); + [~,X] = ode113(@(t,X) MP_CoupledLibration(t,X,pars),tspan,St0,opt); + t = (0:min_interval:date_end-date_0); + Phi_t = X(:,7); + %% Observations - et0 = date0; - et_end = date_end; - + et0 = date_0; + et_end = date_end; + +% Inizzializzazione struttura YObs = []; - min_interval = min([interval_Range; interval_Range_rate; interval_lidar; interval_camera]); - - for i = et0:min_interval:et_end - got_it = 0; - + got_it = 0; %-------------------------------------------------------------------------- % LIDAR OBSERVABLES WRT PHOBOS SURFACE @@ -63,15 +81,15 @@ function YObs = Observations_with_features(date0, date_end, file_features, pars, if (norm(MMX(1:3)-Phobos(1:3)) < LIDARlimit) && (rem((i-et0),interval_lidar)==0) rPh = Phobos(1:3); - [Ph, pars] = Phobos_States_NewModel(i,pars); - I = rPh/Ph(1); + I = rPh/norm(rPh); k = pars.perifocal2MARSIAU*[0; 0; 1]; j = cross(k,I); NO = [I,j,k]; ON = NO'; - BO = [cos(Ph(end-1)), sin(Ph(end-1)), 0; -sin(Ph(end-1)), cos(Ph(end-1)), 0; 0, 0, 1]; + Phi = Phi_t(t == (i-et0)); + BO = [cos(Phi), sin(Phi), 0; -sin(Phi), cos(Phi), 0; 0, 0, 1]; rsb = MMX(1:3)-rPh; @@ -189,8 +207,11 @@ function YObs = Observations_with_features(date0, date_end, file_features, pars, Sun = cspice_spkezr('10', i, 'J2000', 'none', 'MARS'); MMX = cspice_spkezr('-34', i, 'J2000', 'none', 'MARS'); Phobos = cspice_spkezr('-401', i, 'J2000', 'none', 'MARS'); - Phi = deg2rad(0); + +% What's the Phobos libration angle at that t? + Phi = Phi_t(t == (i-et0)); +% Identification of the features [~, Y_pix] = visible_features(MMX, Phobos, Sun, Phi,... file_features, pars, units); got_it = 1; @@ -208,12 +229,19 @@ function YObs = Observations_with_features(date0, date_end, file_features, pars, if (got_it == 1) Obs.t = i-et0; - DSN = [R_Cam; R_dot_Cam; R_Gold; R_dot_Gold; R_Mad; R_dot_Mad]; - if sum(~isnan(DSN))>0 - Obs.DSN = [R_Cam; R_dot_Cam; R_Gold; R_dot_Gold; R_Mad; R_dot_Mad]; + Range = [R_Cam; R_Gold; R_Mad]; + if sum(~isnan(Range))>0 + Obs.Range = [R_Cam; R_Gold; R_Mad]; else - Obs.DSN = []; + Obs.Range = []; end + Rate = [R_dot_Cam; R_dot_Gold; R_dot_Mad]; + if sum(~isnan(Rate))>0 + Obs.Rate = [R_dot_Cam; R_dot_Gold; R_dot_Mad]; + else + Obs.Rate = []; + end + Obs.Lidar = Lidar; Obs.Features= Y_pix; YObs = [YObs; Obs]; diff --git a/PlotGeometryAndLight.m b/PlotGeometryAndLight.m index 2fd3a9b..47f5b32 100644 --- a/PlotGeometryAndLight.m +++ b/PlotGeometryAndLight.m @@ -15,11 +15,12 @@ function PlotGeometryAndLight(points, point_in_light, visible, r_sb_Ph, r_PhSun, R_CV = R_bCam2CV*T; - figure() + figure(1) + hold off + plot3(points(1,:), points(2,:), points(3,:),'.','Color','b') + hold on grid on axis equal - hold on - plot3(points(1,:), points(2,:), points(3,:),'.','Color','b') plot3(point_in_light(1,:), point_in_light(2,:), point_in_light(3,:), 'x','Color','g') if ~isempty(visible) plot3(visible(1,:), visible(2,:), visible(3,:), 'o','Color','r') @@ -39,5 +40,4 @@ function PlotGeometryAndLight(points, point_in_light, visible, r_sb_Ph, r_PhSun, -r_sb_Ph(1)/units.tsf,-r_sb_Ph(2)/units.tsf,-r_sb_Ph(3)/units.tsf,'LineWidth',1.5,'Color','r') plotCamera('location',r_sb_Ph,'orientation',R_CV,'Color','r') - end \ No newline at end of file diff --git a/Results.m b/Results.m new file mode 100644 index 0000000..7c2fb7e --- /dev/null +++ b/Results.m @@ -0,0 +1,330 @@ +function Results(Est, YObs_Full, pars, units) +%========================================================================== +% NewCov_ResultsPlot(Est, YObs_Full, pars) +% +% This function plots the results of the covariance analysis +% +% INPUT: Description Units +% +% Est - Estimation of: +% .X, States at final t +% .x, States' deviation vector at final t +% .P, Covariance matrix at final t +% .t, Time observation vector +% .err, Post-fit residuals +% .pre, Pre-fit residuals +% .y_t, Pre-fit residuals +% .X_t, States at different t +% .x_t, States deviation vector at different t +% .Phi_t, STM at different t +% .P_t, Covariance matrix at different t +% .Pbar_t, Covariance matrix time update at different t +% +% YObs_Full Vector of observations and time of observations +% +% pars - Structure containing problem's parameters +% +% +% Coupling: +% None +% +% Author: Edoardo Ciccarelli +% Date: 09/2021 +% +%========================================================================== + + set(0,'DefaultTextInterpreter','latex'); + set(0,'DefaultAxesFontSize', 16); + + t_obs = (0:100:YObs_Full(end).t); + +% Plot of the post-fit residuals + +% figure(1) +% subplot(1,2,1) +% plot(t_obs/3600,Est.pre(1,:),'x','Color','b') +% grid on; +% hold on; +% plot(t_obs/3600,Est.pre(3,:),'x','Color','b') +% plot(t_obs/3600,Est.pre(5,:),'x','Color','b') +% plot(t_obs/3600,3*pars.ObsNoise.range*units.lsf*ones(size(Est.pre(1,:),2)),'.-','Color','b') +% plot(t_obs/3600,-3*pars.ObsNoise.range*units.lsf*ones(size(Est.pre(1,:),2)),'.-','Color','b') +% plot(t_obs/3600,3*pars.ObsNoise.range*units.lsf*ones(size(Est.pre(3,:),2)),'.-','Color','b') +% plot(t_obs/3600,-3*pars.ObsNoise.range*units.lsf*ones(size(Est.pre(3,:),2)),'.-','Color','b') +% plot(t_obs/3600,3*pars.ObsNoise.range*units.lsf*ones(size(Est.pre(5,:),2)),'.-','Color','b') +% plot(t_obs/3600,-3*pars.ObsNoise.range*units.lsf*ones(size(Est.pre(5,:),2)),'.-','Color','b') +% xlabel('$[hour]$') +% ylabel('$[km]$') +% title('Range Pre-fit residual') +% figure(2) +% subplot(1,2,1) +% plot(t_obs/3600,Est.pre(2,:),'x','Color','r') +% grid on; +% hold on; +% plot(t_obs/3600,Est.pre(4,:),'x','Color','r') +% plot(t_obs/3600,Est.pre(6,:),'x','Color','r') +% plot(t_obs/3600,3*pars.ObsNoise.range_rate*units.vsf*ones(size(Est.pre(2,:),2)),'.-','Color','r') +% plot(t_obs/3600,-3*pars.ObsNoise.range_rate*units.vsf*ones(size(Est.pre(2,:),2)),'.-','Color','r') +% plot(t_obs/3600,3*pars.ObsNoise.range_rate*units.vsf*ones(size(Est.pre(4,:),2)),'.-','Color','r') +% plot(t_obs/3600,-3*pars.ObsNoise.range_rate*units.vsf*ones(size(Est.pre(4,:),2)),'.-','Color','r') +% plot(t_obs/3600,3*pars.ObsNoise.range_rate*units.vsf*ones(size(Est.pre(6,:),2)),'.-','Color','r') +% plot(t_obs/3600,-3*pars.ObsNoise.range_rate*units.vsf*ones(size(Est.pre(6,:),2)),'.-','Color','r') +% xlabel('$[hour]$') +% ylabel('$[km/s]$') +% title('RangeRate Pre-fit residual') +% figure(3) +% subplot(1,2,1) +% plot(t_obs/3600,Est.pre(7,:),'x','Color','g') +% grid on; +% hold on; +% plot(t_obs/3600,3*pars.ObsNoise.lidar*units.lsf*ones(size(Est.pre(7,:),2)),'.-','Color','g') +% plot(t_obs/3600,-3*pars.ObsNoise.lidar*units.lsf*ones(size(Est.pre(7,:),2)),'.-','Color','g') +% xlabel('$[hour]$') +% ylabel('$[km]$') +% title('Lidar Pre-fit residual') +% figure(4) +% subplot(1,2,1) +% plot(t_obs/3600,Est.pre(8,:),'x','Color','m') +% grid on; +% hold on; +% plot(t_obs/3600,3*pars.ObsNoise.camera*ones(size(Est.pre(8,:),2)),'.-','Color','m') +% plot(t_obs/3600,-3*pars.ObsNoise.camera*ones(size(Est.pre(8,:),2)),'.-','Color','m') +% xlabel('$[hour]$') +% ylabel('$[rad]$') +% title('Camera Pre-fit residual') +% figure(5) +% subplot(1,2,1) +% plot(t_obs/3600,Est.pre(9,:),'x','Color','k') +% grid on; +% hold on; +% plot(t_obs/3600,3*pars.ObsNoise.camera*ones(size(Est.pre(9,:),2)),'.-','Color','k') +% plot(t_obs/3600,-3*pars.ObsNoise.camera*ones(size(Est.pre(9,:),2)),'.-','Color','k') +% xlabel('$[hour]$') +% ylabel('$[rad]$') +% title('Camera Pre-fit residual') + + +% figure(1) +% subplot(1,2,2) +% histfit([Est.pre(1,:), Est.pre(3,:), Est.pre(5,:)]) +% xlabel('$[km]$') +% title('Range Pre-fit residual') +% figure(2) +% subplot(1,2,2) +% histfit([Est.pre(2,:),Est.pre(4,:), Est.pre(6,:)]) +% xlabel('$[km/s]$') +% title('Range Rate Pre-fit residual') +% figure(3) +% subplot(1,2,2) +% histfit(Est.pre(7,:)) +% xlabel('$[km]$') +% title('Lidar Pre-fit residual') +% figure(4) +% subplot(1,2,2) +% histfit(Est.pre(8,:)) +% xlabel('$[rad]$') +% title('Camera Pre-fit residual') +% figure(5) +% subplot(1,2,2) +% histfit(Est.pre(9,:)) +% xlabel('$[rad]$') +% title('Camera Pre-fit residual') + +% Square-Root of the MMX covariance error + + sqx = squeeze(Est.P_t(1,1,1:end-1)); + sqy = squeeze(Est.P_t(2,2,1:end-1)); + sqz = squeeze(Est.P_t(3,3,1:end-1)); + SQRT_X = 3*sqrt(sqx + sqy + sqz); + sqvx = squeeze(Est.P_t(4,4,1:end-1)); + sqvy = squeeze(Est.P_t(5,5,1:end-1)); + sqvz = squeeze(Est.P_t(6,6,1:end-1)); + SQRT_V = 3*sqrt(sqvx + sqvy + sqvz); + + +% 3sigma Envelopes + figure() + subplot(1,2,1) + semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(1,1,1:end-1)))),'Color','b','LineWidth',1) + hold on; + grid on; + semilogy(t_obs(1:end-1)/3600,3*squeeze(real(sqrt(Est.P_t(2,2,1:end-1)))),'Color','r','LineWidth',1) + semilogy(t_obs(1:end-1)/3600,3*squeeze(real(sqrt(Est.P_t(3,3,1:end-1)))),'Color','g','LineWidth',1) + semilogy(t_obs(1:end-1)/3600,SQRT_X,'Color','k','LineWidth',2) + xlabel('time $[hour]$') + ylabel('$[km]$') + title('MMX position vector $3\sigma$ envelopes','Interpreter','latex','FontSize',16) + legend('$3\sigma_{x}$','$3\sigma_{y}$','$3\sigma_{z}$','$3 RMS$','Interpreter','latex','FontSize',14) + subplot(1,2,2) + semilogy(t_obs(1:end-1)/3600,3*squeeze(real(sqrt(Est.P_t(4,4,1:end-1)))),'Color','b','LineWidth',1) + hold on; + grid on; + semilogy(t_obs(1:end-1)/3600,3*squeeze(real(sqrt(Est.P_t(5,5,1:end-1)))),'Color','r','LineWidth',1) + semilogy(t_obs(1:end-1)/3600,3*squeeze(real(sqrt(Est.P_t(6,6,1:end-1)))),'Color','g','LineWidth',1) + semilogy(t_obs(1:end-1)/3600,SQRT_V,'Color','k','LineWidth',2) + xlabel('time $[hour]$') + ylabel('$[km/s]$') + title('MMX velocity vector $3\sigma$ envelopes','Interpreter','latex','FontSize',16) + legend('$3\sigma_{\dot{x}}$','$3\sigma_{\dot{y}}$','$3\sigma_{\dot{z}}$','$3 RMS$','Interpreter','latex','FontSize',14) + + +% Phobos's states uncertainties evolution + +% % 3sigma Envelopes + + figure() + subplot(2,4,1) + semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(7,7,1:end-1)))),'Color','b','LineWidth',1) + grid on + xlabel('time [hour]') + ylabel('$R_{Ph}$ [km]') + subplot(2,4,2) + semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(9,9,1:end-1)))),'Color','r','LineWidth',1) + grid on + xlabel('time [hour]') + ylabel('$\theta_{Ph}$ [rad]') + subplot(2,4,3) + semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(11,11,1:end-1)))),'Color','g','LineWidth',1) + grid on + xlabel('time [hour]') + ylabel('$\Phi_{M}$ [rad]') + subplot(2,4,4) + semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(13,13,1:end-1)))),'Color','m','LineWidth',1) + grid on + xlabel('time [hour]') + ylabel('$\Phi_{Ph}$ [rad]') + + subplot(2,4,5) + semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(8,8,1:end-1)))),'Color','b','LineWidth',1) + grid on + xlabel('time [hour]') + ylabel('$\dot{R}_{Ph}$ [km/s]') + subplot(2,4,6) + semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(10,10,1:end-1)))),'Color','r','LineWidth',1) + grid on + xlabel('time [hour]') + ylabel('$\dot{\theta}_{Ph}$ [rad/s]') + subplot(2,4,7) + semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(12,12,1:end-1)))),'Color','g','LineWidth',1) + grid on + xlabel('time [hour]') + ylabel('$\dot{\Phi}_{M}$ [rad/s]') + subplot(2,4,8) + semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(14,14,1:end-1)))),'Color','m','LineWidth',1) + grid on + xlabel('time [hour]') + ylabel('$\dot{\Phi}_{Ph}$ [rad/s]') + +% Harmonics 3sigma Envelopes + +% place0 = size(Est.X,1)-pars.nCoeff-pars.nBias; + corr_label = {'$x$','$y$','$z$','$\dot{x}$','$\dot{y}$','$\dot{z}$',... + '$R_{Ph}$','$\dot{R}_{Ph}$','$\theta_{Ph}$','$\dot{\theta}_{Ph}$',... + '$\Phi_{M}$','$\dot{\Phi}_{M}$','$\Phi_{Ph}$','$\dot{\Phi}_{Ph}$'}; + + +% Moments of inertia +% figure() +% subplot(1,3,1) +% semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(15,15,1:end-1)))),'LineWidth',1); +% grid on; +% hold on; + corr_label{end+1} = ['$I_{PhX}$']; +% xlabel('time $[hour]$') +% legend('$I_{PhX}$','Interpreter','latex','FontSize',14) +% subplot(1,3,2) +% semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(16,16,1:end-1)))),'LineWidth',1); +% grid on; +% hold on; + corr_label{end+1} = ['$I_{PhY}$']; +% xlabel('time $[hour]$') +% legend('$I_{PhY}$','Interpreter','latex','FontSize',14) +% subplot(1,3,3) +% semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(16,16,1:end-1)))),'LineWidth',1); +% grid on; +% hold on; + corr_label{end+1} = ['$I_{PhZ}$']; +% xlabel('time $[hour]$') +% legend('$I_{PhZ}$','Interpreter','latex','FontSize',14) + + +% Biases + + place0 = size(Est.X,1)-pars.nBias; + corr_label(end+1) = {'$\rho$'}; + corr_label(end+1) = {'$\dot{\rho}$'}; + corr_label(end+1) = {'$LIDAR_b$'}; + +% figure() +% subplot(1,pars.nBias,1) +% semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(place0+1,place0+1,1:end-1)))),'LineWidth',1,... +% 'DisplayName',('$\rho$'),'Color','b'); +% grid on; +% hold on; +% xlabel('time $[hour]$') +% ylabel('$[km]$') +% subplot(1,pars.nBias,2) +% semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(place0+2,place0+2,1:end-1)))),'LineWidth',1,... +% 'DisplayName',('$\dot{\rho}$'),'Color','r'); +% grid on; +% hold on; +% xlabel('time $[hour]$') +% ylabel('$[km/s]$') +% subplot(1,pars.nBias,3) +% semilogy(t_obs(1:end-1)/3600,3.*squeeze(real(sqrt(Est.P_t(place0+3,place0+3,1:end-1)))),'LineWidth',1,... +% 'DisplayName',('$LIDAR_b$'),'Color','g'); +% grid on; +% hold on; +% xlabel('time $[hour]$') +% ylabel('$[km]$') + + +% +% % Harmonics Coefficients +% + P_t_I2x = squeeze(Est.P_t(15,15,1:end-1)); + P_t_I2y = squeeze(Est.P_t(16,16,1:end-1)); + P_t_I2z = squeeze(Est.P_t(17,17,1:end-1)); + Cov_I2xI2y = squeeze(Est.P_t(15,16,1:end-1)); + Cov_I2yI2z = squeeze(Est.P_t(16,17,1:end-1)); + Cov_I2xI2z = squeeze(Est.P_t(15,17,1:end-1)); + + P_t_C_20 = .25*(P_t_I2y + P_t_I2x - 2*Cov_I2xI2y); + P_t_C_22 = .5*(4*P_t_I2z + P_t_I2y + P_t_I2x - 4*Cov_I2xI2z - 4*Cov_I2yI2z + 2*Cov_I2xI2y); + + figure() + subplot(1,2,1) + semilogy(t_obs(1:end-1)/3600,3.*real(sqrt(P_t_C_20)),'LineWidth',1,'Color','b'); + grid on; + hold on; + xlabel('time $[hour]$') + legend('$C_{20}$','Interpreter','latex','FontSize',14) + subplot(1,2,2) + semilogy(t_obs(1:end-1)/3600,3.*real(sqrt(P_t_C_22)),'LineWidth',1,'Color','r'); + grid on; + hold on; + xlabel('time $[hour]$') + legend('$C_{22}$','Interpreter','latex','FontSize',14) + + + +% Correlations coefficients + + [~,corr] = readCovMatrix(real(Est.P)); + + figure(); + imagesc(real(corr)) + title('Correlation Coefficients','FontSize',16); + set(gca,'FontSize',16); + colormap(hot); + colorbar; + set(gca,'TickLabelInterpreter','latex'); + set(gca,'XTick',(1:size(Est.X,1))); + set(gca,'XTickLabel',corr_label); + set(gca,'YTick',(1:size(Est.X,1))); + set(gca,'YTickLabel',corr_label); + axis square; + freezeColors; + + +end \ No newline at end of file diff --git a/Test_Features.m b/Test_Features.m new file mode 100644 index 0000000..b560680 --- /dev/null +++ b/Test_Features.m @@ -0,0 +1,53 @@ +clear +close all +clc + +%% Setup + + warning('off', 'all'); format longG; + set(0,'DefaultTextInterpreter','latex'); + set(0,'DefaultAxesFontSize', 16); + +% Mac + restoredefaultpath + addpath('../useful_functions/'); + addpath(genpath('../mice/')); + addpath(genpath('../computer-vision/')); + addpath(genpath('../paper/')); + addpath(genpath('../generic_kernels/')); + addpath(genpath('../paper/MMX_Fcn_CovarianceAnalyses/')); + addpath(genpath('../paper/MMX_Product/MMX_BSP_Files_GravLib/')); + MMX_InitializeSPICE + cspice_furnsh(which('mar097.bsp')); + cspice_furnsh(which('MARPHOFRZ.txt')); + cspice_furnsh(which('MMX_QSO_049_2x2_826891269_828619269.bsp')); + cspice_furnsh(which('Phobos_826891269_828619269.bsp')); + +%% Initial conditions per la analisi + +% Time of the analysis + data = '2026-03-21 00:00:00 (UTC)'; + data = cspice_str2et(data); + Ndays = 1; + t = Ndays*86400; + date_end = data+t; + +% Model parameters + [pars, units] = MMX_DefineNewModelParametersAndUnits; + +% Covariance analysis parameters + pars.et0 = data; + [pars, units] = CovarianceAnalysisParameters(pars, units); + file_features = 'Principal_Phobos_Ogni10.mat'; + + for i=data:100:date_end + +% Positin of my target bodies at that date + Sun = cspice_spkezr('10', i, 'J2000', 'none', 'MARS'); + MMX = cspice_spkezr('-34', i, 'J2000', 'none', 'MARS'); + Phobos = cspice_spkezr('-401', i, 'J2000', 'none', 'MARS'); + Phi = 0; + + [Y_LOS, Y_pix] = visible_features(MMX, Phobos, Sun, Phi, file_features, pars, units); + + end \ No newline at end of file diff --git a/UKF_Tool.m b/UKF_Tool.m new file mode 100644 index 0000000..2decf54 --- /dev/null +++ b/UKF_Tool.m @@ -0,0 +1,301 @@ +function [Est] = UKF_Tool(Est0, f, fsigma, G, O, Measures, pars, units, file_features) +%========================================================================== +% +% [Est] = UKF_Tool(Est0,f,G_dG,R,Measures,par) +% +% +% INPUT: Description Units +% +% Est0 - Apriori initial guess of +% .X, States +% .P0, Covariance matrix +% .t0, initial time +% +% @f - Dynamical model +% +% @G - Observation's model and partial derivatives wrt the states +% +% O - Weight matrix +% Nsigma - Number of sigma points +% Measures - Observations matrix: the first column contains observation +% times, then every column has a different type of observaion +% type +% par - Structure containing parameters required by @f and @G_dG +% units - Structure containing lenght and time units +% +% OUTPUT: +% +% Est - Estimation of: +% .X, States at final t +% .P, Covariance matrix at final t +% .t, Time observation vector +% .X_t, States at different t +% .P_t, Covariance matrix at different t +% .Pbar_t, Covariance matrix time update at different t +% +% +% Coupling: +% None +% +% Author: Edoardo Ciccarelli +% Date: 04/2021 +% +%========================================================================== + + +% Apriori initial guess, deviation and covariance matrix. + Xold = Est0.X; + Pold = Est0.P0; + +% Column of the measures time. + told = Measures(1).t; + +% The measures must be organized in colums depending on the type of +% measure; each row is reffered to a given measure's time. + obs = Measures; + + +% n,l and m are respectively the number of states, number of different +% types of measures and number of measures per each type. + n = size(Xold,1); + m = size(obs,1); + q = 3; + +% err is the vector of residuals, the others are needed to build the +% fitting residuals. + err = NaN(size(O,1),m); + prefit = NaN(size(O,1),m); + y_t = NaN(size(O,1),m); + X_t = zeros(n,size(Measures,1)); + x_t = zeros(n,size(Measures,1)); + P_t = zeros(n,n,m); + Pbar_t = zeros(n,n,m); + +% Initialization of the filter + k = 3 - n; + alpha = pars.alpha; + lambda = alpha^2*(n+k) - n; + gamma = sqrt(n+lambda); + +% Sigma points' weights + W0c = zeros(2*n, 1); + W0c(:) = 1./(2*(n+lambda)); + +% Reference orbit propagation + interval_Range = pars.interval_Range; + interval_Range_rate = pars.interval_Range_rate; + interval_lidar = pars.interval_lidar; + interval_camera = pars.interval_camera; + min_interval = min([interval_Range; interval_Range_rate; interval_lidar; interval_camera]); + + switch n + case 14 + St0 = [Xold; pars.IPhx_bar; pars.IPhy_bar; pars.IPhz_bar]; + case 17 + St0 = Xold(1:17); + case 18 + St0 = pars.X0_reference; + case 20 + St0 = Xold(1:17); + end + + tspan = (0:min_interval:Measures(end).t)*units.tsf; + RelTol = 1e-13; + AbsTol = 1e-16; + opt = odeset('RelTol',RelTol,'AbsTol',AbsTol,'event',@(t,X) landing_Phobos(t,X,pars,units)); + [t,X] = ode113(@(t,X) f(t,X,pars,units),tspan,St0,opt); + fprintf('\nOrbit propagation complete...'); + + +% For-loop on the observations + for i = 1:m + +% Look for the observation to process + if Measures(i).t == told + idx = 1; + switch n + case 14 + Xmean_bar = X(idx,1:size(Est0.X,1))'; + case 17 + Xmean_bar = X(idx,:)'; + case 18 + Xmean_bar = [X(idx,1:10)'; X(idx,13:end)'; 0; 0; 0]; + pars.PhiM = X(idx,11); + case 20 + Xmean_bar = [X(idx,:)'; 0; 0; 0]; + end + elseif Measures(i).t > told + tobs = Measures(i).t; + idx = find(round(t/units.tsf)==tobs); + switch n + case 14 + Xmean_bar = X(idx,1:size(Est0.X,1))'; + case 17 + Xmean_bar = X(idx,:)'; + case 18 + Xmean_bar = [X(idx,1:10)'; X(idx,13:end)'; 0; 0; 0]; + case 20 + Xmean_bar = [X(idx,:)'; 0; 0; 0]; + end + end + +% Useful quantities's initialization + et = Est0.t0/units.tsf + Measures(i).t; + +% TIME UPDATE +% Sigma points' definition + S0 = real(sqrtm(Pold)); + X0 = [(repmat(Xold,1,n)-gamma.*S0),... + (repmat(Xold,1,n)+gamma.*S0)]; + +% Need to know how many observations are available + [Y_obs, R, Stat_ID_Range, Stat_ID_Rate, check_Lidar, Features_ID] = Measurement_read(Measures(i),O,units); + + + if Measures(idx).t == told + +% The sigma point dont need to be proppagated + Xbar = X0; + + elseif Measures(idx).t > told + +% Propagation of the sigma points' trajectories + St0 = reshape(X0,[n*(2*n),1]); + tspan = (told:Measures(idx).t)*units.tsf; + opt = odeset('RelTol',1e-13,'AbsTol',1e-16,'event',@(t,X) landing_Phobos_UKF(t,X,pars,units)); + [~,X_sigma] = ode113(@(t,X) fsigma(t,X,pars,units),tspan,St0,opt); + Xbar = reshape(X_sigma(end,1:n*(2*n))',[n,(2*n)]); + + end + + fprintf('\nProcesso osservazione n. : %d', i); + +% Process noise if needed + deltaT = (Measures(idx).t-told)*units.tsf; + Q = pars.sigma^2*eye(3); + switch n + case 14 + Gamma = [eye(q)*deltaT^2/2; eye(q)*deltaT; zeros(n-6,q)]; + Q = Gamma*Q*Gamma' + [zeros(6,n); zeros(n-6,6), pars.sigmaPh^2*... + diag([deltaT^2/2, deltaT, deltaT^2/2, deltaT, deltaT^2/2, deltaT, deltaT^2/2, deltaT])]; + case 17 + Gamma = [eye(q)*deltaT^2/2; eye(q)*deltaT; zeros(n-6,q)]; + Q = Gamma*Q*Gamma' + [zeros(6,n); zeros(n-6,6), pars.sigmaPh^2*... + diag([deltaT^2/2, deltaT, deltaT^2/2, deltaT, deltaT^2/2, deltaT, deltaT^2/2, deltaT, zeros(1,n-14)])]; + case 18 + Gamma = [eye(q)*deltaT^2/2; eye(q)*deltaT; zeros(n-6,q)]; + Q = Gamma*Q*Gamma' + [zeros(6,n); zeros(n-6,6), pars.sigmaPh^2*... + diag([deltaT^2/2, deltaT, deltaT^2/2, deltaT, deltaT^2/2, deltaT, zeros(1,n-12)])]; + case 20 + Gamma = [eye(q)*deltaT^2/2; eye(q)*deltaT; zeros(n-6,q)]; + Q = Gamma*Q*Gamma' + [zeros(6,n); zeros(n-6,6), pars.sigmaPh^2*... + diag([deltaT^2/2, deltaT, deltaT^2/2, deltaT, deltaT^2/2, deltaT, deltaT^2/2, deltaT, zeros(1,n-14)])]; + end + +% Covariance matrix's time update + P_bar = Q; + + for j = 1:2*n + P_bar = P_bar + W0c(j)*((Xbar(:,j) - Xmean_bar) * (Xbar(:,j) - Xmean_bar)'); + end + +% Sigma point redefinition + S_bar = real(sqrtm(P_bar)); + X0 = [(repmat(Xmean_bar,1,n)-gamma.*S_bar),... + (repmat(Xmean_bar,1,n)+gamma.*S_bar)]; + + Y = zeros(size(Y_obs.meas,1),2*n); + Y_feat = cell(2*n); + + for j = 1:2*n +% G(j-th sigma point) + [Y_sigma, ~] = G(et, X0(:,j), Stat_ID_Range, Stat_ID_Rate,... + check_Lidar, Features_ID, pars, units, O, file_features); + Y(:,j) = Y_sigma.meas; + Y_feat{j} = Y_sigma.cam; + + if ~isempty(Y_feat{j}) + Features_ID = intersect(Features_ID, Y_feat{j}(3,:)); + end + + end + + Y_sigma = []; + + if ~isempty(Y_feat{1}) + for j = 1:2*n + features = features_list(Y_feat{j}, Features_ID); + Y_sigma = [Y_sigma, [Y(:,j); features]]; + end + else + Y_sigma = Y; + end + +% Mean predicted measurement + [Y_mean,R] = G(et, Xmean_bar, Stat_ID_Range, Stat_ID_Rate,... + check_Lidar, Features_ID, pars, units, O, file_features); + + features= features_list(Y_mean.cam, Features_ID); + Y_mean = [Y_mean.meas; features]; + + features= features_list(Y_obs.cam, Features_ID); + Y_obs = [Y_obs.meas; features]; + +% Innovation covariance and cross covariance + + R = [R; O(4,4)*ones(size(features,1),1)]; + Py = diag(R); + Pxy = zeros(n,size(Y_obs,1)); + + for j = 1:2*n + Py = Py + W0c(j)*(Y_sigma(:,j) - Y_mean)*(Y_sigma(:,j) - Y_mean)'; + Pxy = Pxy + W0c(j)*(X0(:,j) - Xmean_bar)*(Y_sigma(:,j) - Y_mean)'; + end + +% Kalman gain + K = Pxy/Py; + +% MEASUREMENT UPDATE + y = (Y_obs - Y_mean); + Xstar = Xmean_bar + K*y; + P = (P_bar - K*Py*K'); + +% Next iteration preparation + Xold = Xmean_bar; + told = Measures(idx).t; + Pold = P; + + +% err(IDX,i) = (Y_obs - G(et, Xmean_bar, Stat_ID_Range, Stat_ID_Rate, check_Lidar, Features_ID, par,units)'); +% prefit(IDX,i) = (Y_obs - G(et, Xmean_bar, Stat_ID_Range, Stat_ID_Rate, check_Lidar, Features_ID, par,units)'); +% y_t(IDX,i) = y; + + +% Storing the results + P_t(:,:,i) = abs(real(P)).*units.CovDim; + Pbar_t(:,:,i) = P_bar.*units.CovDim; + X_t(:,i) = Xold.*units.Dim; + x_t(:,i) = K*y.*units.Dim; + + + end + + fprintf('\nAnalysis complete!\n'); + + + +% Initial states' estimation, deviation and covariance matrix + Est.X = Xold.*units.Dim; + Est.P = P.*units.CovDim; + +% Residuals and fit-residuals at different observation times + Est.t = tobs; + Est.err = err; + Est.pre = prefit; + Est.y_t = y_t; + Est.X_t = X_t; + Est.x_t = x_t; + Est.P_t = P_t; + Est.Pbar_t = Pbar_t; + +end \ No newline at end of file diff --git a/YObs.mat b/YObs.mat new file mode 100644 index 0000000000000000000000000000000000000000..b26142e8117fa866eed8dc4cdec26702598bb5d7 GIT binary patch literal 84280 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%0A3)*h(cH7VvBjEnhF^-T%r*`O33T& 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 Wtccq+_s8quKYckM(D<Wf+<yS}eH1bP literal 0 HcmV?d00001 diff --git a/features_list.m b/features_list.m new file mode 100644 index 0000000..58abdef --- /dev/null +++ b/features_list.m @@ -0,0 +1,11 @@ +function features = features_list(Y_feat, Features_ID) + + features = []; + for k=1:size(Features_ID,2) + common_feat = Y_feat(1:2, Y_feat(3,:)==Features_ID(k)); + if ~isempty(common_feat) + features = [features; common_feat]; + end + end + +end \ No newline at end of file diff --git a/visible_features.m b/visible_features.m index 4c437f4..a63cd7e 100644 --- a/visible_features.m +++ b/visible_features.m @@ -13,7 +13,8 @@ function [Y_LOS, Y_pix] = visible_features(MMX, Phobos, Sun, Phi, file_features, % % Output: % -% Y Vector of features' pixel coordinates in the picture +% Y_LOS Vector of features' Line Of Sight and features' ID +% Y_pix Vector of features' position in the Pic and features' ID % % Author: E.Ciccarelli % @@ -34,7 +35,7 @@ function [Y_LOS, Y_pix] = visible_features(MMX, Phobos, Sun, Phi, file_features, % Rotation from J200 to Phobos radial reference frame - i_feat = Phobos(1:3)/norm(Phobos(1:3)); + i_feat = Phobos(1:3)/norm(Phobos(1:3)); v = Phobos(4:6)/norm(Phobos(4:6)); k = cross(i_feat, v)/norm(cross(i_feat, v)); j = cross(k, i_feat)/norm(cross(k, i_feat)); -- GitLab