Master Thesis Code
by Simon Moser
Loading...
Searching...
No Matches
derivation7IntialParamEst.m
Go to the documentation of this file.
1% =========================================================================== %
2%> @example derivation7IntialParamEst.m
3%>
4%> In this example, we demonstrate how to estimate the initial calibration
5%> parameters of an IMU using the `jumpEstimateCalibrationParameters` function.
6%>
7%> @note a more detailed explanation can be found here: @ref derivation7IntialParamEst
8%>
9%> <details>
10% =========================================================================== %
11clear; close all; clc;
12
13% set seed for reproducibility
14rng(1);
15
16%% Sensor Data Generation
17% load predefined trajectory
18load('rotatingCube.mat');
19
20% simulate data
21js = JumpSensor;
22data = js.generateFromTrajectory(traj);
23
24% get parameters
25biases = js.getParams().mpu.acc.ConstantBias;
26sensitivities = diag(js.getParams().mpu.acc.AxesMisalignment) ./ 100;
27biases_hig = js.getParams().hig.acc.ConstantBias;
28sensitivities_hig = diag(js.getParams().hig.acc.AxesMisalignment) ./100;
29
30
31% estimate parameters
33params = jumpEstimateCalibrationParameters(data, zv);
34
35% display results
36disp("Sequence 1, (synthetic data)")
37disp('MPU Accelerometer Parameters:')
38disp('Known Parameters from simulation:')
39fprintf('Biases: x=%.3f, y=%.3f, z=%.3f\n', biases(1), biases(2), biases(3));
40fprintf('Sensitivities: x=%.3f, y=%.3f, z=%.3f\n', sensitivities(1), sensitivities(2), sensitivities(3));
41disp(' ');
42disp('Estimated Parameters from data:')
43fprintf('Biases: x=%.3f, y=%.3f, z=%.3f\n', params.acc.bias(1), params.acc.bias(2), params.acc.bias(3));
44fprintf('Sensitivities: x=%.3f, y=%.3f, z=%.3f\n', params.acc.sensitivity(1), params.acc.sensitivity(2), params.acc.sensitivity(3));
45disp(' ');
46disp('High G Accelerometer Parameters:')
47disp('Known Parameters from simulation:')
48fprintf('Biases: x=%.3f, y=%.3f, z=%.3f\n', biases_hig(1), biases_hig(2), biases_hig(3));
49fprintf('Sensitivities: x=%.3f, y=%.3f, z=%.3f\n', sensitivities_hig(1), sensitivities_hig(2), sensitivities_hig(3));
50disp(' ');
51disp("Estimated Parameters from data:")
52fprintf('Biases: x=%.3f, y=%.3f, z=%.3f\n', params.hig.bias(1), params.hig.bias(2), params.hig.bias(3));
53fprintf('Sensitivities: x=%.3f, y=%.3f, z=%.3f\n', params.hig.sensitivity(1), params.hig.sensitivity(2), params.hig.sensitivity(3));
54disp('=======================================')
55
56%% estimate on real data
57datapath = getDataPath();
58datapath = fullfile(datapath, "self_captured/240424_rotating_cube");
59data = jumpReadData(fullfile(datapath, "rotating_cube_1.BIN"));
60
61% estimate parameters
63params = jumpEstimateCalibrationParameters(data, zv);
64
65% display results
66disp(' ');
67disp("Sequence 2, (real data)")
68disp('Estimated Accel Parameters from real data:')
69fprintf('Biases: x=%.3f, y=%.3f, z=%.3f\n', params.acc.bias(1), params.acc.bias(2), params.acc.bias(3));
70fprintf('Sensitivities: x=%.3f, y=%.3f, z=%.3f\n', params.acc.sensitivity(1), params.acc.sensitivity(2), params.acc.sensitivity(3));
71disp(' ');
72disp('Estimated High G Accel Parameters from real data:')
73fprintf('Biases: x=%.3f, y=%.3f, z=%.3f\n', params.hig.bias(1), params.hig.bias(2), params.hig.bias(3));
74fprintf('Sensitivities: x=%.3f, y=%.3f, z=%.3f\n', params.hig.sensitivity(1), params.hig.sensitivity(2), params.hig.sensitivity(3));
75disp(' ');
76disp('=======================================')
77
78%% estimate on real data with zero velocity sections where the cube is not flat.
79data = jumpReadData(fullfile(datapath, "rotating_cube_2.BIN"));
80
81% estimate parameters
83params = jumpEstimateCalibrationParameters(data, zv);
84
85% display results
86disp(' ');
87disp("Sequence 3, (real data, not always aligned)")
88disp('Estimated Parameters from real data with non-flat cube:')
89fprintf('Biases: x=%.3f, y=%.3f, z=%.3f\n', params.acc.bias(1), params.acc.bias(2), params.acc.bias(3));
90fprintf('Sensitivities: x=%.3f, y=%.3f, z=%.3f\n', params.acc.sensitivity(1), params.acc.sensitivity(2), params.acc.sensitivity(3));
91disp(' ');
92disp('Estimated High G Accel Parameters from real data with non-flat cube:')
93fprintf('Biases: x=%.3f, y=%.3f, z=%.3f\n', params.hig.bias(1), params.hig.bias(2), params.hig.bias(3));
94fprintf('Sensitivities: x=%.3f, y=%.3f, z=%.3f\n', params.hig.sensitivity(1), params.hig.sensitivity(2), params.hig.sensitivity(3));
JumpSensor is a simulation of the JUMP sensor of the ZurichMove Project.
Definition JumpSensor.m:41
function generateFromTrajectory(in obj, in traj)
generates data from a Trajectory object.
function getDataPath()
function jumpEstimateCalibrationParameters(in data, in zeroVelocity, in options)
function jumpReadData(in filePath, in options)
function jumpZeroVelocityDetection(in data, in options)