1% =========================================================================== %
2%> @example derivation7IntialParamEst.m
4%> In
this example, we demonstrate how to estimate the initial calibration
7%> @note a more detailed explanation can be found here: @ref derivation7IntialParamEst
10% =========================================================================== %
13% set seed
for reproducibility
16%% Sensor Data Generation
17% load predefined trajectory
18load(
'rotatingCube.mat');
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;
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));
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));
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));
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('=======================================')
56%% estimate on real data
58datapath = fullfile(datapath, "self_captured/240424_rotating_cube");
59data =
jumpReadData(fullfile(datapath, "rotating_cube_1.BIN"));
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));
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));
76disp('=======================================')
78%% estimate on real data with zero velocity sections where the cube is not flat.
79data =
jumpReadData(fullfile(datapath, "rotating_cube_2.BIN"));
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));
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.
function generateFromTrajectory(in obj, in traj)
generates data from a Trajectory object.
function jumpEstimateCalibrationParameters(in data, in zeroVelocity, in options)
function jumpReadData(in filePath, in options)
function jumpZeroVelocityDetection(in data, in options)