From 36d13e9c8f6b5db02d4cda073fd634fe1e4ca8d1 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Fri, 2 May 2014 14:25:23 +0530 Subject: [PATCH 01/16] Swapping Tilt values for correct Pitch and Roll - Swapping pitch and roll orientation values to reflect the sample sensor data reference axis correctly. - This correction is needed for determination of Gravity. - Gyroscope plots to use data scaled to 1 instead of PI. signed-off-by: Ramasamy Change-Id: I221e7efd0ab8278fa0caa3542edfb0d7efd55041 --- src/sensor_fusion/design/lib/estimate_orientation.m | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/sensor_fusion/design/lib/estimate_orientation.m b/src/sensor_fusion/design/lib/estimate_orientation.m index 7924e65..dfbbc18 100755 --- a/src/sensor_fusion/design/lib/estimate_orientation.m +++ b/src/sensor_fusion/design/lib/estimate_orientation.m @@ -206,8 +206,8 @@ function [OR_driv, OR_aid, OR_err] = estimate_orientation(Accel_data, Gyro_data quat_aid(i,:) = rot_mat2quat(Rot_m); euler = quat2euler(quat_aid(i,:)); - roll(i) = euler(1); - pitch(i) = euler(2); + roll(i) = euler(2); + pitch(i) = euler(1); yaw(i) = euler(3); if i <= MOVING_AVERAGE_WINDOW_LENGTH @@ -303,13 +303,13 @@ function [OR_driv, OR_aid, OR_err] = estimate_orientation(Accel_data, Gyro_data OR_aid(3,:) = yaw * RAD2DEG; euler = quat2euler(quat_driv); - OR_driv(1,:) = euler(:,1)' * RAD2DEG; - OR_driv(2,:) = euler(:,2)' * RAD2DEG; + OR_driv(1,:) = euler(:,2)' * RAD2DEG; + OR_driv(2,:) = euler(:,1)' * RAD2DEG; OR_driv(3,:) = -euler(:,3)' * RAD2DEG; euler = quat2euler(quat_error); - OR_err(1,:) = euler(:,1)' * RAD2DEG; - OR_err(2,:) = euler(:,2)' * RAD2DEG; + OR_err(1,:) = euler(:,2)' * RAD2DEG; + OR_err(2,:) = euler(:,1)' * RAD2DEG; OR_err(3,:) = euler(:,3)' * RAD2DEG; if PLOT_SCALED_SENSOR_COMPARISON_DATA == 1 @@ -321,7 +321,7 @@ function [OR_driv, OR_aid, OR_err] = estimate_orientation(Accel_data, Gyro_data p1 = plot(1:BUFFER_SIZE,acc_x(1,1:BUFFER_SIZE),'r'); hold on; grid on; - p2 = plot(1:BUFFER_SIZE,gyr_x(1,1:BUFFER_SIZE),'b'); + p2 = plot(1:BUFFER_SIZE,filt_Gx(1,1:BUFFER_SIZE),'b'); hold on; grid on; p3 = plot(1:BUFFER_SIZE,mag_x(1,1:BUFFER_SIZE),'k'); @@ -331,7 +331,7 @@ function [OR_driv, OR_aid, OR_err] = estimate_orientation(Accel_data, Gyro_data p1 = plot(1:BUFFER_SIZE,acc_y(1,1:BUFFER_SIZE),'r'); hold on; grid on; - p2 = plot(1:BUFFER_SIZE,gyr_y(1,1:BUFFER_SIZE),'b'); + p2 = plot(1:BUFFER_SIZE,filt_Gy(1,1:BUFFER_SIZE),'b'); hold on; grid on; p3 = plot(1:BUFFER_SIZE,mag_y(1,1:BUFFER_SIZE),'k'); @@ -341,7 +341,7 @@ function [OR_driv, OR_aid, OR_err] = estimate_orientation(Accel_data, Gyro_data p1 = plot(1:BUFFER_SIZE,acc_z(1,1:BUFFER_SIZE),'r'); hold on; grid on; - p2 = plot(1:BUFFER_SIZE,gyr_z(1,1:BUFFER_SIZE),'b'); + p2 = plot(1:BUFFER_SIZE,filt_Gz(1,1:BUFFER_SIZE),'b'); hold on; grid on; p3 = plot(1:BUFFER_SIZE,mag_z(1,1:BUFFER_SIZE),'k'); -- 2.7.4 From 21650cf26e3a97c41c03b55ae076db091541b802 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 6 May 2014 11:15:05 +0530 Subject: [PATCH 02/16] Restructuring sensor data folder - Sensor data folder restructured to support multiple virtual sensors - cleanup of lib folder files signed-off-by: Ramasamy Change-Id: I93c4623891800d58246559fe3fc432ca5777aa57 --- .../data/100ms/{ => orientation}/pitch/accel.txt | 0 .../data/100ms/{ => orientation}/pitch/gyro.txt | 0 .../100ms/{ => orientation}/pitch/magnetic.txt | 0 .../data/100ms/{ => orientation}/roll/accel.txt | 0 .../data/100ms/{ => orientation}/roll/gyro.txt | 0 .../data/100ms/{ => orientation}/roll/magnetic.txt | 0 .../{ => orientation}/roll_pitch_yaw/accel.txt | 0 .../{ => orientation}/roll_pitch_yaw/gyro.txt | 0 .../{ => orientation}/roll_pitch_yaw/magnetic.txt | 0 .../data/100ms/{ => orientation}/yaw/accel.txt | 0 .../data/100ms/{ => orientation}/yaw/gyro.txt | 0 .../data/100ms/{ => orientation}/yaw/magnetic.txt | 0 src/sensor_fusion/design/lib/quat2euler.m | 2 +- src/sensor_fusion/design/lib/quat2rot_mat.m | 2 +- src/sensor_fusion/design/lib/quat_prod.m | 2 +- src/sensor_fusion/design/lib/rot_mat2quat.m | 2 +- src/sensor_fusion/design/sf_orientation.m | 24 +++++++++++----------- 17 files changed, 16 insertions(+), 16 deletions(-) rename src/sensor_fusion/design/data/100ms/{ => orientation}/pitch/accel.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/pitch/gyro.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/pitch/magnetic.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/roll/accel.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/roll/gyro.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/roll/magnetic.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/roll_pitch_yaw/accel.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/roll_pitch_yaw/gyro.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/roll_pitch_yaw/magnetic.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/yaw/accel.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/yaw/gyro.txt (100%) rename src/sensor_fusion/design/data/100ms/{ => orientation}/yaw/magnetic.txt (100%) diff --git a/src/sensor_fusion/design/data/100ms/pitch/accel.txt b/src/sensor_fusion/design/data/100ms/orientation/pitch/accel.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/pitch/accel.txt rename to src/sensor_fusion/design/data/100ms/orientation/pitch/accel.txt diff --git a/src/sensor_fusion/design/data/100ms/pitch/gyro.txt b/src/sensor_fusion/design/data/100ms/orientation/pitch/gyro.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/pitch/gyro.txt rename to src/sensor_fusion/design/data/100ms/orientation/pitch/gyro.txt diff --git a/src/sensor_fusion/design/data/100ms/pitch/magnetic.txt b/src/sensor_fusion/design/data/100ms/orientation/pitch/magnetic.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/pitch/magnetic.txt rename to src/sensor_fusion/design/data/100ms/orientation/pitch/magnetic.txt diff --git a/src/sensor_fusion/design/data/100ms/roll/accel.txt b/src/sensor_fusion/design/data/100ms/orientation/roll/accel.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/roll/accel.txt rename to src/sensor_fusion/design/data/100ms/orientation/roll/accel.txt diff --git a/src/sensor_fusion/design/data/100ms/roll/gyro.txt b/src/sensor_fusion/design/data/100ms/orientation/roll/gyro.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/roll/gyro.txt rename to src/sensor_fusion/design/data/100ms/orientation/roll/gyro.txt diff --git a/src/sensor_fusion/design/data/100ms/roll/magnetic.txt b/src/sensor_fusion/design/data/100ms/orientation/roll/magnetic.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/roll/magnetic.txt rename to src/sensor_fusion/design/data/100ms/orientation/roll/magnetic.txt diff --git a/src/sensor_fusion/design/data/100ms/roll_pitch_yaw/accel.txt b/src/sensor_fusion/design/data/100ms/orientation/roll_pitch_yaw/accel.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/roll_pitch_yaw/accel.txt rename to src/sensor_fusion/design/data/100ms/orientation/roll_pitch_yaw/accel.txt diff --git a/src/sensor_fusion/design/data/100ms/roll_pitch_yaw/gyro.txt b/src/sensor_fusion/design/data/100ms/orientation/roll_pitch_yaw/gyro.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/roll_pitch_yaw/gyro.txt rename to src/sensor_fusion/design/data/100ms/orientation/roll_pitch_yaw/gyro.txt diff --git a/src/sensor_fusion/design/data/100ms/roll_pitch_yaw/magnetic.txt b/src/sensor_fusion/design/data/100ms/orientation/roll_pitch_yaw/magnetic.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/roll_pitch_yaw/magnetic.txt rename to src/sensor_fusion/design/data/100ms/orientation/roll_pitch_yaw/magnetic.txt diff --git a/src/sensor_fusion/design/data/100ms/yaw/accel.txt b/src/sensor_fusion/design/data/100ms/orientation/yaw/accel.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/yaw/accel.txt rename to src/sensor_fusion/design/data/100ms/orientation/yaw/accel.txt diff --git a/src/sensor_fusion/design/data/100ms/yaw/gyro.txt b/src/sensor_fusion/design/data/100ms/orientation/yaw/gyro.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/yaw/gyro.txt rename to src/sensor_fusion/design/data/100ms/orientation/yaw/gyro.txt diff --git a/src/sensor_fusion/design/data/100ms/yaw/magnetic.txt b/src/sensor_fusion/design/data/100ms/orientation/yaw/magnetic.txt similarity index 100% rename from src/sensor_fusion/design/data/100ms/yaw/magnetic.txt rename to src/sensor_fusion/design/data/100ms/orientation/yaw/magnetic.txt diff --git a/src/sensor_fusion/design/lib/quat2euler.m b/src/sensor_fusion/design/lib/quat2euler.m index 16e46b3..f788ea4 100755 --- a/src/sensor_fusion/design/lib/quat2euler.m +++ b/src/sensor_fusion/design/lib/quat2euler.m @@ -1,5 +1,5 @@ function euler = quat2euler(q) -% Quat2Euler +% quat2euler % % Copyright (c) 2014 Samsung Electronics Co., Ltd. % diff --git a/src/sensor_fusion/design/lib/quat2rot_mat.m b/src/sensor_fusion/design/lib/quat2rot_mat.m index bb11d08..62db364 100755 --- a/src/sensor_fusion/design/lib/quat2rot_mat.m +++ b/src/sensor_fusion/design/lib/quat2rot_mat.m @@ -1,5 +1,5 @@ function R = quat2rot_mat(q) -% Quat2RotMat +% quat2rot_mat % % Copyright (c) 2014 Samsung Electronics Co., Ltd. % diff --git a/src/sensor_fusion/design/lib/quat_prod.m b/src/sensor_fusion/design/lib/quat_prod.m index 40d2c57..21a48dc 100755 --- a/src/sensor_fusion/design/lib/quat_prod.m +++ b/src/sensor_fusion/design/lib/quat_prod.m @@ -1,5 +1,5 @@ function ab = quat_prod(a, b) -% QuatProd +% quat_prod % % Copyright (c) 2014 Samsung Electronics Co., Ltd. % diff --git a/src/sensor_fusion/design/lib/rot_mat2quat.m b/src/sensor_fusion/design/lib/rot_mat2quat.m index dcc3410..53ad96c 100755 --- a/src/sensor_fusion/design/lib/rot_mat2quat.m +++ b/src/sensor_fusion/design/lib/rot_mat2quat.m @@ -1,5 +1,5 @@ function q = rot_mat2quat(R) -% RotMat2Quat +% rot_mat2quat % % Copyright (c) 2014 Samsung Electronics Co., Ltd. % diff --git a/src/sensor_fusion/design/sf_orientation.m b/src/sensor_fusion/design/sf_orientation.m index 44ec7d8..d1c927c 100755 --- a/src/sensor_fusion/design/sf_orientation.m +++ b/src/sensor_fusion/design/sf_orientation.m @@ -52,16 +52,16 @@ OR_err = zeros(3,BUFFER_SIZE); % Sensor Data simulating orientation motions % get accel x,y,z axis data from stored file -Accel_data(1,:) = (((dlmread("data/100ms/roll_pitch_yaw/accel.txt")(:,1))') - Bias_Ax)(1:BUFFER_SIZE); -Accel_data(2,:) = (((dlmread("data/100ms/roll_pitch_yaw/accel.txt")(:,2))') - Bias_Ay)(1:BUFFER_SIZE); -Accel_data(3,:) = (((dlmread("data/100ms/roll_pitch_yaw/accel.txt")(:,3))') - Bias_Az)(1:BUFFER_SIZE); -Accel_data(4,:) = ((dlmread("data/100ms/roll_pitch_yaw/accel.txt")(:,4))')(1:BUFFER_SIZE); +Accel_data(1,:) = (((dlmread("data/100ms/orientation/roll_pitch_yaw/accel.txt")(:,1))') - Bias_Ax)(1:BUFFER_SIZE); +Accel_data(2,:) = (((dlmread("data/100ms/orientation/roll_pitch_yaw/accel.txt")(:,2))') - Bias_Ay)(1:BUFFER_SIZE); +Accel_data(3,:) = (((dlmread("data/100ms/orientation/roll_pitch_yaw/accel.txt")(:,3))') - Bias_Az)(1:BUFFER_SIZE); +Accel_data(4,:) = ((dlmread("data/100ms/orientation/roll_pitch_yaw/accel.txt")(:,4))')(1:BUFFER_SIZE); % get gyro x,y,z axis data from stored file -Gyro_data(1,:) = (((dlmread("data/100ms/roll_pitch_yaw/gyro.txt")(:,1))') - Bias_Gx)(1:BUFFER_SIZE); -Gyro_data(2,:) = (((dlmread("data/100ms/roll_pitch_yaw/gyro.txt")(:,2))') - Bias_Gy)(1:BUFFER_SIZE); -Gyro_data(3,:) = (((dlmread("data/100ms/roll_pitch_yaw/gyro.txt")(:,3))') - Bias_Gz)(1:BUFFER_SIZE); -Gyro_data(4,:) = ((dlmread("data/100ms/roll_pitch_yaw/gyro.txt")(:,4))')(1:BUFFER_SIZE); +Gyro_data(1,:) = (((dlmread("data/100ms/orientation/roll_pitch_yaw/gyro.txt")(:,1))') - Bias_Gx)(1:BUFFER_SIZE); +Gyro_data(2,:) = (((dlmread("data/100ms/orientation/roll_pitch_yaw/gyro.txt")(:,2))') - Bias_Gy)(1:BUFFER_SIZE); +Gyro_data(3,:) = (((dlmread("data/100ms/orientation/roll_pitch_yaw/gyro.txt")(:,3))') - Bias_Gz)(1:BUFFER_SIZE); +Gyro_data(4,:) = ((dlmread("data/100ms/orientation/roll_pitch_yaw/gyro.txt")(:,4))')(1:BUFFER_SIZE); scale_Gyro = 575; Gyro_data(1,:) = Gyro_data(1,:)/scale_Gyro; @@ -69,10 +69,10 @@ Gyro_data(2,:) = Gyro_data(2,:)/scale_Gyro; Gyro_data(3,:) = Gyro_data(3,:)/scale_Gyro; % get magnetometer x,y,z axis data from stored file -Mag_data(1,:) = (((dlmread("data/100ms/roll_pitch_yaw/magnetic.txt")(:,1))'))(1:BUFFER_SIZE); -Mag_data(2,:) = (((dlmread("data/100ms/roll_pitch_yaw/magnetic.txt")(:,2))'))(1:BUFFER_SIZE); -Mag_data(3,:) = (((dlmread("data/100ms/roll_pitch_yaw/magnetic.txt")(:,3))'))(1:BUFFER_SIZE); -Mag_data(4,:) = ((dlmread("data/100ms/roll_pitch_yaw/magnetic.txt")(:,4))')(1:BUFFER_SIZE); +Mag_data(1,:) = (((dlmread("data/100ms/orientation/roll_pitch_yaw/magnetic.txt")(:,1))'))(1:BUFFER_SIZE); +Mag_data(2,:) = (((dlmread("data/100ms/orientation/roll_pitch_yaw/magnetic.txt")(:,2))'))(1:BUFFER_SIZE); +Mag_data(3,:) = (((dlmread("data/100ms/orientation/roll_pitch_yaw/magnetic.txt")(:,3))'))(1:BUFFER_SIZE); +Mag_data(4,:) = ((dlmread("data/100ms/orientation/roll_pitch_yaw/magnetic.txt")(:,4))')(1:BUFFER_SIZE); % estimate orientation [OR_driv, OR_aid, OR_err] = estimate_orientation(Accel_data, Gyro_data, Mag_data); -- 2.7.4 From f0be8d233127cee3696cc6d60a0a53282a622836 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 6 May 2014 11:51:19 +0530 Subject: [PATCH 03/16] Adding Gravity virtual sensor - adding octave code to measure gravitational force on device reference axes - adding sensor test data to test gravity virtual sensor signed-off-by: Ramasamy Change-Id: Ia1ff380f04145722432467d4f2e8b4fd94e0bfa3 --- .../100ms/gravity/orientation_change/accel.txt | 527 ++++++++++++++++++++ .../data/100ms/gravity/orientation_change/gyro.txt | 529 +++++++++++++++++++++ .../100ms/gravity/orientation_change/magnetic.txt | 524 ++++++++++++++++++++ .../data/100ms/gravity/single_roll_throw/accel.txt | 100 ++++ .../data/100ms/gravity/single_roll_throw/gyro.txt | 100 ++++ .../100ms/gravity/single_roll_throw/magnetic.txt | 100 ++++ .../design/data/100ms/gravity/throw/accel.txt | 135 ++++++ .../design/data/100ms/gravity/throw/gyro.txt | 136 ++++++ .../design/data/100ms/gravity/throw/magnetic.txt | 136 ++++++ src/sensor_fusion/design/lib/estimate_gravity.m | 45 ++ src/sensor_fusion/design/sf_gravity.m | 113 +++++ 11 files changed, 2445 insertions(+) create mode 100755 src/sensor_fusion/design/data/100ms/gravity/orientation_change/accel.txt create mode 100755 src/sensor_fusion/design/data/100ms/gravity/orientation_change/gyro.txt create mode 100755 src/sensor_fusion/design/data/100ms/gravity/orientation_change/magnetic.txt create mode 100755 src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/accel.txt create mode 100755 src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/gyro.txt create mode 100755 src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/magnetic.txt create mode 100755 src/sensor_fusion/design/data/100ms/gravity/throw/accel.txt create mode 100755 src/sensor_fusion/design/data/100ms/gravity/throw/gyro.txt create mode 100755 src/sensor_fusion/design/data/100ms/gravity/throw/magnetic.txt create mode 100755 src/sensor_fusion/design/lib/estimate_gravity.m create mode 100755 src/sensor_fusion/design/sf_gravity.m diff --git a/src/sensor_fusion/design/data/100ms/gravity/orientation_change/accel.txt b/src/sensor_fusion/design/data/100ms/gravity/orientation_change/accel.txt new file mode 100755 index 0000000..adc32ff --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/gravity/orientation_change/accel.txt @@ -0,0 +1,527 @@ +-0.013161 0.173480 10.108479 64210388.000000 +0.035892 0.166301 10.162319 64310524.000000 +0.025125 0.151944 10.188639 64410512.000000 +0.015553 0.167498 10.180264 64510568.000000 +0.029910 0.159123 10.181459 64610524.000000 +0.033500 0.167498 10.164711 64710512.000000 +0.020339 0.196211 10.217353 64810688.000000 +0.038285 0.163908 10.169496 64910984.000000 +0.008375 0.165105 10.194620 65010968.000000 +0.011964 0.131605 10.182656 65110924.000000 +0.033500 0.174676 10.201799 65211036.000000 +0.011964 0.139980 10.191031 65310964.000000 +0.049053 0.177069 10.189835 65410884.000000 +0.034696 0.150748 10.189835 65510880.000000 +0.017946 0.157926 10.179067 65611080.000000 +0.022732 0.161516 10.217353 65711344.000000 +0.008375 0.156730 10.211370 65811244.000000 +0.014357 0.185444 10.170692 65911064.000000 +0.001196 0.191426 10.185050 66016000.000000 +0.028714 0.174676 10.177871 66116696.000000 +0.028714 0.187837 10.229317 66215828.000000 +0.015553 0.177069 10.237692 66316416.000000 +0.027517 0.179462 10.193424 66416000.000000 +0.027517 0.189033 10.144372 66516532.000000 +0.033500 0.143569 10.192227 66616080.000000 +0.050249 0.147159 10.193424 66716516.000000 +0.037089 0.162712 10.205389 66815968.000000 +0.026321 0.173480 10.212566 66916712.000000 +0.023928 0.175872 10.195816 67016224.000000 +0.004786 0.165105 10.170692 67116528.000000 +0.001196 0.160319 10.152746 67216000.000000 +0.014357 0.161516 10.187442 67316544.000000 +0.033500 0.174676 10.195816 67416160.000000 +0.016750 0.166301 10.137194 67516504.000000 +0.004786 0.169890 10.194620 67616360.000000 +0.002393 0.195015 10.180264 67716168.000000 +0.021535 0.147159 10.173084 67816352.000000 +0.035892 0.150748 10.211370 67916608.000000 +0.008375 0.147159 10.185050 68017840.000000 +0.040678 0.168694 10.163515 68116832.000000 +0.001196 0.166301 10.176675 68216584.000000 +0.032303 0.151944 10.183852 68316376.000000 +0.028714 0.167498 10.218549 68416984.000000 +0.022732 0.174676 10.200603 68516368.000000 +0.019143 0.179462 10.165908 68616536.000000 +0.027517 0.181855 10.185050 68716824.000000 +0.028714 0.167498 10.157533 68816512.000000 +0.028714 0.187837 10.182656 68915760.000000 +0.051446 0.172283 10.156336 69016128.000000 +0.020339 0.156730 10.161121 69115856.000000 +0.055035 0.171087 10.188639 69217096.000000 +0.020339 0.183051 10.163515 69315920.000000 +0.031107 0.171087 10.169496 69416296.000000 +0.014357 0.137587 10.202995 69515928.000000 +0.023928 0.190229 10.189835 69616736.000000 +0.034696 0.191426 10.210175 69716504.000000 +0.053839 0.160319 10.169496 69816336.000000 +0.034696 0.165105 10.213763 69916768.000000 +0.025125 0.193819 10.187442 70016096.000000 +0.025125 0.168694 10.149158 70116384.000000 +0.046660 0.192622 10.207782 70216000.000000 +-0.002393 0.157926 10.214959 70316104.000000 +0.007178 0.153141 10.189835 70416424.000000 +0.137587 0.184247 9.906286 70515952.000000 +0.399601 0.138784 8.985049 70616864.000000 +0.228515 0.202193 10.163515 70716168.000000 +0.210568 0.159123 10.183852 70816320.000000 +0.239282 0.143569 10.171888 70916160.000000 +0.282353 0.148355 10.168301 71016528.000000 +0.552742 0.099302 10.046266 71116384.000000 +0.664008 0.084945 10.217353 71216320.000000 +0.960718 -0.068195 9.962516 71315912.000000 +1.259821 0.007178 10.378868 71416720.000000 +1.800599 0.029910 9.945767 71515944.000000 +2.437090 0.041874 9.785448 71616552.000000 +3.163311 0.108873 9.783055 71716016.000000 +4.147958 -0.031107 9.141779 71816320.000000 +4.985445 0.026321 8.675179 71916120.000000 +5.698507 0.102891 8.409575 72016328.000000 +6.285945 0.026321 8.093722 72116096.000000 +6.933204 0.015553 7.310073 72216440.000000 +7.312466 0.092124 7.456036 72316304.000000 +7.805387 0.025125 5.705685 72416064.000000 +8.086544 0.089731 5.960521 72516360.000000 +8.376076 0.076570 5.581259 72616040.000000 +8.621340 0.124427 4.352544 72716624.000000 +8.955138 0.061017 4.242475 72816040.000000 +9.113065 0.112463 4.095316 72916208.000000 +9.278170 0.075374 3.863212 73016120.000000 +9.419346 0.096909 3.876373 73116016.000000 +9.552148 0.098106 2.248057 73216304.000000 +9.552148 0.093320 2.361716 73316792.000000 +9.677772 0.063410 1.887937 73416464.000000 +9.690931 0.082552 1.743171 73516968.000000 +9.700503 0.084945 1.671387 73616264.000000 +9.718449 0.045464 1.216750 73716416.000000 +9.714860 0.050249 0.794417 73816840.000000 +9.762716 0.032303 0.480957 73916680.000000 +9.766305 0.086142 0.733400 74016184.000000 +9.747163 0.038285 0.697508 74116944.000000 +9.763913 0.025125 0.320638 74216808.000000 +9.748360 0.026321 0.577867 74316992.000000 +9.710074 0.043071 0.488136 74418520.000000 +9.755538 0.019143 0.531207 74516032.000000 +9.749557 0.025125 0.440279 74615920.000000 +9.743573 0.056231 0.705883 74715768.000000 +9.765109 0.013161 1.282553 74815760.000000 +9.743573 0.068195 1.452443 74916392.000000 +9.729217 0.034696 1.141376 75015600.000000 +9.738789 0.057428 1.027717 75115896.000000 +9.884750 0.022732 1.697708 75215616.000000 +9.753145 0.062213 0.935594 75315728.000000 +9.729217 0.056231 1.172483 75415568.000000 +9.734003 0.052642 0.655633 75515904.000000 +9.744770 0.049053 1.397408 75615568.000000 +9.744770 0.058624 1.051646 75715808.000000 +9.757930 0.038285 0.720240 75815760.000000 +9.726824 0.052642 1.252643 75915856.000000 +9.739985 0.052642 1.088734 76015736.000000 +9.741181 0.066999 0.832702 76115672.000000 +9.726824 0.049053 0.653241 76215936.000000 +9.763913 0.019143 1.131805 76315784.000000 +9.729217 0.040678 0.940379 76415888.000000 +9.750752 0.071785 0.882952 76515840.000000 +9.774680 0.050249 1.004985 76615560.000000 +9.777073 0.044267 0.470190 76715504.000000 +9.763913 0.022732 0.997807 76816256.000000 +9.716056 0.050249 0.681954 76915600.000000 +9.772287 0.045464 1.014557 77015840.000000 +9.731609 0.072981 0.933201 77115928.000000 +9.774680 0.045464 0.869791 77215952.000000 +9.787841 0.037089 0.770489 77315872.000000 +9.768698 0.021535 0.711865 77415744.000000 +9.731609 0.069392 1.130609 77515600.000000 +9.741181 0.069392 1.074377 77615704.000000 +9.712467 0.077767 1.207179 77715784.000000 +9.722038 0.059821 1.112662 77815768.000000 +9.729217 0.065803 1.136591 77915768.000000 +9.724431 0.062213 0.990629 78015776.000000 +9.705289 0.047856 1.015753 78115536.000000 +9.723234 0.072981 1.026521 78215720.000000 +9.747163 0.070588 0.933201 78319080.000000 +9.768698 0.026321 0.868595 78415416.000000 +9.756735 0.025125 0.897308 78515336.000000 +9.854840 -0.004786 0.726222 78615512.000000 +9.734003 0.131605 1.914258 78715440.000000 +9.751948 0.040678 0.884148 78815552.000000 +9.755538 0.037089 0.837488 78915616.000000 +9.754342 0.082552 1.119841 79015680.000000 +9.732806 0.081356 0.942772 79115848.000000 +9.728020 0.062213 0.989432 79215944.000000 +9.728020 0.063410 0.842274 79315800.000000 +9.755538 0.039482 0.952343 79415824.000000 +9.730413 0.040678 0.927219 79515824.000000 +9.725628 0.051446 1.129412 79615616.000000 +9.743573 0.063410 1.025324 79715760.000000 +9.711270 0.059821 1.182054 79815552.000000 +9.737592 0.033500 0.788435 79915864.000000 +9.756735 0.055035 0.823131 80017760.000000 +9.786645 0.026321 0.693919 80115744.000000 +9.762716 0.031107 0.710668 80215800.000000 +9.763913 0.053839 0.964308 80315568.000000 +9.763913 0.049053 1.160519 80416112.000000 +9.744770 0.061017 0.959522 80515808.000000 +9.738789 0.041874 0.714258 80615760.000000 +9.750752 0.050249 0.732204 80715584.000000 +9.719646 0.076570 0.467797 80815816.000000 +9.777073 0.065803 0.725025 80915768.000000 +9.743573 0.034696 0.510868 81015648.000000 +9.749557 0.041874 0.618545 81115816.000000 +9.767502 0.038285 0.631705 81215896.000000 +9.753145 0.069392 0.612563 81315944.000000 +9.732806 0.057428 0.750150 81416000.000000 +9.726824 0.040678 0.668794 81515832.000000 +9.759127 0.063410 0.966700 81615808.000000 +9.731609 0.072981 0.740579 81715616.000000 +9.783055 0.045464 0.748954 81816896.000000 +9.763913 0.065803 0.559920 81916256.000000 +9.731609 0.050249 0.545564 82021088.000000 +9.755538 0.041874 0.817149 82121000.000000 +9.751948 0.040678 0.669990 82221296.000000 +9.755538 0.053839 0.943969 82321824.000000 +9.745967 0.034696 0.658026 82421032.000000 +9.760324 0.081356 0.908076 82522288.000000 +9.674182 0.098106 0.920040 82622224.000000 +9.718449 0.057428 1.164108 82721104.000000 +9.646665 0.112463 1.798206 82821768.000000 +9.669396 0.033500 1.828116 82921392.000000 +9.571291 0.045464 1.992025 83021784.000000 +9.434900 0.059821 2.836691 83121840.000000 +9.382257 0.089731 2.818745 83223152.000000 +9.231510 0.028714 3.136991 83321528.000000 +9.006584 0.034696 3.820141 83422040.000000 +8.685946 0.066999 4.780859 83521024.000000 +8.271988 0.049053 5.554938 83621432.000000 +7.974082 -0.039482 6.092126 83722232.000000 +7.459624 0.086142 6.790830 83822064.000000 +7.032506 0.044267 6.976274 83922048.000000 +6.455836 0.039482 7.880762 84020496.000000 +5.882754 0.045464 7.990831 84120768.000000 +4.971089 0.053839 8.947960 84220544.000000 +4.173083 -0.022732 9.316455 84320528.000000 +3.071188 0.083749 9.887143 84420520.000000 +2.431108 0.049053 9.714860 84520504.000000 +1.560120 0.010768 9.865608 84620776.000000 +1.245464 0.051446 9.917053 84720472.000000 +1.335195 0.195015 10.153944 84820784.000000 +1.416551 0.084945 10.037891 84920608.000000 +1.318445 0.108873 10.011569 85020536.000000 +1.293321 0.045464 10.063015 85120720.000000 +0.885344 0.088534 10.024731 85221272.000000 +1.147358 -0.035892 10.170692 85321416.000000 +0.924826 0.025125 10.226924 85421096.000000 +0.671187 0.090927 10.175477 85521416.000000 +0.632902 0.081356 10.183852 85620752.000000 +0.599402 0.063410 10.145569 85720936.000000 +0.204586 0.154337 10.181459 85821544.000000 +0.223729 0.166301 10.229317 85921072.000000 +0.027517 0.397209 10.219746 86021336.000000 +0.095713 0.130409 9.899107 86121040.000000 +-0.003589 0.216550 10.230514 86221408.000000 +-0.041874 0.184247 10.431510 86321048.000000 +0.008375 0.154337 10.159925 86421136.000000 +0.033500 0.183051 10.199407 86521360.000000 +0.016750 0.181855 10.165908 86620792.000000 +0.045464 0.216550 10.173084 86721416.000000 +0.008375 0.178265 10.199407 86820976.000000 +0.008375 0.154337 10.177871 86921456.000000 +0.001196 0.167498 10.174281 87020984.000000 +0.002393 0.169890 10.216157 87121432.000000 +0.019143 0.147159 10.197014 87221336.000000 +0.040678 0.166301 10.189835 87321408.000000 +0.040678 0.169890 10.199407 87420800.000000 +0.047856 0.178265 10.188639 87520856.000000 +0.040678 0.163908 10.181459 87621360.000000 +-0.015553 0.156730 10.198210 87720992.000000 +0.011964 0.153141 10.158729 87820936.000000 +0.022732 0.163908 10.187442 87920976.000000 +0.015553 0.174676 10.163515 88021080.000000 +0.002393 0.154337 10.188639 88121352.000000 +0.020339 0.175872 10.173084 88221096.000000 +0.003589 0.167498 10.226924 88321552.000000 +0.047856 0.150748 10.158729 88420880.000000 +0.013161 0.148355 10.149158 88520816.000000 +0.029910 0.175872 10.139585 88620928.000000 +-0.020339 0.150748 10.296316 88721016.000000 +-0.025125 0.181855 10.339387 88821048.000000 +0.007178 0.171087 10.241282 88921232.000000 +0.003589 0.163908 10.181459 89021304.000000 +0.021535 0.157926 10.161121 89121008.000000 +0.015553 0.165105 10.168301 89221064.000000 +0.038285 0.165105 10.198210 89321064.000000 +0.022732 0.177069 10.165908 89421056.000000 +0.015553 0.172283 10.180264 89520792.000000 +-0.007178 0.160319 10.168301 89620776.000000 +-0.007178 0.183051 10.141978 89720944.000000 +0.021535 0.143569 10.167104 89820872.000000 +0.002393 0.167498 10.192227 89921024.000000 +0.033500 0.162712 10.194620 90022224.000000 +-0.001196 0.155533 10.185050 90122096.000000 +0.020339 0.172283 10.193424 90221344.000000 +0.023928 0.172283 10.161121 90321408.000000 +-0.007178 0.161516 10.173084 90422312.000000 +0.023928 0.137587 10.193424 90521280.000000 +0.028714 0.155533 10.188639 90621440.000000 +0.008375 0.192622 10.185050 90723992.000000 +-0.001196 0.167498 10.169496 90821352.000000 +0.019143 0.128016 10.210175 90922520.000000 +0.020339 0.139980 10.191031 91021328.000000 +0.032303 0.162712 10.197014 91122032.000000 +0.101695 0.133998 10.043874 91221536.000000 +0.032303 0.181855 10.173084 91321368.000000 +-0.016750 0.165105 10.173084 91422168.000000 +0.095713 0.155533 10.187442 91521232.000000 +0.094516 0.155533 10.347760 91621960.000000 +-0.244068 0.242871 10.350154 91721792.000000 +-0.019143 0.401994 9.728020 91822544.000000 +0.669990 0.455833 10.658829 91921432.000000 +-0.040678 1.100698 10.418350 92021488.000000 +-0.144766 1.785046 10.402797 92122304.000000 +-0.190229 2.585445 9.760324 92222376.000000 +0.218943 3.451647 9.535398 92322440.000000 +0.222532 4.307081 9.360723 92421568.000000 +0.349352 5.302495 8.640482 92522536.000000 +-0.026321 6.156733 7.834101 92620992.000000 +0.443869 6.721439 7.422535 92722600.000000 +0.790828 7.250252 6.851848 92821784.000000 +0.386441 8.037491 6.099305 92921184.000000 +0.587438 8.648857 4.864608 93020704.000000 +0.372084 8.846266 4.746164 93120512.000000 +0.515653 9.292527 3.330809 93220664.000000 +0.573081 9.481560 1.942972 93320624.000000 +0.168694 9.713664 1.526621 93420536.000000 +0.723829 9.698111 1.445265 93520720.000000 +0.410369 9.821341 0.677169 93620544.000000 +0.136391 9.815358 0.135194 93720696.000000 +0.393619 9.829715 0.577867 93820536.000000 +0.532403 9.818949 0.746561 93920880.000000 +0.309871 9.818949 0.368495 94020640.000000 +0.254836 9.841680 0.577867 94120544.000000 +0.368495 9.840484 0.631705 94220736.000000 +0.234497 9.883554 0.403191 94320504.000000 +0.017946 9.871590 0.277567 94420752.000000 +0.386441 9.795020 0.512064 94520472.000000 +0.464208 9.799806 0.631705 94620768.000000 +0.315853 9.814162 0.500100 94720504.000000 +0.089731 9.824929 0.415155 94820528.000000 +0.049053 9.858429 0.373280 94920712.000000 +0.715454 9.791430 0.658026 95020520.000000 +0.007178 9.824929 -0.046660 95120752.000000 +0.016750 9.844072 0.247657 95220528.000000 +0.228515 9.817751 0.591027 95320704.000000 +-0.118445 9.885946 0.546760 95421440.000000 +0.142373 9.845268 0.441476 95520528.000000 +0.090927 9.850054 0.394816 95620736.000000 +-0.245264 9.856036 0.269193 95720448.000000 +0.035892 9.815358 0.331406 95820744.000000 +-0.148355 9.854840 0.333799 95920496.000000 +-0.180658 9.865608 0.555135 96020688.000000 +-0.229711 9.833304 -0.221336 96120640.000000 +0.099302 9.829715 0.212961 96222312.000000 +-0.179462 9.851252 -0.046660 96322168.000000 +0.313460 9.799806 -0.020339 96422960.000000 +-0.178265 9.883554 -0.250050 96521488.000000 +0.095713 9.810574 -0.478565 96622128.000000 +-0.063410 9.876375 0.186640 96722096.000000 +0.084945 9.832108 0.250050 96820736.000000 +0.247657 9.824929 0.029910 96921168.000000 +0.209372 9.792626 0.028714 97021384.000000 +0.160319 9.806983 -0.081356 97121424.000000 +0.155533 9.811769 -0.437887 97221096.000000 +-0.065803 9.780663 -0.199801 97320736.000000 +-0.007178 9.832108 0.478565 97421568.000000 +0.007178 9.840484 0.342174 97521744.000000 +0.223729 9.818949 0.044267 97621544.000000 +0.092124 9.805787 0.177069 97721944.000000 +0.095713 9.836893 0.547956 97821248.000000 +-0.399601 9.907482 0.528814 97922560.000000 +-0.262014 9.854840 0.561117 98022072.000000 +-0.149551 9.841680 0.406780 98121240.000000 +0.031107 9.786645 0.212961 98221120.000000 +0.591027 9.732806 0.515653 98320784.000000 +-0.250050 9.834501 0.591027 98421376.000000 +-0.269193 9.846465 0.579063 98522752.000000 +-0.149551 9.817751 0.323031 98621160.000000 +-0.064606 9.805787 0.141177 98721632.000000 +-0.282353 9.826126 0.142373 98820840.000000 +-0.290728 9.852448 0.665205 98921240.000000 +-0.302692 9.875179 0.453440 99021208.000000 +-0.099302 9.829715 0.308674 99121368.000000 +0.119641 9.723234 0.746561 99220896.000000 +-0.040678 9.827322 0.464208 99320896.000000 +-0.284746 9.864411 0.623330 99420968.000000 +-0.247657 9.835697 0.568295 99521096.000000 +-0.325424 9.879964 0.336192 99621400.000000 +-0.061017 9.851252 -0.013161 99721488.000000 +-0.033500 9.826126 0.516850 99820976.000000 +-0.202193 9.854840 0.531207 99920968.000000 +-0.132802 9.850054 0.278764 100021064.000000 +-0.099302 9.830912 0.191426 100121272.000000 +0.126820 9.804591 0.263210 100221216.000000 +-0.259621 9.860823 0.620937 100320864.000000 +-0.198604 9.845268 0.442672 100420680.000000 +-0.227318 9.863215 0.296710 100522464.000000 +-0.070588 9.832108 0.092124 100620928.000000 +-0.477368 9.913465 0.040678 100720808.000000 +-0.376870 9.883554 0.697508 100821136.000000 +0.022732 9.823733 0.251246 100921664.000000 +-0.179462 9.863215 0.178265 101021032.000000 +-0.122034 9.860823 0.045464 101120760.000000 +-0.647258 9.881162 -0.716650 101220912.000000 +0.391227 9.791430 0.186640 101321008.000000 +-0.198604 9.864411 0.632902 101421680.000000 +0.068195 9.816555 0.078963 101521552.000000 +-0.040678 9.836893 0.137587 101621600.000000 +-0.099302 9.859627 0.397209 101721464.000000 +-0.346959 9.876375 0.501296 101821544.000000 +0.056231 9.824929 -0.099302 101922544.000000 +-0.129212 9.842876 -0.264407 102021880.000000 +-0.142373 9.830912 -0.063410 102124256.000000 +-0.253639 9.862019 0.132802 102221384.000000 +-0.340977 9.863215 0.305085 102321920.000000 +-0.265603 9.871590 0.284746 102421272.000000 +-0.680758 9.931411 0.087338 102521184.000000 +0.101695 9.832108 -0.076570 102622336.000000 +-0.217747 9.885946 0.111266 102721272.000000 +-0.032303 9.938589 0.211765 102822032.000000 +0.340977 9.784252 -0.315853 102921200.000000 +-0.104088 9.866804 0.074178 103020760.000000 +-0.102891 9.836893 -0.224925 103120520.000000 +-0.180658 9.862019 -0.287139 103220496.000000 +0.305085 9.839286 0.111266 103320528.000000 +0.070588 9.852448 0.045464 103420752.000000 +0.172283 9.810574 -0.017946 103520528.000000 +0.233300 9.804591 -0.077767 103620696.000000 +0.270389 9.842876 0.295514 103720720.000000 +0.573081 9.803394 0.412762 103822304.000000 +0.454636 9.823733 0.224925 103921344.000000 +0.021535 9.858429 0.144766 104022096.000000 +0.288335 9.817751 0.179462 104121488.000000 +0.234497 9.844072 0.260818 104222160.000000 +0.263210 9.860823 0.393619 104321608.000000 +0.233300 9.810574 0.308674 104422376.000000 +0.238086 9.857233 0.379262 104521712.000000 +0.342174 9.822537 0.491725 104621368.000000 +0.238086 9.835697 0.200997 104722304.000000 +0.247657 9.839286 0.242871 104821616.000000 +0.150748 9.826126 0.179462 104922104.000000 +0.238086 9.806983 0.343370 105021328.000000 +0.117248 9.836893 0.196211 105124704.000000 +0.163908 9.829715 0.276371 105225552.000000 +0.333799 9.835697 0.296710 105325568.000000 +0.088534 9.877571 0.300299 105425584.000000 +0.026321 9.851252 0.659223 105526656.000000 +0.156730 9.817751 0.815953 105625576.000000 +-0.008375 9.820145 0.699901 105725584.000000 +-0.065803 9.765109 0.412762 105825960.000000 +-0.075374 9.707682 2.415555 105925696.000000 +-0.017946 9.596415 1.792224 106025544.000000 +-0.216550 9.410972 2.965904 106126240.000000 +0.512064 9.053245 4.157529 106226128.000000 +0.427119 8.834301 4.512863 106325816.000000 +0.223729 8.599805 5.222335 106425568.000000 +-0.348156 8.356933 5.632704 106525888.000000 +-0.143569 7.954939 5.583652 106625608.000000 +-0.296710 7.562516 6.668797 106725584.000000 +-0.342174 7.123433 7.130611 106826024.000000 +-0.765703 7.021738 7.343572 106925552.000000 +-0.885344 6.134001 8.208578 107025904.000000 +-0.894916 5.606383 8.757731 107125528.000000 +-0.970290 4.831109 8.975478 107226072.000000 +-1.067199 4.299902 9.078369 107325608.000000 +-1.330409 3.396612 9.438489 107425696.000000 +-1.143769 2.842674 9.730413 107526360.000000 +-0.934397 2.409572 9.851252 107625896.000000 +-0.942772 1.826920 9.779467 107725768.000000 +-0.885344 1.515853 9.964910 107825480.000000 +-0.435494 1.039681 10.362118 107925424.000000 +0.105284 0.492921 10.993823 108025520.000000 +-0.034696 0.417548 10.181459 108125688.000000 +0.266800 0.247657 10.358529 108225456.000000 +0.227318 0.185444 10.137194 108325488.000000 +-0.001196 0.116052 10.197014 108425520.000000 +-0.090927 0.296710 10.188639 108525496.000000 +0.287139 0.114855 10.141978 108626496.000000 +0.035892 0.173480 10.310673 108725528.000000 +0.055035 0.174676 10.060623 108825512.000000 +0.009571 0.178265 10.275976 108926272.000000 +0.032303 0.165105 10.218549 109025560.000000 +0.045464 0.172283 10.229317 109125728.000000 +0.014357 0.153141 10.199407 109225776.000000 +0.098106 0.144766 10.000802 109330096.000000 +0.025125 0.165105 10.278370 109430472.000000 +0.246461 0.149551 9.607183 109530488.000000 +-0.092124 0.150748 10.551151 109630600.000000 +0.043071 0.139980 10.159925 109730584.000000 +0.023928 0.175872 10.133603 109830536.000000 +0.189033 0.141177 9.675378 109930448.000000 +0.055035 0.172283 10.147961 110030424.000000 +0.065803 0.155533 10.091729 110130552.000000 +0.031107 0.155533 10.246067 110230752.000000 +0.209372 0.059821 9.711270 110330400.000000 +0.057428 0.162712 10.248460 110430496.000000 +0.051446 0.169890 10.082158 110530616.000000 +0.027517 0.175872 10.200603 110630784.000000 +0.034696 0.160319 10.165908 110731088.000000 +-0.224925 0.125623 11.474781 110830408.000000 +0.095713 0.173480 10.030712 110930792.000000 +-0.009571 0.189033 10.264012 111030624.000000 +0.049053 0.162712 10.157533 111130616.000000 +0.056231 0.175872 10.210175 111230776.000000 +0.039482 0.163908 10.174281 111330584.000000 +0.045464 0.161516 10.208978 111430552.000000 +0.001196 0.126820 10.212566 111530616.000000 +0.059821 0.163908 10.200603 111630656.000000 +0.025125 0.161516 10.181459 111730736.000000 +0.032303 0.150748 10.157533 111830536.000000 +0.037089 0.139980 10.205389 111931480.000000 +0.055035 0.166301 10.206585 112030544.000000 +0.026321 0.172283 10.139585 112130800.000000 +0.061017 0.180658 10.177871 112230576.000000 +0.009571 0.180658 10.206585 112330520.000000 +0.038285 0.161516 10.181459 112431016.000000 +0.028714 0.163908 10.165908 112531664.000000 +0.039482 0.166301 10.202995 112630928.000000 +0.039482 0.172283 10.204191 112730608.000000 +0.039482 0.147159 10.175477 112830896.000000 +0.046660 0.162712 10.222138 112930512.000000 +0.041874 0.153141 10.173084 113030536.000000 +0.025125 0.163908 10.176675 113130792.000000 +0.003589 0.155533 10.186246 113230560.000000 +0.052642 0.160319 10.226924 113331152.000000 +0.008375 0.175872 10.175477 113430720.000000 +0.039482 0.157926 10.134801 113531008.000000 +0.025125 0.142373 10.191031 113630608.000000 +0.025125 0.155533 10.155140 113731064.000000 +0.021535 0.173480 10.189835 113830632.000000 +0.039482 0.155533 10.174281 113930832.000000 +0.029910 0.149551 10.218549 114030824.000000 +0.025125 0.141177 10.169496 114130760.000000 +0.038285 0.165105 10.186246 114230896.000000 +0.025125 0.174676 10.217353 114330672.000000 +0.023928 0.148355 10.191031 114430576.000000 +0.040678 0.149551 10.214959 114530824.000000 +0.015553 0.179462 10.199407 114630576.000000 +0.026321 0.157926 10.174281 114730896.000000 +0.037089 0.172283 10.145569 114830656.000000 +0.020339 0.159123 10.210175 114930688.000000 +0.037089 0.156730 10.218549 115030568.000000 +0.040678 0.154337 10.202995 115130544.000000 +0.053839 0.168694 10.206585 115230824.000000 +0.029910 0.135194 10.224532 115330560.000000 +0.029910 0.202193 10.187442 115430768.000000 +0.022732 0.149551 10.164711 115530520.000000 +0.023928 0.163908 10.157533 115630912.000000 +0.015553 0.142373 10.212566 115730760.000000 +0.044267 0.149551 10.193424 115830640.000000 +0.014357 0.163908 10.183852 115930824.000000 +0.043071 0.149551 10.191031 116030728.000000 +0.040678 0.153141 10.164711 116130904.000000 +0.056231 0.175872 10.182656 116230576.000000 +0.004786 0.167498 10.161121 116430736.000000 +0.041874 0.169890 10.191031 116630824.000000 +0.025125 0.155533 10.179067 116730632.000000 +0.023928 0.136391 10.194620 116830768.000000 +0.033500 0.162712 10.165908 116930640.000000 +0.010768 0.178265 10.181459 117030776.000000 diff --git a/src/sensor_fusion/design/data/100ms/gravity/orientation_change/gyro.txt b/src/sensor_fusion/design/data/100ms/gravity/orientation_change/gyro.txt new file mode 100755 index 0000000..a40075b --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/gravity/orientation_change/gyro.txt @@ -0,0 +1,529 @@ +1.890000 0.472500 -0.472500 64211028.000000 +-3.290000 2.152500 -31.990000 64311292.000000 +-5.355000 0.227500 2.117500 64411184.000000 +-5.407500 0.227500 2.117500 64511276.000000 +-5.407500 0.192500 2.117500 64611292.000000 +-5.425000 0.227500 2.135000 64711240.000000 +-5.425000 0.262500 2.135000 64811132.000000 +-5.407500 0.227500 2.135000 64911248.000000 +-5.442500 0.227500 2.135000 65010520.000000 +-5.407500 0.227500 2.135000 65110496.000000 +-5.442500 0.262500 2.100000 65210616.000000 +-5.425000 0.227500 2.135000 65310504.000000 +-5.442500 0.297500 2.117500 65410440.000000 +-5.442500 0.227500 2.135000 65510460.000000 +-5.460000 0.227500 2.135000 65610520.000000 +-5.460000 0.262500 2.117500 65710660.000000 +-5.442500 0.227500 2.082500 65810688.000000 +-5.407500 0.262500 2.100000 65910520.000000 +-5.442500 0.227500 2.135000 66015548.000000 +-5.390000 0.262500 2.117500 66115640.000000 +-5.442500 0.227500 2.152500 66215452.000000 +-5.442500 0.227500 2.117500 66315812.000000 +-5.460000 0.227500 2.170000 66415564.000000 +-5.407500 0.262500 2.100000 66515752.000000 +-5.460000 0.297500 2.117500 66615608.000000 +-5.407500 0.227500 2.135000 66715732.000000 +-5.407500 0.262500 2.117500 66815536.000000 +-5.442500 0.227500 2.135000 66915796.000000 +-5.495000 0.192500 2.100000 67015636.000000 +-5.442500 0.227500 2.135000 67115864.000000 +-5.442500 0.262500 2.100000 67215656.000000 +-5.460000 0.262500 2.135000 67315872.000000 +-5.442500 0.262500 2.135000 67415680.000000 +-5.442500 0.262500 2.152500 67515824.000000 +-5.460000 0.262500 2.100000 67615784.000000 +-5.460000 0.227500 2.117500 67715688.000000 +-5.442500 0.227500 2.135000 67815784.000000 +-5.442500 0.262500 2.117500 67915816.000000 +-5.460000 0.227500 2.135000 68016368.000000 +-5.442500 0.227500 2.117500 68115976.000000 +-5.460000 0.262500 2.187500 68215792.000000 +-5.425000 0.227500 2.100000 68315816.000000 +-5.442500 0.227500 2.135000 68415872.000000 +-5.460000 0.227500 2.152500 68515680.000000 +-5.442500 0.227500 2.117500 68615960.000000 +-5.442500 0.227500 2.117500 68716040.000000 +-5.425000 0.297500 2.135000 68815856.000000 +-5.442500 0.262500 2.135000 68915384.000000 +-5.460000 0.262500 2.117500 69015552.000000 +-5.477500 0.227500 2.152500 69115424.000000 +-5.495000 0.227500 2.117500 69216528.000000 +-5.442500 0.192500 2.152500 69315440.000000 +-5.495000 0.262500 2.117500 69415608.000000 +-5.460000 0.227500 2.100000 69515440.000000 +-5.460000 0.227500 2.152500 69615832.000000 +-5.442500 0.262500 2.135000 69715928.000000 +-5.442500 0.262500 2.135000 69815768.000000 +-5.442500 0.227500 2.117500 69915904.000000 +-5.460000 0.227500 2.135000 70015680.000000 +-5.425000 0.717500 2.117500 70115816.000000 +-5.460000 -0.192500 2.152500 70215656.000000 +-5.442500 0.262500 2.152500 70315520.000000 +-5.460000 0.612500 2.152500 70415824.000000 +-5.372500 -5.897500 2.275000 70515608.000000 +-5.320000 -4.322500 2.292500 70615920.000000 +-5.635000 -1.732500 2.187500 70715688.000000 +-5.547500 -0.157500 2.152500 70815760.000000 +-5.582500 -0.437500 2.152500 70915688.000000 +-6.580000 -4.567500 2.292500 71015848.000000 +-9.152500 -14.962500 2.607500 71115816.000000 +-7.770000 -8.312500 3.377500 71215768.000000 +-6.370000 -13.772500 -0.175000 71315568.000000 +-6.965000 -24.062500 -5.390000 71415856.000000 +-6.300000 -38.027500 -1.890000 71515584.000000 +-5.040000 -44.887501 5.617500 71615848.000000 +-4.410000 -52.832500 7.175000 71715632.000000 +-4.637500 -64.032501 4.480000 71815768.000000 +-8.207500 -65.852501 -2.590000 71915688.000000 +-7.840000 -58.817501 -1.190000 72015776.000000 +-8.295000 -51.887501 -0.945000 72115664.000000 +-3.762500 -54.582500 4.602500 72215896.000000 +-0.245000 -43.767502 7.647500 72315752.000000 +1.155000 -56.507500 7.892500 72415544.000000 +-2.800000 -31.832500 3.325000 72515776.000000 +-3.482500 -27.597500 2.660000 72615624.000000 +-4.025000 -42.647499 2.362500 72715968.000000 +-3.482500 -40.267502 2.905000 72815680.000000 +-4.567500 -35.332500 2.222500 72915624.000000 +-4.900000 -27.667500 2.345000 73015680.000000 +-3.692500 -33.267502 2.765000 73115568.000000 +-4.462500 -41.982502 2.782500 73215728.000000 +-2.975000 -19.022501 3.045000 73315912.000000 +-3.115000 -21.507500 2.975000 73415816.000000 +-4.217500 -10.517500 2.555000 73516176.000000 +-4.812500 -8.452500 2.432500 73615616.000000 +-2.397500 -9.502500 2.660000 73715672.000000 +-5.582500 -14.017500 2.467500 73815896.000000 +-4.620000 -20.982500 2.432500 73915800.000000 +-2.712500 -4.777500 2.397500 74015584.000000 +-3.290000 -4.112500 2.345000 74116056.000000 +-3.815000 -6.317500 2.362500 74215920.000000 +-5.600000 3.307500 2.065000 74315896.000000 +-5.495000 -1.382500 2.222500 74416336.000000 +-5.477500 -0.192500 2.187500 74515672.000000 +-5.477500 0.017500 2.152500 74616872.000000 +-5.477500 4.462500 2.082500 74716808.000000 +-24.097500 20.842501 1.172500 74816720.000000 +-7.822500 12.792500 1.785000 74918184.000000 +-5.197500 -4.042500 2.275000 75016240.000000 +-5.530000 -0.052500 2.117500 75117040.000000 +-4.865000 -0.857500 2.205000 75216200.000000 +0.927500 -3.797500 2.642500 75316416.000000 +-5.320000 -0.507500 2.222500 75416048.000000 +-4.427500 1.102500 2.222500 75516840.000000 +-8.872500 9.082500 1.820000 75616192.000000 +-5.355000 -4.637500 2.362500 75716744.000000 +-5.425000 0.542500 2.187500 75816704.000000 +-5.477500 8.207500 1.907500 75916912.000000 +-5.635000 -5.862500 2.170000 76016656.000000 +-6.055000 -8.907500 2.345000 76116880.000000 +-5.932500 -5.722500 2.275000 76216968.000000 +-1.977500 13.807500 2.012500 76316944.000000 +-5.582500 -4.392500 2.100000 76417048.000000 +-5.565000 -3.482500 2.240000 76517208.000000 +-5.530000 -2.432500 2.187500 76616168.000000 +-5.425000 -3.657500 2.222500 76716048.000000 +-5.477500 4.322500 2.065000 76817984.000000 +-5.460000 -1.067500 2.222500 76916248.000000 +-5.477500 1.557500 2.100000 77016784.000000 +-5.477500 -0.577500 2.222500 77117336.000000 +-5.442500 1.312500 2.170000 77216880.000000 +-6.947500 7.332500 1.855000 77316880.000000 +-9.205000 3.482500 1.890000 77416256.000000 +-5.460000 2.082500 2.065000 77516120.000000 +-5.460000 0.402500 2.152500 77616120.000000 +-5.460000 -0.682500 2.222500 77716664.000000 +-5.460000 -0.122500 2.135000 77816376.000000 +-5.425000 1.382500 2.187500 77916344.000000 +-5.512500 -1.872500 2.205000 78016184.000000 +-5.460000 0.087500 2.152500 78115880.000000 +-5.460000 -0.962500 2.187500 78216240.000000 +-5.495000 -4.357500 2.240000 78319456.000000 +-5.477500 -2.152500 2.170000 78415848.000000 +-5.460000 -0.997500 2.135000 78515632.000000 +-5.442500 -1.312500 2.152500 78615816.000000 +-14.455000 3.342500 1.715000 78715736.000000 +-6.177500 0.997500 2.100000 78815880.000000 +-4.515000 3.237500 2.030000 78916168.000000 +-5.407500 3.412500 2.065000 79016120.000000 +-5.425000 -1.242500 2.222500 79116360.000000 +-5.442500 0.192500 2.100000 79216496.000000 +-5.477500 0.542500 2.100000 79316552.000000 +-5.477500 1.557500 2.082500 79416608.000000 +-5.477500 -3.202500 2.205000 79516536.000000 +-5.477500 2.607500 2.100000 79616112.000000 +-5.442500 2.852500 2.135000 79716528.000000 +-5.477500 -1.802500 2.187500 79816024.000000 +-5.547500 -4.987500 2.240000 79916632.000000 +-5.547500 -1.767500 2.135000 80019072.000000 +-5.460000 -1.417500 2.275000 80116912.000000 +-5.495000 2.677500 2.082500 80216504.000000 +-5.425000 2.782500 2.117500 80316208.000000 +-5.477500 3.272500 2.135000 80417336.000000 +-5.547500 -6.527500 2.362500 80516736.000000 +-5.372500 -2.677500 2.240000 80616688.000000 +-5.477500 -1.102500 2.205000 80716336.000000 +-5.582500 -6.352500 2.240000 80816768.000000 +-5.057500 -4.497500 2.205000 80916720.000000 +-5.495000 -1.452500 2.205000 81016416.000000 +-5.495000 -0.472500 2.100000 81116472.000000 +-5.495000 0.507500 2.187500 81215568.000000 +-5.547500 3.097500 2.082500 81316728.000000 +-5.460000 5.022500 2.065000 81415648.000000 +-5.477500 1.207500 2.117500 81516808.000000 +-5.460000 2.047500 2.152500 81616832.000000 +-5.582500 -5.582500 2.257500 81716000.000000 +-5.512500 -3.132500 2.205000 81815856.000000 +-5.495000 -2.257500 2.135000 81915568.000000 +-5.460000 3.482500 2.117500 82020224.000000 +-5.355000 8.067500 2.012500 82120400.000000 +-5.512500 -1.522500 2.310000 82220664.000000 +-5.390000 5.267500 2.100000 82320744.000000 +-5.477500 0.122500 2.152500 82420384.000000 +-5.442500 1.557500 2.065000 82520848.000000 +-5.145000 0.297500 2.257500 82620736.000000 +-5.127500 15.242500 2.205000 82720448.000000 +-1.960000 29.487499 1.960000 82820752.000000 +-1.557500 23.747499 2.275000 82920520.000000 +-5.110000 19.617500 1.750000 83020720.000000 +-7.962500 23.502501 1.172500 83120552.000000 +-6.807500 27.072500 1.820000 83221848.000000 +-2.222500 36.452499 3.342500 83320416.000000 +-0.455000 44.642502 4.130000 83420520.000000 +-5.670000 47.372501 2.450000 83520496.000000 +-7.227500 54.442501 2.187500 83620480.000000 +-6.860000 47.792500 2.502500 83720880.000000 +-10.430000 47.582500 -1.750000 83820472.000000 +-7.700000 43.242500 -0.175000 83923216.000000 +-4.200000 56.367500 3.080000 84021232.000000 +-1.610000 49.962502 6.527500 84121888.000000 +-4.777500 70.612503 2.450000 84221560.000000 +-5.582500 66.552498 1.172500 84321512.000000 +-5.757500 58.257500 0.385000 84421480.000000 +-4.217500 52.552502 5.600000 84521200.000000 +-4.462500 54.092499 5.372500 84622384.000000 +-4.305000 27.527500 6.020000 84721264.000000 +-5.302500 6.212500 1.575000 84823144.000000 +-5.337500 3.377500 3.465000 84921544.000000 +-5.582500 2.572500 3.080000 85021248.000000 +-5.792500 4.112500 1.032500 85122584.000000 +-5.635000 7.507500 2.625000 85221968.000000 +-5.635000 8.592500 2.905000 85320784.000000 +-6.247500 12.092500 -1.050000 85420528.000000 +-5.670000 14.717500 0.875000 85520768.000000 +-5.197500 0.997500 2.800000 85620376.000000 +-5.127500 1.452500 2.380000 85720448.000000 +1.120000 27.562500 -0.437500 85820712.000000 +-5.337500 0.752500 2.275000 85920544.000000 +-5.442500 0.297500 2.187500 86020704.000000 +-5.897500 11.882500 2.712500 86120528.000000 +-5.530000 1.697500 2.275000 86220776.000000 +-5.425000 -0.297500 2.257500 86320544.000000 +-5.442500 0.157500 2.135000 86420576.000000 +-5.460000 0.262500 2.100000 86520728.000000 +-5.460000 0.262500 2.152500 86620424.000000 +-5.460000 0.262500 2.117500 86720784.000000 +-5.460000 0.227500 2.135000 86820488.000000 +-5.495000 0.227500 2.100000 86920752.000000 +-5.425000 0.227500 2.082500 87020784.000000 +-5.460000 0.262500 2.187500 87120720.000000 +-5.495000 0.262500 2.135000 87220664.000000 +-5.442500 0.192500 2.135000 87320768.000000 +-5.460000 0.577500 2.082500 87420384.000000 +-5.477500 -0.122500 2.135000 87520392.000000 +-5.495000 0.297500 2.135000 87620712.000000 +-5.442500 0.297500 2.117500 87720496.000000 +-5.460000 0.227500 2.117500 87820496.000000 +-5.477500 0.262500 2.152500 87920456.000000 +-5.495000 0.262500 2.117500 88020480.000000 +-5.495000 0.192500 2.100000 88120728.000000 +-5.495000 0.192500 2.117500 88220608.000000 +-5.512500 0.227500 2.117500 88320840.000000 +-5.477500 0.262500 2.135000 88420456.000000 +-5.460000 0.192500 2.117500 88520448.000000 +-5.390000 -0.192500 2.170000 88620544.000000 +-5.547500 1.102500 2.187500 88720544.000000 +-5.442500 -0.157500 2.222500 88820600.000000 +-5.477500 0.017500 2.135000 88920608.000000 +-5.442500 0.262500 2.135000 89020696.000000 +-5.477500 0.262500 2.100000 89120512.000000 +-5.460000 0.227500 2.117500 89220616.000000 +-5.425000 0.227500 2.117500 89320576.000000 +-5.477500 0.227500 2.117500 89420464.000000 +-5.477500 0.227500 2.100000 89520376.000000 +-5.460000 0.227500 2.117500 89620464.000000 +-5.495000 0.192500 2.117500 89720632.000000 +-5.460000 0.227500 2.117500 89820448.000000 +-5.477500 0.262500 2.117500 89920592.000000 +-5.495000 0.227500 2.117500 90020664.000000 +-5.495000 0.227500 2.117500 90120544.000000 +-5.477500 0.262500 2.082500 90220496.000000 +-5.477500 0.262500 2.100000 90320520.000000 +-5.477500 0.262500 2.100000 90420752.000000 +-5.495000 0.262500 2.082500 90520512.000000 +-5.495000 0.262500 2.100000 90620560.000000 +-5.512500 0.262500 2.100000 90720696.000000 +-5.530000 0.472500 2.082500 90820464.000000 +-5.477500 0.087500 2.100000 90920744.000000 +-5.512500 0.297500 2.100000 91020488.000000 +-5.512500 0.262500 2.100000 91120800.000000 +-5.442500 -1.872500 2.240000 91220584.000000 +-5.495000 0.437500 2.187500 91320504.000000 +-5.495000 -0.017500 3.692500 91420720.000000 +-5.512500 -0.192500 4.287500 91520472.000000 +-5.495000 1.592500 4.270000 91620784.000000 +-3.167500 2.852500 4.357500 91720480.000000 +3.325000 -14.052500 4.777500 91820792.000000 +10.517500 3.237500 6.160000 91920472.000000 +30.415001 8.347500 -0.962500 92020552.000000 +42.700001 8.522500 2.187500 92120792.000000 +54.985001 4.252500 5.197500 92220480.000000 +60.322502 -1.522500 7.245000 92320800.000000 +61.564999 -6.107500 9.677500 92420472.000000 +61.827499 -7.962500 9.065000 92520784.000000 +60.270000 -2.082500 6.667500 92620384.000000 +57.802502 -0.472500 8.102500 92720608.000000 +59.797501 -3.832500 5.110000 92820704.000000 +59.447502 0.892500 2.957500 92920656.000000 +59.570000 -6.142500 4.532500 93022168.000000 +57.697502 5.197500 2.835000 93121688.000000 +59.080002 -9.467500 1.470000 93221584.000000 +53.865002 -10.307500 -0.962500 93321304.000000 +37.642502 -4.777500 -5.425000 93421200.000000 +26.337500 -2.012500 2.432500 93521760.000000 +27.352501 -8.207500 -3.377500 93621528.000000 +18.830000 -1.802500 -6.685000 93721712.000000 +0.402500 7.647500 -0.420000 93821696.000000 +-4.637500 3.307500 3.517500 93922456.000000 +-1.977500 0.752500 -0.420000 94021472.000000 +-8.522500 4.042500 0.770000 94121616.000000 +-8.732500 3.167500 4.287500 94222768.000000 +-3.010000 0.962500 0.490000 94321328.000000 +-3.657500 -2.222500 -0.385000 94422352.000000 +-7.857500 3.307500 5.460000 94521456.000000 +-7.472500 1.452500 2.940000 94622456.000000 +-4.480000 -6.037500 -0.595000 94723016.000000 +-1.382500 -4.672500 -2.117500 94821280.000000 +-3.167500 3.797500 3.027500 94922320.000000 +-4.952500 4.532500 9.415000 95021408.000000 +0.437500 -2.082500 -3.342500 95122560.000000 +-9.012500 5.407500 -1.067500 95221560.000000 +-12.442500 4.812500 3.185000 95322408.000000 +-5.740000 3.097500 -0.822500 95420624.000000 +-2.467500 4.042500 -2.660000 95522400.000000 +-3.762500 2.362500 -0.507500 95622352.000000 +-2.660000 2.467500 -0.192500 95721576.000000 +-2.957500 2.292500 2.432500 95824240.000000 +-4.707500 -0.297500 3.535000 95921480.000000 +-4.725000 2.537500 4.550000 96023936.000000 +-2.572500 0.122500 3.972500 96121376.000000 +-2.240000 16.957500 3.850000 96220480.000000 +0.455000 -9.852500 1.207500 96320736.000000 +-0.805000 -2.432500 5.127500 96420528.000000 +-2.187500 -6.457500 -2.275000 96520456.000000 +-2.380000 2.852500 1.382500 96621016.000000 +-10.990000 -8.312500 4.497500 96721008.000000 +-9.957500 -6.492500 5.827500 96820416.000000 +-8.032500 -8.837500 5.232500 96920752.000000 +-5.302500 3.027500 0.070000 97020696.000000 +1.977500 5.057500 -2.012500 97120568.000000 +-0.962500 1.067500 3.622500 97220624.000000 +-13.230000 2.922500 0.017500 97320408.000000 +-18.094999 -0.087500 -3.307500 97420528.000000 +-9.240000 -1.137500 1.907500 97520736.000000 +-1.470000 -2.257500 5.775000 97620520.000000 +-5.180000 0.647500 1.522500 97720624.000000 +-10.832500 4.742500 -1.522500 97820512.000000 +-11.707500 -0.647500 -3.132500 97920536.000000 +-6.440000 0.122500 1.452500 98020512.000000 +-3.185000 -0.717500 3.290000 98120520.000000 +-2.030000 -0.822500 4.042500 98220528.000000 +-9.695000 3.097500 2.730000 98320440.000000 +-12.267500 -0.437500 -3.780000 98420624.000000 +-5.477500 0.822500 0.525000 98520560.000000 +0.542500 -0.612500 4.567500 98620512.000000 +0.455000 -0.717500 5.022500 98720592.000000 +-10.955000 1.382500 1.557500 98820392.000000 +-10.500000 -0.402500 0.280000 98920480.000000 +-2.887500 -0.717500 3.727500 99020512.000000 +0.140000 -0.017500 4.340000 99120496.000000 +-1.225000 3.237500 3.062500 99220400.000000 +-10.955000 -2.432500 -0.630000 99320392.000000 +-11.637500 0.857500 -1.697500 99420440.000000 +-4.812500 0.822500 1.207500 99520576.000000 +0.070000 -0.227500 3.605000 99620696.000000 +-3.342500 0.192500 4.812500 99720400.000000 +-10.097500 -1.032500 1.732500 99820496.000000 +-5.985000 0.122500 1.697500 99920448.000000 +-0.192500 -0.472500 3.745000 100020560.000000 +-2.065000 0.087500 3.640000 100120696.000000 +-7.280000 2.187500 1.907500 100220632.000000 +-10.290000 -0.647500 -0.087500 100320400.000000 +-3.972500 -0.157500 2.275000 100420360.000000 +-0.262500 -0.332500 3.727500 100521680.000000 +0.000000 -0.262500 4.602500 100620576.000000 +-6.912500 4.217500 0.717500 100720464.000000 +-13.125000 0.507500 -0.875000 100820560.000000 +-4.760000 -0.017500 4.095000 100920608.000000 +-1.872500 0.717500 2.362500 101020584.000000 +-0.997500 0.332500 3.657500 101120424.000000 +-7.227500 2.712500 2.835000 101220432.000000 +-14.875000 -3.167500 5.407500 101320528.000000 +-9.730000 2.957500 -1.680000 101421080.000000 +1.085000 -0.227500 3.412500 101520624.000000 +-2.345000 1.557500 1.207500 101620688.000000 +-7.665000 1.067500 1.277500 101720608.000000 +-5.687500 0.717500 1.015000 101820576.000000 +3.377500 0.787500 3.902500 101920704.000000 +-0.437500 0.122500 1.032500 102020528.000000 +-7.122500 0.157500 0.157500 102120704.000000 +-10.832500 -1.347500 1.487500 102220528.000000 +-8.750000 -0.262500 1.977500 102320752.000000 +-3.535000 -0.927500 4.952500 102420456.000000 +-0.560000 -1.977500 3.640000 102520544.000000 +-1.732500 0.857500 10.342500 102620776.000000 +-8.925000 -0.542500 2.397500 102720496.000000 +-9.712500 13.177500 -0.175000 102820744.000000 +-2.765000 -15.522500 3.955000 102920648.000000 +-3.867500 6.002500 0.175000 103021832.000000 +-4.025000 2.887500 2.240000 103121560.000000 +-7.875000 3.447500 3.692500 103221520.000000 +-10.255000 5.687500 5.740000 103321312.000000 +-6.055000 1.977500 2.642500 103421832.000000 +-5.565000 -0.087500 4.322500 103521408.000000 +-6.720000 -0.402500 5.390000 103621992.000000 +-9.975000 1.837500 6.037500 103721384.000000 +-12.092500 1.977500 6.475000 103820752.000000 +-5.862500 -3.167500 2.310000 103920496.000000 +-3.395000 -3.482500 -3.290000 104020704.000000 +-4.987500 0.507500 1.452500 104120688.000000 +-7.157500 2.362500 1.435000 104221176.000000 +-7.175000 1.207500 1.330000 104320528.000000 +-5.057500 2.117500 1.277500 104420720.000000 +-6.562500 1.767500 1.732500 104520544.000000 +-6.265000 1.487500 2.712500 104620504.000000 +-3.290000 -1.067500 1.067500 104720880.000000 +-6.037500 0.017500 1.172500 104820536.000000 +-5.810000 0.612500 2.555000 104920736.000000 +-6.790000 2.082500 3.045000 105020672.000000 +-6.685000 1.522500 2.625000 105121256.000000 +-8.120000 0.227500 5.460000 105220464.000000 +-8.137500 0.017500 2.257500 105320536.000000 +-9.695000 -0.577500 -3.500000 105420472.000000 +-15.155000 1.697500 -1.575000 105520880.000000 +-17.010000 1.977500 1.697500 105620464.000000 +-16.100000 0.017500 0.070000 105720448.000000 +-22.382500 1.697500 0.280000 105820704.000000 +-41.720001 38.412498 -0.630000 105920480.000000 +-43.697498 -27.772501 -0.962500 106020496.000000 +-52.027500 -13.772500 2.100000 106120664.000000 +-61.722500 12.617500 7.665000 106220624.000000 +-53.532501 -2.852500 2.887500 106320728.000000 +-47.285000 6.457500 -4.567500 106420512.000000 +-44.799999 3.447500 -8.767500 106520720.000000 +-45.779999 5.652500 -6.160000 106620464.000000 +-50.785000 1.837500 -2.555000 106720536.000000 +-50.575001 -3.587500 -5.950000 106820664.000000 +-50.959999 0.542500 -8.662500 106920464.000000 +-59.150002 -0.402500 -4.060000 107020688.000000 +-58.310001 3.202500 0.665000 107120464.000000 +-53.340000 2.397500 -2.730000 107220688.000000 +-52.272499 3.482500 -6.177500 107320520.000000 +-54.687500 4.882500 -5.705000 107420488.000000 +-53.480000 -2.152500 0.840000 107520696.000000 +-41.615002 -7.227500 1.190000 107620488.000000 +-35.507500 -2.502500 -0.035000 107720432.000000 +-33.827499 -8.382500 0.105000 107820384.000000 +-33.897499 -3.762500 0.525000 107920376.000000 +-28.927500 -12.057500 -1.802500 108020456.000000 +-25.322500 -14.227500 3.202500 108120376.000000 +-15.610000 -14.297500 0.927500 108220376.000000 +-10.010000 5.092500 1.942500 108320384.000000 +-8.032500 4.952500 0.752500 108420376.000000 +-5.477500 0.192500 1.505000 108520384.000000 +-5.442500 -2.117500 2.345000 108620816.000000 +-5.617500 2.747500 2.117500 108720432.000000 +-5.460000 -2.537500 2.170000 108820512.000000 +-5.512500 1.907500 2.047500 108920688.000000 +-5.477500 0.297500 2.117500 109020504.000000 +-5.477500 0.052500 2.100000 109120656.000000 +-5.477500 0.192500 2.135000 109220520.000000 +-5.460000 0.297500 2.135000 109320688.000000 +-5.460000 1.312500 2.100000 109420424.000000 +-5.425000 -3.272500 2.222500 109520448.000000 +-5.530000 3.832500 2.047500 109620480.000000 +-5.460000 -0.717500 2.135000 109720488.000000 +-5.477500 -0.192500 2.117500 109820592.000000 +-5.390000 -3.657500 2.152500 109921120.000000 +-5.600000 5.302500 1.995000 110020416.000000 +-5.477500 -1.487500 2.135000 110120672.000000 +-5.512500 1.102500 2.065000 110220480.000000 +-5.442500 0.892500 2.152500 110320400.000000 +-5.512500 0.892500 2.170000 110420560.000000 +-5.477500 -1.172500 2.152500 110520448.000000 +-5.495000 0.787500 2.100000 110620464.000000 +-5.460000 0.227500 2.065000 110720504.000000 +-5.390000 -0.437500 2.100000 110820376.000000 +-5.565000 -1.242500 2.117500 110920488.000000 +-5.547500 2.607500 2.030000 111020600.000000 +-5.477500 -0.612500 2.082500 111120472.000000 +-5.512500 0.332500 2.117500 111220648.000000 +-5.495000 0.297500 2.100000 111320392.000000 +-5.477500 0.227500 2.082500 111420472.000000 +-5.512500 0.227500 2.100000 111520512.000000 +-5.512500 0.227500 2.100000 111620528.000000 +-5.512500 0.192500 2.082500 111720688.000000 +-5.530000 0.227500 2.100000 111820464.000000 +-5.512500 0.262500 2.100000 111920744.000000 +-5.512500 0.227500 2.100000 112020456.000000 +-5.530000 0.192500 2.100000 112120720.000000 +-5.512500 0.227500 2.100000 112220560.000000 +-5.530000 0.262500 2.065000 112320704.000000 +-5.530000 0.192500 2.082500 112420712.000000 +-5.495000 0.262500 2.100000 112520544.000000 +-5.512500 0.262500 2.117500 112620720.000000 +-5.530000 0.227500 2.117500 112720488.000000 +-5.512500 0.227500 2.117500 112820736.000000 +-5.512500 0.262500 2.100000 112920496.000000 +-5.477500 0.227500 2.117500 113020480.000000 +-5.530000 0.227500 2.117500 113120672.000000 +-5.495000 0.227500 2.135000 113220576.000000 +-5.530000 0.262500 2.117500 113320760.000000 +-5.512500 0.227500 2.100000 113420480.000000 +-5.547500 0.227500 2.135000 113520776.000000 +-5.495000 0.227500 2.135000 113620464.000000 +-5.495000 0.262500 2.117500 113720608.000000 +-5.512500 0.192500 2.135000 113820480.000000 +-5.477500 0.227500 2.082500 113920664.000000 +-5.495000 0.262500 2.117500 114020688.000000 +-5.495000 0.227500 2.135000 114120480.000000 +-5.512500 0.227500 2.117500 114220768.000000 +-5.512500 0.262500 2.135000 114320480.000000 +-5.530000 0.227500 2.117500 114420536.000000 +-5.495000 0.227500 2.117500 114520680.000000 +-5.512500 0.157500 2.100000 114620472.000000 +-5.495000 0.227500 2.117500 114720704.000000 +-5.512500 0.297500 2.100000 114820512.000000 +-5.530000 0.227500 2.117500 114920480.000000 +-5.512500 0.262500 2.100000 115020464.000000 +-5.512500 0.227500 2.135000 115120472.000000 +-5.530000 0.192500 2.117500 115220864.000000 +-5.512500 0.262500 2.117500 115320440.000000 +-5.477500 0.262500 2.135000 115420720.000000 +-5.477500 0.192500 2.170000 115520504.000000 +-5.495000 0.227500 2.135000 115620712.000000 +-5.512500 0.262500 2.100000 115720368.000000 +-5.495000 0.192500 2.135000 115820488.000000 +-5.512500 0.262500 2.100000 115920664.000000 +-5.530000 0.262500 2.100000 116020480.000000 +-5.495000 0.227500 2.100000 116120696.000000 +-5.460000 0.192500 2.082500 116220464.000000 +-5.495000 0.262500 2.117500 116320784.000000 +-5.530000 0.227500 2.117500 116420512.000000 +-5.460000 0.227500 2.082500 116520512.000000 +-5.495000 0.262500 2.117500 116620672.000000 +-5.512500 0.192500 2.117500 116720672.000000 +-5.460000 0.227500 2.100000 116820656.000000 +-5.477500 0.262500 2.100000 116920496.000000 +-5.460000 0.262500 2.100000 117020712.000000 diff --git a/src/sensor_fusion/design/data/100ms/gravity/orientation_change/magnetic.txt b/src/sensor_fusion/design/data/100ms/gravity/orientation_change/magnetic.txt new file mode 100755 index 0000000..ffb0ff0 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/gravity/orientation_change/magnetic.txt @@ -0,0 +1,524 @@ +15.312500 -42.500000 -19.062500 64214520.000000 +15.562500 -41.562500 -20.562500 64314520.000000 +15.437500 -40.750000 -20.625000 64414520.000000 +15.312500 -41.187500 -20.375000 64514520.000000 +15.062500 -40.625000 -20.812500 64614520.000000 +14.875000 -40.187500 -20.625000 64714520.000000 +15.000000 -40.125000 -21.250000 64814520.000000 +15.062500 -40.750000 -20.687500 64914520.000000 +15.125000 -40.437500 -21.000000 65014520.000000 +15.000000 -40.500000 -20.812500 65114520.000000 +14.875000 -40.437500 -21.000000 65214520.000000 +15.000000 -40.500000 -21.000000 65314520.000000 +14.562500 -40.500000 -20.750000 65414520.000000 +14.562500 -40.812500 -20.750000 65514520.000000 +14.687500 -40.875000 -20.625000 65614520.000000 +14.875000 -40.812500 -20.687500 65714520.000000 +14.625000 -41.000000 -20.687500 65814520.000000 +14.625000 -41.125000 -20.687500 65914520.000000 +14.625000 -41.125000 -20.625000 66014520.000000 +13.937500 -41.062500 -20.062500 66114520.000000 +14.187500 -41.062500 -20.000000 66214520.000000 +13.937500 -41.000000 -19.812500 66314520.000000 +13.625000 -41.000000 -19.625000 66414520.000000 +13.375000 -41.125000 -19.500000 66514520.000000 +13.375000 -41.187500 -19.187500 66614520.000000 +13.187500 -41.187500 -19.187500 66714520.000000 +13.062500 -41.250000 -19.125000 66814520.000000 +13.437500 -41.375000 -19.625000 66914520.000000 +13.625000 -41.437500 -19.750000 67014520.000000 +13.812500 -41.562500 -19.875000 67114520.000000 +13.937500 -41.625000 -20.062500 67214520.000000 +13.812500 -41.562500 -20.187500 67314520.000000 +13.875000 -41.562500 -20.250000 67414520.000000 +13.937500 -41.375000 -20.250000 67514520.000000 +14.125000 -41.437500 -20.375000 67614520.000000 +14.125000 -41.500000 -20.250000 67714520.000000 +14.125000 -41.500000 -20.187500 67814520.000000 +14.062500 -41.375000 -20.125000 67914520.000000 +14.312500 -41.375000 -20.062500 68014520.000000 +14.500000 -41.250000 -19.937500 68114520.000000 +14.625000 -41.187500 -20.062500 68214520.000000 +14.687500 -41.250000 -20.125000 68314520.000000 +14.812500 -41.250000 -20.187500 68414520.000000 +14.937500 -41.187500 -20.312500 68514520.000000 +14.937500 -41.000000 -20.437500 68614520.000000 +14.937500 -40.875000 -20.500000 68714520.000000 +14.687500 -40.750000 -20.500000 68814520.000000 +14.562500 -40.750000 -20.375000 68914520.000000 +14.500000 -40.625000 -20.437500 69014520.000000 +14.375000 -40.562500 -20.312500 69114520.000000 +14.250000 -40.500000 -20.375000 69214520.000000 +14.062500 -40.375000 -20.187500 69314520.000000 +14.062500 -40.312500 -20.187500 69414520.000000 +14.125000 -40.375000 -20.187500 69514520.000000 +14.125000 -40.250000 -20.312500 69614520.000000 +14.250000 -40.375000 -20.437500 69714520.000000 +14.250000 -40.437500 -20.437500 69814520.000000 +14.375000 -40.437500 -20.625000 69914520.000000 +14.562500 -40.375000 -20.437500 70014520.000000 +14.687500 -40.375000 -20.625000 70114520.000000 +14.437500 -40.625000 -20.500000 70214520.000000 +14.187500 -40.625000 -20.437500 70314520.000000 +14.250000 -40.875000 -20.312500 70414520.000000 +14.187500 -40.937500 -20.312500 70514520.000000 +14.250000 -41.062500 -20.187500 70614520.000000 +14.187500 -41.125000 -19.875000 70714520.000000 +14.062500 -41.250000 -19.875000 70814520.000000 +14.000000 -41.562500 -19.750000 70914520.000000 +14.125000 -41.625000 -19.687500 71014520.000000 +14.312500 -41.687500 -19.812500 71114520.000000 +14.187500 -41.812500 -19.875000 71214520.000000 +14.000000 -41.625000 -19.937500 71314520.000000 +13.812500 -41.625000 -20.062500 71414520.000000 +13.375000 -41.562500 -20.312500 71514520.000000 +12.937500 -41.687500 -20.375000 71614520.000000 +11.875000 -41.437500 -20.562500 71714520.000000 +11.000000 -41.187500 -20.875000 71814520.000000 +9.875000 -41.250000 -20.875000 71914520.000000 +8.812500 -41.125000 -20.937500 72014520.000000 +7.562500 -41.062500 -21.000000 72114520.000000 +6.062500 -41.062500 -21.000000 72214520.000000 +5.125000 -41.187500 -21.000000 72314520.000000 +3.375000 -40.875000 -20.562500 72414520.000000 +2.562500 -40.812500 -20.437500 72514520.000000 +1.500000 -40.937500 -20.125000 72614520.000000 +0.562500 -40.750000 -19.500000 72714520.000000 +-0.500000 -40.687500 -19.062500 72814520.000000 +-1.875000 -40.875000 -18.375000 72914520.000000 +-2.687500 -40.875000 -17.750000 73014520.000000 +-3.625000 -40.500000 -17.187500 73114520.000000 +-3.937500 -40.500000 -17.000000 73214520.000000 +-4.750000 -40.312500 -16.437500 73314520.000000 +-5.250000 -40.187500 -15.812500 73414520.000000 +-5.687500 -39.875000 -15.375000 73514520.000000 +-6.062500 -39.875000 -14.875000 73614520.000000 +-5.812500 -39.750000 -14.812500 73714520.000000 +-6.000000 -39.562500 -14.500000 73814520.000000 +-6.125000 -39.750000 -14.062500 73914520.000000 +-6.375000 -39.875000 -13.812500 74014520.000000 +-6.187500 -40.125000 -13.750000 74114520.000000 +-6.250000 -40.125000 -13.500000 74214520.000000 +-6.562500 -40.500000 -13.625000 74314520.000000 +-6.500000 -40.437500 -13.687500 74414520.000000 +-7.000000 -40.437500 -13.437500 74514520.000000 +-7.000000 -40.625000 -13.500000 74614520.000000 +-6.937500 -40.562500 -13.812500 74714520.000000 +-6.812500 -40.500000 -14.062500 74814520.000000 +-6.687500 -40.187500 -14.187500 74914520.000000 +-6.750000 -40.437500 -14.562500 75014520.000000 +-6.687500 -40.250000 -14.687500 75114520.000000 +-6.750000 -40.187500 -14.750000 75214520.000000 +-6.375000 -40.125000 -15.000000 75314520.000000 +-6.375000 -40.062500 -14.937500 75414520.000000 +-6.437500 -39.937500 -15.125000 75514520.000000 +-6.437500 -39.937500 -15.062500 75614520.000000 +-6.375000 -40.125000 -15.062500 75714520.000000 +-6.250000 -39.875000 -15.062500 75814520.000000 +-6.437500 -40.062500 -14.812500 75914520.000000 +-6.437500 -40.125000 -14.812500 76014520.000000 +-6.437500 -39.937500 -14.875000 76114520.000000 +-6.312500 -39.937500 -14.937500 76214520.000000 +-6.437500 -40.062500 -14.875000 76314520.000000 +-6.437500 -40.000000 -14.875000 76414520.000000 +-6.500000 -40.125000 -14.812500 76514520.000000 +-6.750000 -40.062500 -14.625000 76614520.000000 +-6.750000 -39.812500 -14.500000 76714520.000000 +-6.625000 -39.812500 -14.437500 76814520.000000 +-6.750000 -40.062500 -14.562500 76914520.000000 +-6.687500 -39.812500 -14.500000 77014520.000000 +-6.625000 -39.750000 -14.375000 77114520.000000 +-6.750000 -39.812500 -14.250000 77214520.000000 +-7.437500 -39.500000 -14.125000 77314520.000000 +-7.437500 -39.312500 -14.250000 77414520.000000 +-7.250000 -39.375000 -14.500000 77514520.000000 +-7.312500 -39.000000 -14.625000 77614520.000000 +-7.562500 -38.812500 -14.375000 77714520.000000 +-7.625000 -39.000000 -14.500000 77814520.000000 +-7.750000 -39.062500 -14.750000 77914520.000000 +-7.937500 -38.937500 -14.375000 78014520.000000 +-7.750000 -39.000000 -14.437500 78114520.000000 +-8.125000 -39.062500 -14.187500 78214520.000000 +-8.375000 -39.125000 -13.875000 78314520.000000 +-9.000000 -39.312500 -13.250000 78414520.000000 +-9.250000 -39.312500 -12.875000 78514520.000000 +-9.812500 -38.937500 -12.375000 78614520.000000 +-10.250000 -38.687500 -11.812500 78714520.000000 +-10.187500 -38.375000 -11.937500 78814520.000000 +-10.062500 -38.500000 -12.000000 78914520.000000 +-9.750000 -38.437500 -12.312500 79014520.000000 +-9.500000 -38.375000 -12.750000 79114520.000000 +-9.062500 -38.437500 -13.437500 79214520.000000 +-8.500000 -38.687500 -13.875000 79314520.000000 +-7.750000 -38.812500 -14.312500 79414520.000000 +-7.187500 -38.937500 -14.875000 79514520.000000 +-6.812500 -39.250000 -15.187500 79614520.000000 +-6.625000 -39.375000 -15.500000 79714520.000000 +-6.312500 -39.687500 -15.437500 79814520.000000 +-6.125000 -39.812500 -15.562500 79914520.000000 +-5.875000 -39.937500 -15.562500 80014520.000000 +-5.812500 -39.875000 -15.875000 80114520.000000 +-6.125000 -40.125000 -16.125000 80214520.000000 +-6.125000 -40.250000 -16.187500 80314520.000000 +-6.062500 -40.312500 -16.312500 80414520.000000 +-6.000000 -40.000000 -16.312500 80514520.000000 +-6.062500 -39.937500 -16.625000 80614520.000000 +-6.125000 -39.750000 -16.437500 80714520.000000 +-6.000000 -39.562500 -16.437500 80814520.000000 +-5.937500 -39.312500 -16.375000 80914520.000000 +-5.812500 -39.187500 -16.062500 81014520.000000 +-5.875000 -39.187500 -16.000000 81114520.000000 +-6.125000 -39.312500 -15.750000 81214520.000000 +-6.187500 -39.312500 -15.687500 81314520.000000 +-6.062500 -39.187500 -15.500000 81414520.000000 +-6.062500 -39.250000 -15.812500 81514520.000000 +-5.937500 -39.312500 -15.875000 81614520.000000 +-6.250000 -39.500000 -15.937500 81714520.000000 +-6.062500 -39.500000 -16.312500 81814520.000000 +-5.875000 -39.375000 -16.250000 81914520.000000 +-5.625000 -39.312500 -16.437500 82014520.000000 +-5.562500 -39.375000 -16.312500 82114520.000000 +-5.500000 -39.250000 -16.125000 82214520.000000 +-5.500000 -39.250000 -15.937500 82314520.000000 +-5.500000 -39.375000 -15.937500 82414520.000000 +-5.312500 -39.500000 -15.875000 82514520.000000 +-5.500000 -39.812500 -15.687500 82614520.000000 +-5.750000 -39.937500 -15.687500 82714520.000000 +-5.562500 -40.000000 -15.937500 82814520.000000 +-5.375000 -40.250000 -16.000000 82914520.000000 +-5.375000 -40.437500 -16.125000 83014520.000000 +-5.125000 -40.625000 -16.437500 83114520.000000 +-4.812500 -40.625000 -16.812500 83214520.000000 +-4.937500 -40.687500 -16.875000 83314520.000000 +-4.625000 -40.375000 -17.312500 83414520.000000 +-4.312500 -40.312500 -17.437500 83514520.000000 +-3.937500 -40.312500 -17.625000 83614520.000000 +-3.250000 -40.062500 -18.250000 83714520.000000 +-2.437500 -40.125000 -18.750000 83814520.000000 +-1.625000 -40.000000 -19.187500 83914520.000000 +-0.812500 -39.937500 -19.250000 84014520.000000 +0.437500 -39.875000 -19.875000 84114520.000000 +1.625000 -40.000000 -20.062500 84214520.000000 +3.125000 -40.125000 -20.750000 84314520.000000 +4.312500 -40.062500 -20.812500 84414520.000000 +5.500000 -40.187500 -20.750000 84514520.000000 +6.750000 -40.250000 -20.812500 84614520.000000 +7.812500 -40.250000 -20.750000 84714520.000000 +9.000000 -40.437500 -21.000000 84814520.000000 +10.000000 -40.500000 -20.937500 84914520.000000 +10.250000 -40.375000 -20.562500 85014520.000000 +10.937500 -40.250000 -20.562500 85114520.000000 +11.312500 -40.437500 -20.750000 85214520.000000 +11.625000 -40.437500 -20.687500 85314520.000000 +11.687500 -40.500000 -20.687500 85414520.000000 +12.000000 -40.750000 -20.812500 85514520.000000 +12.250000 -40.750000 -20.625000 85614520.000000 +12.250000 -40.875000 -20.687500 85714520.000000 +12.937500 -41.125000 -21.000000 85814520.000000 +13.250000 -41.312500 -20.625000 85914520.000000 +13.562500 -41.375000 -20.312500 86014520.000000 +13.875000 -41.500000 -20.375000 86114520.000000 +14.000000 -41.625000 -20.375000 86214520.000000 +14.125000 -41.562500 -20.187500 86314520.000000 +13.937500 -41.625000 -20.187500 86414520.000000 +14.125000 -41.312500 -20.062500 86514520.000000 +14.062500 -41.187500 -19.687500 86614520.000000 +14.062500 -41.125000 -19.937500 86714520.000000 +14.062500 -40.812500 -20.062500 86814520.000000 +13.937500 -40.687500 -20.125000 86914520.000000 +14.125000 -40.562500 -20.062500 87014520.000000 +14.000000 -40.437500 -20.312500 87114520.000000 +14.062500 -40.500000 -20.375000 87214520.000000 +14.187500 -40.500000 -20.312500 87314520.000000 +14.250000 -40.875000 -20.500000 87414520.000000 +14.187500 -40.875000 -20.437500 87514520.000000 +14.125000 -41.250000 -20.500000 87614520.000000 +14.187500 -41.437500 -20.312500 87714520.000000 +13.875000 -41.187500 -20.062500 87814520.000000 +14.062500 -41.312500 -19.812500 87914520.000000 +14.000000 -41.437500 -19.750000 88014520.000000 +14.125000 -41.500000 -19.750000 88114520.000000 +14.000000 -41.437500 -19.625000 88214520.000000 +14.125000 -41.312500 -19.687500 88314520.000000 +13.937500 -41.250000 -19.437500 88414520.000000 +13.812500 -41.250000 -19.562500 88514520.000000 +13.562500 -41.312500 -19.500000 88614520.000000 +13.000000 -41.000000 -19.062500 88714520.000000 +12.562500 -40.500000 -18.750000 88814520.000000 +11.937500 -40.062500 -18.625000 88914520.000000 +12.000000 -40.000000 -18.750000 89014520.000000 +11.687500 -40.187500 -18.750000 89114520.000000 +11.562500 -40.062500 -18.875000 89214520.000000 +11.687500 -39.875000 -18.875000 89314520.000000 +11.750000 -40.125000 -18.812500 89414520.000000 +12.062500 -40.250000 -19.062500 89514520.000000 +12.125000 -40.500000 -19.187500 89614520.000000 +12.187500 -41.000000 -18.937500 89714520.000000 +11.812500 -40.812500 -18.375000 89814520.000000 +11.625000 -40.750000 -18.000000 89914520.000000 +11.312500 -40.562500 -17.750000 90014520.000000 +10.687500 -40.312500 -17.437500 90114520.000000 +11.000000 -40.375000 -17.875000 90214520.000000 +11.187500 -40.625000 -18.125000 90314520.000000 +11.562500 -40.562500 -18.437500 90414520.000000 +12.000000 -40.437500 -18.875000 90514520.000000 +12.562500 -40.500000 -19.562500 90614520.000000 +12.875000 -40.500000 -19.875000 90714520.000000 +13.625000 -40.812500 -20.250000 90814520.000000 +14.187500 -41.125000 -20.812500 90914520.000000 +14.250000 -41.000000 -20.625000 91014520.000000 +14.312500 -40.937500 -20.937500 91114520.000000 +14.125000 -40.875000 -20.750000 91214520.000000 +14.062500 -40.750000 -20.875000 91314520.000000 +14.062500 -40.812500 -20.687500 91414520.000000 +14.000000 -40.750000 -20.687500 91514520.000000 +14.062500 -40.625000 -20.812500 91614520.000000 +14.000000 -40.562500 -20.500000 91714520.000000 +13.937500 -40.687500 -20.375000 91814520.000000 +13.937500 -40.562500 -19.937500 91914520.000000 +13.875000 -40.875000 -19.312500 92014520.000000 +13.875000 -41.500000 -18.062500 92114520.000000 +13.562500 -41.875000 -16.250000 92214520.000000 +13.500000 -42.187500 -13.937500 92314520.000000 +13.437500 -42.562500 -10.875000 92414520.000000 +13.500000 -42.750000 -7.375000 92514520.000000 +13.187500 -42.375000 -3.437500 92614520.000000 +12.937500 -42.062500 0.937500 92714520.000000 +13.062500 -41.125000 5.250000 92814520.000000 +12.937500 -39.687500 9.625000 92914520.000000 +13.250000 -37.750000 13.812500 93014520.000000 +13.812500 -35.562500 17.750000 93114520.000000 +14.250000 -32.625000 21.375000 93214520.000000 +14.750000 -29.750000 24.687500 93314520.000000 +15.750000 -27.062500 27.375000 93414520.000000 +16.687500 -24.125000 29.500000 93514520.000000 +17.625000 -21.187500 31.437500 93614520.000000 +18.687500 -18.562500 33.125000 93714520.000000 +19.250000 -16.625000 34.250000 93814520.000000 +19.687500 -14.750000 35.062500 93914520.000000 +19.937500 -13.687500 35.562500 94014520.000000 +20.062500 -12.812500 35.937500 94114520.000000 +20.125000 -12.250000 36.062500 94214520.000000 +20.000000 -11.687500 36.312500 94314520.000000 +20.000000 -11.687500 36.437500 94414520.000000 +19.812500 -11.687500 36.250000 94514520.000000 +19.750000 -11.625000 36.187500 94614520.000000 +19.812500 -11.812500 35.937500 94714520.000000 +19.562500 -11.750000 36.000000 94814520.000000 +19.750000 -11.625000 35.812500 94914520.000000 +19.625000 -11.375000 35.875000 95014520.000000 +19.687500 -11.500000 35.812500 95114520.000000 +19.500000 -11.625000 35.875000 95214520.000000 +19.437500 -11.625000 36.125000 95314520.000000 +19.375000 -11.500000 36.312500 95414520.000000 +18.750000 -11.187500 36.625000 95514520.000000 +19.062500 -11.250000 36.437500 95614520.000000 +18.812500 -11.187500 36.812500 95714520.000000 +18.812500 -10.937500 37.000000 95814520.000000 +18.750000 -10.625000 37.187500 95914520.000000 +18.687500 -10.375000 37.375000 96014520.000000 +18.625000 -10.250000 37.250000 96114520.000000 +18.250000 -10.125000 37.062500 96214520.000000 +18.375000 -10.000000 37.125000 96314520.000000 +18.062500 -9.437500 37.562500 96414520.000000 +17.750000 -9.062500 37.875000 96514520.000000 +17.000000 -8.750000 38.250000 96614520.000000 +16.250000 -8.625000 38.750000 96714520.000000 +15.937500 -8.437500 39.000000 96814520.000000 +15.875000 -8.062500 39.125000 96914520.000000 +16.062500 -7.937500 39.312500 97014520.000000 +16.125000 -7.937500 39.500000 97114520.000000 +16.062500 -7.937500 39.250000 97214520.000000 +16.312500 -8.000000 38.812500 97314520.000000 +16.750000 -8.312500 38.562500 97414520.000000 +17.312500 -8.375000 38.250000 97514520.000000 +17.250000 -8.500000 38.125000 97614520.000000 +17.437500 -8.687500 38.125000 97714520.000000 +17.250000 -8.875000 38.375000 97814520.000000 +17.000000 -8.812500 38.375000 97914520.000000 +16.875000 -8.875000 39.000000 98014520.000000 +16.437500 -9.125000 39.312500 98114520.000000 +16.687500 -9.437500 39.250000 98214520.000000 +16.500000 -9.625000 39.500000 98314520.000000 +16.687500 -9.750000 39.375000 98414520.000000 +16.062500 -9.750000 39.625000 98514520.000000 +16.062500 -9.562500 39.875000 98614520.000000 +16.312500 -9.625000 39.750000 98714520.000000 +16.500000 -9.812500 39.312500 98814520.000000 +16.500000 -9.812500 39.500000 98914520.000000 +15.937500 -9.312500 39.687500 99014520.000000 +16.062500 -9.312500 39.312500 99114520.000000 +16.125000 -9.062500 39.562500 99214520.000000 +16.437500 -9.125000 39.437500 99314520.000000 +16.375000 -9.062500 39.187500 99414520.000000 +16.187500 -9.125000 39.625000 99514520.000000 +16.375000 -9.125000 39.437500 99614520.000000 +16.812500 -9.250000 39.250000 99714520.000000 +17.125000 -9.312500 39.250000 99814520.000000 +17.125000 -9.062500 39.500000 99914520.000000 +16.812500 -9.187500 39.500000 100014520.000000 +17.000000 -9.187500 39.187500 100114520.000000 +17.062500 -9.125000 39.187500 100214520.000000 +16.875000 -9.000000 39.125000 100314520.000000 +16.187500 -8.750000 39.687500 100414520.000000 +15.437500 -8.625000 40.187500 100514520.000000 +15.187500 -8.312500 40.500000 100614520.000000 +15.000000 -8.312500 40.562500 100714520.000000 +15.000000 -8.250000 40.750000 100814520.000000 +14.812500 -8.125000 41.125000 100914520.000000 +14.937500 -8.250000 40.875000 101014520.000000 +15.375000 -8.375000 40.500000 101114520.000000 +15.687500 -8.625000 40.062500 101214520.000000 +16.062500 -8.750000 39.812500 101314520.000000 +16.312500 -9.062500 39.500000 101414520.000000 +16.750000 -9.000000 39.500000 101514520.000000 +17.125000 -9.187500 38.875000 101614520.000000 +17.375000 -9.312500 38.625000 101714520.000000 +17.125000 -9.500000 38.750000 101814520.000000 +17.312500 -9.375000 38.687500 101914520.000000 +17.750000 -9.312500 38.562500 102014520.000000 +18.500000 -9.250000 38.187500 102114520.000000 +18.875000 -9.125000 37.875000 102214520.000000 +18.937500 -9.500000 37.375000 102314520.000000 +18.875000 -9.312500 37.562500 102414520.000000 +18.937500 -9.437500 37.375000 102514520.000000 +19.250000 -9.125000 37.187500 102614520.000000 +19.125000 -9.250000 37.250000 102714520.000000 +19.062500 -9.187500 37.375000 102814520.000000 +18.875000 -9.187500 37.187500 102914520.000000 +18.687500 -9.375000 37.062500 103014520.000000 +18.500000 -9.250000 37.000000 103114520.000000 +18.437500 -9.562500 36.937500 103214520.000000 +18.375000 -9.375000 36.937500 103314520.000000 +18.312500 -9.375000 36.937500 103414520.000000 +18.312500 -9.500000 36.812500 103514520.000000 +18.312500 -9.250000 36.750000 103614520.000000 +18.250000 -9.187500 36.875000 103714520.000000 +18.250000 -9.375000 36.937500 103814520.000000 +18.250000 -9.375000 37.187500 103914520.000000 +18.437500 -9.500000 37.125000 104014520.000000 +18.250000 -9.750000 37.062500 104114520.000000 +18.250000 -10.000000 36.937500 104214520.000000 +18.375000 -10.062500 37.062500 104314520.000000 +18.250000 -10.437500 36.875000 104414520.000000 +18.312500 -10.562500 36.812500 104514520.000000 +18.250000 -10.437500 36.875000 104614520.000000 +18.125000 -10.500000 36.687500 104714520.000000 +18.000000 -10.500000 36.687500 104814520.000000 +18.000000 -10.437500 36.812500 104914520.000000 +17.750000 -10.375000 37.062500 105014520.000000 +17.750000 -10.500000 37.062500 105114520.000000 +17.812500 -10.625000 37.000000 105214520.000000 +17.437500 -10.625000 37.062500 105314520.000000 +17.437500 -11.062500 37.187500 105414520.000000 +17.500000 -11.250000 37.062500 105514520.000000 +17.500000 -11.375000 37.250000 105614520.000000 +17.437500 -11.625000 37.187500 105714520.000000 +17.375000 -12.312500 36.812500 105814520.000000 +17.125000 -13.062500 36.625000 105914520.000000 +16.875000 -14.125000 36.250000 106014520.000000 +16.500000 -15.875000 35.500000 106114520.000000 +16.125000 -17.687500 34.437500 106214520.000000 +15.875000 -20.062500 33.250000 106314520.000000 +15.437500 -22.687500 31.625000 106414520.000000 +14.937500 -25.625000 29.812500 106514520.000000 +14.625000 -28.375000 28.187500 106614520.000000 +14.437500 -31.062500 26.062500 106714520.000000 +14.125000 -33.500000 23.625000 106814520.000000 +14.125000 -35.562500 21.125000 106914520.000000 +14.125000 -37.562500 18.437500 107014520.000000 +14.125000 -39.000000 15.750000 107114520.000000 +14.312500 -40.250000 12.625000 107214520.000000 +14.562500 -41.250000 9.375000 107314520.000000 +14.437500 -41.937500 6.250000 107414520.000000 +14.312500 -42.625000 2.750000 107514520.000000 +14.375000 -43.250000 -0.250000 107614520.000000 +14.437500 -43.625000 -3.500000 107714520.000000 +14.312500 -43.750000 -6.312500 107814520.000000 +14.312500 -43.750000 -9.125000 107914520.000000 +14.125000 -43.625000 -11.375000 108014520.000000 +14.062500 -43.312500 -13.312500 108114520.000000 +14.250000 -43.062500 -15.562500 108214520.000000 +14.375000 -42.750000 -16.812500 108314520.000000 +14.437500 -42.250000 -18.125000 108414520.000000 +14.562500 -41.875000 -18.750000 108514520.000000 +14.562500 -41.562500 -19.500000 108614520.000000 +14.500000 -41.250000 -19.812500 108714520.000000 +14.562500 -41.187500 -20.000000 108814520.000000 +14.437500 -41.125000 -20.312500 108914520.000000 +14.625000 -41.312500 -20.250000 109014520.000000 +14.687500 -41.375000 -20.500000 109114520.000000 +14.562500 -41.500000 -20.500000 109214520.000000 +14.500000 -41.875000 -20.625000 109314520.000000 +14.250000 -41.687500 -20.312500 109414520.000000 +13.625000 -41.625000 -19.750000 109514520.000000 +13.500000 -41.437500 -19.750000 109614520.000000 +13.187500 -41.312500 -19.187500 109714520.000000 +12.687500 -41.125000 -19.250000 109814520.000000 +12.000000 -40.812500 -18.750000 109914520.000000 +11.687500 -40.687500 -18.500000 110014520.000000 +11.437500 -40.437500 -18.125000 110114520.000000 +11.187500 -40.312500 -18.125000 110214520.000000 +11.937500 -40.562500 -18.687500 110314520.000000 +12.062500 -40.437500 -18.687500 110414520.000000 +12.000000 -40.187500 -18.562500 110514520.000000 +12.187500 -40.187500 -18.375000 110614520.000000 +12.250000 -40.312500 -18.500000 110714520.000000 +12.250000 -40.375000 -18.437500 110814520.000000 +12.187500 -40.250000 -18.312500 110914520.000000 +12.187500 -40.250000 -18.312500 111014520.000000 +11.687500 -40.312500 -18.437500 111114520.000000 +11.562500 -40.687500 -18.562500 111214520.000000 +12.062500 -41.062500 -19.000000 111314520.000000 +12.187500 -41.000000 -19.062500 111414520.000000 +12.812500 -41.250000 -19.250000 111514520.000000 +13.250000 -41.375000 -19.625000 111614520.000000 +13.562500 -41.562500 -19.875000 111714520.000000 +14.187500 -42.000000 -20.125000 111814520.000000 +14.687500 -41.875000 -20.312500 111914520.000000 +15.000000 -41.875000 -20.437500 112014520.000000 +15.000000 -41.937500 -20.562500 112114520.000000 +15.062500 -42.062500 -20.750000 112214520.000000 +14.937500 -41.875000 -20.812500 112314520.000000 +15.062500 -41.875000 -20.812500 112414520.000000 +15.187500 -42.125000 -20.750000 112514520.000000 +15.187500 -42.125000 -20.937500 112614520.000000 +15.187500 -42.250000 -20.937500 112714520.000000 +15.062500 -42.062500 -21.125000 112814520.000000 +15.187500 -42.000000 -21.250000 112914520.000000 +15.062500 -42.000000 -21.437500 113014520.000000 +15.187500 -42.062500 -21.625000 113114520.000000 +15.187500 -42.187500 -21.687500 113214520.000000 +15.312500 -42.125000 -22.125000 113314520.000000 +15.250000 -42.187500 -22.125000 113414520.000000 +15.375000 -42.375000 -21.937500 113514520.000000 +15.437500 -42.562500 -21.875000 113614520.000000 +15.312500 -42.500000 -21.750000 113714520.000000 +15.437500 -42.562500 -21.500000 113814520.000000 +15.437500 -42.937500 -21.312500 113914520.000000 +14.937500 -42.750000 -21.125000 114014520.000000 +14.562500 -42.750000 -20.875000 114114520.000000 +14.562500 -42.687500 -20.812500 114214520.000000 +14.312500 -42.812500 -20.750000 114314520.000000 +14.062500 -42.875000 -20.562500 114414520.000000 +14.000000 -43.250000 -20.500000 114514520.000000 +14.000000 -43.250000 -20.312500 114614520.000000 +14.125000 -43.187500 -20.437500 114714520.000000 +14.437500 -43.375000 -20.562500 114814520.000000 +14.437500 -43.687500 -20.562500 114914520.000000 +14.375000 -43.687500 -20.687500 115014520.000000 +14.375000 -43.625000 -20.500000 115114520.000000 +14.500000 -43.687500 -20.562500 115214520.000000 +14.500000 -43.562500 -20.437500 115314520.000000 +14.500000 -43.812500 -20.687500 115414520.000000 +14.125000 -43.687500 -20.437500 115614520.000000 +14.312500 -43.187500 -20.375000 115814520.000000 +14.500000 -43.187500 -20.437500 115914520.000000 +14.562500 -43.125000 -20.562500 116014520.000000 +14.437500 -43.062500 -20.500000 116214520.000000 +14.687500 -42.875000 -20.625000 116314520.000000 +14.875000 -42.750000 -20.437500 116414520.000000 +14.875000 -42.937500 -20.500000 116514520.000000 +14.812500 -43.125000 -20.687500 116614520.000000 +14.375000 -43.000000 -20.562500 116814520.000000 +14.375000 -42.812500 -20.562500 117014520.000000 diff --git a/src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/accel.txt b/src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/accel.txt new file mode 100755 index 0000000..1199540 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/accel.txt @@ -0,0 +1,100 @@ +-0.110070 0.220140 10.134801 54450704.000000 +-0.075374 0.215354 10.174281 54550448.000000 +-0.072981 0.200997 10.216157 54650552.000000 +-0.062213 0.216550 10.150353 54750520.000000 +-0.100499 0.193819 10.174281 54850652.000000 +-0.105284 0.200997 10.138390 54950560.000000 +-0.077767 0.215354 10.167104 55050660.000000 +-0.088534 0.203390 10.198210 55150500.000000 +-0.069392 0.220140 10.124033 55250584.000000 +-0.086142 0.174676 10.212566 55350648.000000 +-0.088534 0.209372 10.208978 55450632.000000 +-0.205783 0.253639 10.152746 55550544.000000 +-0.076570 0.217747 10.167104 55650624.000000 +-0.859023 0.041874 10.103694 55750540.000000 +0.145962 0.144766 10.161121 55850744.000000 +-0.513260 0.512064 10.012767 55950640.000000 +0.284746 0.591027 8.718249 56050544.000000 +0.185444 -0.296710 10.158729 56150588.000000 +0.102891 -0.081356 9.842876 56250688.000000 +0.628116 0.825524 10.989038 56350624.000000 +-0.407976 0.989432 10.313066 56450544.000000 +-0.937986 1.119841 10.993823 56550640.000000 +-0.951147 0.442672 10.141978 56650632.000000 +-0.173480 -0.131605 9.574880 56750588.000000 +-0.334995 -0.120838 9.659825 56850644.000000 +0.171087 -0.064606 9.523434 56950640.000000 +0.879362 1.653440 11.251052 57050616.000000 +0.636491 -0.058624 10.332209 57150560.000000 +1.007378 -1.350748 9.897911 57250636.000000 +1.948954 -1.764707 13.225130 57350744.000000 +1.048056 -1.521835 8.654840 57450556.000000 +0.147159 -0.545564 10.390833 57550672.000000 +0.411566 -0.537189 10.717452 57650680.000000 +0.303888 0.043071 9.418150 57750588.000000 +-1.088734 -0.151944 11.448460 57850464.000000 +-0.976272 -0.368495 10.161121 57950636.000000 +-1.426122 -0.124427 9.869196 58050580.000000 +-1.763510 -0.204586 9.534202 58150680.000000 +-3.476771 -0.093320 9.701699 58250664.000000 +-6.753742 -2.792424 10.630114 58350392.000000 +-19.424934 -3.227918 9.656236 58450424.000000 +-19.601404 9.693325 -4.322634 58550516.000000 +-19.601404 -7.629515 3.986443 58650384.000000 +-13.190435 -0.837488 -0.433101 58751056.000000 +-11.155338 -2.000400 5.217549 58850396.000000 +-3.607180 -2.468197 2.904887 58950336.000000 +-0.507278 -1.883151 -7.222735 59050352.000000 +-6.306284 1.954936 -5.812167 59150356.000000 +-11.350355 -5.115855 -19.601404 59250656.000000 +-2.642873 -2.417947 -11.161322 59350416.000000 +0.934397 -2.043471 -11.907881 59450384.000000 +0.259621 -2.866602 -10.616954 59550364.000000 +2.067399 -3.853641 -9.090333 59650424.000000 +3.711268 -2.377269 -7.372287 59750416.000000 +-1.008575 3.231507 -11.486745 59850328.000000 +5.073980 -0.150748 -6.860222 59951560.000000 +6.709475 -0.045464 -6.244071 60050496.000000 +6.832705 -0.396012 -7.374680 60150372.000000 +7.124629 -0.601795 -7.688138 60250360.000000 +8.078169 0.577867 -8.215756 60350512.000000 +6.043073 -1.325624 -1.184447 60450392.000000 +3.087937 3.060420 6.233303 60550388.000000 +16.403996 -0.290728 8.063812 60650524.000000 +4.113262 2.408376 5.692525 60750520.000000 +-0.874577 1.441676 13.183256 60850680.000000 +-3.014957 0.689133 9.600004 60950572.000000 +-3.687340 -1.356731 12.537193 61050484.000000 +-9.014959 -0.283549 8.413164 61150512.000000 +-11.459228 -1.623530 6.793223 61250408.000000 +-19.601404 -1.052842 0.314656 61350344.000000 +-19.601404 -17.771494 7.665407 61450416.000000 +-19.601404 1.293321 6.126822 61550356.000000 +-19.601404 -1.220340 4.425525 61650436.000000 +-11.587244 1.722832 3.351148 61750480.000000 +-10.828719 -18.870996 11.247462 61855700.000000 +0.788435 -0.778864 16.261621 61955568.000000 +3.418147 -1.215554 10.576276 62055560.000000 +-1.140180 1.844866 13.178471 62155472.000000 +-0.565903 -1.062413 8.269595 62255480.000000 +-1.895115 0.344566 9.172886 62355472.000000 +-3.073581 1.178465 9.213564 62455460.000000 +-3.032902 1.623530 11.525031 62555488.000000 +-4.545166 0.930808 9.824929 62655472.000000 +-5.492724 0.598206 9.954143 62755480.000000 +-3.634698 -1.295713 10.127622 62855552.000000 +-0.613759 -1.082752 10.183852 62955472.000000 +-1.063610 -1.552942 8.632108 63055504.000000 +-0.622134 -2.335395 10.441081 63155504.000000 +-0.619741 2.432304 7.567302 63255472.000000 +-3.267399 1.110270 15.515062 63355784.000000 +-1.685743 1.356731 10.205389 63455688.000000 +-2.658426 -0.406780 14.849857 63555464.000000 +-1.479961 1.024128 9.591630 63655560.000000 +-0.413958 1.846063 8.557930 63755512.000000 +-0.799203 -0.257228 13.779069 63855512.000000 +0.975075 -2.660819 19.601404 63956088.000000 +-4.083352 -0.078963 9.388239 64055472.000000 +-3.936193 -0.138784 10.436296 64155488.000000 +-1.643869 0.490529 7.874779 64255504.000000 +-1.491925 -0.716650 10.613364 64355524.000000 diff --git a/src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/gyro.txt b/src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/gyro.txt new file mode 100755 index 0000000..5c4004f --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/gyro.txt @@ -0,0 +1,100 @@ +1.890000 0.472500 -0.472500 54380384.000000 +-2.957500 1.697500 -33.127499 54480488.000000 +-5.390000 0.227500 2.135000 54580464.000000 +-5.390000 0.192500 2.100000 54680476.000000 +-5.407500 0.227500 2.117500 54780516.000000 +-5.425000 0.227500 2.100000 54880488.000000 +-5.425000 0.262500 2.100000 54980460.000000 +-5.425000 0.262500 2.082500 55080480.000000 +-5.390000 0.227500 2.065000 55180620.000000 +-5.425000 0.227500 2.100000 55280484.000000 +-5.425000 0.192500 2.100000 55380636.000000 +-5.407500 0.192500 2.117500 55480480.000000 +-5.477500 0.262500 4.112500 55580464.000000 +-5.425000 0.472500 4.760000 55680488.000000 +-5.897500 1.207500 27.405001 55780664.000000 +-1.522500 6.212500 17.832500 55880604.000000 +0.227500 10.727500 29.049999 55980532.000000 +-19.320000 -0.542500 12.110000 56080688.000000 +-10.290000 -17.167500 11.060000 56180516.000000 +-2.327500 -2.677500 -7.560000 56280664.000000 +8.767500 15.102500 -4.760000 56380616.000000 +33.075001 23.572500 -7.892500 56480464.000000 +-17.692499 -3.237500 6.965000 56580628.000000 +-29.592501 -6.317500 8.330000 56680612.000000 +-15.382500 -23.152500 5.845000 56780484.000000 +-7.560000 -4.707500 -0.035000 56880640.000000 +-11.777500 -10.587500 1.365000 56980600.000000 +11.550000 -9.747500 27.772501 57080608.000000 +-32.830002 8.732500 56.735001 57180480.000000 +-8.242500 -35.857502 31.465000 57280632.000000 +-62.492500 -45.237499 20.282499 57380716.000000 +-27.160000 22.802500 13.842500 57480484.000000 +24.115000 1.417500 13.615000 57580672.000000 +19.145000 23.467501 7.997500 57680664.000000 +13.230000 38.097500 -3.535000 57780476.000000 +1.417500 78.347504 4.235000 57880484.000000 +-6.282500 3.937500 11.830000 57980500.000000 +-11.970000 11.777500 1.540000 58080508.000000 +-4.392500 34.457500 3.465000 58180648.000000 +-2.765000 83.947502 4.480000 58280652.000000 +-8.610000 151.112503 31.867500 58380376.000000 +-62.772499 242.882507 34.334999 58480488.000000 +-50.049999 -573.002502 -146.457504 58580524.000000 +-455.000000 -573.002502 -105.647499 58680384.000000 +565.022522 -573.002502 -334.494995 58780844.000000 +-93.047501 -573.002502 361.707489 58880448.000000 +-277.987488 -573.002502 86.485001 58980352.000000 +-279.667511 -573.002502 -248.080002 59080364.000000 +-325.202515 -109.987503 -61.040001 59181048.000000 +118.702499 47.897499 -52.884998 59281616.000000 +25.129999 153.002502 -222.214996 59380588.000000 +6.720000 124.722504 -191.047501 59480492.000000 +-17.605000 2.922500 -114.135002 59580388.000000 +42.122501 -18.707500 -72.555000 59680380.000000 +-66.202499 176.767502 -73.657501 59780352.000000 +12.950000 83.842499 -156.222504 59880368.000000 +25.480000 31.062500 8.592500 59980372.000000 +15.312500 23.782499 -28.525000 60080632.000000 +-12.915000 24.447500 -23.467501 60180344.000000 +-17.937500 22.977501 -29.627501 60280428.000000 +-14.175000 66.937500 -13.002500 60380432.000000 +-30.555000 466.672516 0.472500 60480376.000000 +-35.927502 436.257507 -86.117500 60580380.000000 +64.312500 196.122498 94.989998 60680496.000000 +-81.077499 192.167496 -62.212502 60780604.000000 +-8.050000 201.302505 2.275000 60880904.000000 +-34.090000 244.702499 88.794998 60980472.000000 +-26.407499 170.432495 23.100000 61080520.000000 +-3.885000 197.277496 16.030001 61181020.000000 +-68.022499 263.182495 1.942500 61280684.000000 +25.532499 -573.002502 85.224998 61380392.000000 +7.490000 -573.002502 -172.602493 61480368.000000 +-257.372498 -573.002502 73.587502 61580544.000000 +171.342499 -573.002502 -171.639999 61680408.000000 +347.970001 -573.002502 153.352493 61780456.000000 +470.785004 -313.827515 4.532500 61880564.000000 +49.139999 -47.057499 147.857498 61980608.000000 +-19.460001 205.292496 9.660000 62080844.000000 +-2.537500 48.562500 -4.077500 62180532.000000 +3.535000 77.437500 -6.195000 62280464.000000 +56.857502 13.142500 17.674999 62380524.000000 +21.542500 13.247500 8.067500 62480468.000000 +-48.299999 27.107500 -2.712500 62580464.000000 +-2.397500 35.402500 1.225000 62680512.000000 +-35.805000 -3.482500 -0.945000 62780476.000000 +-125.160004 -59.902500 27.755001 62880484.000000 +-55.667500 -91.192497 73.167503 62980500.000000 +38.570000 -39.707500 37.432499 63080476.000000 +17.535000 -23.852501 -18.077499 63180528.000000 +157.307495 7.402500 -43.627499 63280588.000000 +-50.207500 130.847504 -19.512501 63380664.000000 +-46.987499 -21.577499 14.245000 63480488.000000 +-71.347504 16.047501 -19.582500 63580524.000000 +0.157500 -85.872498 -5.827500 63680524.000000 +53.095001 -144.182495 18.882500 63781080.000000 +9.940000 91.612503 -10.710000 63880528.000000 +-42.665001 161.017502 114.065002 63980536.000000 +-17.867500 83.387497 -2.030000 64080576.000000 +-25.812500 -10.412500 -10.517500 64180508.000000 +-43.224998 -189.157501 -7.595000 64280664.000000 diff --git a/src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/magnetic.txt b/src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/magnetic.txt new file mode 100755 index 0000000..9f00d1c --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/gravity/single_roll_throw/magnetic.txt @@ -0,0 +1,100 @@ +-29.500000 -18.500000 -18.250000 54382660.000000 +-29.875000 -19.750000 -18.750000 54482660.000000 +-29.562500 -20.250000 -18.750000 54582660.000000 +-29.750000 -19.875000 -18.750000 54682660.000000 +-29.312500 -20.125000 -18.625000 54782660.000000 +-29.000000 -20.000000 -18.625000 54882660.000000 +-29.500000 -19.812500 -18.375000 54982660.000000 +-29.562500 -19.687500 -18.500000 55082660.000000 +-29.562500 -19.937500 -18.500000 55182660.000000 +-29.500000 -19.750000 -18.625000 55282660.000000 +-29.750000 -19.937500 -18.687500 55382660.000000 +-29.562500 -19.937500 -18.625000 55482660.000000 +-29.812500 -19.937500 -18.750000 55582660.000000 +-29.875000 -19.812500 -18.687500 55682660.000000 +-29.625000 -19.812500 -19.000000 55782660.000000 +-29.562500 -19.500000 -19.062500 55882660.000000 +-29.625000 -19.000000 -19.437500 55982660.000000 +-29.750000 -18.437500 -19.187500 56082660.000000 +-30.000000 -17.937500 -19.187500 56182660.000000 +-30.375000 -17.187500 -19.437500 56282660.000000 +-30.562500 -17.000000 -19.500000 56382660.000000 +-30.812500 -16.812500 -19.625000 56482660.000000 +-30.812500 -16.375000 -19.687500 56582660.000000 +-30.875000 -16.250000 -19.437500 56682660.000000 +-31.000000 -16.250000 -18.875000 56782660.000000 +-30.937500 -16.187500 -18.625000 56882660.000000 +-30.937500 -16.187500 -18.187500 56982660.000000 +-30.937500 -15.875000 -17.750000 57082660.000000 +-31.125000 -14.937500 -17.187500 57182660.000000 +-31.437500 -14.000000 -16.375000 57282660.000000 +-31.875000 -13.062500 -15.625000 57382660.000000 +-32.562500 -12.000000 -14.875000 57482660.000000 +-33.062500 -10.875000 -14.562500 57582660.000000 +-33.375000 -9.937500 -14.500000 57682660.000000 +-33.312500 -8.687500 -15.375000 57782660.000000 +-33.187500 -8.000000 -16.125000 57882660.000000 +-33.000000 -7.500000 -17.125000 57982660.000000 +-32.562500 -7.187500 -18.375000 58082660.000000 +-31.937500 -7.000000 -20.250000 58182660.000000 +-30.312500 -6.875000 -23.187500 58282660.000000 +-27.250000 -6.187500 -26.500000 58382660.000000 +-20.937500 -4.875000 -29.812500 58482660.000000 +-16.250000 -6.312500 -22.812500 58582660.000000 +-14.812500 -9.937500 -20.625000 58682660.000000 +-8.375000 -12.062500 -20.750000 58782660.000000 +-1.312500 -15.000000 -15.750000 58882660.000000 +4.750000 -18.437500 -9.875000 58982660.000000 +10.312500 -22.187500 -5.500000 59082660.000000 +14.562500 -26.437500 0.687500 59182660.000000 +16.500000 -30.062500 7.687500 59282660.000000 +20.187500 -29.750000 6.312500 59382660.000000 +26.937500 -26.625000 9.875000 59482660.000000 +29.562500 -24.250000 15.562500 59582660.000000 +30.250000 -20.750000 17.062500 59682660.000000 +31.562500 -16.250000 18.750000 59782660.000000 +32.437500 -11.187500 22.812500 59882660.000000 +32.750000 -5.750000 26.125000 59982660.000000 +31.875000 -1.562500 28.687500 60082660.000000 +30.562500 1.500000 30.500000 60182660.000000 +28.875000 3.687500 32.187500 60282660.000000 +22.312500 4.625000 33.875000 60382660.000000 +14.687500 4.625000 32.375000 60482660.000000 +6.437500 5.000000 29.562500 60582660.000000 +-1.562500 4.750000 26.125000 60682660.000000 +-9.187500 3.250000 20.562500 60782660.000000 +-16.500000 2.312500 13.687500 60882660.000000 +-22.125000 1.687500 5.000000 60982660.000000 +-26.375000 1.500000 -4.500000 61082660.000000 +-25.562500 2.000000 -14.062500 61182660.000000 +-19.625000 3.937500 -20.562500 61282660.000000 +-19.750000 1.500000 -20.625000 61382660.000000 +-16.062500 -2.000000 -17.437500 61482660.000000 +-6.437500 -3.250000 -16.187500 61582660.000000 +-6.562500 -3.625000 -13.250000 61682660.000000 +-7.812500 -5.625000 -11.625000 61782660.000000 +-10.437500 -8.375000 -7.125000 61882660.000000 +-14.437500 -10.375000 -3.250000 61982660.000000 +-21.312500 -13.250000 -1.312500 62082660.000000 +-20.812500 -12.875000 -5.375000 62182660.000000 +-24.312500 -11.187500 -12.437500 62282660.000000 +-33.562500 -11.125000 -15.812500 62382660.000000 +-33.125000 -12.250000 -19.750000 62482660.000000 +-32.937500 -12.125000 -20.937500 62582660.000000 +-32.062500 -11.687500 -24.375000 62682660.000000 +-30.625000 -11.687500 -27.312500 62782660.000000 +-30.125000 -10.750000 -27.875000 62882660.000000 +-30.062500 -9.187500 -27.687500 62982660.000000 +-30.000000 -7.437500 -26.937500 63082660.000000 +-30.062500 -6.187500 -26.125000 63182660.000000 +-30.312500 -5.750000 -25.562500 63282660.000000 +-30.312500 -4.937500 -25.500000 63382660.000000 +-30.500000 -3.812500 -25.187500 63482660.000000 +-31.312500 -3.062500 -24.062500 63582660.000000 +-31.937500 -2.687500 -22.750000 63682660.000000 +-32.437500 -3.437500 -21.750000 63782660.000000 +-32.750000 -3.312500 -21.750000 63882660.000000 +-32.062500 -2.312500 -23.062500 63982660.000000 +-31.000000 -0.687500 -24.187500 64082660.000000 +-30.937500 0.187500 -23.812500 64182660.000000 +-31.437500 1.312500 -22.562500 64282660.000000 diff --git a/src/sensor_fusion/design/data/100ms/gravity/throw/accel.txt b/src/sensor_fusion/design/data/100ms/gravity/throw/accel.txt new file mode 100755 index 0000000..0ad1a01 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/gravity/throw/accel.txt @@ -0,0 +1,135 @@ +0.044267 0.132802 10.029516 400455552.000000 +0.070588 0.175872 10.113264 400555680.000000 +0.074178 0.180658 10.112068 400655520.000000 +0.034696 0.186640 10.118051 400756224.000000 +0.086142 0.193819 10.083356 400855712.000000 +0.083749 0.165105 10.130014 400955552.000000 +0.065803 0.161516 10.152746 401055456.000000 +0.072981 0.183051 10.153944 401155488.000000 +0.061017 0.169890 10.145569 401255456.000000 +0.056231 0.196211 10.116854 401355616.000000 +0.061017 0.183051 10.110871 401455488.000000 +0.061017 0.174676 10.120443 401555616.000000 +0.035892 0.177069 10.094121 401655616.000000 +0.053839 0.173480 10.114462 401755520.000000 +0.047856 0.157926 10.097712 401855584.000000 +0.050249 0.167498 10.124033 401955520.000000 +0.064606 0.160319 10.120443 402055648.000000 +0.068195 0.137587 10.090532 402155488.000000 +0.065803 0.181855 10.096515 402255680.000000 +0.037089 0.175872 10.089336 402355424.000000 +-0.025125 0.161516 10.370493 402455456.000000 +0.020339 0.157926 10.156336 402555712.000000 +0.051446 0.168694 10.120443 402655520.000000 +0.074178 0.178265 10.119246 402755488.000000 +0.046660 0.169890 10.110871 402855456.000000 +0.039482 0.169890 10.157533 402955648.000000 +-0.013161 0.168694 10.265208 403055424.000000 +0.029910 0.177069 10.151550 403156352.000000 +0.058624 0.181855 10.139585 403255424.000000 +0.046660 0.183051 10.175477 403355584.000000 +0.064606 0.191426 10.131211 403455648.000000 +0.047856 0.150748 10.103694 403555456.000000 +0.038285 0.153141 10.158729 403655456.000000 +0.055035 0.195015 10.096515 403755776.000000 +0.059821 0.154337 10.139585 403855392.000000 +0.068195 0.174676 10.097712 403955360.000000 +0.047856 0.171087 10.114462 404055456.000000 +0.051446 0.199801 10.121639 404155360.000000 +0.056231 0.174676 10.140782 404255392.000000 +0.074178 0.190229 10.125229 404355360.000000 +0.047856 0.196211 10.121639 404455328.000000 +0.044267 0.189033 10.104890 404555360.000000 +0.051446 0.192622 10.134801 404655328.000000 +0.051446 0.172283 10.063015 404755456.000000 +0.064606 0.169890 10.133603 404855840.000000 +0.082552 0.173480 10.106087 404955520.000000 +0.062213 0.166301 10.125229 405055488.000000 +0.011964 0.177069 10.131211 405155648.000000 +-0.029910 0.077767 10.119246 405256192.000000 +-0.101695 0.223729 10.112068 405355456.000000 +-0.078963 0.093320 10.107283 405455488.000000 +-0.104088 0.165105 10.122837 405556096.000000 +-0.230907 0.248854 10.139585 405655456.000000 +-0.260818 0.208176 10.134801 405755456.000000 +-0.175872 0.049053 10.186246 405855488.000000 +-0.178265 0.326620 10.336994 405955488.000000 +1.323231 -1.849652 12.643675 406055456.000000 +4.271189 -2.665605 10.762917 406155552.000000 +9.960124 -2.788835 9.620343 406255488.000000 +-0.136391 0.130409 0.601795 406355456.000000 +-0.045464 -0.004786 0.662812 406455456.000000 +-11.874382 -1.155733 4.161119 406555520.000000 +-4.564309 4.808377 19.601404 406655488.000000 +0.886541 -0.769292 11.824133 406755584.000000 +0.132802 -0.264407 10.162319 406855520.000000 +0.071785 -0.289532 10.133603 406955488.000000 +0.141177 -0.263210 10.122837 407055488.000000 +0.110070 -0.276371 10.141978 407155520.000000 +0.117248 -0.256032 10.143176 407255488.000000 +0.122034 -0.239282 10.131211 407355488.000000 +0.128016 -0.242871 10.119246 407455456.000000 +0.090927 -0.252443 10.127622 407555552.000000 +0.117248 -0.254836 10.140782 407655488.000000 +0.124427 -0.234497 10.124033 407755648.000000 +0.128016 -0.214158 10.116854 407855520.000000 +0.106481 -0.217747 10.151550 407956032.000000 +0.114855 -0.241675 10.169496 408055456.000000 +0.099302 -0.259621 10.150353 408155456.000000 +0.129212 -0.242871 10.113264 408255840.000000 +0.136391 -0.247657 10.157533 408355616.000000 +0.137587 -0.212961 10.139585 408455616.000000 +0.142373 -0.228515 10.131211 408556000.000000 +0.117248 -0.251246 10.145569 408655776.000000 +0.132802 -0.223729 10.124033 408755584.000000 +0.138784 -0.252443 10.090532 408855552.000000 +0.107677 -0.232104 10.139585 408955616.000000 +0.130409 -0.238086 10.153944 409056000.000000 +0.112463 -0.248854 10.133603 409155680.000000 +0.148355 -0.214158 10.138390 409255584.000000 +0.138784 -0.229711 10.131211 409356032.000000 +0.094516 -0.246461 10.170692 409455712.000000 +0.126820 -0.260818 10.101300 409555456.000000 +0.123230 -0.229711 10.153944 409655680.000000 +0.099302 -0.235693 10.193424 409755744.000000 +0.108873 -0.215354 10.139585 409855456.000000 +0.120838 -0.254836 10.133603 409961664.000000 +0.112463 -0.223729 10.115658 410061024.000000 +0.122034 -0.223729 10.119246 410160448.000000 +0.107677 -0.218943 10.138390 410260512.000000 +0.130409 -0.257228 10.116854 410360448.000000 +0.135194 -0.233300 10.131211 410460448.000000 +0.129212 -0.204586 10.125229 410560608.000000 +0.117248 -0.232104 10.147961 410660576.000000 +0.095713 -0.236889 10.110871 410760512.000000 +0.113659 -0.229711 10.122837 410860448.000000 +0.138784 -0.234497 10.101300 410960896.000000 +0.135194 -0.221336 10.152746 411061888.000000 +0.124427 -0.203390 10.104890 411160480.000000 +0.131605 -0.233300 10.109675 411261056.000000 +0.118445 -0.235693 10.141978 411360480.000000 +0.128016 -0.215354 10.140782 411460544.000000 +0.138784 -0.234497 10.118051 411560480.000000 +0.112463 -0.246461 10.134801 411660608.000000 +0.136391 -0.224925 10.144372 411760768.000000 +0.123230 -0.209372 10.097712 411860480.000000 +0.099302 -0.229711 10.103694 411960512.000000 +0.128016 -0.206979 10.112068 412061056.000000 +0.150748 -0.212961 10.127622 412160768.000000 +0.101695 -0.227318 10.125229 412261184.000000 +0.138784 -0.222532 10.155140 412360448.000000 +0.136391 -0.252443 10.126426 412460512.000000 +0.132802 -0.229711 10.143176 412560512.000000 +0.112463 -0.246461 10.147961 412660480.000000 +0.132802 -0.209372 10.124033 412760864.000000 +0.149551 -0.228515 10.144372 412860640.000000 +0.126820 -0.256032 10.125229 412960640.000000 +0.101695 -0.215354 10.133603 413061120.000000 +0.130409 -0.236889 10.089336 413160448.000000 +0.132802 -0.220140 10.112068 413260576.000000 +0.113659 -0.236889 10.133603 413360928.000000 +0.114855 -0.228515 10.115658 413461056.000000 +0.124427 -0.215354 10.098907 413560736.000000 +0.144766 -0.210568 10.120443 413660672.000000 +0.108873 -0.240479 10.146765 413760480.000000 +0.122034 -0.229711 10.128819 413860448.000000 diff --git a/src/sensor_fusion/design/data/100ms/gravity/throw/gyro.txt b/src/sensor_fusion/design/data/100ms/gravity/throw/gyro.txt new file mode 100755 index 0000000..77e420a --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/gravity/throw/gyro.txt @@ -0,0 +1,136 @@ +1.890000 0.472500 -0.472500 400380896.000000 +-1.872500 1.312500 -34.755001 400481024.000000 +-4.882500 0.157500 2.082500 400580480.000000 +-4.882500 0.157500 2.065000 400680512.000000 +-4.935000 0.157500 2.100000 400780800.000000 +-4.987500 0.122500 2.030000 400880480.000000 +-4.900000 0.157500 2.082500 400980512.000000 +-4.865000 0.227500 2.065000 401080512.000000 +-4.900000 0.192500 2.030000 401180480.000000 +-4.952500 0.157500 2.065000 401280480.000000 +-4.952500 0.157500 2.065000 401380544.000000 +-4.935000 0.157500 2.047500 401480480.000000 +-4.952500 0.157500 2.082500 401580512.000000 +-4.935000 0.157500 2.065000 401680480.000000 +-4.935000 0.157500 2.047500 401780480.000000 +-4.935000 0.157500 2.047500 401880640.000000 +-4.935000 0.157500 2.082500 401980480.000000 +-4.970000 0.157500 2.047500 402080512.000000 +-4.987500 0.157500 2.047500 402180480.000000 +-4.952500 0.192500 2.082500 402280480.000000 +-4.987500 2.747500 2.012500 402380608.000000 +-4.970000 -2.047500 2.135000 402480384.000000 +-4.952500 -0.612500 2.082500 402580480.000000 +-4.987500 0.682500 2.082500 402680608.000000 +-4.970000 0.017500 2.065000 402780544.000000 +-4.970000 0.157500 2.065000 402880512.000000 +-5.005000 0.192500 2.065000 402980512.000000 +-4.987500 3.692500 1.977500 403080416.000000 +-4.917500 -3.587500 2.152500 403180384.000000 +-5.005000 0.577500 2.082500 403280416.000000 +-4.970000 0.087500 2.030000 403380800.000000 +-4.987500 0.122500 2.047500 403480608.000000 +-4.987500 0.227500 2.047500 403580448.000000 +-4.987500 0.157500 2.030000 403680448.000000 +-5.005000 0.192500 2.030000 403780576.000000 +-4.970000 0.157500 2.065000 403880384.000000 +-4.987500 0.157500 2.047500 403980416.000000 +-5.022500 0.157500 2.012500 404080608.000000 +-5.005000 0.122500 2.030000 404180384.000000 +-5.005000 0.157500 2.030000 404280416.000000 +-5.022500 0.157500 2.047500 404380384.000000 +-5.005000 0.157500 2.030000 404480384.000000 +-5.040000 0.157500 2.012500 404580384.000000 +-5.022500 0.157500 2.030000 404680352.000000 +-5.040000 0.227500 2.030000 404780640.000000 +-5.040000 -1.207500 2.030000 404880608.000000 +-5.040000 1.207500 1.977500 404980512.000000 +-5.022500 0.577500 1.995000 405080448.000000 +-5.075000 1.067500 1.977500 405180480.000000 +-5.197500 2.992500 2.065000 405280800.000000 +-5.460000 2.712500 0.997500 405380512.000000 +-5.477500 3.377500 0.140000 405480512.000000 +-5.197500 1.522500 -0.227500 405580800.000000 +-5.442500 1.137500 1.172500 405680512.000000 +-7.350000 0.472500 2.607500 405780480.000000 +-9.030000 -0.507500 4.602500 405880448.000000 +-14.700000 -7.647500 1.557500 405980512.000000 +-52.587502 -28.052500 9.905000 406080512.000000 +-22.785000 -32.882500 -14.385000 406180480.000000 +-14.262500 -13.632500 -63.402500 406280544.000000 +-11.987500 -11.462500 -81.129997 406380640.000000 +0.175000 52.517502 -66.500000 406480512.000000 +57.697502 131.722504 -36.032501 406580448.000000 +-55.317501 -78.242500 129.237503 406680512.000000 +4.987500 17.972500 -22.295000 406780512.000000 +-5.512500 0.507500 1.155000 406880448.000000 +-4.952500 -0.052500 2.082500 406980544.000000 +-4.987500 0.087500 2.082500 407080512.000000 +-5.022500 0.122500 2.047500 407180512.000000 +-4.987500 0.157500 2.082500 407280544.000000 +-5.005000 0.157500 2.082500 407380512.000000 +-5.022500 0.122500 2.082500 407480512.000000 +-5.022500 0.157500 2.082500 407580480.000000 +-5.022500 0.122500 2.082500 407680544.000000 +-5.005000 0.192500 2.082500 407780480.000000 +-5.057500 0.122500 2.065000 407880576.000000 +-5.057500 0.157500 2.100000 407980864.000000 +-5.022500 0.157500 2.065000 408080512.000000 +-5.040000 0.157500 2.100000 408180480.000000 +-5.040000 0.157500 2.100000 408280480.000000 +-5.075000 0.122500 2.082500 408380512.000000 +-5.040000 0.157500 2.100000 408480512.000000 +-5.057500 0.157500 2.082500 408580928.000000 +-5.057500 0.157500 2.082500 408680576.000000 +-5.040000 0.122500 2.082500 408780480.000000 +-5.040000 0.157500 2.065000 408880512.000000 +-5.022500 0.157500 2.100000 408980512.000000 +-5.057500 0.157500 2.100000 409080864.000000 +-5.075000 0.157500 2.065000 409180512.000000 +-5.057500 0.157500 2.117500 409280480.000000 +-5.057500 0.122500 2.082500 409381056.000000 +-5.040000 0.157500 2.117500 409480448.000000 +-5.057500 0.157500 2.082500 409580480.000000 +-5.022500 0.157500 2.082500 409680448.000000 +-5.057500 0.157500 2.100000 409780512.000000 +-5.040000 0.157500 2.065000 409880480.000000 +-5.057500 0.157500 2.082500 409980672.000000 +-5.057500 0.157500 2.065000 410080864.000000 +-5.057500 0.157500 2.065000 410180512.000000 +-5.040000 0.157500 2.065000 410280672.000000 +-5.040000 0.157500 2.117500 410380608.000000 +-5.057500 0.157500 2.117500 410480512.000000 +-5.092500 0.157500 2.100000 410580480.000000 +-5.057500 0.157500 2.082500 410680640.000000 +-5.075000 0.157500 2.100000 410780576.000000 +-5.075000 0.157500 2.082500 410880544.000000 +-5.075000 0.157500 2.065000 410981248.000000 +-5.057500 0.157500 2.082500 411080864.000000 +-5.057500 0.192500 2.100000 411181056.000000 +-5.057500 0.157500 2.100000 411281216.000000 +-5.075000 0.122500 2.100000 411380576.000000 +-5.075000 0.122500 2.100000 411480544.000000 +-5.057500 0.157500 2.100000 411580480.000000 +-5.022500 0.157500 2.100000 411680736.000000 +-5.040000 0.192500 2.100000 411780928.000000 +-5.057500 0.157500 2.135000 411880512.000000 +-5.075000 0.157500 2.100000 411980672.000000 +-5.040000 0.157500 2.135000 412081120.000000 +-5.040000 0.157500 2.100000 412180512.000000 +-5.057500 0.192500 2.100000 412280992.000000 +-5.022500 0.192500 2.100000 412380576.000000 +-5.057500 0.122500 2.100000 412480640.000000 +-5.075000 0.157500 2.117500 412580608.000000 +-5.057500 0.157500 2.100000 412680544.000000 +-5.075000 0.192500 2.117500 412780736.000000 +-5.040000 0.157500 2.135000 412880672.000000 +-5.092500 0.157500 2.135000 412980512.000000 +-5.075000 0.157500 2.100000 413081664.000000 +-5.057500 0.192500 2.100000 413180768.000000 +-5.075000 0.157500 2.135000 413280512.000000 +-5.092500 0.122500 2.100000 413380896.000000 +-5.092500 0.157500 2.100000 413480992.000000 +-5.075000 0.192500 2.100000 413580480.000000 +-5.075000 0.157500 2.100000 413680640.000000 +-5.092500 0.192500 2.117500 413780576.000000 +-5.092500 0.157500 2.082500 413880544.000000 diff --git a/src/sensor_fusion/design/data/100ms/gravity/throw/magnetic.txt b/src/sensor_fusion/design/data/100ms/gravity/throw/magnetic.txt new file mode 100755 index 0000000..fc35bc2 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/gravity/throw/magnetic.txt @@ -0,0 +1,136 @@ +23.750000 -35.500000 -16.687500 400385920.000000 +23.875000 -36.562500 -17.250000 400485920.000000 +24.250000 -37.125000 -17.250000 400585920.000000 +24.500000 -36.750000 -17.000000 400685920.000000 +24.812500 -36.562500 -16.875000 400785920.000000 +25.250000 -35.937500 -16.750000 400885920.000000 +25.250000 -35.937500 -16.875000 400985920.000000 +24.750000 -36.125000 -17.187500 401085920.000000 +24.812500 -36.312500 -17.312500 401185920.000000 +24.875000 -36.062500 -17.562500 401285920.000000 +24.937500 -36.125000 -17.687500 401385920.000000 +24.875000 -35.937500 -17.625000 401485920.000000 +24.750000 -36.062500 -17.812500 401585920.000000 +24.625000 -36.375000 -17.750000 401685920.000000 +24.687500 -36.500000 -17.812500 401785920.000000 +24.812500 -36.562500 -17.687500 401885920.000000 +24.812500 -36.375000 -17.812500 401985920.000000 +24.937500 -36.437500 -17.500000 402085920.000000 +24.937500 -36.375000 -17.437500 402185920.000000 +24.812500 -36.625000 -17.500000 402285920.000000 +24.625000 -36.500000 -17.187500 402385920.000000 +24.062500 -36.125000 -16.500000 402485920.000000 +23.937500 -35.812500 -16.375000 402585920.000000 +23.437500 -35.562500 -16.000000 402685920.000000 +23.250000 -35.625000 -15.625000 402785920.000000 +23.062500 -35.687500 -15.500000 402885920.000000 +22.937500 -35.562500 -15.437500 402985920.000000 +22.625000 -34.937500 -15.250000 403085920.000000 +22.500000 -34.875000 -15.312500 403185920.000000 +22.625000 -34.812500 -15.750000 403285920.000000 +22.437500 -34.875000 -15.812500 403385920.000000 +22.687500 -34.875000 -16.125000 403485920.000000 +22.812500 -34.937500 -16.125000 403585920.000000 +22.937500 -34.750000 -16.312500 403685920.000000 +23.062500 -34.625000 -16.250000 403785920.000000 +22.937500 -34.875000 -16.000000 403885920.000000 +22.937500 -35.000000 -15.812500 403985920.000000 +22.875000 -35.000000 -15.500000 404085920.000000 +22.187500 -35.000000 -15.000000 404185920.000000 +21.562500 -35.250000 -14.437500 404285920.000000 +21.250000 -35.125000 -14.187500 404385920.000000 +20.625000 -35.062500 -13.875000 404485920.000000 +20.125000 -35.062500 -13.875000 404585920.000000 +20.375000 -35.125000 -14.312500 404685920.000000 +19.937500 -35.062500 -14.125000 404785920.000000 +20.062500 -35.125000 -14.250000 404885920.000000 +20.625000 -35.000000 -14.187500 404985920.000000 +21.500000 -34.937500 -14.625000 405085920.000000 +22.000000 -35.062500 -14.875000 405185920.000000 +22.750000 -35.187500 -15.187500 405285920.000000 +23.187500 -35.312500 -15.312500 405385920.000000 +23.437500 -35.312500 -15.250000 405485920.000000 +24.125000 -35.187500 -15.625000 405585920.000000 +24.625000 -35.375000 -15.937500 405685920.000000 +25.125000 -35.562500 -16.312500 405785920.000000 +24.812500 -35.437500 -16.562500 405885920.000000 +24.687500 -35.312500 -17.062500 405985920.000000 +24.250000 -35.125000 -17.875000 406085920.000000 +24.562500 -35.062500 -18.375000 406185920.000000 +26.000000 -34.937500 -19.000000 406285920.000000 +28.312500 -33.875000 -19.125000 406385920.000000 +30.687500 -32.312500 -18.187500 406485920.000000 +32.437500 -31.500000 -18.187500 406585920.000000 +34.437500 -30.500000 -17.750000 406685920.000000 +36.437500 -29.437500 -16.875000 406785920.000000 +38.875000 -28.437500 -15.562500 406885920.000000 +40.687500 -27.312500 -14.687500 406985920.000000 +41.312500 -26.375000 -13.687500 407085920.000000 +41.000000 -26.375000 -13.375000 407185920.000000 +40.562500 -26.937500 -14.125000 407285920.000000 +40.812500 -26.562500 -13.750000 407385920.000000 +40.937500 -26.562500 -13.687500 407485920.000000 +41.187500 -26.562500 -13.812500 407585920.000000 +41.062500 -26.687500 -13.750000 407685920.000000 +40.687500 -26.687500 -13.812500 407785920.000000 +40.687500 -26.750000 -14.000000 407885920.000000 +40.875000 -26.750000 -14.062500 407985920.000000 +40.875000 -26.625000 -13.875000 408085920.000000 +40.625000 -26.687500 -14.062500 408185920.000000 +40.625000 -26.562500 -13.937500 408285920.000000 +40.500000 -26.562500 -13.812500 408385920.000000 +40.500000 -26.375000 -14.062500 408485920.000000 +40.687500 -26.500000 -13.937500 408585920.000000 +40.687500 -26.375000 -13.875000 408685920.000000 +40.312500 -26.625000 -13.812500 408785920.000000 +40.437500 -26.750000 -13.812500 408885920.000000 +40.625000 -26.750000 -13.625000 408985920.000000 +40.625000 -26.875000 -13.750000 409085920.000000 +40.687500 -26.812500 -13.937500 409185920.000000 +40.750000 -26.937500 -13.750000 409285920.000000 +40.875000 -26.750000 -13.875000 409385920.000000 +40.812500 -26.812500 -13.812500 409485920.000000 +41.062500 -26.750000 -13.562500 409585920.000000 +40.750000 -26.625000 -13.625000 409685920.000000 +40.812500 -26.687500 -13.875000 409785920.000000 +40.687500 -26.750000 -13.937500 409885920.000000 +40.437500 -26.875000 -13.687500 409985920.000000 +40.437500 -27.125000 -13.812500 410085920.000000 +40.312500 -27.187500 -13.812500 410185920.000000 +40.437500 -27.312500 -13.625000 410285920.000000 +40.375000 -27.187500 -13.937500 410385920.000000 +40.500000 -27.187500 -13.875000 410485920.000000 +40.312500 -27.125000 -13.500000 410585920.000000 +40.250000 -27.062500 -13.625000 410685920.000000 +40.562500 -27.125000 -13.562500 410785920.000000 +40.562500 -27.062500 -13.500000 410885920.000000 +40.562500 -26.875000 -13.500000 410985920.000000 +40.812500 -26.937500 -13.875000 411085920.000000 +40.562500 -27.000000 -13.875000 411185920.000000 +40.750000 -26.937500 -14.062500 411285920.000000 +41.000000 -26.875000 -14.562500 411385920.000000 +41.312500 -26.875000 -14.562500 411485920.000000 +41.125000 -26.750000 -14.875000 411585920.000000 +41.187500 -26.750000 -15.062500 411685920.000000 +41.312500 -26.937500 -15.312500 411785920.000000 +41.187500 -26.937500 -15.125000 411885920.000000 +41.500000 -26.750000 -15.125000 411985920.000000 +41.375000 -26.875000 -14.937500 412085920.000000 +41.250000 -27.000000 -14.625000 412185920.000000 +41.375000 -27.062500 -14.625000 412285920.000000 +41.437500 -27.062500 -14.625000 412385920.000000 +41.500000 -26.875000 -14.562500 412485920.000000 +41.500000 -27.000000 -14.437500 412585920.000000 +41.500000 -26.875000 -14.375000 412685920.000000 +41.437500 -27.062500 -14.437500 412785920.000000 +41.500000 -26.937500 -14.312500 412885920.000000 +41.437500 -26.937500 -14.500000 412985920.000000 +41.062500 -26.812500 -14.250000 413085920.000000 +40.687500 -26.750000 -13.812500 413185920.000000 +40.375000 -26.687500 -13.750000 413285920.000000 +40.125000 -26.437500 -13.562500 413385920.000000 +39.937500 -26.250000 -13.812500 413485920.000000 +39.875000 -26.250000 -13.625000 413585920.000000 +39.750000 -26.250000 -13.687500 413685920.000000 +39.875000 -26.187500 -13.562500 413785920.000000 +39.875000 -26.062500 -13.625000 413885920.000000 diff --git a/src/sensor_fusion/design/lib/estimate_gravity.m b/src/sensor_fusion/design/lib/estimate_gravity.m new file mode 100755 index 0000000..5f62c4d --- /dev/null +++ b/src/sensor_fusion/design/lib/estimate_gravity.m @@ -0,0 +1,45 @@ +% estimate_gravity +% +% Copyright (c) 2014 Samsung Electronics Co., Ltd. +% +% Licensed under the Apache License, Version 2.0 (the "License"); +% you may not use this file except in compliance with the License. +% You may obtain a copy of the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, +% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% See the License for the specific language governing permissions and +% limitations under the License. + +% Gravitational Force Estimation function +% +% - Orientation Estimation using estimate_orientation function +% - Project the orientation on the device reference axes to obtain +% gravitational force on specific reference axes + + +function [Gravity] = estimate_gravity(Accel_data, Gyro_data, Mag_data) + +GRAVITY = 9.80665; + +BUFFER_SIZE = size(Accel_data,2); + +OR_driv = zeros(3,BUFFER_SIZE); +OR_aid = zeros(3,BUFFER_SIZE); +OR_err = zeros(3,BUFFER_SIZE); + +Gravity = zeros(3,BUFFER_SIZE); + +% estimate orientation +[OR_driv, OR_aid, OR_err] = estimate_orientation(Accel_data, Gyro_data, Mag_data); + +Gx = GRAVITY * -sind(OR_driv(1,:)); +Gy = GRAVITY * sind(OR_driv(2,:)); +Gz = GRAVITY * cosd(OR_driv(2,:)) .* cosd(OR_driv(1,:)); + +Gravity = [Gx; Gy; Gz]; + +end \ No newline at end of file diff --git a/src/sensor_fusion/design/sf_gravity.m b/src/sensor_fusion/design/sf_gravity.m new file mode 100755 index 0000000..48dba10 --- /dev/null +++ b/src/sensor_fusion/design/sf_gravity.m @@ -0,0 +1,113 @@ +% sf_gravity +% +% Copyright (c) 2014 Samsung Electronics Co., Ltd. +% +% Licensed under the Apache License, Version 2.0 (the "License"); +% you may not use this file except in compliance with the License. +% You may obtain a copy of the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, +% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% See the License for the specific language governing permissions and +% limitations under the License. + +% Sensor Fusion Implementation for Determination of Gravity +% +% - Input Accelerometer, Gyroscope and Magnetometer sensor data +% - Call estimate_gravity +% - Plot results for gravitational force on reference axis + +addpath('lib'); +clear +close all +clc + +GRAVITY = 9.80665; + +Max_Range_Accel = 39.203407; Min_Range_Accel = -39.204006; Res_Accel = 0.000598; +Max_Range_Gyro = 1146.862549; Min_Range_Gyro = -1146.880005; Res_Gyro = 0.017500; +Max_Range_Magnetic = 1200; Min_Range_Magnetic = -1200; Res_Magnetic = 1; + +Bias_Ax = 0.098586; +Bias_Ay = 0.18385; +Bias_Az = 10.084 - GRAVITY; + +Bias_Gx = -5.3539; +Bias_Gy = 0.24325; +Bias_Gz = 2.3391; + +BUFFER_SIZE = 100; + +Accel_data = zeros(4,BUFFER_SIZE); +Gyro_data = zeros(4,BUFFER_SIZE); +Mag_data = zeros(4,BUFFER_SIZE); + +OR_driv = zeros(3,BUFFER_SIZE); +OR_aid = zeros(3,BUFFER_SIZE); +OR_err = zeros(3,BUFFER_SIZE); + +% Sensor Data simulating orientation motions + +% get accel x,y,z axis data from stored file +Accel_data(1,:) = (((dlmread("data/100ms/gravity/single_roll_throw/accel.txt")(:,1))') - Bias_Ax)(1:BUFFER_SIZE); +Accel_data(2,:) = (((dlmread("data/100ms/gravity/single_roll_throw/accel.txt")(:,2))') - Bias_Ay)(1:BUFFER_SIZE); +Accel_data(3,:) = (((dlmread("data/100ms/gravity/single_roll_throw/accel.txt")(:,3))') - Bias_Az)(1:BUFFER_SIZE); +Accel_data(4,:) = ((dlmread("data/100ms/gravity/single_roll_throw/accel.txt")(:,4))')(1:BUFFER_SIZE); + +% get gyro x,y,z axis data from stored file +Gyro_data(1,:) = (((dlmread("data/100ms/gravity/single_roll_throw/gyro.txt")(:,1))') - Bias_Gx)(1:BUFFER_SIZE); +Gyro_data(2,:) = (((dlmread("data/100ms/gravity/single_roll_throw/gyro.txt")(:,2))') - Bias_Gy)(1:BUFFER_SIZE); +Gyro_data(3,:) = (((dlmread("data/100ms/gravity/single_roll_throw/gyro.txt")(:,3))') - Bias_Gz)(1:BUFFER_SIZE); +Gyro_data(4,:) = ((dlmread("data/100ms/gravity/single_roll_throw/gyro.txt")(:,4))')(1:BUFFER_SIZE); + +scale_Gyro = 575; +Gyro_data(1,:) = Gyro_data(1,:)/scale_Gyro; +Gyro_data(2,:) = Gyro_data(2,:)/scale_Gyro; +Gyro_data(3,:) = Gyro_data(3,:)/scale_Gyro; + +% get magnetometer x,y,z axis data from stored file +Mag_data(1,:) = (((dlmread("data/100ms/gravity/single_roll_throw/magnetic.txt")(:,1))'))(1:BUFFER_SIZE); +Mag_data(2,:) = (((dlmread("data/100ms/gravity/single_roll_throw/magnetic.txt")(:,2))'))(1:BUFFER_SIZE); +Mag_data(3,:) = (((dlmread("data/100ms/gravity/single_roll_throw/magnetic.txt")(:,3))'))(1:BUFFER_SIZE); +Mag_data(4,:) = ((dlmread("data/100ms/gravity/single_roll_throw/magnetic.txt")(:,4))')(1:BUFFER_SIZE); + +% estimate orientation +Gravity = estimate_gravity(Accel_data, Gyro_data, Mag_data); + +hfig=(figure); +scrsz = get(0,'ScreenSize'); +set(hfig,'position',scrsz); +% Accelerometer Raw data +subplot(2,1,1) +UA = Accel_data(1,:); +p1 = plot(1:length(UA),UA(1,1:length(UA)),'k'); +hold on; +grid on; +UA = Accel_data(2,:); +p2 = plot(1:length(UA),UA(1,1:length(UA)),'b'); +hold on; +grid on; +UA = Accel_data(3,:); +p3 = plot(1:length(UA),UA(1,1:length(UA)),'r'); + +% Gravity Plot Results +subplot(2,1,2) +UA = Gravity(1,:); +p1 = plot(1:length(UA),UA(1,1:length(UA)),'k'); +hold on; +grid on; +UA = Gravity(2,:); +p2 = plot(1:length(UA),UA(1,1:length(UA)),'b'); +hold on; +grid on; +UA = Gravity(3,:); +p3 = plot(1:length(UA),UA(1,1:length(UA)),'r'); +title(['Gravity']); +legend([p1 p2 p3],'x-axis', 'y-axis', 'z-axis'); + + + + -- 2.7.4 From 61bf53759178427fa7a1e4ee743cdc2377025c50 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 8 May 2014 14:51:36 +0530 Subject: [PATCH 04/16] Adding linear acceleration virtual sensor - adding octave code for computing linear acceleration. - adding sensor data to test linear acceleration. - fixing sign in gravity computation to correct phase. signed-off-by: Ramasamy Change-Id: I86356a58ed27f013693f28234d29fa1922da2323 --- .../100ms/linear_acceleration/move_x/accel.txt | 134 +++++++++++++++ .../data/100ms/linear_acceleration/move_x/gyro.txt | 134 +++++++++++++++ .../100ms/linear_acceleration/move_x/magnetic.txt | 135 +++++++++++++++ .../100ms/linear_acceleration/move_x_y_z/accel.txt | 170 +++++++++++++++++++ .../100ms/linear_acceleration/move_x_y_z/gyro.txt | 171 +++++++++++++++++++ .../linear_acceleration/move_x_y_z/magnetic.txt | 171 +++++++++++++++++++ .../100ms/linear_acceleration/move_y/accel.txt | 128 ++++++++++++++ .../data/100ms/linear_acceleration/move_y/gyro.txt | 128 ++++++++++++++ .../100ms/linear_acceleration/move_y/magnetic.txt | 127 ++++++++++++++ .../100ms/linear_acceleration/move_z/accel.txt | 183 +++++++++++++++++++++ .../data/100ms/linear_acceleration/move_z/gyro.txt | 183 +++++++++++++++++++++ .../100ms/linear_acceleration/move_z/magnetic.txt | 183 +++++++++++++++++++++ src/sensor_fusion/design/lib/estimate_gravity.m | 4 +- .../design/lib/estimate_linear_acceleration.m | 36 ++++ src/sensor_fusion/design/sf_linear_acceleration.m | 111 +++++++++++++ 15 files changed, 1996 insertions(+), 2 deletions(-) create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/accel.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/gyro.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/magnetic.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/accel.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/gyro.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/magnetic.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/accel.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/gyro.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/magnetic.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/accel.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/gyro.txt create mode 100755 src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/magnetic.txt create mode 100755 src/sensor_fusion/design/lib/estimate_linear_acceleration.m create mode 100755 src/sensor_fusion/design/sf_linear_acceleration.m diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/accel.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/accel.txt new file mode 100755 index 0000000..be2a3c7 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/accel.txt @@ -0,0 +1,134 @@ +0.873380 0.113659 10.185050 63620448.000000 +0.775275 0.041874 10.211370 63720592.000000 +0.736989 0.186640 10.325029 63820512.000000 +0.652044 0.153141 10.115658 63920524.000000 +0.400798 0.017946 10.033106 64020552.000000 +0.658026 0.088534 10.040283 64120532.000000 +0.552742 0.105284 10.405190 64220552.000000 +0.519243 0.080160 9.923036 64320564.000000 +0.483350 0.053839 10.085747 64420556.000000 +0.553938 0.098106 10.226924 64520552.000000 +0.424726 0.148355 10.275976 64620568.000000 +0.766900 0.057428 10.481760 64720512.000000 +0.586242 0.076570 9.896714 64820580.000000 +0.494118 0.244068 10.197014 64920552.000000 +0.222532 1.239482 10.725827 65020580.000000 +-0.071785 2.029114 10.066606 65123060.000000 +-0.486939 2.309074 10.287941 65220548.000000 +0.044267 0.894916 9.565309 65320512.000000 +0.947558 -0.057428 10.253245 65420520.000000 +0.702293 -0.498904 10.925629 65520596.000000 +-0.429512 -1.333999 10.520043 65620544.000000 +-0.484547 -1.386641 9.822537 65720564.000000 +0.070588 -1.147358 10.173084 65820560.000000 +0.093320 -1.238286 11.227123 65920564.000000 +0.180658 -0.512064 11.686546 66020556.000000 +-0.551546 0.723829 9.211170 66120556.000000 +0.338584 2.458625 9.529416 66220504.000000 +0.149551 3.943372 10.289137 66320568.000000 +0.177069 2.906083 10.901700 66420512.000000 +1.075574 1.198804 10.858629 66520608.000000 +-0.040678 0.713061 9.954143 66620504.000000 +0.333799 0.177069 9.209974 66720736.000000 +0.334995 0.331406 10.603793 66820548.000000 +-0.076570 0.591027 9.956534 66920592.000000 +0.451047 0.595813 10.393225 67020552.000000 +0.405583 0.614955 9.992428 67120584.000000 +0.214158 0.855434 9.919446 67220552.000000 +0.260818 1.869991 10.715059 67320592.000000 +-0.212961 3.278167 9.938589 67420512.000000 +-0.656830 3.655036 10.403993 67520560.000000 +1.144966 2.082952 10.271191 67620504.000000 +1.481157 1.381855 11.145767 67720536.000000 +0.137587 -1.852045 9.055637 67820496.000000 +0.927219 -3.217150 11.166106 67920560.000000 +-0.027517 -1.889133 10.281959 68020544.000000 +-1.164108 -0.620937 9.505488 68120584.000000 +0.138784 -2.001596 9.978070 68220672.000000 +0.229711 -2.486143 11.088341 68320584.000000 +0.513260 -1.899901 9.474380 68420552.000000 +0.063410 0.625723 8.815158 68520600.000000 +0.504886 3.439682 8.979067 68620496.000000 +0.965504 4.766503 9.964910 68720512.000000 +0.527617 3.059224 10.782058 68820528.000000 +-0.061017 2.084148 10.046266 68920512.000000 +-0.985843 1.958525 10.103694 69020480.000000 +0.069392 1.256232 9.997212 69120512.000000 +-0.064606 1.320838 10.090532 69220512.000000 +0.094516 1.134198 10.284351 69320560.000000 +0.447458 0.960718 9.905089 69420504.000000 +0.104088 0.824327 9.815358 69520584.000000 +0.013161 1.140180 10.643275 69620504.000000 +0.052642 1.307678 10.387242 69720704.000000 +0.032303 1.191626 9.907482 69820520.000000 +-0.130409 1.256232 10.412368 69920568.000000 +-0.223729 1.798206 10.441081 70020512.000000 +-0.337388 2.664408 9.994821 70120560.000000 +0.257228 3.909872 10.194620 70220512.000000 +-0.547956 3.700500 10.856236 70320568.000000 +0.618545 1.328017 10.911271 70420512.000000 +-0.382852 -0.501296 9.597611 70520568.000000 +-0.165105 -1.398605 10.934003 70620584.000000 +-1.137787 -1.858027 11.070394 70720536.000000 +-0.570688 -1.214357 10.652846 70820496.000000 +0.275175 -1.427319 10.853845 70920552.000000 +-0.253639 -2.112862 9.728020 71020536.000000 +-0.053839 -1.817349 10.593026 71120552.000000 +-0.202193 -0.623330 10.399208 71220648.000000 +0.343370 1.076770 9.952947 71320632.000000 +1.381855 3.005385 10.291530 71420528.000000 +-1.508675 4.090530 9.220742 71520568.000000 +-0.252443 2.627320 12.151951 71620496.000000 +-0.156730 1.197608 10.022337 71720560.000000 +-0.192622 0.673580 10.197014 71820528.000000 +-0.271585 0.559920 9.378669 71920560.000000 +-0.137587 0.606581 10.380065 72020568.000000 +-0.072981 0.527617 9.801002 72120512.000000 +0.107677 0.762114 10.299905 72220576.000000 +-0.151944 0.750150 10.247264 72320520.000000 +-0.331406 0.704686 10.212566 72420592.000000 +-0.189033 0.713061 9.939785 72520576.000000 +-0.116052 0.617348 10.130014 72620592.000000 +-0.314656 0.510868 9.748360 72720616.000000 +-0.075374 0.616152 10.228121 72820560.000000 +0.186640 0.771685 10.278370 72920576.000000 +-0.102891 0.715454 10.406385 73025632.000000 +0.184247 0.526421 10.188639 73125384.000000 +-0.173480 0.868595 10.241282 73225496.000000 +-0.334995 0.628116 10.045070 73325656.000000 +-0.062213 0.683151 9.985250 73425632.000000 +-0.192622 0.882952 10.015160 73525632.000000 +-0.468993 0.543171 9.494720 73625576.000000 +-0.211765 0.707079 9.859627 73725632.000000 +-0.592224 0.597009 9.812965 73825520.000000 +-1.113859 0.570688 10.825130 73925744.000000 +-1.007378 0.238086 12.628120 74025640.000000 +-0.997807 0.216550 10.536794 74125616.000000 +-0.443869 0.498904 10.843077 74225704.000000 +0.130409 0.792024 9.018548 74325472.000000 +-0.278764 0.662812 9.462417 74425464.000000 +-0.139980 0.606581 8.922836 74525536.000000 +-0.083749 0.955933 9.736395 74625488.000000 +-0.131605 0.865005 10.631311 74725480.000000 +0.083749 0.715454 10.845469 74825544.000000 +0.080160 0.709472 10.380065 74925464.000000 +-0.065803 0.671187 10.106087 75025488.000000 +-0.289532 0.647258 9.772287 75125552.000000 +-0.390030 0.537189 9.859627 75225488.000000 +-0.178265 0.656830 10.807183 75325480.000000 +-0.364905 0.515653 10.377672 75425552.000000 +-0.379262 0.886541 10.323833 75525488.000000 +-0.001196 0.728615 10.462617 75625472.000000 +-0.154337 0.212961 9.391829 75725696.000000 +-0.197408 0.196211 9.847661 75825464.000000 +-0.392423 0.309871 10.232906 75925488.000000 +-0.112463 0.583849 9.931411 76025536.000000 +-0.215354 0.788435 10.302298 76125472.000000 +-0.290728 0.643669 10.173084 76225496.000000 +0.043071 0.434297 10.045070 76325536.000000 +-0.397209 0.842274 10.347760 76525472.000000 +-0.404387 0.715454 10.216157 76625528.000000 +-0.074178 0.611366 10.242477 76725472.000000 +-0.349352 0.776471 10.244871 76825472.000000 +-0.410369 0.650848 9.905089 76925504.000000 +0.022732 0.636491 9.986445 77025496.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/gyro.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/gyro.txt new file mode 100755 index 0000000..6dca03a --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/gyro.txt @@ -0,0 +1,134 @@ +1.890000 0.472500 -0.472500 63560404.000000 +-3.657500 2.362500 -31.377501 63660552.000000 +-5.512500 -0.227500 1.645000 63760476.000000 +-4.830000 0.157500 1.697500 63860468.000000 +-6.510000 -0.542500 2.782500 63960488.000000 +-5.005000 0.542500 3.010000 64060464.000000 +-7.507500 -0.227500 3.027500 64160512.000000 +-3.342500 0.507500 2.572500 64260512.000000 +-6.125000 0.892500 2.940000 64360468.000000 +-6.772500 0.227500 2.555000 64460512.000000 +-4.462500 1.102500 2.467500 64560520.000000 +-7.332500 0.717500 3.867500 64660560.000000 +-3.290000 1.872500 2.222500 64760492.000000 +-7.052500 -0.052500 3.360000 64860516.000000 +-10.255000 -2.957500 5.337500 64960528.000000 +0.245000 16.887501 18.952499 65060680.000000 +-9.292500 3.202500 36.802502 65160488.000000 +-11.112500 -17.377501 53.235001 65260464.000000 +18.480000 9.082500 43.295002 65360456.000000 +19.162500 -4.112500 16.292500 65460464.000000 +30.450001 5.302500 -8.190000 65560528.000000 +19.512501 24.377501 -9.135000 65660516.000000 +-20.335001 11.322500 9.485000 65760584.000000 +-21.507500 -2.362500 6.685000 65860496.000000 +-22.190001 -11.427500 -0.052500 65960540.000000 +-11.917500 -5.372500 -15.732500 66060500.000000 +6.702500 -6.317500 -33.705002 66160512.000000 +-11.095000 -14.542500 -29.260000 66260476.000000 +-17.639999 -9.747500 -31.325001 66360512.000000 +-15.470000 7.752500 -18.059999 66460476.000000 +-14.262500 -6.527500 0.490000 66560752.000000 +-0.332500 7.822500 0.052500 66660452.000000 +4.217500 8.942500 2.450000 66760544.000000 +-8.557500 -3.727500 0.612500 66860468.000000 +-1.890000 2.432500 -2.152500 66960520.000000 +-4.375000 -2.537500 3.482500 67060508.000000 +-2.677500 -3.167500 1.557500 67160552.000000 +-2.730000 2.502500 0.210000 67260504.000000 +-10.675000 2.292500 2.642500 67360536.000000 +-2.800000 0.752500 10.010000 67460464.000000 +-14.892500 -2.397500 27.860001 67560504.000000 +-9.310000 9.922500 43.697498 67660544.000000 +-2.520000 -1.487500 36.137501 67760504.000000 +33.197498 15.277500 7.437500 67860472.000000 +-10.167500 2.782500 7.035000 67960528.000000 +-10.535000 9.887500 -1.487500 68060576.000000 +-2.975000 -1.732500 -6.125000 68160496.000000 +-11.602500 0.647500 5.092500 68260480.000000 +-30.030001 -11.217500 8.522500 68360544.000000 +-9.100000 -4.707500 -2.502500 68460520.000000 +15.855000 -9.887500 -20.860001 68560528.000000 +35.279999 7.472500 -36.557499 68660456.000000 +-9.905000 -30.782499 -47.967499 68760472.000000 +-19.792500 0.192500 -25.305000 68860480.000000 +-6.632500 10.132500 2.292500 68960464.000000 +-3.552500 5.547500 -1.417500 69060480.000000 +0.980000 6.177500 5.425000 69160584.000000 +-3.937500 4.357500 1.470000 69260520.000000 +-13.177500 -3.097500 5.775000 69360592.000000 +-5.372500 -1.067500 7.980000 69460528.000000 +-2.257500 5.547500 4.130000 69560736.000000 +-9.852500 2.537500 2.642500 69660528.000000 +-1.592500 1.907500 4.235000 69760528.000000 +-6.755000 0.472500 5.250000 69860528.000000 +-3.185000 -1.277500 3.622500 69960592.000000 +-1.645000 -1.347500 9.047500 70060520.000000 +-11.130000 -1.487500 24.237499 70160584.000000 +-19.530001 -0.822500 42.070000 70260528.000000 +-25.129999 24.027500 49.910000 70360592.000000 +-9.030000 5.827500 39.095001 70460536.000000 +-7.945000 -5.197500 20.737499 70560752.000000 +-0.227500 6.737500 -1.662500 70660504.000000 +-1.575000 2.327500 2.537500 70760568.000000 +-11.060000 -3.062500 6.457500 70860472.000000 +-13.527500 -1.977500 3.517500 70960544.000000 +-21.070000 -9.327500 0.087500 71060600.000000 +5.040000 1.557500 -14.087500 71160544.000000 +16.485001 -1.032500 -28.385000 71260488.000000 +-8.907500 -24.272501 -34.860001 71360616.000000 +-2.100000 5.162500 -47.512501 71460472.000000 +-11.917500 3.272500 -1.907500 71560552.000000 +1.820000 -4.707500 2.625000 71660504.000000 +-8.627500 15.592500 -6.597500 71760536.000000 +-3.167500 1.872500 1.470000 71860576.000000 +-14.315001 -2.992500 0.822500 71960528.000000 +-1.470000 0.892500 2.887500 72060536.000000 +-5.477500 0.367500 3.570000 72160504.000000 +-4.392500 0.892500 4.287500 72260584.000000 +-4.812500 1.592500 1.295000 72360488.000000 +-5.635000 -0.262500 1.977500 72460488.000000 +-5.057500 0.367500 1.400000 72560592.000000 +-6.335000 2.152500 2.782500 72660520.000000 +-4.112500 2.432500 2.327500 72760464.000000 +-7.472500 1.347500 4.410000 72860536.000000 +-5.390000 1.137500 3.342500 72960528.000000 +-5.670000 0.647500 2.187500 73061936.000000 +-6.160000 0.997500 3.657500 73160384.000000 +-5.005000 0.647500 1.872500 73260544.000000 +-4.130000 2.852500 2.555000 73360440.000000 +-6.807500 2.222500 4.515000 73460480.000000 +-3.955000 2.852500 3.150000 73560448.000000 +3.202500 4.287500 4.935000 73660456.000000 +-5.460000 11.567500 2.730000 73760472.000000 +-9.082500 11.322500 -1.995000 73860512.000000 +-20.422501 -0.017500 -0.420000 73960440.000000 +-21.385000 -9.607500 6.300000 74060640.000000 +-2.327500 4.007500 -1.925000 74160456.000000 +1.715000 -14.892500 4.357500 74260488.000000 +10.727500 -6.947500 0.437500 74360520.000000 +4.357500 -3.587500 2.100000 74460512.000000 +-1.557500 -4.217500 5.162500 74560512.000000 +-7.052500 1.522500 7.017500 74660560.000000 +-12.565000 2.887500 6.020000 74760544.000000 +-10.150000 2.782500 6.177500 74860544.000000 +-6.405000 -0.962500 2.852500 74960552.000000 +-5.547500 -0.647500 2.397500 75060544.000000 +-4.917500 -0.157500 2.975000 75160544.000000 +-7.262500 4.462500 3.290000 75260560.000000 +-12.687500 0.752500 2.292500 75360528.000000 +-5.267500 0.332500 0.770000 75460552.000000 +-4.760000 0.192500 0.245000 75560712.000000 +-6.300000 0.507500 4.935000 75660528.000000 +-1.050000 0.262500 7.157500 75760536.000000 +-6.037500 0.577500 7.752500 75860552.000000 +-6.807500 -0.017500 2.747500 75960536.000000 +-3.185000 -0.332500 0.437500 76060536.000000 +-4.725000 0.367500 0.385000 76160560.000000 +-5.792500 -0.787500 3.482500 76260512.000000 +-5.880000 0.297500 2.782500 76360536.000000 +-3.605000 2.292500 0.000000 76460544.000000 +-4.130000 2.047500 2.887500 76560488.000000 +-4.340000 0.507500 4.900000 76660472.000000 +-5.162500 -1.382500 2.030000 76760512.000000 +-4.742500 -1.452500 3.885000 76960528.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/magnetic.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/magnetic.txt new file mode 100755 index 0000000..6e9c2ba --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x/magnetic.txt @@ -0,0 +1,135 @@ +29.687500 -33.750000 -12.937500 63562260.000000 +31.437500 -33.750000 -13.312500 63662260.000000 +32.937500 -33.500000 -13.687500 63762260.000000 +32.250000 -33.562500 -13.312500 63862260.000000 +32.875000 -33.750000 -13.562500 63962260.000000 +32.562500 -33.375000 -13.687500 64062260.000000 +32.500000 -33.375000 -13.875000 64162260.000000 +32.250000 -33.562500 -13.875000 64262260.000000 +32.562500 -33.437500 -14.187500 64362260.000000 +32.312500 -33.437500 -14.437500 64462260.000000 +32.000000 -33.375000 -14.312500 64562260.000000 +32.000000 -33.375000 -14.437500 64662260.000000 +31.937500 -33.312500 -14.375000 64762260.000000 +31.937500 -33.437500 -14.375000 64862260.000000 +31.750000 -33.562500 -14.250000 64962260.000000 +31.375000 -33.562500 -14.000000 65062260.000000 +30.687500 -34.062500 -13.750000 65162260.000000 +29.812500 -34.625000 -13.375000 65262260.000000 +28.750000 -35.375000 -13.625000 65362260.000000 +26.750000 -35.812500 -13.250000 65462260.000000 +25.062500 -35.812500 -13.187500 65562260.000000 +23.187500 -35.750000 -13.000000 65662260.000000 +21.562500 -35.750000 -13.250000 65762260.000000 +20.062500 -36.062500 -13.125000 65862260.000000 +19.250000 -36.187500 -13.125000 65962260.000000 +19.062500 -36.375000 -13.000000 66062260.000000 +19.750000 -36.125000 -12.437500 66162260.000000 +21.312500 -36.125000 -12.500000 66262260.000000 +23.125000 -36.000000 -12.562500 66362260.000000 +25.187500 -36.000000 -12.687500 66462260.000000 +27.000000 -35.937500 -12.687500 66562260.000000 +28.687500 -35.625000 -12.687500 66662260.000000 +30.125000 -35.062500 -12.625000 66762260.000000 +31.125000 -34.250000 -12.562500 66862260.000000 +31.875000 -34.125000 -13.062500 66962260.000000 +32.250000 -33.750000 -13.062500 67062260.000000 +32.375000 -33.812500 -12.937500 67162256.000000 +32.187500 -33.875000 -12.562500 67262256.000000 +32.312500 -33.875000 -12.000000 67362256.000000 +32.187500 -34.125000 -12.000000 67462256.000000 +31.687500 -34.500000 -11.750000 67562256.000000 +30.750000 -34.937500 -11.937500 67662256.000000 +29.000000 -35.375000 -11.875000 67762256.000000 +26.937500 -35.437500 -12.375000 67862256.000000 +25.062500 -35.125000 -12.750000 67962256.000000 +23.312500 -34.750000 -13.437500 68062256.000000 +21.375000 -34.312500 -14.250000 68162256.000000 +19.750000 -34.000000 -14.750000 68262256.000000 +18.750000 -34.187500 -15.000000 68362256.000000 +18.687500 -34.187500 -14.687500 68462256.000000 +20.125000 -33.937500 -14.187500 68562256.000000 +22.062500 -33.937500 -13.500000 68662256.000000 +23.750000 -34.062500 -12.875000 68762256.000000 +25.812500 -34.500000 -12.000000 68862256.000000 +28.312500 -34.875000 -11.250000 68962256.000000 +30.437500 -34.500000 -10.375000 69062256.000000 +32.125000 -33.937500 -9.937500 69162256.000000 +33.625000 -33.375000 -9.812500 69262256.000000 +34.250000 -32.875000 -9.937500 69362256.000000 +34.312500 -32.687500 -9.875000 69462256.000000 +34.500000 -32.812500 -9.812500 69562256.000000 +34.312500 -32.812500 -9.812500 69662256.000000 +33.875000 -32.687500 -9.500000 69762256.000000 +33.687500 -33.062500 -9.562500 69862256.000000 +33.625000 -33.125000 -9.375000 69962256.000000 +33.312500 -33.375000 -9.250000 70062256.000000 +32.875000 -33.812500 -9.250000 70162256.000000 +32.062500 -34.375000 -9.500000 70262256.000000 +30.937500 -34.937500 -9.500000 70362256.000000 +29.312500 -35.562500 -9.687500 70462256.000000 +27.562500 -36.187500 -10.437500 70562256.000000 +25.750000 -36.250000 -11.062500 70662256.000000 +24.250000 -36.250000 -11.687500 70762256.000000 +22.500000 -36.125000 -12.437500 70862256.000000 +20.812500 -36.312500 -13.125000 70962256.000000 +20.000000 -36.312500 -13.500000 71062256.000000 +19.875000 -36.375000 -13.812500 71162256.000000 +20.812500 -36.250000 -13.875000 71262256.000000 +22.250000 -36.125000 -13.625000 71362256.000000 +24.000000 -36.000000 -13.437500 71462256.000000 +25.562500 -35.937500 -13.312500 71562256.000000 +27.437500 -35.937500 -13.062500 71662256.000000 +29.375000 -35.562500 -12.562500 71762256.000000 +31.062500 -35.125000 -12.500000 71862256.000000 +32.312500 -34.687500 -12.375000 71962256.000000 +33.000000 -34.250000 -12.500000 72062256.000000 +33.250000 -34.062500 -12.500000 72162256.000000 +33.375000 -34.187500 -12.312500 72262256.000000 +33.500000 -34.125000 -12.437500 72362256.000000 +33.375000 -34.250000 -12.312500 72462256.000000 +33.375000 -34.312500 -12.187500 72562256.000000 +33.375000 -34.125000 -12.062500 72662256.000000 +33.062500 -34.000000 -12.125000 72762256.000000 +33.125000 -34.062500 -12.000000 72862256.000000 +33.062500 -34.000000 -11.875000 72962256.000000 +33.000000 -34.062500 -11.562500 73062256.000000 +32.500000 -34.125000 -11.187500 73162256.000000 +32.625000 -34.000000 -11.062500 73262256.000000 +32.562500 -34.000000 -10.750000 73362256.000000 +32.562500 -34.187500 -10.437500 73462256.000000 +32.625000 -34.312500 -10.062500 73562256.000000 +32.437500 -34.312500 -9.812500 73662256.000000 +32.375000 -34.437500 -9.625000 73762256.000000 +32.437500 -34.437500 -9.687500 73862256.000000 +32.750000 -34.625000 -9.687500 73962256.000000 +32.562500 -34.687500 -9.750000 74062256.000000 +32.437500 -34.625000 -10.000000 74162256.000000 +32.125000 -34.562500 -10.000000 74262256.000000 +32.312500 -34.625000 -10.062500 74362256.000000 +32.375000 -34.562500 -10.250000 74462256.000000 +32.375000 -34.500000 -10.312500 74562256.000000 +32.250000 -34.312500 -10.250000 74662256.000000 +32.000000 -34.312500 -10.312500 74762256.000000 +32.000000 -34.437500 -10.312500 74862256.000000 +32.000000 -34.437500 -10.312500 74962256.000000 +32.062500 -34.687500 -10.312500 75062256.000000 +31.812500 -34.437500 -10.312500 75162256.000000 +31.937500 -34.562500 -10.062500 75262256.000000 +31.875000 -34.687500 -10.125000 75362256.000000 +31.875000 -34.625000 -10.187500 75462256.000000 +31.812500 -34.500000 -10.437500 75562256.000000 +31.562500 -34.375000 -10.562500 75662256.000000 +31.250000 -34.437500 -10.562500 75762256.000000 +31.125000 -34.312500 -10.687500 75862256.000000 +31.062500 -34.500000 -10.500000 75962256.000000 +30.562500 -34.625000 -10.562500 76062256.000000 +30.500000 -34.687500 -10.625000 76162256.000000 +30.125000 -34.937500 -10.687500 76262256.000000 +30.250000 -35.062500 -10.437500 76362256.000000 +30.687500 -35.250000 -10.250000 76462256.000000 +30.750000 -35.437500 -10.062500 76562256.000000 +30.437500 -35.500000 -9.875000 76662256.000000 +30.562500 -35.375000 -9.937500 76762256.000000 +30.750000 -35.187500 -9.937500 76862256.000000 +30.750000 -35.187500 -9.687500 76962256.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/accel.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/accel.txt new file mode 100755 index 0000000..27d9479 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/accel.txt @@ -0,0 +1,170 @@ +0.118445 0.745364 10.156336 79430400.000000 +-0.098106 0.589831 10.029516 79530616.000000 +-0.141177 0.689133 10.407581 79630952.000000 +-0.137587 0.658026 9.830912 79730664.000000 +-0.106481 0.665205 10.057034 79830752.000000 +-0.119641 0.813560 10.140782 79930960.000000 +0.009571 0.875773 10.402797 80030960.000000 +-0.083749 0.708275 10.327423 80130920.000000 +0.055035 0.679562 10.104890 80230728.000000 +-0.114855 0.794417 10.237692 80330624.000000 +-0.181855 0.825524 10.149158 80430792.000000 +0.153141 0.547956 10.260423 80530824.000000 +-0.151944 0.624527 10.155140 80630640.000000 +-0.198604 0.836291 10.372886 80730768.000000 +-0.071785 0.711865 9.930215 80830856.000000 +-0.257228 0.569492 9.950554 80931360.000000 +-0.131605 0.939183 10.347760 81030576.000000 +-0.070588 0.869791 10.567901 81130672.000000 +-0.092124 0.798006 10.211370 81231200.000000 +0.016750 0.649651 10.031910 81330584.000000 +-0.217747 0.847059 9.912268 81430856.000000 +-0.535992 1.892723 10.003194 81530704.000000 +-0.445065 2.396412 10.437491 81630736.000000 +-0.624527 2.640480 10.646864 81730776.000000 +-0.266800 2.338984 10.767702 81830952.000000 +0.778864 0.801596 10.563116 81930704.000000 +0.419940 -0.461815 11.133803 82030744.000000 +-0.874577 -2.377269 9.683753 82134168.000000 +-0.664008 -1.390230 9.665807 82230456.000000 +-0.844666 0.161516 10.034302 82330536.000000 +-0.305085 0.606581 10.225728 82430552.000000 +0.318245 0.425922 10.144372 82530496.000000 +0.120838 -0.569492 10.022337 82630592.000000 +-0.524028 -1.989632 10.660025 82730552.000000 +-0.392423 -1.513460 10.939985 82830592.000000 +-0.412762 -0.136391 9.699306 82930752.000000 +0.080160 1.999203 10.281959 83030488.000000 +-0.805185 4.059423 9.012567 83130664.000000 +-0.537189 3.383451 10.968699 83230544.000000 +-0.483350 1.104288 9.534202 83330584.000000 +-0.345763 0.778864 10.658829 83430640.000000 +-0.368495 0.482154 10.226924 83530728.000000 +-0.532403 0.689133 10.674382 83630536.000000 +0.285942 0.423530 9.920642 83730568.000000 +-0.364905 0.285942 9.616754 83830560.000000 +-0.043071 0.535992 10.618150 83930512.000000 +-0.191426 0.538385 10.057034 84030632.000000 +-0.440279 0.386441 10.186246 84130720.000000 +-0.033500 0.599402 10.134801 84230560.000000 +-0.504886 0.612563 9.982857 84330584.000000 +-0.321835 0.543171 10.411172 84430832.000000 +-0.114855 0.441476 9.891929 84530640.000000 +-0.136391 0.781257 10.314261 84630600.000000 +-0.406780 0.565903 10.036695 84730832.000000 +-0.333799 0.553938 10.157533 84830584.000000 +-0.037089 0.579063 10.376474 84930576.000000 +-0.047856 0.683151 9.963714 85030536.000000 +-0.273978 0.696311 10.358529 85131072.000000 +-0.116052 0.631705 10.456635 85230464.000000 +-0.669990 0.582652 10.131211 85330528.000000 +-0.108873 0.604188 9.994821 85430840.000000 +-0.382852 0.338584 9.895518 85530736.000000 +-0.532403 0.221336 10.120443 85630776.000000 +-0.418744 0.392423 10.299905 85730752.000000 +-0.306281 0.522832 10.174281 85830744.000000 +-0.679562 0.664008 10.157533 85930688.000000 +-0.357727 0.534796 9.961320 86030848.000000 +-0.302692 0.545564 9.936196 86130656.000000 +0.046660 0.665205 10.470992 86230896.000000 +1.046860 0.681954 11.063215 86331752.000000 +2.268396 0.537189 10.545169 86431488.000000 +4.289135 -0.667598 10.208978 86530616.000000 +0.976272 -1.460818 9.914660 86630776.000000 +-2.866602 -0.266800 11.763116 86730472.000000 +-1.154537 1.178465 11.097912 86833976.000000 +-0.224925 0.979861 9.988838 86930600.000000 +0.196211 0.601795 9.895518 87031048.000000 +0.721436 0.512064 10.077373 87130568.000000 +-0.075374 0.847059 9.704092 87230704.000000 +0.184247 0.455833 9.401401 87330544.000000 +-1.354338 0.900898 9.109475 87430720.000000 +-2.524428 -0.040678 10.034302 87533808.000000 +-1.030110 -0.272782 10.602598 87630528.000000 +0.222532 -0.281157 10.454242 87730568.000000 +2.682354 1.178465 10.127622 87831672.000000 +0.881755 0.751346 7.633104 87930552.000000 +1.938186 0.872184 10.920842 88030792.000000 +-0.563510 0.987039 10.898110 88130520.000000 +-0.929612 0.725025 10.264012 88230656.000000 +-0.606581 0.934397 9.930215 88330560.000000 +-0.463011 0.626920 9.702895 88430880.000000 +-0.163908 0.784846 10.500903 88530704.000000 +-0.303888 0.801596 10.357333 88630496.000000 +-0.708275 0.721436 10.135997 88730592.000000 +-0.248854 0.647258 10.549955 88830504.000000 +-0.650848 0.541974 9.755538 88930672.000000 +-0.344566 0.835095 10.453046 89030968.000000 +-0.293121 0.912862 10.256834 89130544.000000 +-0.153141 0.812363 10.204191 89230664.000000 +-0.108873 0.635294 9.996017 89330728.000000 +-0.329013 0.628116 9.968499 89430544.000000 +-0.116052 0.762114 10.436296 89530680.000000 +-0.388834 0.533599 10.199407 89630512.000000 +-0.227318 0.331406 10.319048 89730560.000000 +-0.650848 0.500100 10.195816 89830528.000000 +-0.206979 0.448654 10.180264 89930544.000000 +-0.217747 0.478565 10.150353 90030544.000000 +-0.226122 0.319442 9.929017 90130528.000000 +-0.338584 0.453440 10.165908 90230520.000000 +-0.510868 0.327817 10.268798 90330696.000000 +-0.506082 0.285942 10.181459 90430640.000000 +-0.363709 0.478565 10.284351 90530984.000000 +-0.189033 0.360120 10.247264 90630552.000000 +-0.576670 0.440279 10.996217 90730736.000000 +-1.392623 0.118445 12.747763 90831000.000000 +-0.083749 1.308874 16.910078 90930528.000000 +0.004786 0.064606 11.936595 91030552.000000 +-0.391227 -0.230907 6.978668 91130520.000000 +-0.216550 1.185644 6.803991 91230616.000000 +2.784049 0.788435 6.863811 91330544.000000 +2.522035 1.354338 8.933603 91431040.000000 +2.423929 1.133002 9.559326 91530544.000000 +2.453840 1.995614 9.964910 91630528.000000 +2.132005 2.023132 10.007980 91730512.000000 +1.491925 1.999203 10.326227 91830640.000000 +1.665405 1.738386 9.950554 91930632.000000 +1.502693 1.570888 8.611769 92030584.000000 +1.185644 1.618744 7.057630 92130664.000000 +1.746760 0.579063 5.046463 92230496.000000 +-0.166301 0.238086 7.265806 92330552.000000 +-0.254836 -0.428315 12.075379 92430536.000000 +-2.549552 0.427119 14.888142 92530520.000000 +-0.659223 0.084945 14.871392 92630504.000000 +-0.597009 0.659223 12.859028 92730544.000000 +-0.386441 0.358923 10.119246 92830528.000000 +-0.120838 0.287139 9.683753 92930664.000000 +-0.033500 0.413958 9.900303 93030712.000000 +-0.740579 0.508475 10.224532 93130552.000000 +-0.162712 0.133998 10.113264 93231256.000000 +-0.474975 -0.074178 10.528419 93330992.000000 +-0.827917 -0.122034 10.090532 93430848.000000 +-0.574277 0.064606 10.437491 93531272.000000 +-1.406980 0.267996 9.483953 93630672.000000 +-1.386641 0.436690 9.778270 93730592.000000 +-0.795613 0.269193 10.200603 93830512.000000 +-0.465404 0.679562 10.999805 93934096.000000 +-0.643669 0.400798 10.025927 94035488.000000 +-0.985843 0.284746 10.222138 94137736.000000 +-0.556331 0.111266 10.315458 94235744.000000 +-0.987039 0.449851 10.438687 94335800.000000 +-1.024128 0.208176 9.583255 94435552.000000 +-0.774078 0.396012 10.662418 94537936.000000 +-1.281357 0.179462 9.858429 94635592.000000 +-0.973879 0.516850 10.516455 94735632.000000 +-0.780060 0.528814 9.954143 94835608.000000 +-0.957129 0.253639 10.484153 94935888.000000 +-0.954736 0.241675 9.814162 95035552.000000 +-0.678365 0.453440 10.494920 95135816.000000 +-0.646062 0.246461 10.194620 95236008.000000 +-0.720240 0.339781 10.295119 95335536.000000 +-1.054038 0.313460 10.125229 95435600.000000 +-0.963111 0.145962 10.095319 95535672.000000 +-1.123430 0.142373 10.182656 95635576.000000 +-0.823131 0.199801 10.003194 95735592.000000 +-0.857827 0.363709 10.241282 95835616.000000 +-0.870987 0.284746 10.244871 95935600.000000 +-1.268196 0.218943 10.232906 96135616.000000 +-0.825524 0.269193 10.130014 96335456.000000 +-0.982254 0.223729 10.096515 96435608.000000 +-0.721436 0.256032 10.469796 96535688.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/gyro.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/gyro.txt new file mode 100755 index 0000000..0e4dd90 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/gyro.txt @@ -0,0 +1,171 @@ +1.890000 0.472500 -0.472500 79401624.000000 +-0.752500 6.947500 -31.867500 79500520.000000 +-7.577500 -0.647500 2.712500 79600568.000000 +-2.870000 -0.892500 1.785000 79700520.000000 +-5.390000 -0.892500 3.010000 79800488.000000 +-4.795000 0.437500 2.747500 79900520.000000 +-6.527500 0.717500 3.185000 80000472.000000 +-5.757500 0.367500 3.552500 80100512.000000 +-4.270000 0.962500 3.412500 80200584.000000 +-5.425000 0.367500 2.222500 80300520.000000 +-4.480000 0.087500 2.677500 80400640.000000 +-5.617500 0.612500 2.695000 80500560.000000 +-7.595000 2.852500 0.332500 80600496.000000 +-6.002500 -0.717500 1.767500 80700488.000000 +-1.925000 -0.017500 4.095000 80800544.000000 +-5.250000 -0.052500 4.480000 80900624.000000 +-5.075000 3.027500 2.572500 81000464.000000 +-6.912500 1.277500 2.222500 81100472.000000 +-4.777500 -0.262500 3.640000 81200488.000000 +-5.530000 -0.367500 4.410000 81300456.000000 +-4.917500 -0.052500 3.272500 81400560.000000 +-8.977500 -0.577500 4.497500 81500472.000000 +-12.092500 6.387500 5.862500 81600528.000000 +-15.400000 7.227500 16.887501 81700552.000000 +-15.067500 -4.777500 40.302502 81800456.000000 +-2.800000 0.927500 47.652500 81900448.000000 +6.387500 4.042500 29.505001 82000520.000000 +15.785000 5.757500 10.412500 82100480.000000 +0.402500 -3.097500 6.615000 82200352.000000 +-5.337500 -3.272500 -0.315000 82300576.000000 +-7.577500 0.577500 -0.962500 82400544.000000 +-6.737500 0.927500 2.310000 82500496.000000 +-3.517500 6.037500 -1.802500 82600840.000000 +-9.730000 -1.032500 -7.857500 82700696.000000 +-15.312500 -11.917500 -15.697500 82800472.000000 +-8.050000 -8.207500 -34.160000 82901168.000000 +-14.910000 -7.472500 -45.500000 83000552.000000 +7.997500 7.017500 -36.942501 83101192.000000 +-8.225000 -5.442500 -15.995000 83200464.000000 +1.050000 4.357500 -3.727500 83300520.000000 +-12.740000 3.657500 0.962500 83400488.000000 +-7.227500 2.502500 1.085000 83500480.000000 +-7.402500 0.122500 0.997500 83600488.000000 +-1.557500 0.507500 7.105000 83700456.000000 +-4.060000 -1.102500 5.372500 83800456.000000 +-11.515000 -0.472500 4.567500 83900696.000000 +-3.745000 0.857500 1.575000 84000544.000000 +-5.757500 0.262500 0.297500 84100472.000000 +-10.780000 -3.622500 1.295000 84200512.000000 +-3.640000 1.802500 3.220000 84300504.000000 +-3.202500 0.052500 4.497500 84400464.000000 +-4.217500 1.732500 5.687500 84500496.000000 +-2.117500 1.802500 4.567500 84600632.000000 +-7.787500 0.857500 4.007500 84700488.000000 +-4.760000 1.242500 2.397500 84800504.000000 +-5.845000 0.507500 3.290000 84900456.000000 +-5.302500 0.227500 2.485000 85010784.000000 +-3.832500 0.857500 1.330000 85111504.000000 +-5.757500 0.437500 2.292500 85210320.000000 +-5.495000 0.927500 3.780000 85310520.000000 +-8.382500 3.657500 5.442500 85410712.000000 +-6.422500 -3.762500 8.067500 85510520.000000 +-6.212500 2.047500 3.045000 85610576.000000 +-6.860000 1.487500 1.925000 85710528.000000 +-4.847500 0.262500 2.100000 85810488.000000 +-3.727500 1.522500 2.275000 85910584.000000 +-3.902500 0.542500 4.217500 86010544.000000 +-4.392500 0.682500 4.165000 86110472.000000 +-8.837500 0.437500 2.992500 86210600.000000 +-12.145000 7.752500 4.585000 86310544.000000 +1.050000 6.282500 8.627500 86410496.000000 +-16.957500 -18.007500 3.605000 86510536.000000 +-18.725000 -38.027500 -21.717501 86610512.000000 +-16.292500 -31.937500 -66.815002 86711120.000000 +4.970000 -1.452500 -46.602501 86810448.000000 +29.085001 16.047501 -5.005000 86910488.000000 +-1.680000 13.982500 2.362500 87010520.000000 +-5.950000 5.057500 5.967500 87110392.000000 +-4.042500 8.347500 -3.657500 87210544.000000 +-6.825000 0.157500 11.287500 87310536.000000 +-10.797500 4.217500 0.507500 87410520.000000 +-25.707500 0.332500 18.637501 87510448.000000 +-25.637501 -5.057500 26.985001 87610408.000000 +-1.645000 -19.897501 -7.752500 87710576.000000 +9.957500 25.567499 26.582500 87810472.000000 +25.059999 24.482500 29.977501 87910480.000000 +-15.925000 9.082500 33.477501 88010496.000000 +-3.937500 6.737500 5.792500 88110368.000000 +-2.975000 -1.872500 2.502500 88210512.000000 +-3.850000 -2.362500 0.367500 88310496.000000 +-3.955000 0.507500 2.940000 88410712.000000 +-9.205000 0.647500 5.530000 88510480.000000 +-5.005000 2.572500 4.550000 88610544.000000 +-7.752500 -0.297500 3.325000 88710504.000000 +-10.027500 1.347500 5.267500 88810488.000000 +-2.240000 0.787500 -0.192500 88910472.000000 +-6.702500 -0.052500 2.397500 89010488.000000 +-5.757500 -0.507500 3.937500 89110376.000000 +-4.602500 0.017500 4.847500 89210480.000000 +-4.830000 -0.507500 4.270000 89310496.000000 +-4.847500 2.537500 2.730000 89410368.000000 +-10.132500 0.227500 5.407500 89510480.000000 +-7.945000 -1.662500 2.397500 89610544.000000 +-10.360000 1.662500 3.990000 89710464.000000 +-9.765000 0.227500 3.570000 89810456.000000 +-5.145000 -0.122500 3.710000 89910696.000000 +-5.600000 2.012500 4.340000 90010464.000000 +-4.532500 0.192500 5.075000 90110464.000000 +-8.592500 -1.137500 5.670000 90210536.000000 +-7.875000 2.187500 5.495000 90310464.000000 +-4.200000 2.502500 1.417500 90410464.000000 +-5.495000 0.752500 1.592500 90510496.000000 +-4.392500 -1.522500 4.357500 90610368.000000 +-4.970000 2.502500 1.592500 90710464.000000 +-5.075000 2.012500 2.940000 90810496.000000 +-5.827500 -0.262500 3.115000 90910376.000000 +-30.380001 -15.977500 18.252501 91010456.000000 +20.072500 -26.267500 -2.187500 91110544.000000 +9.712500 -23.537500 -30.344999 91210472.000000 +19.512501 -35.332500 -14.945000 91310456.000000 +14.315001 -22.767500 2.310000 91410672.000000 +-5.722500 -16.852501 -5.845000 91510464.000000 +1.172500 -4.882500 -5.705000 91610464.000000 +0.997500 1.452500 1.190000 91710512.000000 +-1.400000 7.017500 7.350000 91810480.000000 +-5.180000 4.882500 4.620000 91910456.000000 +-1.802500 -0.927500 3.552500 92010544.000000 +-4.707500 0.052500 3.587500 92110472.000000 +-7.717500 13.072500 9.957500 92210480.000000 +-33.687500 32.182499 -5.670000 92310496.000000 +-49.682499 35.367500 21.192499 92410464.000000 +-32.357502 43.382500 14.822500 92510464.000000 +-33.442501 16.327499 12.915000 92610520.000000 +-12.722500 0.857500 -0.472500 92710480.000000 +10.412500 -5.232500 -5.687500 92810464.000000 +8.382500 -5.897500 -1.907500 92910712.000000 +0.350000 -2.327500 0.087500 93010464.000000 +-4.480000 2.957500 1.820000 93110584.000000 +-7.420000 3.272500 7.525000 93210544.000000 +-7.035000 5.967500 7.630000 93310512.000000 +-7.367500 2.327500 3.972500 93410496.000000 +-6.440000 3.062500 3.255000 93510536.000000 +6.562500 8.662500 3.675000 93610504.000000 +-1.365000 1.977500 2.380000 93710504.000000 +-7.472500 3.657500 6.667500 93810600.000000 +-10.885000 3.307500 9.117500 93910464.000000 +-0.035000 4.952500 4.130000 94010408.000000 +-7.507500 -0.752500 2.047500 94110528.000000 +-3.535000 3.202500 2.905000 94210376.000000 +-9.695000 -2.117500 0.980000 94310464.000000 +-4.077500 -0.577500 0.997500 94410440.000000 +-6.632500 2.397500 3.360000 94510504.000000 +0.927500 3.202500 0.997500 94610408.000000 +-7.787500 0.122500 1.050000 94710544.000000 +-4.165000 -0.297500 0.717500 94810512.000000 +-7.630000 -0.192500 2.835000 94910520.000000 +-4.147500 1.277500 2.607500 95010512.000000 +-10.885000 -0.647500 0.192500 95110544.000000 +-4.882500 -0.647500 0.857500 95210496.000000 +-7.157500 0.087500 2.765000 95310400.000000 +-5.582500 0.052500 2.747500 95410544.000000 +-5.862500 0.612500 4.042500 95510600.000000 +-6.825000 -0.577500 2.345000 95610480.000000 +-5.057500 0.437500 1.365000 95710520.000000 +-5.250000 0.297500 2.800000 95910608.000000 +-4.830000 1.172500 3.675000 96010536.000000 +-6.580000 -1.137500 3.220000 96110512.000000 +-5.285000 0.857500 3.237500 96210456.000000 +-7.035000 -2.152500 2.170000 96311064.000000 +-3.937500 -0.787500 1.977500 96410512.000000 +-6.615000 0.052500 2.975000 96510488.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/magnetic.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/magnetic.txt new file mode 100755 index 0000000..0e406e9 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_x_y_z/magnetic.txt @@ -0,0 +1,171 @@ +28.125000 -34.937500 -9.000000 79406976.000000 +29.875000 -35.312500 -9.000000 79506976.000000 +29.625000 -35.937500 -9.937500 79606976.000000 +29.000000 -36.250000 -10.000000 79706976.000000 +29.437500 -36.500000 -10.375000 79806976.000000 +29.125000 -36.750000 -10.875000 79906976.000000 +29.562500 -36.625000 -10.375000 80006976.000000 +29.312500 -36.250000 -10.000000 80106976.000000 +29.625000 -36.500000 -10.062500 80206976.000000 +29.250000 -36.562500 -10.187500 80306976.000000 +29.437500 -36.562500 -9.875000 80406976.000000 +29.562500 -36.500000 -9.687500 80506976.000000 +29.437500 -36.500000 -9.687500 80606976.000000 +29.437500 -36.375000 -9.562500 80706976.000000 +29.375000 -36.562500 -9.687500 80806976.000000 +29.437500 -36.625000 -9.750000 80906976.000000 +29.312500 -36.625000 -9.875000 81006976.000000 +29.312500 -36.750000 -9.875000 81106976.000000 +29.375000 -37.062500 -9.812500 81206976.000000 +29.125000 -37.187500 -9.875000 81306976.000000 +29.187500 -37.375000 -9.875000 81406976.000000 +28.937500 -37.562500 -9.750000 81506976.000000 +28.750000 -37.687500 -9.625000 81606976.000000 +28.062500 -37.812500 -9.812500 81706976.000000 +27.000000 -38.125000 -10.125000 81806976.000000 +25.687500 -38.500000 -10.562500 81906976.000000 +23.875000 -38.125000 -11.375000 82006976.000000 +22.625000 -37.625000 -11.937500 82106976.000000 +20.937500 -36.937500 -12.437500 82206976.000000 +19.562500 -36.062500 -13.375000 82306976.000000 +18.187500 -35.312500 -14.125000 82406976.000000 +17.312500 -34.750000 -14.500000 82506976.000000 +16.812500 -33.875000 -14.812500 82606976.000000 +16.750000 -33.562500 -15.250000 82706976.000000 +17.000000 -34.250000 -15.250000 82806976.000000 +17.875000 -34.937500 -14.937500 82906976.000000 +19.625000 -35.687500 -14.437500 83006976.000000 +21.437500 -36.312500 -13.687500 83106976.000000 +23.312500 -36.750000 -13.125000 83206976.000000 +25.250000 -36.937500 -12.625000 83306976.000000 +27.000000 -37.437500 -12.000000 83406976.000000 +28.937500 -37.125000 -11.187500 83506976.000000 +30.937500 -36.500000 -10.687500 83606976.000000 +31.875000 -36.187500 -10.500000 83706976.000000 +32.187500 -35.812500 -10.250000 83806976.000000 +32.312500 -35.875000 -10.375000 83906976.000000 +32.250000 -36.125000 -10.437500 84006976.000000 +32.375000 -35.875000 -10.625000 84106976.000000 +32.437500 -35.875000 -10.687500 84206976.000000 +32.500000 -36.062500 -10.625000 84306976.000000 +32.312500 -36.062500 -10.687500 84406976.000000 +32.437500 -36.000000 -10.750000 84506976.000000 +32.312500 -36.062500 -10.937500 84606976.000000 +32.125000 -36.250000 -10.812500 84706976.000000 +32.250000 -35.812500 -10.875000 84806976.000000 +31.937500 -36.125000 -10.812500 84906976.000000 +31.937500 -36.312500 -10.687500 85006976.000000 +31.125000 -36.125000 -10.187500 85106976.000000 +30.750000 -36.062500 -9.875000 85206976.000000 +30.625000 -36.000000 -9.750000 85306976.000000 +30.562500 -36.000000 -9.687500 85406976.000000 +30.437500 -35.937500 -9.562500 85506976.000000 +30.250000 -36.187500 -9.375000 85606976.000000 +30.187500 -36.187500 -9.312500 85706976.000000 +30.000000 -36.125000 -9.125000 85806976.000000 +30.312500 -36.250000 -9.687500 85906976.000000 +30.500000 -36.312500 -9.750000 86006976.000000 +30.312500 -36.250000 -9.750000 86106976.000000 +30.125000 -36.375000 -9.562500 86206976.000000 +30.187500 -36.375000 -9.625000 86306976.000000 +30.062500 -36.437500 -9.562500 86406976.000000 +30.062500 -36.562500 -9.562500 86506976.000000 +30.750000 -36.250000 -10.000000 86606976.000000 +31.812500 -35.437500 -10.187500 86706976.000000 +32.937500 -34.500000 -10.375000 86806976.000000 +34.187500 -33.687500 -10.250000 86906976.000000 +35.687500 -32.750000 -10.312500 87006976.000000 +36.937500 -31.750000 -10.125000 87106976.000000 +38.437500 -30.750000 -9.875000 87206976.000000 +39.625000 -29.875000 -9.812500 87306976.000000 +40.187500 -29.250000 -9.437500 87406976.000000 +40.312500 -29.375000 -9.062500 87506976.000000 +40.062500 -29.875000 -9.125000 87606976.000000 +39.687500 -30.437500 -9.562500 87706976.000000 +38.625000 -31.187500 -9.687500 87806976.000000 +37.500000 -32.000000 -9.687500 87906976.000000 +35.937500 -32.812500 -9.812500 88006976.000000 +34.625000 -33.687500 -9.562500 88106976.000000 +33.312500 -34.562500 -9.437500 88206976.000000 +32.437500 -35.125000 -9.375000 88306976.000000 +31.750000 -35.437500 -8.937500 88406976.000000 +30.875000 -35.750000 -8.562500 88506976.000000 +30.437500 -36.062500 -8.500000 88606976.000000 +30.125000 -36.250000 -8.625000 88706976.000000 +30.312500 -36.250000 -8.562500 88806976.000000 +30.375000 -36.312500 -8.687500 88906976.000000 +30.437500 -36.437500 -8.687500 89006976.000000 +30.187500 -36.562500 -8.750000 89106976.000000 +30.187500 -36.625000 -8.625000 89206976.000000 +30.250000 -36.625000 -8.562500 89306976.000000 +30.187500 -36.562500 -8.500000 89406976.000000 +30.187500 -36.625000 -8.562500 89506976.000000 +30.187500 -36.750000 -8.625000 89606976.000000 +29.937500 -36.812500 -8.625000 89706976.000000 +29.875000 -36.875000 -8.687500 89806976.000000 +29.750000 -36.875000 -8.625000 89906976.000000 +29.562500 -36.875000 -9.000000 90006976.000000 +29.312500 -36.875000 -9.000000 90106976.000000 +29.062500 -36.937500 -9.375000 90206976.000000 +29.000000 -36.812500 -9.312500 90306976.000000 +28.812500 -36.875000 -9.375000 90406976.000000 +29.062500 -36.875000 -9.437500 90506976.000000 +29.000000 -36.562500 -9.500000 90606976.000000 +29.000000 -36.750000 -9.687500 90706976.000000 +28.875000 -36.937500 -9.500000 90806976.000000 +28.750000 -37.125000 -9.687500 90906976.000000 +29.000000 -37.062500 -9.562500 91006976.000000 +29.250000 -36.812500 -9.875000 91106976.000000 +29.625000 -36.500000 -9.750000 91206976.000000 +29.937500 -36.062500 -9.875000 91306976.000000 +30.250000 -36.000000 -10.125000 91406976.000000 +30.937500 -35.625000 -10.312500 91506976.000000 +31.500000 -35.187500 -10.625000 91606976.000000 +32.312500 -34.937500 -10.750000 91706976.000000 +32.625000 -34.562500 -10.625000 91806976.000000 +32.875000 -34.500000 -10.437500 91906976.000000 +32.937500 -34.625000 -10.437500 92006976.000000 +32.687500 -34.750000 -10.375000 92106976.000000 +32.437500 -34.812500 -10.000000 92206976.000000 +32.000000 -34.937500 -9.562500 92306976.000000 +31.625000 -35.187500 -9.312500 92406976.000000 +30.937500 -35.312500 -9.437500 92506976.000000 +30.500000 -35.750000 -9.812500 92606976.000000 +30.125000 -36.125000 -10.187500 92706976.000000 +29.687500 -36.187500 -10.625000 92806976.000000 +29.437500 -36.312500 -10.812500 92906976.000000 +29.375000 -36.312500 -11.312500 93006976.000000 +29.062500 -36.437500 -11.750000 93106976.000000 +29.125000 -36.562500 -12.000000 93206976.000000 +29.125000 -36.562500 -11.875000 93306976.000000 +29.000000 -36.500000 -11.562500 93406976.000000 +29.187500 -36.500000 -11.250000 93506976.000000 +29.187500 -36.750000 -10.750000 93606976.000000 +29.125000 -36.750000 -10.500000 93706976.000000 +28.937500 -36.875000 -10.250000 93806976.000000 +28.937500 -36.937500 -10.000000 93906976.000000 +28.812500 -36.875000 -9.875000 94006976.000000 +28.562500 -37.062500 -9.812500 94106976.000000 +28.500000 -37.125000 -9.562500 94206976.000000 +28.125000 -37.312500 -9.625000 94306976.000000 +28.000000 -37.062500 -9.687500 94406976.000000 +28.062500 -37.250000 -9.625000 94506976.000000 +28.000000 -37.437500 -9.375000 94606976.000000 +28.000000 -37.500000 -9.312500 94706976.000000 +28.000000 -37.625000 -9.000000 94806976.000000 +28.125000 -37.750000 -8.812500 94906976.000000 +28.187500 -37.750000 -9.000000 95006976.000000 +28.250000 -37.562500 -8.937500 95106976.000000 +28.312500 -37.625000 -8.875000 95206976.000000 +28.062500 -37.500000 -9.000000 95306976.000000 +28.312500 -37.500000 -9.187500 95406976.000000 +28.250000 -37.500000 -9.312500 95506976.000000 +28.125000 -37.687500 -9.625000 95606976.000000 +28.312500 -37.437500 -9.687500 95706976.000000 +28.250000 -37.375000 -9.875000 95806976.000000 +28.312500 -37.500000 -9.875000 95906976.000000 +28.312500 -37.625000 -9.937500 96006976.000000 +28.500000 -37.687500 -10.062500 96106976.000000 +28.500000 -37.625000 -10.250000 96206976.000000 +28.625000 -37.500000 -10.250000 96306976.000000 +28.812500 -37.250000 -10.312500 96506976.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/accel.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/accel.txt new file mode 100755 index 0000000..9acc487 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/accel.txt @@ -0,0 +1,128 @@ +0.153141 0.454636 10.515260 109665472.000000 +0.108873 0.634098 10.139585 109765600.000000 +0.189033 0.559920 10.084551 109865656.000000 +0.228515 0.495314 9.969695 109965520.000000 +0.172283 0.485743 10.375278 110065440.000000 +0.234497 0.483350 10.375278 110166232.000000 +0.165105 0.498904 10.151550 110265384.000000 +0.153141 0.470190 10.084551 110365376.000000 +0.320638 0.624527 10.317852 110465408.000000 +0.265603 0.622134 10.210175 110565424.000000 +1.861616 0.105284 10.219746 110665392.000000 +2.836691 -0.396012 10.454242 110765376.000000 +2.161915 0.058624 10.593026 110865376.000000 +-1.399801 -0.269193 8.100902 110965384.000000 +-4.444668 -0.687937 8.457432 111065376.000000 +-2.726621 0.020339 9.690931 111165384.000000 +-1.488336 -0.378066 8.909675 111265464.000000 +0.092124 0.635294 9.595219 111365376.000000 +-0.507278 0.435494 9.541381 111465384.000000 +0.267996 0.574277 10.584651 111565384.000000 +-0.327817 0.311067 9.997212 111665384.000000 +0.330210 0.407976 10.577473 111765376.000000 +-0.144766 0.435494 9.992428 111865416.000000 +0.083749 0.538385 9.960124 111965408.000000 +-0.118445 0.661615 10.109675 112065376.000000 +-1.399801 0.721436 9.052048 112165368.000000 +-1.792224 0.514457 11.009377 112265384.000000 +-3.908676 -0.452243 10.165908 112365384.000000 +-0.926022 -0.813560 8.383254 112465376.000000 +3.533003 0.081356 9.623933 112565384.000000 +2.178665 0.090927 10.151550 112665384.000000 +0.690329 0.441476 10.764113 112765472.000000 +0.635294 0.540778 10.922039 112865384.000000 +-0.284746 0.451047 10.169496 112965384.000000 +-0.178265 0.329013 10.078569 113065384.000000 +-0.311067 0.250050 9.925428 113165384.000000 +0.265603 0.445065 9.993625 113265376.000000 +0.043071 0.281157 10.170692 113365384.000000 +0.407976 0.436690 10.278370 113465384.000000 +0.269193 0.497707 10.110871 113565384.000000 +0.150748 0.492921 9.986445 113665384.000000 +0.287139 0.418744 9.830912 113765392.000000 +0.285942 0.321835 10.602598 113865384.000000 +0.177069 0.299103 9.978070 113965384.000000 +0.492921 0.295514 10.394422 114065384.000000 +2.598605 0.075374 9.767502 114165384.000000 +3.771089 0.173480 11.480762 114265456.000000 +3.842873 -0.379262 10.625329 114365928.000000 +-3.887140 -1.731207 8.994620 114465520.000000 +-5.313262 1.588834 10.996217 114565616.000000 +-0.390030 0.445065 7.659425 114665560.000000 +0.617348 1.037289 11.568101 114765536.000000 +0.552742 0.857827 10.850254 114865536.000000 +-0.136391 0.502493 9.881162 114965368.000000 +0.004786 0.553938 10.253245 115065400.000000 +0.595813 0.415155 10.254441 115165408.000000 +-0.439083 0.445065 9.390633 115265400.000000 +-0.878166 0.775275 10.319048 115365416.000000 +-2.500499 -0.017946 8.932407 115465376.000000 +-2.785245 0.168694 10.895718 115565408.000000 +-0.180658 -1.030110 8.970692 115665416.000000 +2.967100 0.557528 9.706485 115765448.000000 +1.501496 0.358923 8.957531 115865360.000000 +-0.362513 0.165105 10.792826 115965376.000000 +-1.071985 0.262014 10.459028 116065360.000000 +-0.757328 0.440279 9.755538 116165536.000000 +-0.364905 0.467797 10.216157 116265376.000000 +-0.696311 0.315853 9.665807 116365384.000000 +-0.209372 0.507278 10.851451 116465368.000000 +0.045464 0.290728 10.431510 116565400.000000 +0.126820 0.220140 10.068997 116665376.000000 +0.245264 0.327817 10.027123 116765376.000000 +0.380459 0.289532 9.783055 116865376.000000 +1.060020 0.477368 9.926624 116965376.000000 +2.135594 0.250050 10.225728 117065368.000000 +6.082555 -0.917647 11.399406 117165408.000000 +-0.842274 0.349352 9.494720 117265504.000000 +-5.557331 -1.740778 7.099504 117365384.000000 +-6.290731 1.612763 11.675778 117465384.000000 +-0.273978 -0.745364 9.221939 117565376.000000 +1.665405 -0.550349 10.439885 117665384.000000 +-0.352941 0.178265 9.480364 117765376.000000 +0.022732 0.324227 9.450454 117865416.000000 +-0.143569 0.551546 10.616954 117965384.000000 +-0.515653 0.390030 9.749557 118065384.000000 +-0.226122 0.313460 10.526026 118165432.000000 +-0.464208 0.262014 10.424332 118265408.000000 +-0.787239 0.355334 9.725628 118365384.000000 +-0.997807 0.235693 10.256834 118465384.000000 +-5.715257 -0.029910 9.846465 118565456.000000 +-5.871986 -1.435694 7.805387 118665368.000000 +5.534599 0.440279 11.954542 118765472.000000 +0.697508 0.031107 8.725428 118865384.000000 +1.994418 0.928415 11.016556 118965384.000000 +0.872184 0.841077 10.170692 119065384.000000 +0.236889 0.555135 9.741181 119165376.000000 +-0.677169 0.567099 9.773483 119265400.000000 +-0.123230 1.149751 10.770095 119365408.000000 +-0.248854 1.162912 10.375278 119465448.000000 +-0.655633 1.154537 10.655239 119565552.000000 +0.669990 0.946361 10.158729 119665472.000000 +0.557528 0.908076 9.900303 119765480.000000 +0.120838 0.794417 9.986445 119865472.000000 +-0.028714 0.738186 9.931411 119965464.000000 +0.035892 0.698704 10.281959 120065488.000000 +0.096909 0.656830 10.540384 120165456.000000 +0.083749 0.750150 10.433903 120265616.000000 +0.199801 0.638884 10.289137 120365464.000000 +0.266800 0.313460 10.435099 120465472.000000 +0.169890 0.509671 9.909874 120565472.000000 +0.302692 0.413958 9.882358 120665472.000000 +0.369691 0.433101 10.064213 120765472.000000 +0.190229 0.278764 9.923036 120865520.000000 +0.107677 0.273978 10.692327 120965464.000000 +0.279960 0.223729 10.150353 121065472.000000 +-0.128016 0.418744 9.713664 121165456.000000 +-0.099302 0.514457 10.025927 121265472.000000 +-0.135194 0.406780 10.437491 121365464.000000 +-0.019143 0.453440 10.516455 121465472.000000 +-0.020339 0.417548 10.144372 121565528.000000 +-0.029910 0.410369 9.839286 121665472.000000 +-0.023928 0.425922 10.132407 121765568.000000 +-0.282353 0.381655 9.900303 121865472.000000 +-0.133998 0.288335 10.010373 121965448.000000 +0.154337 0.303888 10.092925 122065528.000000 +-0.011964 0.276371 10.249657 122165888.000000 +0.003589 0.220140 10.013963 122265448.000000 +0.283549 0.334995 10.491331 122365512.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/gyro.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/gyro.txt new file mode 100755 index 0000000..860e091 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/gyro.txt @@ -0,0 +1,128 @@ +1.890000 0.472500 -0.472500 109620704.000000 +-1.470000 -3.307500 -30.835001 109720408.000000 +-4.182500 -0.717500 3.430000 109820512.000000 +-5.162500 0.157500 3.185000 109920608.000000 +-6.510000 -0.052500 3.097500 110020624.000000 +-5.180000 -0.297500 3.640000 110120432.000000 +-4.550000 0.017500 3.220000 110220384.000000 +-5.180000 0.437500 2.835000 110320384.000000 +-5.670000 -1.032500 2.695000 110420384.000000 +-5.547500 -1.802500 4.095000 110520416.000000 +-11.917500 -6.877500 8.750000 110620384.000000 +-14.595000 1.872500 -10.027500 110720384.000000 +-8.155000 -15.137500 -11.200000 110820384.000000 +7.945000 0.052500 -19.879999 110920384.000000 +-3.640000 30.957500 -57.505001 111020384.000000 +-30.309999 -14.332500 -42.752499 111120464.000000 +9.905000 12.127500 -12.092500 111220376.000000 +1.890000 4.777500 0.577500 111320368.000000 +6.090000 5.267500 0.087500 111420384.000000 +-6.282500 -1.557500 4.077500 111520392.000000 +-7.315000 -1.767500 2.957500 111620384.000000 +-6.895000 -3.237500 3.237500 111720384.000000 +-3.045000 0.332500 -0.735000 111820384.000000 +-3.360000 -0.577500 1.242500 111920408.000000 +-5.757500 -1.837500 1.820000 112020400.000000 +-6.772500 4.707500 -3.185000 112120392.000000 +-26.337500 19.547501 0.000000 112220376.000000 +-6.335000 2.327500 20.877501 112320376.000000 +11.007500 -6.562500 29.855000 112420376.000000 +-23.065001 3.377500 40.180000 112520392.000000 +-4.217500 0.507500 20.020000 112620456.000000 +7.017500 -11.497500 -13.282500 112720392.000000 +-4.322500 3.692500 -2.135000 112820376.000000 +-1.015000 -6.457500 -4.707500 112920384.000000 +-7.875000 -5.687500 3.237500 113020384.000000 +-8.837500 -5.092500 1.872500 113120384.000000 +-5.845000 -1.732500 6.125000 113220384.000000 +-2.082500 -3.412500 4.515000 113320376.000000 +-2.992500 0.752500 3.850000 113420704.000000 +-2.747500 -2.992500 2.677500 113520392.000000 +-5.687500 -0.227500 3.395000 113620384.000000 +-4.427500 0.787500 6.527500 113720384.000000 +-9.782500 -0.682500 5.285000 113820384.000000 +-5.915000 2.957500 3.500000 113920384.000000 +-7.192500 2.012500 5.705000 114020384.000000 +-5.005000 -4.707500 13.212500 114120456.000000 +-0.612500 -9.467500 32.392502 114220376.000000 +-23.082500 -19.862499 29.855000 114320624.000000 +6.072500 -8.452500 -15.820000 114420472.000000 +21.735001 -18.287500 -89.022499 114520512.000000 +-22.645000 3.762500 -103.687500 114620480.000000 +10.902500 28.787500 -26.320000 114720456.000000 +-36.610001 1.802500 20.860001 114820504.000000 +-10.360000 6.842500 16.764999 114920384.000000 +-3.850000 -1.277500 6.387500 115020368.000000 +-6.790000 -1.767500 2.607500 115120368.000000 +-0.420000 -2.572500 4.095000 115220376.000000 +1.627500 0.647500 -0.507500 115320376.000000 +-14.490000 -3.447500 2.152500 115420360.000000 +-3.325000 19.897501 0.822500 115520384.000000 +-28.139999 14.367500 17.500000 115620448.000000 +6.002500 37.502499 32.305000 115720424.000000 +-12.022500 -5.302500 24.850000 115820408.000000 +12.232500 -2.852500 4.952500 115920416.000000 +-10.167500 -22.172501 16.117500 116020416.000000 +-8.452500 -9.362500 5.582500 116120632.000000 +0.542500 -7.577500 4.392500 116220408.000000 +-8.995000 -3.937500 1.225000 116320384.000000 +-4.847500 -6.667500 -1.032500 116420376.000000 +-10.640000 5.407500 0.770000 116520416.000000 +-4.795000 1.277500 3.185000 116620368.000000 +-2.782500 2.467500 2.922500 116720376.000000 +-5.285000 0.052500 4.707500 116820368.000000 +-3.412500 0.472500 5.862500 116920384.000000 +-7.122500 2.887500 7.297500 117020376.000000 +-13.422500 14.752501 22.504999 117120560.000000 +-16.852501 -4.812500 8.487500 117220416.000000 +8.907500 -28.507500 -40.564999 117320392.000000 +35.892502 17.867500 -23.327499 117420376.000000 +-39.777500 -36.417500 -57.994999 117520416.000000 +-5.302500 9.957500 -8.750000 117620384.000000 +-23.625000 6.807500 20.440001 117720384.000000 +4.532500 17.587500 -3.850000 117820392.000000 +3.850000 3.587500 -2.187500 117920400.000000 +2.450000 4.357500 -2.747500 118020400.000000 +-7.892500 2.152500 1.120000 118120384.000000 +-5.810000 4.007500 1.960000 118220408.000000 +-0.175000 8.872500 1.732500 118320376.000000 +-4.217500 9.467500 5.705000 118420384.000000 +-8.487500 9.327500 -1.872500 118520392.000000 +3.150000 -10.937500 22.960001 118620456.000000 +-24.622499 -34.352501 56.420002 118720416.000000 +20.965000 21.017500 19.547501 118820400.000000 +-7.472500 3.657500 0.735000 118920376.000000 +-0.805000 -1.872500 9.362500 119020376.000000 +-1.820000 -7.787500 10.150000 119120384.000000 +2.607500 -2.607500 2.992500 119220376.000000 +-0.700000 0.437500 4.287500 119320376.000000 +-0.070000 -8.172500 2.415000 119420472.000000 +-0.962500 5.512500 1.207500 119520504.000000 +-6.860000 0.227500 8.067500 119620504.000000 +-12.635000 1.137500 6.090000 119720512.000000 +-10.972500 -1.067500 2.432500 119820464.000000 +-8.715000 1.242500 3.132500 119920512.000000 +-10.272500 1.102500 2.012500 120020504.000000 +-8.260000 1.137500 1.977500 120120640.000000 +-9.222500 1.977500 2.240000 120220472.000000 +-8.715000 5.267500 3.465000 120320504.000000 +-14.892500 -4.637500 6.527500 120420504.000000 +-4.112500 -1.032500 5.442500 120520504.000000 +-3.255000 0.122500 7.000000 120620496.000000 +-6.632500 -0.682500 5.005000 120720480.000000 +-6.930000 2.012500 2.082500 120820464.000000 +-9.520000 -1.207500 2.695000 120920488.000000 +-3.010000 -4.462500 3.517500 121020472.000000 +-0.612500 -4.742500 4.007500 121120480.000000 +-6.457500 1.697500 3.972500 121220472.000000 +-7.017500 1.942500 2.327500 121320480.000000 +-5.897500 1.207500 2.625000 121420464.000000 +-3.272500 -1.522500 2.362500 121520512.000000 +-2.327500 0.157500 1.627500 121620568.000000 +-6.772500 -0.367500 2.695000 121720480.000000 +-5.635000 0.612500 3.622500 121820496.000000 +-9.292500 -2.012500 6.265000 121920480.000000 +-6.982500 1.522500 4.025000 122020472.000000 +-5.547500 -0.087500 2.625000 122120744.000000 +-4.550000 -1.067500 3.237500 122221168.000000 +-6.790000 -1.907500 2.747500 122320592.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/magnetic.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/magnetic.txt new file mode 100755 index 0000000..e334e50 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_y/magnetic.txt @@ -0,0 +1,127 @@ +23.562500 -37.437500 -13.750000 109624992.000000 +23.625000 -37.687500 -13.375000 109724992.000000 +23.375000 -38.812500 -12.625000 109824992.000000 +23.187500 -38.437500 -12.875000 109924992.000000 +23.062500 -38.687500 -13.000000 110024992.000000 +22.687500 -38.812500 -12.875000 110124992.000000 +22.500000 -38.750000 -12.812500 110224992.000000 +22.812500 -38.437500 -12.875000 110324992.000000 +22.875000 -38.625000 -12.750000 110424992.000000 +22.687500 -38.625000 -12.625000 110524992.000000 +22.687500 -38.625000 -12.812500 110624992.000000 +22.750000 -38.750000 -13.375000 110724992.000000 +22.812500 -39.375000 -13.375000 110824992.000000 +23.937500 -40.500000 -13.437500 110924992.000000 +26.312500 -40.875000 -13.187500 111024992.000000 +29.187500 -41.062500 -13.062500 111124992.000000 +32.125000 -41.062500 -12.625000 111224992.000000 +35.125000 -41.125000 -12.250000 111324992.000000 +38.250000 -41.062500 -11.375000 111424992.000000 +41.250000 -41.062500 -10.312500 111524992.000000 +44.125000 -40.312500 -9.312500 111624992.000000 +46.062500 -39.250000 -8.687500 111724992.000000 +46.750000 -38.625000 -8.437500 111824992.000000 +46.812500 -38.437500 -7.812500 111924992.000000 +46.625000 -38.437500 -7.687500 112024992.000000 +46.562500 -38.250000 -7.562500 112124992.000000 +46.000000 -38.437500 -8.125000 112224992.000000 +44.500000 -38.750000 -8.875000 112324992.000000 +42.000000 -38.812500 -9.687500 112424992.000000 +39.500000 -38.437500 -10.250000 112524992.000000 +37.375000 -38.125000 -10.812500 112624992.000000 +35.250000 -37.812500 -11.437500 112724992.000000 +33.062500 -37.500000 -12.000000 112824992.000000 +31.062500 -37.125000 -12.375000 112924992.000000 +29.187500 -36.437500 -12.562500 113024992.000000 +28.375000 -35.562500 -12.500000 113124992.000000 +28.562500 -35.000000 -12.500000 113224992.000000 +28.750000 -34.750000 -12.625000 113324992.000000 +28.750000 -34.750000 -12.562500 113424992.000000 +28.437500 -34.625000 -12.750000 113524992.000000 +28.312500 -34.500000 -12.687500 113624992.000000 +28.062500 -34.437500 -12.937500 113724992.000000 +28.000000 -34.437500 -13.000000 113824992.000000 +27.937500 -34.500000 -13.062500 113924992.000000 +27.750000 -34.812500 -13.125000 114024992.000000 +27.437500 -35.125000 -13.000000 114124992.000000 +26.375000 -35.625000 -13.250000 114224992.000000 +26.062500 -36.375000 -13.875000 114324992.000000 +26.937500 -37.750000 -14.000000 114424992.000000 +29.500000 -37.687500 -13.687500 114524992.000000 +32.312500 -36.875000 -13.062500 114624992.000000 +35.062500 -35.937500 -12.437500 114724992.000000 +38.000000 -35.437500 -11.750000 114824992.000000 +40.687500 -34.812500 -11.187500 114924992.000000 +44.000000 -33.875000 -10.625000 115024992.000000 +46.937500 -32.625000 -9.375000 115124992.000000 +48.812500 -30.937500 -8.937500 115224992.000000 +49.000000 -30.625000 -8.812500 115324992.000000 +48.562500 -31.000000 -8.875000 115424992.000000 +48.125000 -32.187500 -9.312500 115524992.000000 +46.250000 -33.062500 -9.875000 115624992.000000 +44.375000 -33.375000 -10.375000 115724992.000000 +42.437500 -33.687500 -10.750000 115824992.000000 +40.375000 -33.875000 -11.437500 115924992.000000 +38.125000 -33.937500 -11.937500 116024992.000000 +35.812500 -34.437500 -12.312500 116124992.000000 +33.625000 -34.312500 -12.875000 116224992.000000 +31.687500 -33.562500 -13.187500 116324992.000000 +30.937500 -32.750000 -13.125000 116424992.000000 +30.750000 -32.687500 -13.125000 116524992.000000 +30.625000 -32.562500 -13.125000 116624992.000000 +30.625000 -32.500000 -13.250000 116724992.000000 +30.625000 -32.625000 -13.125000 116824992.000000 +30.625000 -32.312500 -13.062500 116924992.000000 +30.687500 -32.437500 -13.125000 117024992.000000 +30.312500 -32.875000 -13.250000 117124992.000000 +30.562500 -33.875000 -13.500000 117224992.000000 +32.562500 -34.687500 -13.062500 117324992.000000 +34.812500 -34.500000 -12.625000 117424992.000000 +37.062500 -34.312500 -12.000000 117524992.000000 +39.062500 -34.187500 -11.562500 117624992.000000 +41.562500 -34.187500 -11.250000 117724992.000000 +43.875000 -34.000000 -10.500000 117824992.000000 +46.437500 -33.562500 -9.500000 117924992.000000 +48.687500 -32.187500 -8.562500 118024992.000000 +49.125000 -31.125000 -8.312500 118124992.000000 +49.187500 -31.187500 -8.062500 118224992.000000 +49.187500 -31.062500 -7.750000 118324992.000000 +49.562500 -31.000000 -7.562500 118424992.000000 +49.125000 -31.250000 -7.125000 118524992.000000 +48.250000 -32.125000 -7.437500 118624992.000000 +46.062500 -32.875000 -8.312500 118724992.000000 +43.625000 -33.812500 -8.875000 118824992.000000 +41.375000 -34.375000 -9.312500 118924992.000000 +38.937500 -34.875000 -10.125000 119024992.000000 +36.375000 -35.562500 -11.000000 119124992.000000 +33.750000 -35.875000 -11.375000 119224992.000000 +31.375000 -36.125000 -12.000000 119324992.000000 +30.000000 -35.687500 -12.062500 119424992.000000 +29.750000 -35.625000 -11.625000 119524992.000000 +29.750000 -35.500000 -11.687500 119624992.000000 +29.437500 -35.562500 -12.187500 119724992.000000 +29.312500 -35.625000 -12.062500 119824992.000000 +29.375000 -35.687500 -12.000000 119924992.000000 +29.375000 -36.000000 -12.312500 120024992.000000 +29.500000 -36.000000 -12.687500 120124992.000000 +29.375000 -36.062500 -12.875000 120224992.000000 +29.500000 -36.062500 -13.062500 120324992.000000 +29.437500 -35.812500 -13.250000 120424992.000000 +29.250000 -35.750000 -13.062500 120524992.000000 +29.062500 -35.750000 -13.375000 120624992.000000 +28.875000 -35.750000 -13.437500 120724992.000000 +28.625000 -35.437500 -13.562500 120824992.000000 +28.562500 -35.500000 -13.750000 120924992.000000 +28.250000 -35.437500 -13.875000 121024992.000000 +27.937500 -35.375000 -14.187500 121124992.000000 +27.625000 -35.562500 -14.250000 121224992.000000 +27.625000 -35.812500 -14.500000 121324992.000000 +27.625000 -35.812500 -14.562500 121424992.000000 +27.687500 -36.062500 -14.562500 121524992.000000 +27.625000 -36.250000 -14.500000 121624992.000000 +27.375000 -36.312500 -14.250000 121724992.000000 +27.375000 -36.375000 -14.500000 121824992.000000 +27.312500 -36.562500 -14.625000 121924992.000000 +27.000000 -36.500000 -14.625000 122124992.000000 +26.937500 -36.625000 -14.687500 122224992.000000 +26.812500 -36.437500 -14.812500 122324992.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/accel.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/accel.txt new file mode 100755 index 0000000..15d5d71 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/accel.txt @@ -0,0 +1,183 @@ +0.114855 0.102891 10.100104 728390400.000000 +0.151944 0.129212 10.143176 728490496.000000 +0.173480 0.104088 10.150353 728590528.000000 +0.122034 0.133998 10.140782 728690624.000000 +0.156730 0.132802 10.161121 728790528.000000 +0.147159 0.131605 10.182656 728890752.000000 +0.142373 0.106481 10.177871 728990528.000000 +0.159123 0.112463 10.155140 729090560.000000 +0.162712 0.099302 10.180264 729190528.000000 +0.167498 0.130409 10.177871 729290560.000000 +0.141177 0.111266 10.226924 729390464.000000 +0.136391 0.135194 10.147961 729490624.000000 +0.125623 0.126820 10.126426 729590528.000000 +0.159123 0.144766 10.164711 729690624.000000 +0.150748 0.142373 10.170692 729790464.000000 +0.100499 0.129212 10.141978 729890560.000000 +0.144766 0.125623 10.181459 729990464.000000 +0.111266 0.126820 10.182656 730090560.000000 +0.145962 0.144766 10.182656 730190464.000000 +0.139980 0.142373 10.161121 730290560.000000 +0.162712 0.148355 10.185050 730390592.000000 +0.133998 0.131605 10.150353 730490560.000000 +0.161516 0.135194 10.224532 730590528.000000 +0.173480 0.118445 10.141978 730690496.000000 +0.161516 0.101695 10.205389 730790464.000000 +0.143569 0.141177 10.198210 730890560.000000 +0.306281 0.189033 10.171888 730990528.000000 +0.131605 0.107677 10.244871 731090560.000000 +0.356531 -0.010768 10.868200 731190464.000000 +-0.674776 -0.307478 11.479566 731290560.000000 +-1.259821 -0.903291 10.462617 731390464.000000 +0.027517 -1.137787 11.156535 731490560.000000 +0.582652 -0.853041 11.491530 731590464.000000 +-1.030110 0.177069 12.045469 731690496.000000 +-0.200997 0.760918 11.010573 731790464.000000 +2.090131 0.801596 10.954341 731890688.000000 +1.016950 1.293321 8.823533 731990464.000000 +1.440479 1.213161 7.247860 732090624.000000 +1.186840 1.259821 7.633104 732190528.000000 +1.561317 1.173679 7.854440 732290560.000000 +0.555135 1.507478 8.353344 732390528.000000 +1.018146 0.671187 9.801002 732490560.000000 +0.979861 0.613759 8.854640 732590464.000000 +1.360320 0.873380 10.094121 732690496.000000 +-0.666401 0.574277 10.467402 732790528.000000 +-0.692722 0.229711 11.028521 732890496.000000 +-1.375873 -0.089731 11.320443 732990528.000000 +0.844666 -0.863809 12.251251 733090496.000000 +-2.315056 -0.794417 9.308081 733190464.000000 +0.312263 -0.059821 10.158729 733290560.000000 +0.180658 0.066999 10.152746 733390592.000000 +0.168694 0.063410 10.192227 733490560.000000 +0.132802 0.086142 10.451849 733590464.000000 +0.175872 0.099302 10.217353 733690496.000000 +0.175872 0.111266 10.128819 733790464.000000 +0.203390 0.101695 10.192227 733890496.000000 +0.169890 0.105284 10.161121 733990528.000000 +0.187837 0.078963 10.214959 734090560.000000 +0.178265 0.123230 10.153944 734190464.000000 +0.196211 0.083749 10.173084 734290496.000000 +0.202193 0.089731 10.174281 734390464.000000 +0.173480 0.106481 10.161121 734490560.000000 +0.195015 0.113659 10.208978 734590464.000000 +0.148355 0.086142 10.094121 734690560.000000 +0.132802 0.089731 10.120443 734790464.000000 +0.187837 0.108873 10.140782 734890688.000000 +0.123230 0.102891 10.189835 734990464.000000 +0.117248 0.093320 10.179067 735090560.000000 +0.099302 0.101695 10.198210 735190464.000000 +0.211765 0.050249 10.346564 735290496.000000 +0.075374 -0.802792 13.761123 735390464.000000 +-0.675972 -0.771685 13.362719 735490560.000000 +-0.530010 -1.214357 12.378072 735590464.000000 +0.291924 -1.441676 11.819347 735690560.000000 +1.306481 -0.300299 8.915657 735790464.000000 +2.524428 0.113659 6.929615 735890560.000000 +2.382055 0.105284 6.480960 735990528.000000 +1.475175 0.677169 8.743374 736090560.000000 +2.380858 0.324227 7.613962 736190528.000000 +1.101895 0.343370 10.085747 736290560.000000 +-0.486939 0.385244 6.634101 736390592.000000 +0.480957 0.218943 8.067402 736490560.000000 +-0.171087 0.265603 8.874979 736590464.000000 +0.977468 -0.196211 11.708081 736690560.000000 +-0.522832 -1.200001 11.339586 736790528.000000 +-0.368495 -1.123430 14.310277 736890560.000000 +0.178265 -0.297906 8.699106 736990464.000000 +1.338784 -0.218943 10.252048 737090560.000000 +0.212961 0.111266 9.987641 737190464.000000 +0.133998 0.117248 10.151550 737290496.000000 +0.122034 0.122034 10.162319 737390528.000000 +0.156730 0.122034 10.201799 737490560.000000 +0.145962 0.123230 10.135997 737590528.000000 +0.149551 0.151944 10.141978 737690560.000000 +0.156730 0.131605 10.171888 737790464.000000 +0.162712 0.136391 10.138390 737890752.000000 +0.124427 0.145962 10.162319 737990464.000000 +0.154337 0.143569 10.134801 738090496.000000 +0.136391 0.143569 10.193424 738190464.000000 +0.148355 0.150748 10.140782 738290496.000000 +0.136391 0.139980 10.177871 738390464.000000 +0.175872 0.150748 10.159925 738490560.000000 +0.150748 0.104088 10.167104 738590528.000000 +0.160319 0.111266 10.141978 738690560.000000 +0.169890 0.128016 10.219746 738790464.000000 +0.174676 0.150748 10.137194 738890560.000000 +0.133998 0.149551 10.162319 738990528.000000 +0.022732 0.096909 10.223334 739090560.000000 +0.157926 0.122034 10.144372 739190528.000000 +0.047856 -0.118445 10.191031 739290496.000000 +0.320638 -0.303888 10.345367 739390592.000000 +-1.144966 -1.384248 14.679967 739490560.000000 +1.143769 -0.887737 16.286747 739590464.000000 +2.104487 -2.044667 13.148561 739690560.000000 +1.125823 -1.150948 10.589437 739790464.000000 +0.806381 -0.260818 5.862415 739890496.000000 +0.047856 0.905683 3.601198 739990528.000000 +2.098505 1.256232 4.718646 740090560.000000 +0.898505 1.452443 9.875179 740190528.000000 +1.935793 0.964308 9.655040 740290560.000000 +0.744168 1.144966 9.658628 740390464.000000 +-1.048056 2.019542 7.960921 740490496.000000 +1.263410 1.606780 7.347162 740590464.000000 +1.014557 0.915255 8.461020 740690496.000000 +1.438086 -0.137587 10.022337 740790528.000000 +1.764707 -0.253639 10.748559 740890688.000000 +1.592424 -0.662812 11.239087 740990464.000000 +0.569492 -0.896112 15.446867 741090624.000000 +-0.277567 -0.739382 12.169895 741190528.000000 +1.149751 -0.326620 12.220145 741290560.000000 +0.650848 0.111266 10.157533 741390464.000000 +-0.440279 -0.381655 11.070394 741490496.000000 +0.124427 0.151944 10.195816 741590528.000000 +0.126820 0.133998 10.175477 741690560.000000 +0.132802 0.132802 10.156336 741790464.000000 +0.148355 0.123230 10.156336 741890496.000000 +0.130409 0.145962 10.180264 741990528.000000 +0.173480 0.131605 10.171888 742090560.000000 +0.136391 0.133998 10.156336 742190464.000000 +0.145962 0.144766 10.153944 742290496.000000 +0.165105 0.144766 10.152746 742390592.000000 +0.122034 0.143569 10.174281 742490560.000000 +0.159123 0.131605 10.150353 742590464.000000 +0.150748 0.122034 10.188639 742690560.000000 +0.135194 0.151944 10.084551 742790464.000000 +0.154337 0.116052 10.169496 742890496.000000 +0.147159 0.150748 10.104890 742990464.000000 +0.156730 0.138784 10.146765 743090560.000000 +0.139980 0.130409 10.193424 743190464.000000 +0.162712 0.154337 10.155140 743290560.000000 +0.148355 0.136391 10.158729 743390528.000000 +0.144766 0.149551 10.127622 743490560.000000 +0.155533 0.136391 10.189835 743590528.000000 +0.153141 0.166301 10.173084 743690560.000000 +0.151944 0.154337 10.135997 743790464.000000 +0.151944 0.154337 10.163515 743890688.000000 +0.148355 0.168694 10.135997 743990464.000000 +0.138784 0.139980 10.173084 744090496.000000 +0.132802 0.173480 10.191031 744190464.000000 +0.163908 0.142373 10.158729 744290496.000000 +0.112463 0.153141 10.141978 744390464.000000 +0.157926 0.144766 10.199407 744490560.000000 +0.144766 0.122034 10.163515 744590528.000000 +0.149551 0.154337 10.118051 744690560.000000 +0.143569 0.119641 10.164711 744790464.000000 +0.167498 0.144766 10.128819 744890560.000000 +0.156730 0.122034 10.146765 744990464.000000 +0.150748 0.163908 10.171888 745090496.000000 +0.139980 0.132802 10.199407 745190528.000000 +0.133998 0.150748 10.188639 745290560.000000 +0.126820 0.142373 10.106087 745390656.000000 +0.147159 0.155533 10.174281 745490560.000000 +0.144766 0.154337 10.137194 745590464.000000 +0.160319 0.139980 10.133603 745690496.000000 +0.148355 0.157926 10.146765 745790528.000000 +0.163908 0.155533 10.162319 745890496.000000 +0.130409 0.169890 10.173084 745990464.000000 +0.137587 0.157926 10.150353 746090560.000000 +0.126820 0.123230 10.176675 746190464.000000 +0.149551 0.154337 10.100104 746290560.000000 +0.141177 0.156730 10.149158 746390464.000000 +0.163908 0.167498 10.126426 746490560.000000 +0.157926 0.112463 10.113264 746590464.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/gyro.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/gyro.txt new file mode 100755 index 0000000..d36ffc3 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/gyro.txt @@ -0,0 +1,183 @@ +1.890000 0.472500 -0.472500 728335488.000000 +-1.855000 1.417500 -34.177502 728435456.000000 +-4.830000 0.087500 2.222500 728535488.000000 +-4.795000 0.087500 2.222500 728635520.000000 +-4.795000 0.087500 2.257500 728735488.000000 +-4.847500 0.122500 2.275000 728835456.000000 +-4.847500 0.122500 2.275000 728935488.000000 +-4.847500 0.122500 2.275000 729035456.000000 +-4.812500 0.122500 2.292500 729135488.000000 +-4.865000 0.122500 2.240000 729235456.000000 +-4.882500 0.122500 2.240000 729335488.000000 +-4.847500 0.122500 2.240000 729435456.000000 +-4.847500 0.122500 2.257500 729535488.000000 +-4.865000 0.122500 2.275000 729635520.000000 +-4.847500 0.087500 2.257500 729735488.000000 +-4.865000 0.087500 2.257500 729835584.000000 +-4.865000 0.087500 2.257500 729935552.000000 +-4.830000 0.122500 2.257500 730035520.000000 +-4.847500 -0.262500 2.257500 730135488.000000 +-4.865000 0.122500 2.275000 730235456.000000 +-4.830000 0.367500 2.275000 730335488.000000 +-4.830000 0.192500 2.275000 730435456.000000 +-4.742500 -1.662500 2.310000 730535488.000000 +-4.602500 -0.227500 2.240000 730635456.000000 +-4.795000 0.647500 2.205000 730735488.000000 +-4.917500 2.642500 1.330000 730835456.000000 +-5.425000 2.537500 -0.805000 730935488.000000 +-6.195000 1.872500 -0.892500 731035456.000000 +-12.145000 -0.857500 1.382500 731135488.000000 +-34.107502 -6.352500 -4.462500 731235456.000000 +-2.642500 2.327500 -0.210000 731335680.000000 +-7.665000 -6.282500 3.290000 731435456.000000 +-3.920000 -1.767500 0.332500 731535552.000000 +11.427500 4.532500 1.382500 731635520.000000 +28.174999 -9.117500 11.987500 731735552.000000 +19.985001 -17.412500 11.707500 731835520.000000 +38.255001 -28.682501 -2.047500 731935552.000000 +11.112500 -6.142500 -6.317500 732035520.000000 +1.417500 -8.627500 -6.650000 732135488.000000 +-6.405000 2.537500 2.975000 732235456.000000 +-2.712500 10.762500 6.720000 732335488.000000 +-29.575001 12.512500 16.047501 732435456.000000 +-23.537500 19.652500 24.710001 732535488.000000 +-5.687500 11.427500 18.934999 732635456.000000 +-12.057500 22.102501 3.447500 732735552.000000 +-28.070000 15.837500 -12.372500 732835584.000000 +-32.584999 7.717500 -10.307500 732935552.000000 +-27.177500 2.607500 -8.907500 733035456.000000 +-20.195000 -5.442500 -9.730000 733135488.000000 +27.072500 -29.102501 -18.707500 733235456.000000 +-1.610000 3.412500 -3.937500 733335488.000000 +-3.745000 3.482500 3.412500 733435520.000000 +-3.675000 0.787500 5.022500 733535488.000000 +-4.270000 -3.027500 2.397500 733635456.000000 +-4.567500 2.012500 2.082500 733735488.000000 +-4.707500 -0.122500 2.240000 733835456.000000 +-4.760000 -0.052500 2.240000 733935488.000000 +-4.777500 -0.017500 2.275000 734035456.000000 +-4.795000 -0.052500 2.257500 734135488.000000 +-4.812500 -0.017500 2.275000 734235456.000000 +-4.847500 0.017500 2.275000 734335680.000000 +-4.830000 0.052500 2.257500 734435456.000000 +-4.882500 0.367500 2.257500 734535488.000000 +-4.795000 1.522500 2.170000 734635456.000000 +-4.812500 0.927500 2.257500 734735488.000000 +-4.830000 0.437500 2.292500 734835456.000000 +-4.847500 -0.332500 2.275000 734935488.000000 +-4.830000 0.332500 2.292500 735035456.000000 +-4.812500 1.767500 2.275000 735135488.000000 +-5.162500 2.257500 2.222500 735235456.000000 +-8.277500 2.467500 6.475000 735335488.000000 +-43.365002 2.817500 20.160000 735435456.000000 +-44.362499 2.537500 3.710000 735535488.000000 +-6.230000 -5.932500 4.812500 735635520.000000 +-12.740000 -28.717501 4.445000 735735488.000000 +71.294998 -37.852501 10.062500 735835584.000000 +33.670002 -28.332500 -1.452500 735935488.000000 +6.615000 2.922500 -6.072500 736035456.000000 +-12.897500 3.797500 -9.590000 736135488.000000 +14.157500 1.382500 8.890000 736235456.000000 +-23.467501 8.382500 15.382500 736335488.000000 +28.035000 17.342501 21.472500 736435456.000000 +-20.510000 34.562500 10.745000 736535552.000000 +-32.707500 14.297500 2.257500 736635520.000000 +-44.747501 33.407501 2.257500 736735488.000000 +-7.910000 5.442500 -14.962500 736835456.000000 +-44.467499 -6.387500 -10.640000 736935488.000000 +61.635002 -23.642500 -4.007500 737035456.000000 +-5.145000 -4.917500 -2.275000 737135552.000000 +-2.117500 6.877500 -9.502500 737235520.000000 +-4.392500 1.382500 2.257500 737335680.000000 +-4.637500 0.052500 2.275000 737435456.000000 +-4.672500 0.227500 2.275000 737535488.000000 +-4.777500 0.122500 2.292500 737635456.000000 +-4.777500 0.087500 2.275000 737735488.000000 +-4.847500 0.087500 2.292500 737835456.000000 +-4.847500 0.052500 2.292500 737935488.000000 +-4.812500 0.087500 2.292500 738035456.000000 +-4.830000 0.087500 2.327500 738135488.000000 +-4.847500 0.087500 2.310000 738235520.000000 +-4.830000 0.052500 2.327500 738335488.000000 +-4.847500 0.122500 2.292500 738435456.000000 +-4.830000 0.122500 2.292500 738535488.000000 +-4.847500 0.122500 2.275000 738635456.000000 +-4.847500 0.087500 2.275000 738735488.000000 +-4.865000 0.087500 2.275000 738835584.000000 +-4.795000 0.997500 2.240000 738935488.000000 +-4.760000 -0.717500 1.715000 739035456.000000 +-4.620000 0.017500 0.612500 739135552.000000 +-5.530000 0.262500 4.480000 739235456.000000 +-16.607500 5.757500 6.947500 739335488.000000 +-52.920002 46.707500 9.047500 739435456.000000 +-39.235001 -31.657499 26.075001 739535488.000000 +-1.680000 -62.072502 21.805000 739635456.000000 +17.692499 -41.807499 4.077500 739735488.000000 +52.884998 -52.447498 -19.145000 739835456.000000 +31.325001 -15.347500 -28.525000 739935488.000000 +47.915001 33.617500 -2.467500 740035520.000000 +-18.760000 3.342500 -5.127500 740135552.000000 +-4.690000 5.862500 5.845000 740235520.000000 +-25.200001 4.497500 0.577500 740335744.000000 +0.962500 9.887500 16.152500 740435456.000000 +25.585001 23.537500 38.867500 740535552.000000 +-21.629999 18.637501 23.415001 740635456.000000 +-44.152500 19.862499 15.715000 740735552.000000 +-26.565001 32.462502 8.190000 740835456.000000 +-16.695000 14.892500 -13.912500 740935488.000000 +-37.205002 3.517500 -21.822500 741035520.000000 +-13.947500 -1.802500 -18.514999 741135488.000000 +18.305000 3.867500 -3.675000 741235456.000000 +15.330000 -23.432501 -1.347500 741335488.000000 +0.437500 4.602500 -5.215000 741435456.000000 +-3.867500 5.057500 -3.395000 741535488.000000 +-4.585000 0.297500 2.257500 741635456.000000 +-4.690000 0.052500 2.292500 741735488.000000 +-4.742500 0.052500 2.257500 741835584.000000 +-4.760000 0.052500 2.275000 741935488.000000 +-4.812500 0.052500 2.292500 742035456.000000 +-4.760000 0.087500 2.310000 742135488.000000 +-4.830000 0.052500 2.240000 742235456.000000 +-4.847500 0.052500 2.275000 742335488.000000 +-4.865000 0.052500 2.292500 742435520.000000 +-4.830000 0.087500 2.292500 742535488.000000 +-4.830000 0.087500 2.292500 742635456.000000 +-4.830000 0.087500 2.275000 742735488.000000 +-4.900000 0.087500 2.292500 742835456.000000 +-4.952500 0.087500 2.275000 742935552.000000 +-4.900000 0.087500 2.292500 743035520.000000 +-4.865000 0.122500 2.275000 743135488.000000 +-4.865000 0.052500 2.275000 743235456.000000 +-4.847500 0.087500 2.310000 743335616.000000 +-4.847500 0.087500 2.292500 743435456.000000 +-4.865000 0.087500 2.257500 743535488.000000 +-4.882500 0.157500 2.292500 743635456.000000 +-4.865000 0.122500 2.275000 743735488.000000 +-4.847500 0.122500 2.310000 743835456.000000 +-4.865000 0.122500 2.257500 743935488.000000 +-4.882500 0.122500 2.292500 744035520.000000 +-4.900000 0.122500 2.275000 744135552.000000 +-4.865000 0.122500 2.257500 744235520.000000 +-4.865000 0.087500 2.275000 744335488.000000 +-4.882500 0.087500 2.275000 744435520.000000 +-4.882500 0.122500 2.257500 744535488.000000 +-4.900000 0.122500 2.310000 744635520.000000 +-4.900000 0.087500 2.257500 744735488.000000 +-4.865000 0.122500 2.275000 744835584.000000 +-4.847500 0.122500 2.292500 744935488.000000 +-4.865000 0.122500 2.275000 745035520.000000 +-4.847500 0.087500 2.275000 745135488.000000 +-4.882500 0.087500 2.292500 745235456.000000 +-4.847500 0.087500 2.292500 745335488.000000 +-4.865000 0.122500 2.257500 745435456.000000 +-4.847500 0.122500 2.275000 745535552.000000 +-4.882500 0.087500 2.257500 745635456.000000 +-4.865000 0.087500 2.292500 745735488.000000 +-4.882500 0.122500 2.275000 745835456.000000 +-4.865000 0.122500 2.257500 745935488.000000 +-4.830000 0.122500 2.327500 746035456.000000 +-4.882500 0.122500 2.292500 746135488.000000 +-4.830000 0.122500 2.292500 746235456.000000 +-4.865000 0.122500 2.275000 746335616.000000 +-4.882500 0.122500 2.257500 746435456.000000 +-4.882500 0.087500 2.345000 746535488.000000 diff --git a/src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/magnetic.txt b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/magnetic.txt new file mode 100755 index 0000000..eab1c61 --- /dev/null +++ b/src/sensor_fusion/design/data/100ms/linear_acceleration/move_z/magnetic.txt @@ -0,0 +1,183 @@ +23.562500 -36.687500 -14.812500 728340864.000000 +23.750000 -36.562500 -15.312500 728440896.000000 +24.000000 -37.687500 -15.562500 728540864.000000 +24.000000 -36.812500 -15.250000 728640896.000000 +24.562500 -36.812500 -15.375000 728740864.000000 +24.312500 -36.750000 -15.437500 728840896.000000 +24.437500 -36.187500 -15.562500 728940864.000000 +24.250000 -36.687500 -15.437500 729040896.000000 +24.437500 -36.812500 -15.312500 729140864.000000 +24.687500 -36.875000 -15.375000 729240896.000000 +24.687500 -36.687500 -15.250000 729340864.000000 +24.875000 -36.875000 -15.125000 729440896.000000 +24.937500 -36.937500 -15.187500 729540864.000000 +25.125000 -37.000000 -15.062500 729640896.000000 +25.125000 -37.000000 -14.937500 729740864.000000 +25.125000 -37.000000 -14.937500 729840896.000000 +25.000000 -36.812500 -15.375000 729940864.000000 +25.000000 -36.875000 -15.062500 730040896.000000 +25.250000 -36.687500 -15.312500 730140864.000000 +25.062500 -36.625000 -15.500000 730240896.000000 +24.875000 -36.562500 -15.562500 730340864.000000 +24.812500 -36.500000 -15.500000 730440896.000000 +24.875000 -36.437500 -15.625000 730540864.000000 +24.812500 -36.562500 -15.750000 730640896.000000 +24.875000 -36.500000 -15.437500 730740864.000000 +24.750000 -36.312500 -15.250000 730840896.000000 +24.687500 -36.500000 -15.125000 730940864.000000 +24.750000 -36.500000 -15.187500 731040896.000000 +24.687500 -36.625000 -15.187500 731140864.000000 +24.875000 -36.687500 -15.375000 731240896.000000 +24.875000 -36.625000 -15.625000 731340864.000000 +24.875000 -36.500000 -15.750000 731440896.000000 +25.000000 -36.687500 -15.875000 731540864.000000 +25.000000 -37.187500 -15.937500 731640896.000000 +24.812500 -37.812500 -15.312500 731740864.000000 +24.750000 -38.500000 -13.937500 731840896.000000 +25.000000 -38.500000 -12.125000 731940864.000000 +25.375000 -38.687500 -10.500000 732040896.000000 +25.812500 -38.812500 -8.750000 732140864.000000 +26.375000 -38.937500 -7.062500 732240896.000000 +26.437500 -39.000000 -5.312500 732340864.000000 +26.250000 -39.250000 -4.187500 732440896.000000 +25.812500 -39.375000 -3.750000 732540864.000000 +25.187500 -39.625000 -4.312500 732640896.000000 +24.750000 -40.000000 -5.250000 732740864.000000 +24.250000 -40.062500 -6.375000 732840896.000000 +23.812500 -40.125000 -7.812500 732940864.000000 +23.250000 -39.937500 -9.375000 733040896.000000 +23.250000 -39.750000 -11.125000 733140864.000000 +23.625000 -39.062500 -12.375000 733240896.000000 +24.375000 -37.937500 -13.250000 733340864.000000 +25.250000 -37.187500 -14.062500 733440896.000000 +25.625000 -36.687500 -14.812500 733540864.000000 +25.875000 -36.437500 -15.125000 733640896.000000 +26.250000 -36.437500 -15.250000 733740864.000000 +26.437500 -36.562500 -15.312500 733840896.000000 +26.437500 -36.562500 -15.312500 733940864.000000 +26.250000 -36.562500 -15.437500 734040896.000000 +26.250000 -36.937500 -15.750000 734140864.000000 +26.250000 -36.812500 -15.750000 734240896.000000 +26.250000 -36.750000 -15.750000 734340864.000000 +26.187500 -36.750000 -15.750000 734440896.000000 +26.000000 -36.625000 -15.812500 734540864.000000 +26.062500 -36.687500 -15.687500 734640896.000000 +26.062500 -36.625000 -15.750000 734740864.000000 +26.125000 -36.687500 -15.812500 734840896.000000 +26.187500 -36.500000 -15.750000 734940864.000000 +26.250000 -36.500000 -15.687500 735040896.000000 +26.250000 -36.437500 -15.625000 735140864.000000 +26.312500 -36.437500 -15.562500 735240896.000000 +26.312500 -36.312500 -15.687500 735340864.000000 +26.250000 -36.187500 -16.125000 735440896.000000 +26.125000 -36.312500 -16.375000 735540864.000000 +25.625000 -36.937500 -16.937500 735640896.000000 +25.250000 -37.625000 -16.187500 735740864.000000 +25.062500 -38.187500 -15.125000 735840896.000000 +25.375000 -38.437500 -14.062500 735940864.000000 +25.687500 -38.375000 -13.187500 736040896.000000 +25.937500 -38.562500 -11.875000 736140864.000000 +25.937500 -38.812500 -10.187500 736240896.000000 +25.625000 -39.062500 -8.500000 736340864.000000 +25.500000 -39.312500 -6.812500 736440896.000000 +24.937500 -39.312500 -7.000000 736540864.000000 +24.250000 -39.062500 -8.187500 736640896.000000 +23.625000 -38.937500 -9.250000 736740864.000000 +23.000000 -38.812500 -10.625000 736840896.000000 +22.437500 -38.937500 -11.687500 736940864.000000 +22.187500 -38.875000 -12.687500 737040896.000000 +22.500000 -38.312500 -14.125000 737140864.000000 +23.062500 -37.437500 -15.000000 737240896.000000 +23.875000 -36.750000 -15.375000 737340864.000000 +24.625000 -36.500000 -15.375000 737440896.000000 +24.875000 -36.375000 -15.500000 737540864.000000 +24.750000 -36.500000 -14.937500 737640896.000000 +24.812500 -36.562500 -15.062500 737740864.000000 +24.937500 -36.437500 -15.250000 737840896.000000 +24.937500 -36.437500 -15.125000 737940864.000000 +25.062500 -36.437500 -15.312500 738040896.000000 +24.937500 -36.500000 -15.500000 738140864.000000 +24.875000 -36.437500 -15.375000 738240896.000000 +24.875000 -36.562500 -15.375000 738340864.000000 +25.125000 -36.500000 -15.500000 738440896.000000 +25.250000 -36.187500 -15.500000 738540864.000000 +25.375000 -36.375000 -15.562500 738640896.000000 +25.437500 -36.437500 -15.562500 738740864.000000 +25.375000 -36.562500 -15.562500 738840896.000000 +25.437500 -36.562500 -15.500000 738940864.000000 +25.250000 -36.437500 -15.562500 739040896.000000 +25.250000 -36.375000 -15.562500 739140864.000000 +25.125000 -36.375000 -15.375000 739240896.000000 +25.125000 -36.562500 -15.312500 739340864.000000 +25.187500 -36.375000 -15.125000 739440896.000000 +24.625000 -36.375000 -15.750000 739540864.000000 +23.500000 -36.562500 -16.062500 739640896.000000 +22.625000 -37.500000 -16.000000 739740864.000000 +22.687500 -37.812500 -15.375000 739840896.000000 +23.000000 -37.937500 -14.437500 739940864.000000 +23.375000 -38.125000 -13.562500 740040896.000000 +23.750000 -38.125000 -12.562500 740140864.000000 +24.125000 -38.250000 -11.687500 740240896.000000 +24.875000 -38.312500 -10.062500 740340864.000000 +26.125000 -38.187500 -8.375000 740440896.000000 +26.812500 -37.687500 -7.125000 740540864.000000 +25.937500 -38.312500 -6.312500 740640896.000000 +24.437500 -38.937500 -6.562500 740740864.000000 +23.250000 -39.250000 -7.312500 740840896.000000 +22.437500 -39.312500 -8.250000 740940864.000000 +21.500000 -39.375000 -9.250000 741040896.000000 +20.937500 -39.250000 -10.625000 741140864.000000 +20.562500 -39.062500 -12.062500 741240896.000000 +20.625000 -38.562500 -13.687500 741340864.000000 +21.312500 -37.812500 -15.000000 741440896.000000 +22.312500 -37.062500 -15.750000 741540864.000000 +23.000000 -36.562500 -16.062500 741640896.000000 +23.312500 -36.312500 -16.187500 741740864.000000 +23.687500 -36.312500 -16.187500 741840896.000000 +23.875000 -36.375000 -15.750000 741940864.000000 +23.875000 -36.312500 -15.375000 742040896.000000 +23.812500 -36.437500 -15.250000 742140864.000000 +23.937500 -36.437500 -15.062500 742240896.000000 +24.062500 -36.625000 -14.812500 742340864.000000 +23.875000 -36.687500 -14.750000 742440896.000000 +23.812500 -36.875000 -14.625000 742540864.000000 +23.500000 -36.750000 -14.687500 742640896.000000 +23.375000 -36.875000 -15.062500 742740864.000000 +23.500000 -36.937500 -15.312500 742840896.000000 +23.437500 -36.875000 -15.187500 742940864.000000 +23.500000 -36.937500 -15.187500 743040896.000000 +23.500000 -36.937500 -15.437500 743140864.000000 +23.750000 -36.937500 -15.437500 743240896.000000 +23.812500 -37.062500 -15.562500 743340864.000000 +24.125000 -37.000000 -15.375000 743440896.000000 +24.250000 -36.937500 -15.062500 743540864.000000 +24.250000 -37.125000 -14.937500 743640896.000000 +24.500000 -37.187500 -15.250000 743740864.000000 +24.375000 -37.125000 -15.187500 743840896.000000 +24.125000 -37.125000 -14.937500 743940864.000000 +23.937500 -37.062500 -14.937500 744040896.000000 +23.937500 -36.875000 -15.062500 744140864.000000 +23.750000 -36.937500 -15.062500 744240896.000000 +23.687500 -36.812500 -15.062500 744340864.000000 +23.500000 -36.937500 -15.187500 744440896.000000 +23.812500 -36.812500 -15.062500 744540864.000000 +23.875000 -36.937500 -14.937500 744640896.000000 +23.937500 -36.875000 -15.062500 744740864.000000 +23.937500 -36.750000 -15.125000 744840896.000000 +23.875000 -36.937500 -14.937500 744940864.000000 +24.250000 -36.875000 -14.937500 745040896.000000 +24.187500 -36.875000 -15.187500 745140864.000000 +24.125000 -36.812500 -15.250000 745240896.000000 +23.937500 -36.812500 -15.187500 745340864.000000 +23.750000 -36.687500 -15.500000 745440896.000000 +23.875000 -36.625000 -15.375000 745540864.000000 +24.062500 -36.750000 -15.375000 745640896.000000 +23.937500 -36.500000 -15.375000 745740864.000000 +23.687500 -36.562500 -15.312500 745840896.000000 +23.687500 -36.500000 -15.250000 745940864.000000 +23.687500 -36.562500 -15.000000 746040896.000000 +23.687500 -36.375000 -15.062500 746140864.000000 +23.812500 -36.125000 -15.125000 746240896.000000 +23.937500 -36.187500 -15.312500 746340864.000000 +23.812500 -36.125000 -15.250000 746440896.000000 +23.937500 -36.250000 -15.250000 746540864.000000 diff --git a/src/sensor_fusion/design/lib/estimate_gravity.m b/src/sensor_fusion/design/lib/estimate_gravity.m index 5f62c4d..0531a17 100755 --- a/src/sensor_fusion/design/lib/estimate_gravity.m +++ b/src/sensor_fusion/design/lib/estimate_gravity.m @@ -36,10 +36,10 @@ Gravity = zeros(3,BUFFER_SIZE); % estimate orientation [OR_driv, OR_aid, OR_err] = estimate_orientation(Accel_data, Gyro_data, Mag_data); -Gx = GRAVITY * -sind(OR_driv(1,:)); +Gx = GRAVITY * sind(OR_driv(1,:)); Gy = GRAVITY * sind(OR_driv(2,:)); Gz = GRAVITY * cosd(OR_driv(2,:)) .* cosd(OR_driv(1,:)); Gravity = [Gx; Gy; Gz]; -end \ No newline at end of file +end diff --git a/src/sensor_fusion/design/lib/estimate_linear_acceleration.m b/src/sensor_fusion/design/lib/estimate_linear_acceleration.m new file mode 100755 index 0000000..0ac6735 --- /dev/null +++ b/src/sensor_fusion/design/lib/estimate_linear_acceleration.m @@ -0,0 +1,36 @@ +% estimate_linear_acceleration +% +% Copyright (c) 2014 Samsung Electronics Co., Ltd. +% +% Licensed under the Apache License, Version 2.0 (the "License"); +% you may not use this file except in compliance with the License. +% You may obtain a copy of the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, +% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% See the License for the specific language governing permissions and +% limitations under the License. + +% Linear Acceleration Estimation function +% +% - Gravity estimation using the estimate_gravity function +% - compute linear acceleration based gravitational force computed for each axes + +function [Linear_Acceleration] = estimate_linear_acceleration(Accel_data, Gyro_data, Mag_data) + +GRAVITY = 9.80665; + +BUFFER_SIZE = size(Accel_data,2); + +Gravity = zeros(3,BUFFER_SIZE); +Linear_Acceleration = zeros(3,BUFFER_SIZE); + +% estimate orientation +Gravity = estimate_gravity(Accel_data, Gyro_data, Mag_data); + +Linear_Acceleration = Accel_data(1:3,:) - [Gravity(2,:); Gravity(1,:); Gravity(3,:);]; + +end diff --git a/src/sensor_fusion/design/sf_linear_acceleration.m b/src/sensor_fusion/design/sf_linear_acceleration.m new file mode 100755 index 0000000..edb78e0 --- /dev/null +++ b/src/sensor_fusion/design/sf_linear_acceleration.m @@ -0,0 +1,111 @@ +% sf_linear_acceleration +% +% Copyright (c) 2014 Samsung Electronics Co., Ltd. +% +% Licensed under the Apache License, Version 2.0 (the "License"); +% you may not use this file except in compliance with the License. +% You may obtain a copy of the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, +% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% See the License for the specific language governing permissions and +% limitations under the License. + +% Sensor Fusion Implementation for Determination of linear acceleration +% +% - Input Accelerometer, Gyroscope and Magnetometer sensor data +% - Call estimate_linear_acceleration +% - Plot results for linear acceleration on different reference axes + +addpath('lib'); +clear +close all +clc + +GRAVITY = 9.80665; + +Max_Range_Accel = 39.203407; Min_Range_Accel = -39.204006; Res_Accel = 0.000598; +Max_Range_Gyro = 1146.862549; Min_Range_Gyro = -1146.880005; Res_Gyro = 0.017500; +Max_Range_Magnetic = 1200; Min_Range_Magnetic = -1200; Res_Magnetic = 1; + +Bias_Ax = 0.098586; +Bias_Ay = 0.18385; +Bias_Az = 10.084 - GRAVITY; + +Bias_Gx = -5.3539; +Bias_Gy = 0.24325; +Bias_Gz = 2.3391; + +BUFFER_SIZE = 125; + +Accel_data = zeros(4,BUFFER_SIZE); +Gyro_data = zeros(4,BUFFER_SIZE); +Mag_data = zeros(4,BUFFER_SIZE); + +OR_driv = zeros(3,BUFFER_SIZE); +OR_aid = zeros(3,BUFFER_SIZE); +OR_err = zeros(3,BUFFER_SIZE); + +% Sensor Data simulating orientation motions + +% get accel x,y,z axis data from stored file +Accel_data(1,:) = (((dlmread("data/100ms/linear_acceleration/move_x_y_z/accel.txt")(:,1))') - Bias_Ax)(1:BUFFER_SIZE); +Accel_data(2,:) = (((dlmread("data/100ms/linear_acceleration/move_x_y_z/accel.txt")(:,2))') - Bias_Ay)(1:BUFFER_SIZE); +Accel_data(3,:) = (((dlmread("data/100ms/linear_acceleration/move_x_y_z/accel.txt")(:,3))') - Bias_Az)(1:BUFFER_SIZE); +Accel_data(4,:) = ((dlmread("data/100ms/linear_acceleration/move_x_y_z/accel.txt")(:,4))')(1:BUFFER_SIZE); + +% get gyro x,y,z axis data from stored file +Gyro_data(1,:) = (((dlmread("data/100ms/linear_acceleration/move_x_y_z/gyro.txt")(:,1))') - Bias_Gx)(1:BUFFER_SIZE); +Gyro_data(2,:) = (((dlmread("data/100ms/linear_acceleration/move_x_y_z/gyro.txt")(:,2))') - Bias_Gy)(1:BUFFER_SIZE); +Gyro_data(3,:) = (((dlmread("data/100ms/linear_acceleration/move_x_y_z/gyro.txt")(:,3))') - Bias_Gz)(1:BUFFER_SIZE); +Gyro_data(4,:) = ((dlmread("data/100ms/linear_acceleration/move_x_y_z/gyro.txt")(:,4))')(1:BUFFER_SIZE); + +scale_Gyro = 575; +Gyro_data(1,:) = Gyro_data(1,:)/scale_Gyro; +Gyro_data(2,:) = Gyro_data(2,:)/scale_Gyro; +Gyro_data(3,:) = Gyro_data(3,:)/scale_Gyro; + +% get magnetometer x,y,z axis data from stored file +Mag_data(1,:) = (((dlmread("data/100ms/linear_acceleration/move_x_y_z/magnetic.txt")(:,1))'))(1:BUFFER_SIZE); +Mag_data(2,:) = (((dlmread("data/100ms/linear_acceleration/move_x_y_z/magnetic.txt")(:,2))'))(1:BUFFER_SIZE); +Mag_data(3,:) = (((dlmread("data/100ms/linear_acceleration/move_x_y_z/magnetic.txt")(:,3))'))(1:BUFFER_SIZE); +Mag_data(4,:) = ((dlmread("data/100ms/linear_acceleration/move_x_y_z/magnetic.txt")(:,4))')(1:BUFFER_SIZE); + +% estimate orientation +Linear_acceleration = estimate_linear_acceleration(Accel_data, Gyro_data, Mag_data); + +hfig=(figure); +scrsz = get(0,'ScreenSize'); +set(hfig,'position',scrsz); +% Accelerometer Raw data +subplot(2,1,1) +UA = Accel_data(1,:); +p1 = plot(1:length(UA),UA(1,1:length(UA)),'k'); +hold on; +grid on; +UA = Accel_data(2,:); +p2 = plot(1:length(UA),UA(1,1:length(UA)),'b'); +hold on; +grid on; +UA = Accel_data(3,:); +p3 = plot(1:length(UA),UA(1,1:length(UA)),'r'); +title(['Raw Accelerometer Data']); +legend([p1 p2 p3],'x-axis', 'y-axis', 'z-axis'); + +% Linear Acceleration Plot Results +subplot(2,1,2) +UA = Linear_acceleration(1,:); +p1 = plot(1:length(UA),UA(1,1:length(UA)),'k'); +hold on; +grid on; +UA = Linear_acceleration(2,:); +p2 = plot(1:length(UA),UA(1,1:length(UA)),'b'); +hold on; +grid on; +UA = Linear_acceleration(3,:); +p3 = plot(1:length(UA),UA(1,1:length(UA)),'r'); +title(['Linear Acceleration']); +legend([p1 p2 p3],'x-axis', 'y-axis', 'z-axis'); -- 2.7.4 From 9ef1c61e59d278f1792eff338ebc49327557ae12 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Fri, 9 May 2014 13:04:16 +0530 Subject: [PATCH 05/16] Adding results for virtual sensors implementations - adding simulation result plots for orientation, gravity and linear acceleration estimation - corrected octave code for displaying accelerometer plot title in sf_gravity.m file signed-off-by: Ramasamy Change-Id: Ib5f4694660d1f50c0b823c8b9daa44c5f624a059 --- .../gravity/gravity_output_single_roll_throw.png | Bin 0 -> 81851 bytes .../linear_acceleration_on_x_y_z_axis.png | Bin 0 -> 79371 bytes .../corrected_orientation_with_sensor_fusion.png | Bin 0 -> 79806 bytes .../orientation/orientation_without_sensor_fusion.png | Bin 0 -> 145789 bytes src/sensor_fusion/design/sf_gravity.m | 2 ++ 5 files changed, 2 insertions(+) create mode 100755 src/sensor_fusion/design/results/gravity/gravity_output_single_roll_throw.png create mode 100755 src/sensor_fusion/design/results/linear_acceleration/linear_acceleration_on_x_y_z_axis.png create mode 100755 src/sensor_fusion/design/results/orientation/corrected_orientation_with_sensor_fusion.png create mode 100755 src/sensor_fusion/design/results/orientation/orientation_without_sensor_fusion.png diff --git a/src/sensor_fusion/design/results/gravity/gravity_output_single_roll_throw.png b/src/sensor_fusion/design/results/gravity/gravity_output_single_roll_throw.png new file mode 100755 index 0000000000000000000000000000000000000000..1c838092e23f7725ab931f775151144d39daa4f8 GIT binary patch literal 81851 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%0Di$rzZj-t)zl{9pQ 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 WHhf}=JV{w1)GuATn0wy%!G8fOBfXyh literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/results/linear_acceleration/linear_acceleration_on_x_y_z_axis.png b/src/sensor_fusion/design/results/linear_acceleration/linear_acceleration_on_x_y_z_axis.png new file mode 100755 index 0000000000000000000000000000000000000000..addedfb320640337f4a8d3d7ea4956b5b828af84 GIT binary patch literal 79371 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 Gw0ssI2b}wr600001b5ch_0Itp) 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 Date: Tue, 13 May 2014 15:21:51 +0530 Subject: [PATCH 06/16] Adding initial documentation for Sensor Fusion - Adding initial version of sensor fusion document in html format - Added already available information for Orientation Estimation from design document signed-off-by: Ramasamy Change-Id: I35d164d765b8a63a993a7887ab088335eaeb9be3 --- .../block_diagram_orientation_estimation.png | Bin 0 -> 42305 bytes .../design/documentation/kalman_filter_stages.png | Bin 0 -> 21497 bytes .../design/documentation/sensor_fusion.htm | 124 +++++++++++++++++++++ .../design/documentation/state_equation.png | Bin 0 -> 2183 bytes 4 files changed, 124 insertions(+) create mode 100755 src/sensor_fusion/design/documentation/block_diagram_orientation_estimation.png create mode 100755 src/sensor_fusion/design/documentation/kalman_filter_stages.png create mode 100755 src/sensor_fusion/design/documentation/sensor_fusion.htm create mode 100755 src/sensor_fusion/design/documentation/state_equation.png diff --git a/src/sensor_fusion/design/documentation/block_diagram_orientation_estimation.png b/src/sensor_fusion/design/documentation/block_diagram_orientation_estimation.png new file mode 100755 index 0000000000000000000000000000000000000000..7318261f9bfd1d74d82e92964a146625bf3107af GIT binary patch literal 42305 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

Y=tAF-A&Q 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 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/kalman_filter_stages.png b/src/sensor_fusion/design/documentation/kalman_filter_stages.png new file mode 100755 index 0000000000000000000000000000000000000000..75c0547d2041eed7b600ca37e4e4ff8df576c3f1 GIT binary patch literal 21497 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 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/sensor_fusion.htm b/src/sensor_fusion/design/documentation/sensor_fusion.htm new file mode 100755 index 0000000..2cebb98 --- /dev/null +++ b/src/sensor_fusion/design/documentation/sensor_fusion.htm @@ -0,0 +1,124 @@ + +Sensor Fusion for Tizen Sensor Framework + +

Introduction

+ +

Sensor Fusion is the process of combining the accelerometer, +gyroscope, geo-magnetic sensor, GPS data and barometer in order to generate +accurate virtual sensor outputs such as Orientation, Gravity, Linear +Acceleration, Altitude, Pedometer, etc. Sensor Fusion is used for extracting +individual virtual sensor components from composite sensor data and/or +combining multiple sensor data to create new sensor component data while +compensating for individual sensor errors. Ideally the following errors would +have to be corrected during sensor fusion:-

+ +

        - Bias: Any non-zero sensor +output when the input is zero

+ +

        - Scale factor error: error +resulting from aging or manufacturing tolerances

+ +

        - Nonlinearity: Present in +most sensors to some degree

+ +

        - Scale factor sign asymmetry: +Often mismatched push-pull amplifiers

+ +

        - Dead zone: usually due to +mechanical lock-in

+ +

        - Quantization error: inherent +in all digitized systems

+ +

Sensors Used for Sensor Fusion

+ +

Accelerometer Sensor :- Accelerometer data is a combination of linear +acceleration and gravity components. Applications would be interested in using +linear acceleration and gravity sensor data separately. Sensor fusion could be +used to separate linear acceleration and gravity components.  Additionally, +accelerometer is used for correcting the roll and pitch orientation measurements +generated from the gyroscope. Using the same, corrected tilt measurement (roll +and pitch) is generated.

+ +

Gyroscope Sensor :- It is ideal to determine the orientation of the device, +but has the problem of long term drift in the measured sensor values. Sensor +Fusion could be used to combine Accelerometer, Gyroscope and Geomagnetic (Compass) +sensor data to produce corrected orientation data without drift.

+ +

Geo-Magnetic Sensor :- Provides the direction the device is pointed in relation +to the earth's magnetic field. Could be used along with gyroscope angular rotation +along Z axis to produce correct yaw measurement. Geo-Magnetic sensor along with +GPS latitude-longitude measurements could be used to accurately estimate +heading of the device.

+ +

Barometer Sensor :- Measures atmospheric pressure. Height of the device from +sea level could be measured based on change in atmospheric pressure at that height. +Sensor Fusion could also be used to combine the altitude from the GPS data with +height measured from the Barometer measurements and produce corrected altitude +measurements.

+ +

GPS Data :- Provides exact position in terms of latitude, longitude coordinates +and altitude for the phone. Can be used along with barometer for producing +corrected altitude measurements. Could be used along with Geo-magnetic sensor +to determine the heading of a device.

+ +

Orientation Estimation

+ + +

+ +

Driving System

+ +

The gyroscope output data consists for angular rates for pitch, roll and yaw. +Gyroscope angular rates are corrected for bias (both static bias and bias correction +from Kalman filter) and noise using low pass filter. The Gyroscope angular rates are +converted to Quaternions after scaling.

+ +

Aiding System

+ +

The accelerometer and geomagnetic sensor data are corrected +for noise and compensated for static bias. Accelerometer is used to compute +tilt (pitch and roll). The geomagnetic sensor along with the computed tilt data +is used compute yaw. The computed Euler angles (pitch, roll and yaw) are +converted to quaternions.

+ +

Noise Covariance Computation

+ +

The process noise covariance (Q) is calculated by computing +covariance of windowed block of driving system data. The measurement noise +covariance (R) is calculated by computing covariance of windowed block of aiding +system data. The process and measurement covariance computed are to be used in +Kalman filtering.

+ +

Kalman Filtering

+ +

+ +

To ensure linear Kalman filtering the following error state equation is used:

+ +

+ +

,where the first term is the quaternion representation of the Euler angles +error and the next three terms are the error in knowledge of bias errors.

+ +

References

+ +

[1] Gebre-Egziabher, H., Rhayward, R. C. & Powell, J. D. Design +of Multi-Sensor Attitude Determination Systems. IEEE Transactions on +Aerospace and Electronic Systems, (Volume: 40, Issue: 2), 627 - 649 (2004)

+ +

[2] Abyarjoo1, F., Barreto1, A., Cofino1, J. & Ortega, F. R., Implementing +a Sensor Fusion Algorithm for 3D Orientation Detection with Inertial/Magnetic +Sensors. The International Joint Conferences on CISSE (2012)

+ +

[3] Marcard, T. V., Design and Implementation of an attitude estimation system to +control orthopedic components. Chalmers University. Master thesis published on +the university link http://publications.lib.chalmers.se/records/fulltext/125985.pdf(2010)

+ +

[4] Welch, G., Bishop, G. An introduction to the Kalman Filter: SIGGRAPH (2001)

+ +

[5] Grewal, M. S., Weill, L. R., Andrews, A. P., Global Positioning Systems, +Inertial Navigation, and Integration (John Wiley & Sons., 2001)

+ + diff --git a/src/sensor_fusion/design/documentation/state_equation.png b/src/sensor_fusion/design/documentation/state_equation.png new file mode 100755 index 0000000000000000000000000000000000000000..4697a76c27f3a58855bb07a4b057063b36603b6f GIT binary patch literal 2183 zcmV;22zd92P)R32;bRa{vGi!~g&e!~vBn4jTXf02y>eSaefwW^{L9a%BKbX=8G4b8lvJAWvpy zX=7!7?KN=#00;+3L_t(|+U;CBYa2@x*56RA)}8-=Dm7_tlP1L$YFxOx#e#|pDFQAQ z1cAT>!-5DH0%k!F3_-9MLK?$z351IfqzFL>LbwDWf-zzF?#%AYzPwLKtDRNO2P!OC z_MSQCd~;qi9S{fvLQUw<5)cT4x&Ul=U5^t)mGfRAKgkLf=@+Pm29SJ=~!*pS%~ehc{NQn%B^AQ7=7u_uCA zV_{EWS(bR+z*#+1_&Q_5!5GfQJ^WHFObiMNRmJ!YTi0MXKNK^BBE7J@*|}lwU&GV~ zO!g-V%20sK0(KxDdrcjzqN;OOaHjmTOXz(T()XLOGxg<@HI=w8bQ3j|(B4nk=TBiS z?sNa@9tdWQ`Q&d*mk;p=7{9^7&2i$CSGq8VA(-ya!ZJ%QGT-b}tDrYcE=76?e^rFL zNY@&+2>_{+zIlDuc z^X*L2T{)QAi^l2~J3E&bqTXVmRM=fbFKu)_4nIuqY7@+h);_J{LGo?s7uD=#_XuWb zVdxFt3^1~nXicH;ugxdWJYznAW`1f_H|1CfrmSAt>3kAv%*~}tm1_}xLk#LNiohqAA*z`s*9Ba?|@k_hUYLYh0&*VP+}3!D%~z4@1sjz2r%ep}(2TTb9k z+1H*6obKua#!PWtZH$>mCcM%e0a>rC>psR2pH+L|2ijlGt_}^72x38j?$n3ma!aMGyNQEL7|N=Hje6=aoPq4cPdUUJCZ z{Q_%vqTuc>?I&%`xvu_-zaKigzO^ zQr?7X5ZS0=pcVC!limeut=w3>AjQ-*XP=EOBJby&mkEp8yil)B*Haz&6d;%smgQmD z@MVTk^4#(g=Io7U*i|3=@C1`Lel3Yor4*uyUUG~xh+b4Ymz0+RPB4r)Q}%h8V0TxQ zKoyX$(G%uUMKFvgZ?AB9p(&N>RnvmN|0~>;!xc=Jf>D{Buqy+a$x3(F;-wfbQxJ6F#S;^lV7j zB?|@z#aXswjV#bzpd&t4^4gmT>MC|_Ohx(jLooL{%)xMHn}`7*K9ps=OPt4%MbMOi zt$<}muo@mv%U?(qU0I`ujFx}hL1BB^ACejyuW-#L9}hWeQK%QGg9U6kmDv%k>f}`b zY2UG~{6Q{0$tefGb~uZ+orr=AZ z!z0lD@{jemPdG84#+}t-#QaOh*T!Q8X^;mfbzF>XESK2_jTM;W{ap!0R_N16Lqu&} z#B$Ge7z_GfsC3G)-Fk(xAJbVbSsabd1tsNeHRL@mB_e7fn0*sW-i1@KFUV>7*NE0*4#w(y>uEco}h96FUHg4wT? zhWB@PRsGl1EWgjCUf*~{yQF}VRi@EaT z?Hx&a)EtOl2<5P{pdE94DS@Nv9yJIe7($V&MFzUc5399TTz+ezthEiGn{SUO4Lm%E zU Date: Wed, 14 May 2014 08:59:14 +0530 Subject: [PATCH 07/16] Adding info for gravity and linear acceleration Updated information on gravity and linear acceleration virtual sensors design. signed-off-by: Ramasamy Change-Id: I94b0d47d4f51eb8b8eb07eec749d8080d92a2529 --- ...ock_diagram_gravity_and_linear_acceleration.png | Bin 0 -> 21896 bytes .../orientation_effect_on_gravity.png | Bin 0 -> 29060 bytes .../design/documentation/sensor_fusion.htm | 45 ++++++++++++++++++++- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100755 src/sensor_fusion/design/documentation/block_diagram_gravity_and_linear_acceleration.png create mode 100755 src/sensor_fusion/design/documentation/orientation_effect_on_gravity.png diff --git a/src/sensor_fusion/design/documentation/block_diagram_gravity_and_linear_acceleration.png b/src/sensor_fusion/design/documentation/block_diagram_gravity_and_linear_acceleration.png new file mode 100755 index 0000000000000000000000000000000000000000..958e640bc819f9b5f7b8ef5b21a8034379336107 GIT binary patch literal 21896 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 DOVI*v literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/sensor_fusion.htm b/src/sensor_fusion/design/documentation/sensor_fusion.htm index 2cebb98..f7552b4 100755 --- a/src/sensor_fusion/design/documentation/sensor_fusion.htm +++ b/src/sensor_fusion/design/documentation/sensor_fusion.htm @@ -64,9 +64,8 @@ to determine the heading of a device.

Orientation Estimation

-

+width="60%" height="60%">

Driving System

@@ -102,6 +101,48 @@ Kalman filtering.

,where the first term is the quaternion representation of the Euler angles error and the next three terms are the error in knowledge of bias errors.

+

Determination of Gravity

+

When a device is subjected to motion in Euclidean space, the 3D accelerometer +data generated from the device is a combination of linear acceleration and gravity +components which are a measure of linear and rotational motion respectively.The +gravity measurements in 3D space are derived from the orientation (pitch, roll +and yaw) measurements that is output from the Kalman filter. The process to compute +gravity and linear acceleration is shown in figure below. + +

+ +

Gravity virtual sensor data provides the measure of the direction in which the +EarthÂ’s gravitational force is observed in the deviceÂ’s frame of reference. The +orientation of the device decides the measure of the influence of EarthÂ’s gravitational +force on the 3-axes of the device. The following equations are used for projecting +the tilt(pitch, roll) of the device on the EarthÂ’s gravity axis to determine earthÂ’s +gravitational effect on the devices reference axis.

+ +

GRx = EarthÂ’s Gravity * sin(pitch)

+

GRy = EarthÂ’s Gravity * sin(roll)

+

GRz = EarthÂ’s Gravity * cos(pitch) * cos(roll)

+ +

+ +

When the device tilt values (pitch,roll) are changed from (0,0) to (0,Π/2), +phone is rotated around x-axis, the y-axis gets aligned to earth's gravitational field +after rotation instead of the z-axis. When this rotation is applied to the equations +given above, the values (GRx,GRy,GRz) are converted from (0,0,G) to (0,G,0) due to the +shift in the axis which experiences the gravitational field (G is measure of Earth's +gravity).

+ +

Determination of Linear Acceleration

+ +

Linear Acceleration virtual sensor data provides the measure of the acceleration of +a device after removing the Gravity components on the 3-axes. Accurate linear +acceleration data are calculated by subtracting gravity components from the 3-axes +calibrated accelerometer data.

+ +

LAx = Ax – GRy

+

LAy = Ay – GRx

+

LAz = Az – GRz

+

References

[1] Gebre-Egziabher, H., Rhayward, R. C. & Powell, J. D. Design -- 2.7.4 From bd33362eeed1734f935cc2ed23e5bb2a1b264644 Mon Sep 17 00:00:00 2001 From: Amit Dharmapurikar Date: Mon, 12 May 2014 12:14:13 +0530 Subject: [PATCH 08/16] Adding iio_common utility library to be used by sensor plugins The iio_common utility provides common iio interface functions. Signed-off-by: Amit Dharmapurikar Change-Id: Iba582400e9668add099b629b338855b1e30e8786 --- src/shared/CMakeLists.txt | 2 + src/shared/iio_common.cpp | 212 ++++++++++++++++++++++++++++++++++++++++++++++ src/shared/iio_common.h | 46 ++++++++++ 3 files changed, 260 insertions(+) create mode 100644 src/shared/iio_common.cpp create mode 100644 src/shared/iio_common.h diff --git a/src/shared/CMakeLists.txt b/src/shared/CMakeLists.txt index e23eb93..34867b3 100755 --- a/src/shared/CMakeLists.txt +++ b/src/shared/CMakeLists.txt @@ -51,6 +51,7 @@ add_library(sensord-server SHARED physical_sensor.cpp virtual_sensor.cpp sensor_fusion.cpp + iio_common.cpp ) add_library(sensord-share SHARED @@ -89,6 +90,7 @@ install(FILES cbase_lock.h cmutex.h common.h + iio_common.h DESTINATION include/${PROJECT_NAME} ) diff --git a/src/shared/iio_common.cpp b/src/shared/iio_common.cpp new file mode 100644 index 0000000..4fbec08 --- /dev/null +++ b/src/shared/iio_common.cpp @@ -0,0 +1,212 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include + +#define SCAN_EL_DIR "scan_elements/" + +#define BYTE_SIZE 8 +#define ULONGLONG 64 + +using std::fstream; +using std::ifstream; +using std::string; +using std::ios; + +void sort_channels_by_index(struct channel_parameters *channels, int count) +{ + struct channel_parameters temp; + int i, j; + + for (i = 0; i < count; i++) + for (j = i; (j > 0) && (channels[j].index < channels[j-1].index); j--) + { + temp = channels[j]; + channels[j] = channels[j-1]; + channels[j-1] = temp; + } +} + +int decode_channel_data_type(const char *device_dir, const char *ch_name, struct channel_parameters *ch_info) +{ + string file_type, type_string; + ifstream ftype; + char s_char, e_char; + unsigned bit_count, pad_bit_count, shift_count; + + file_type = string(device_dir) + string(SCAN_EL_DIR) + string(ch_name) + string("_type"); + ftype.open(file_type.c_str()); + if (!ftype.is_open()) + return -1; + ftype >> type_string; + sscanf(type_string.c_str(), "%ce:%c%u/%u>>%u", &e_char, + &s_char, &bit_count, &pad_bit_count, &shift_count); + if (e_char == 'b') + ch_info->big_endian = 1; + else + ch_info->big_endian = 0; + + if (s_char == 's') + ch_info->is_signed = 1; + else + ch_info->is_signed = 0; + + ch_info->valid_bits = bit_count; + ch_info->byte_count = pad_bit_count / BYTE_SIZE; + + if (bit_count == ULONGLONG) + ch_info->mask = ~0; + else + ch_info->mask = (1 << bit_count) - 1; + ch_info->shift = shift_count; + return 0; +} + +int add_channel_to_array(const char *device_dir, const char *ch_name, struct channel_parameters *channel) +{ + string file_en, file_type, file_index, file_scale, file_offset; + ifstream ftemp; + unsigned int i; + + file_en = string(device_dir) + string(SCAN_EL_DIR) + string(ch_name) + string("_en"); + file_index = string(device_dir) + string(SCAN_EL_DIR) + string(ch_name) + string("_index"); + file_scale = string(device_dir) + string(ch_name) + string("_scale"); + file_offset = string(device_dir) + string(ch_name) + string("_offset"); + + ftemp.open(file_en.c_str()); + if (!ftemp.is_open()) + return -1; + + ftemp >> i; + ftemp.close(); + if (i == 0) + return -1; + + asprintf(&(channel->prefix_str), "%s", ch_name); + channel->is_en = 1; + channel->scale = 1.0; + channel->offset = 0.0; + + ftemp.open(file_index.c_str()); + if (!ftemp.is_open()) + return -1; + ftemp >> i; + channel->index = i; + ftemp.close(); + + ftemp.open(file_scale.c_str()); + if (ftemp.is_open()) + { + ftemp >> channel->scale; + ftemp.close(); + } + + ftemp.open(file_offset.c_str()); + if (ftemp.is_open()) + { + ftemp >> channel->offset; + ftemp.close(); + } + decode_channel_data_type(device_dir, ch_name, channel); + return 0; +} + +int get_channel_array_size(struct channel_parameters *channels, int num_channels) +{ + int bytes = 0; + int i = 0; + while (i < num_channels) { + if (bytes % channels[i].byte_count == 0) + channels[i].buf_index = bytes; + else + channels[i].buf_index = bytes - bytes % channels[i].byte_count + + channels[i].byte_count; + bytes = channels[i].buf_index + channels[i].byte_count; + i++; + } + return bytes; +} + +int update_sysfs_num(const char *filepath, int val, bool verify) +{ + fstream sysfile; + sysfile.open(filepath); + if (!sysfile.is_open()) + return -1; + sysfile << val; + if (verify) + { + int test; + sysfile.seekp(0, ios::beg); + sysfile >> test; + if (test != val) + return -1; + } + return 0; +} + +int update_sysfs_string(const char *filepath, char *val, bool verify) +{ + fstream sysfile; + sysfile.open(filepath); + if (!sysfile.is_open()) + return -1; + sysfile << val; + if (verify) + { + string test; + sysfile.seekp(0, ios::beg); + sysfile >> test; + if (test != string(val)) + return -1; + } + return 0; +} + +int convert_bytes_to_int(int input, struct channel_parameters *info) +{ + int retVal; + + if (info->big_endian) + input = be16toh((unsigned short int) input); + else + input = le16toh((unsigned short int) input); + + input = input >> info->shift; + if (info->is_signed) + { + short int val = input; + val &= (1 << info->valid_bits) - 1; + val = (short int)(val << (16 - info->valid_bits)) >> + (16 - info->valid_bits); + retVal = val; + } + else + { + unsigned short int val = input; + val &= (1 << info->valid_bits) - 1; + retVal = val; + } + return retVal; +} diff --git a/src/shared/iio_common.h b/src/shared/iio_common.h new file mode 100644 index 0000000..0f456dc --- /dev/null +++ b/src/shared/iio_common.h @@ -0,0 +1,46 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef IIO_COMMON_H_ +#define IIO_COMMON_H_ + +struct channel_parameters { + char *prefix_str; + float scale; + float offset; + unsigned int index; + unsigned int byte_count; + unsigned int valid_bits; + unsigned int shift; + unsigned long long int mask; + unsigned int big_endian; + unsigned int is_signed; + unsigned int is_en; + unsigned int buf_index; +}; + +void sort_channels_by_index(struct channel_parameters *channels, int count); +int decode_channel_data_type(const char *device_dir, const char *ch_name, struct channel_parameters *ch_info); +int add_channel_to_array(const char *device_dir, const char *ch_name, struct channel_parameters *channel); +int get_channel_array_size(struct channel_parameters *channels, int num_channels); +int update_sysfs_num(const char *filepath, int val, bool verify = false); +int update_sysfs_string(const char *filepath, char *val, bool verify = false); +int convert_bytes_to_int(int input, struct channel_parameters *info); + +#endif /* IIO_COMMON_H_ */ -- 2.7.4 From ac511ace8dd441e3b85632e2dfbf377c0c3c94c4 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 5 Jun 2014 17:24:52 +0530 Subject: [PATCH 09/16] Adding template matrix class - Adding standalone directory for sensor fusion standalone C/C++ library - Adding matrix template class definition. signed-off-by: Ramasamy Change-Id: I55e4244338a33ad89272600bdcfad2605dff4af1 --- src/sensor_fusion/standalone/util/matrix.cpp | 117 +++++++++++++++++++++++++++ src/sensor_fusion/standalone/util/matrix.h | 51 ++++++++++++ 2 files changed, 168 insertions(+) create mode 100755 src/sensor_fusion/standalone/util/matrix.cpp create mode 100755 src/sensor_fusion/standalone/util/matrix.h diff --git a/src/sensor_fusion/standalone/util/matrix.cpp b/src/sensor_fusion/standalone/util/matrix.cpp new file mode 100755 index 0000000..3544252 --- /dev/null +++ b/src/sensor_fusion/standalone/util/matrix.cpp @@ -0,0 +1,117 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include + +template +matrix::matrix(void) +{ + +} + +template +matrix::matrix(const int rows, const int cols) +{ + +} + +template +matrix::matrix(const int rows, const int cols, TYPE **mat_data) +{ + +} + +template +matrix::matrix(const matrix& m) +{ + +} + +template +matrix::~matrix() +{ + +} + +template +matrix matrix::operator =(const matrix& m) +{ + +} + +template +matrix operator +(const matrix m1, const matrix m2) +{ + +} + +template +matrix operator +(const matrix m, const TYPE val) +{ + +} + +template +matrix operator -(const matrix m1, const matrix m2) +{ + +} + +template +matrix operator -(const matrix m, const TYPE val) +{ + +} + +template +matrix operator *(const matrix m1, const matrix m2) +{ + +} + +template +matrix operator *(const matrix m, const TYPE val) +{ + +} + +template +matrix operator /(const matrix m1, const matrix m2) +{ + +} + +template +bool operator ==(const matrix m1, const matrix m2) +{ + +} + +template +bool operator !=(const matrix m1, const matrix m2) +{ + +} + + +template +matrix matrix::transpose(const matrix m) +{ + +} diff --git a/src/sensor_fusion/standalone/util/matrix.h b/src/sensor_fusion/standalone/util/matrix.h new file mode 100755 index 0000000..7b95d98 --- /dev/null +++ b/src/sensor_fusion/standalone/util/matrix.h @@ -0,0 +1,51 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _MATRIX_H +#define _MATRIX_H + +template +class matrix { +public: + int m_rows; + int m_cols; + TYPE **m_mat; + + matrix(void); + matrix(const int rows, const int cols); + matrix(const int rows, const int cols, TYPE **mat_data); + matrix(const matrix& m); + ~matrix(); + + matrix operator =(const matrix& m); + + friend matrix operator +(const matrix m1, const matrix m2); + friend matrix operator +(const matrix m, const TYPE val); + friend matrix operator -(const matrix m1, const matrix m2); + friend matrix operator -(const matrix m, const TYPE val); + friend matrix operator *(const matrix m1, const matrix m2); + friend matrix operator *(const matrix m, const TYPE val); + friend matrix operator /(const matrix m1, const matrix m2); + friend bool operator ==(const matrix m1, const matrix m2); + friend bool operator !=(const matrix m1, const matrix m2); + + friend matrix transpose(const matrix m); +}; + +#endif //_MATRIX_H -- 2.7.4 From 69cc8ccbffda5f93abb53512083b10d545f8e68e Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 12 Jun 2014 11:45:32 +0530 Subject: [PATCH 10/16] Adding vector template class - Adding vector template class definition signed-off-by: Ramasamy Change-Id: Ia750b33d5a5b852adfd31fe4ed965c5d9ca070ed --- src/sensor_fusion/standalone/util/vector.cpp | 122 +++++++++++++++++++++++++++ src/sensor_fusion/standalone/util/vector.h | 53 ++++++++++++ 2 files changed, 175 insertions(+) create mode 100755 src/sensor_fusion/standalone/util/vector.cpp create mode 100755 src/sensor_fusion/standalone/util/vector.h diff --git a/src/sensor_fusion/standalone/util/vector.cpp b/src/sensor_fusion/standalone/util/vector.cpp new file mode 100755 index 0000000..dee5244 --- /dev/null +++ b/src/sensor_fusion/standalone/util/vector.cpp @@ -0,0 +1,122 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include + +template +vector::vector(void) +{ + +} + +template +vector::vector(const int size) +{ + +} + +template +vector::vector(const int size, TYPE *vec_data) +{ + +} + +template +vector::vector(const vector& v) +{ + +} + +template +vector::~vector() +{ + +} + +template +vector vector::operator =(const vector& v) +{ + +} + +template +vector operator +(const vector v1, const vector v2) +{ + +} + +template +vector operator +(const vector v, const TYPE val) +{ + +} + +template +vector operator -(const vector v1, const vector v2) +{ + +} + +template +vector operator -(const vector v, const TYPE val) +{ + +} + +template +matrix operator *(const matrix m, const vector v) +{ + +} + +template +TYPE operator *(const vector v, const matrix m) +{ + +} + +template +vector operator *(const vector v, const TYPE val) +{ + +} + +template +vector operator /(const vector v1, const vector v2) +{ + +} + +template +bool operator ==(const vector v1, const vector v2) +{ + +} + +template +bool operator !=(const vector v1, const vector v2) +{ + +} + +template +matrix vector::transpose(const vector v) +{ + +} diff --git a/src/sensor_fusion/standalone/util/vector.h b/src/sensor_fusion/standalone/util/vector.h new file mode 100755 index 0000000..559c8ed --- /dev/null +++ b/src/sensor_fusion/standalone/util/vector.h @@ -0,0 +1,53 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _VECTOR_H +#define _VECTOR_H + +#include + +template +class vector { +public: + int m_size; + TYPE *m_vec; + + vector(void); + vector(const int size); + vector(const int size, TYPE *vec_data); + vector(const vector& v); + ~vector(); + + vector operator =(const vector& v); + + friend vector operator +(const vector v1, const vector v2); + friend vector operator +(const vector v, const TYPE val); + friend vector operator -(const vector v1, const vector v2); + friend vector operator -(const vector v, const TYPE val); + friend matrix operator *(const matrix v1, const vector v2); + friend TYPE operator *(const vector v, const matrix m); + friend vector operator *(const vector v, const TYPE val); + friend vector operator /(const vector v1, const vector v2); + friend bool operator ==(const vector v1, const vector v2); + friend bool operator !=(const vector v1, const vector v2); + + friend matrix transpose(const vector v); +}; + +#endif //_VECTOR_H -- 2.7.4 From b34a3d61b663335d7ad77d1774b19a1efed8c15a Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Mon, 16 Jun 2014 15:24:07 +0530 Subject: [PATCH 11/16] Adding matrix class implementation - Adding matrix template class implementation - Adding matrix class testing code Code Contributed by : Gurleen Kaur signed-off-by: Ramasamy Change-Id: Iadee665910db4e7d53ca55eabf2744cc81ec747e --- src/sensor_fusion/standalone/util/matrix.cpp | 188 ++++++++++++++++++--- src/sensor_fusion/standalone/util/matrix.h | 40 +++-- .../standalone/util/test/matrix_test/.cproject | 112 ++++++++++++ .../standalone/util/test/matrix_test/.project | 89 ++++++++++ .../util/test/matrix_test/matrix_main.cpp | 140 +++++++++++++++ 5 files changed, 531 insertions(+), 38 deletions(-) create mode 100644 src/sensor_fusion/standalone/util/test/matrix_test/.cproject create mode 100644 src/sensor_fusion/standalone/util/test/matrix_test/.project create mode 100644 src/sensor_fusion/standalone/util/test/matrix_test/matrix_main.cpp diff --git a/src/sensor_fusion/standalone/util/matrix.cpp b/src/sensor_fusion/standalone/util/matrix.cpp index 3544252..b6841ac 100755 --- a/src/sensor_fusion/standalone/util/matrix.cpp +++ b/src/sensor_fusion/standalone/util/matrix.cpp @@ -17,101 +17,237 @@ * */ -#include +#ifdef _MATRIX_H template matrix::matrix(void) { - + m_mat = NULL; } template matrix::matrix(const int rows, const int cols) { + m_rows = rows; + m_cols = cols; + m_mat = NULL; + m_mat = new TYPE *[m_rows]; + for (int i = 0; i < m_rows; i++) + m_mat[i] = new TYPE [m_cols]; } template -matrix::matrix(const int rows, const int cols, TYPE **mat_data) +matrix::matrix(const matrix& m) { + m_rows = m.m_rows; + m_cols = m.m_cols; + m_mat = NULL; + m_mat = new TYPE *[m_rows]; + + for (int i = 0; i < m_rows; i++) + m_mat[i] = new TYPE [m_cols]; + for (int p = 0; p < m_rows; p++) + for (int q = 0; q < m_cols; q++) + m_mat[p][q] = m.m_mat[p][q]; } template -matrix::matrix(const matrix& m) +matrix::matrix(const int rows, const int cols, TYPE *mat_data) { + m_rows = rows; + m_cols = cols; + m_mat = NULL; + m_mat = new TYPE *[m_rows]; + + for (int i = 0; i < m_rows; i++) + m_mat[i] = new TYPE [m_cols]; + for (int i = 0; i < m_rows; i++) + for (int j = 0; j < m_cols; j++) + m_mat[i][j] = *mat_data++; } template matrix::~matrix() { - + for (int i = 0; i < m_rows; i++) + delete[] m_mat[i]; + delete[] m_mat; } template matrix matrix::operator =(const matrix& m) { + if (this == &m) + { + return *this; + } + + for (int i = 0; i < m_rows; i++) + delete[] m_mat[i]; + delete[] m_mat; + + m_rows = m.m_rows; + m_cols = m.m_cols; + m_mat = new TYPE *[m_rows]; + + for (int i = 0; i < m_rows; i++) + m_mat[i] = new TYPE [m_cols]; + for (int p = 0; p < m_rows; p++) + for (int q = 0; q < m_cols; q++) + m_mat[p][q] = m.m_mat[p][q]; + + return *this; } -template -matrix operator +(const matrix m1, const matrix m2) +template +ostream& operator <<(ostream& dout, matrix& m) { - + for (int i = 0; i < m.m_rows; i++) + { + for (int j = 0; j < m.m_cols; j++) + { + dout << m.m_mat[i][j] << "\t"; + } + dout << endl; + } + return dout; } -template -matrix operator +(const matrix m, const TYPE val) +template +matrix operator +(const matrix m1, const matrix m2) { + assert(m1.m_rows == m2.m_rows); + assert(m1.m_cols == m2.m_cols); + + matrix m3(m1.m_rows, m1.m_cols); + for (int i = 0; i < m1.m_rows; i++) + for (int j = 0; j < m1.m_cols; j++) + m3.m_mat[i][j] = m1.m_mat[i][j] + m2.m_mat[i][j]; + + return m3; } -template -matrix operator -(const matrix m1, const matrix m2) +template +matrix operator +(const matrix m, const T val) { + matrix m1(m.m_rows, m.m_cols); + for (int i = 0; i < m.m_rows; i++) + for (int j = 0; j < m.m_cols; j++) + m1.m_mat[i][j] = m.m_mat[i][j] + val; + + return m1; } -template -matrix operator -(const matrix m, const TYPE val) +template +matrix operator -(const matrix m1, const matrix m2) { + assert(m1.m_rows == m2.m_rows); + assert(m1.m_cols == m2.m_cols); + matrix m3(m1.m_rows, m1.m_cols); + + for (int i = 0; i < m1.m_rows; i++) + for (int j = 0; j < m1.m_cols; j++) + m3.m_mat[i][j] = m1.m_mat[i][j] - m2.m_mat[i][j]; + + return m3; } -template -matrix operator *(const matrix m1, const matrix m2) +template +matrix operator -(const matrix m, const T val) { + matrix m1(m.m_rows, m.m_cols); + for (int i = 0; i < m.m_rows; i++) + for (int j = 0; j < m.m_cols; j++) + m1.m_mat[i][j] = m.m_mat[i][j] - val; + + return m1; } -template -matrix operator *(const matrix m, const TYPE val) +template +matrix operator *(const matrix m1, const matrix m2) { + assert(m1.m_rows == m2.m_cols); + assert(m1.m_cols == m2.m_rows); + matrix m3(m1.m_rows, m2.m_cols); + + for (int i = 0; i < m1.m_rows; i++) + { + for (int j = 0; j < m2.m_cols; j++) + { + m3.m_mat[i][j] = 0; + for (int k = 0; k < m2.m_rows; k++) + m3.m_mat[i][j] += m1.m_mat[i][k] * m2.m_mat[k][j]; + } + } + + return m3; } -template -matrix operator /(const matrix m1, const matrix m2) +template +matrix operator *(const matrix m, const T val) { + matrix m1(m.m_rows, m.m_cols); + + for (int i = 0; i < m.m_rows; i++) + for (int j = 0; j < m.m_cols; j++) + m1.m_mat[i][j] = m.m_mat[i][j] * val; + return m1; } -template -bool operator ==(const matrix m1, const matrix m2) +template +matrix operator /(const matrix m1, const T val) { + matrix m3(m1.m_rows, m1.m_cols); + + for (int i = 0; i < m1.m_rows; i++) + for (int j = 0; j < m1.m_cols; j++) + m3.m_mat[i][j] = m1.m_mat[i][j] / val; + return m3; } -template -bool operator !=(const matrix m1, const matrix m2) +template +bool operator ==(const matrix m1, const matrix m2) { + if ((m1.m_rows == m2.m_rows) && (m1.m_cols == m2.m_cols)) + { + for (int i = 0; i < m1.m_rows; i++) + for (int j = 0; j < m2.m_cols; j++) + if (m1.m_mat[i][j] != m2.m_mat[i][j]) + return false; + } + else + return false; + return true; } +template +bool operator !=(const matrix m1, const matrix m2) +{ + return (!(m1 == m2)); +} -template -matrix matrix::transpose(const matrix m) +template +matrix transpose(const matrix m) { + matrix m1(m.m_cols, m.m_rows); + for (int i = 0; i < m.m_rows; i++) + for (int j = 0; j < m.m_cols; j++) + m1.m_mat[j][i] = m.m_mat[i][j]; + + return m1; } + +#endif //_MATRIX_H diff --git a/src/sensor_fusion/standalone/util/matrix.h b/src/sensor_fusion/standalone/util/matrix.h index 7b95d98..0f01f5e 100755 --- a/src/sensor_fusion/standalone/util/matrix.h +++ b/src/sensor_fusion/standalone/util/matrix.h @@ -20,6 +20,10 @@ #ifndef _MATRIX_H #define _MATRIX_H +#include +#include +using namespace std; + template class matrix { public: @@ -29,23 +33,35 @@ public: matrix(void); matrix(const int rows, const int cols); - matrix(const int rows, const int cols, TYPE **mat_data); + matrix(const int rows, const int cols, TYPE *mat_data); matrix(const matrix& m); ~matrix(); matrix operator =(const matrix& m); - friend matrix operator +(const matrix m1, const matrix m2); - friend matrix operator +(const matrix m, const TYPE val); - friend matrix operator -(const matrix m1, const matrix m2); - friend matrix operator -(const matrix m, const TYPE val); - friend matrix operator *(const matrix m1, const matrix m2); - friend matrix operator *(const matrix m, const TYPE val); - friend matrix operator /(const matrix m1, const matrix m2); - friend bool operator ==(const matrix m1, const matrix m2); - friend bool operator !=(const matrix m1, const matrix m2); - - friend matrix transpose(const matrix m); + template friend ostream& operator << (ostream& dout, + matrix& m); + template friend matrix operator +(const matrix m1, + const matrix m2); + template friend matrix operator +(const matrix m, + const T val); + template friend matrix operator -(const matrix m1, + const matrix m2); + template friend matrix operator -(const matrix m, + const T val); + template friend matrix operator *(const matrix m1, + const matrix m2); + template friend matrix operator *(const matrix m, + const T val); + template friend matrix operator /(const matrix m1, + const T val); + template friend bool operator ==(const matrix m1, + const matrix m2); + template friend bool operator !=(const matrix m1, + const matrix m2); + template friend matrix transpose(const matrix m); }; +#include "matrix.cpp" + #endif //_MATRIX_H diff --git a/src/sensor_fusion/standalone/util/test/matrix_test/.cproject b/src/sensor_fusion/standalone/util/test/matrix_test/.cproject new file mode 100644 index 0000000..1e6728f --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/matrix_test/.cproject @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/sensor_fusion/standalone/util/test/matrix_test/.project b/src/sensor_fusion/standalone/util/test/matrix_test/.project new file mode 100644 index 0000000..3d8db3d --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/matrix_test/.project @@ -0,0 +1,89 @@ + + + matrix_test + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/matrix_test/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + org.tizen.nativecpp.apichecker.core.builder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.tizen.nativecpp.apichecker.core.tizenCppNature + + diff --git a/src/sensor_fusion/standalone/util/test/matrix_test/matrix_main.cpp b/src/sensor_fusion/standalone/util/test/matrix_test/matrix_main.cpp new file mode 100644 index 0000000..f7cbf80 --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/matrix_test/matrix_main.cpp @@ -0,0 +1,140 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "../../matrix.h" + +int main() +{ + float arr0[2][2] = {{-2.243, 2.57},{3.56, -3.02}}; + float arr1[2][2] = {{2.2, 2.5},{3.5, 3.0}}; + float arr5[3][2] = {{0.22, 4.56}, {3.652, 5.86}, {1.430, 0.45}}; + float arr11[1][3] = {{2.0, 3.0, 4.0}}; + float arr12[3][1] = {{2.0}, {1.0}, {3.0}}; + float arr15[2][3] = {{20.0, -40.0, 10.0}, {36.0, 52.0, -55.0}}; + float arr3[3][3] = {{20.2, 40.5, 10.0}, {3.6, 52.0, 5.5}, {1.0, 45.5, 66.6}}; + float arr4[3][3] = {{2.24, 0.5, 0.023}, {3.675, 5.32, 0.556}, {1.023, 45.75, 621.6}}; + float arr8[3][3] = {{4.75, 0.65, 0.123}, {0.075, 5.302, 0.56}, {1.113, 0.475, 2.362}}; + + matrix m1(2, 2, (float *) arr0); + matrix m2(2, 2, (float *) arr1); + matrix m3(2, 2); + matrix m10(3, 3, (float *) arr3); + matrix m11(3, 2, (float *) arr5); + matrix m6(3, 3); + matrix m13(3, 2); + matrix m12(3, 3, (float *) arr4); + matrix m15(3, 3, (float *) arr8); + matrix m20(1, 3, (float *) arr11); + matrix m21(3, 1, (float *) arr12); + matrix m22(2, 3, (float *) arr15); + + cout<<"Addition\n"; + m6 = m10 + m15; + m13 = m11 + m11; + cout<< "\n" << m10 <<"\n"<< m15; + cout<< "\nSum:\n" << m6 << endl; + cout<< "\n" << m11 << "\n"<< m11; + cout<< "\nSum:\n" << m13 << endl; + + cout<< "\n\n\nSubtraction\n"; + m6 = m10 - m12; + cout<< "\n" << m10 << "\n" << m12; + cout<< "\nDifference:\n" << m6 << endl; + + cout<< "\n\n\nMultiplication\n"; + m6 = m10 * m12; + m3 = m1 * m2; + matrix m7(m20.m_rows, m21.m_cols); + m7 = m20 * m21; + cout<< "\n" << m10 << "\n" << m12; + cout<< "\nProduct:\n" << m6 << endl; + cout<< "\n" << m1 << "\n" << m2; + cout<< "\nProduct:\n" << m3 << endl; + cout<< "\n" << m20 << "\n" << m21; + cout<< "\nProduct:\n" << m7 << endl; + + cout<< "\n\n\nDivision\n"; + m3 = m1 / (float)2.5; + cout<< "\n" << m1 << "\n" << "2.5"; + cout<< "\nResult:\n" << m3 << endl; + m6 = m12 / (float)0.125; + cout<< "\n" << m12 << "\n" << ".125"; + cout<< "\nResult:\n" << m6 << endl; + + float num = 5.5650; + float num1 = -2.32; + cout<< "\n\n\nScalar addition\n"; + m3 = m2 + num; + m6 = m10 + num1; + cout<< "\nNumber added:" << num; + cout<< "\n\n" << m2; + cout<< "\nResult:\n\n" << m3; + cout<< "\nNumber added:" << num1; + cout<< "\n\n" << m10; + cout<< "\nResult:\n\n" << m6; + + float x = 4.0; + float x1 = -2.5; + cout<< "\n\n\nScalar subtraction\n"; + m3 = m11 - x; + m6 = m10 - x1; + cout<< "\nNumber Subtracted:" << x; + cout<< "\n\n" << m11; + cout<< "\nResult:\n\n" << m3; + cout<< "\nNumber Subtracted:" << x1; + cout<< "\n\n" << m10; + cout<< "\nResult:\n\n" << m6; + + float z = 3.50; + float z1 = -5.567; + cout<< "\n\n\nScalar multiplication\n"; + m3 = m1 * z; + m6 = m12 * z1; + cout<< "\nNumber Multiplied:"<< z; + cout<< "\n\n" << m1; + cout<< "\nResult:\n\n" << m3; + cout<< "\nNumber Multiplied:" << z1; + cout<< "\n\n" << m12; + cout<< "\nResult:\n\n" << m6; + + m6 = transpose(m15); + cout<< "\n\n\nTranspose:"; + cout << "\n\n" << m15; + cout << "\nResult:\n\n" << m6; + + cout << "\n\nm1:\n\n" << m1; + cout << "\n\nm2:\n\n" << m2; + cout << "\n\n\nm1 == m2 :"; + cout << (m1 == m2); + + cout << "\n\nm2:\n\n" << m2; + cout << "\n\nm2:\n\n" << m2; + cout << "\n\n\nm2 == m2 :"; + cout << (m2 == m2); + + cout << "\n\nm6:\n\n" << m6; + cout << "\n\nm6:\n\n" << m6; + cout << "\n\n\nm6 != m6 :"; + cout << (m6 != m6); + + cout << "\n\nm6:\n\n" << m6; + cout << "\n\nm1:\n\n" << m1; + cout << "\n\n\nm6 != m1 :"; + cout << (m6 != m1); +} -- 2.7.4 From 8729a3c56c9d0a9a29bacd1a4698161ce1858590 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Wed, 18 Jun 2014 17:28:42 +0530 Subject: [PATCH 12/16] Adding implementation for Vector Class - Adding implementation for the Vector template class - Adding vector class testing code Code Contributed by : Gurleen Kaur signed-off-by: Ramasamy Change-Id: Ie4e006b0a40d4d41c2f3762b3fdb081cdcc41180 --- .../standalone/util/test/vector_test/.cproject | 112 +++++++++++++ .../standalone/util/test/vector_test/.project | 83 ++++++++++ .../util/test/vector_test/vector_main.cpp | 151 ++++++++++++++++++ src/sensor_fusion/standalone/util/vector.cpp | 177 ++++++++++++++++++--- src/sensor_fusion/standalone/util/vector.h | 43 +++-- 5 files changed, 527 insertions(+), 39 deletions(-) create mode 100644 src/sensor_fusion/standalone/util/test/vector_test/.cproject create mode 100644 src/sensor_fusion/standalone/util/test/vector_test/.project create mode 100644 src/sensor_fusion/standalone/util/test/vector_test/vector_main.cpp mode change 100755 => 100644 src/sensor_fusion/standalone/util/vector.cpp mode change 100755 => 100644 src/sensor_fusion/standalone/util/vector.h diff --git a/src/sensor_fusion/standalone/util/test/vector_test/.cproject b/src/sensor_fusion/standalone/util/test/vector_test/.cproject new file mode 100644 index 0000000..bc0fbe4 --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/vector_test/.cproject @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/sensor_fusion/standalone/util/test/vector_test/.project b/src/sensor_fusion/standalone/util/test/vector_test/.project new file mode 100644 index 0000000..92bc08d --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/vector_test/.project @@ -0,0 +1,83 @@ + + + vector_test + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/vector_test/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/src/sensor_fusion/standalone/util/test/vector_test/vector_main.cpp b/src/sensor_fusion/standalone/util/test/vector_test/vector_main.cpp new file mode 100644 index 0000000..6ec31b8 --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/vector_test/vector_main.cpp @@ -0,0 +1,151 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "../../vector.h" + +int main() +{ + float arr2[3] = {0.056,2.34,-65.76}; + float arr15[3] = {1.04,-4.678,-2.34}; + float arr3[4] = {1.03,2.345,6.78,5.55}; + float arr4[4] = {-6.78,-45.213,-7.89,-3.456}; + float arr8[5] = {0.0123,5.678,2.345,0.345,8.956}; + float arr0[5] = {2344.98,345.24,456.12,98.33,144.67}; + float arr1[6] = {1.234,4.5,6.8987,3.33,5.66,77.695}; + float arr43[6] = {2.3454,-0.0384,-8.90,3.455,6.785,21.345}; + + vector v1(5, arr0); + vector v2(5, arr8); + vector v10(4, arr3); + vector v12(4, arr4); + vector v15(6, arr1); + vector v20(6, arr43); + vector v21(3, arr2); + vector v22(3, arr15); + vector v3(4); + vector v6(3); + vector v13(5); + vector v95(6); + + float arr57[3][3] = {{2.24, 0.5, 0.023}, {3.675, 5.32, 0.556}, {1.023, 45.75, 621.6}}; + matrix m12(3, 3, (float *) arr57); + float arr67[3][1] = {{2.0}, {3.0}, {4.0}}; + matrix m32(3, 1, (float *) arr67); + + cout<< "Addition\n"; + v3 = v21 + v22; + v95 = v15 + v20; + cout<< "\n" << v21 << "\n" << v22; + cout<< "\nSum:\n" << v3 << endl; + cout<< "\n" << v15 << "\n" << v20; + cout<< "\nSum:\n" << v95 << endl; + + float num = 5.5650; + float num1 = -2.32; + cout<< "\n\n\nScalar addition\n"; + v3 = v2 + num; + v6 = v10 + num1; + cout<< "\nNumber added:" << num; + cout<< "\n\n" << v2; + cout<< "\nResult:\n\n" << v3; + cout<< "\nNumber added:"<< num1; + cout<< "\n\n" << v10; + cout<< "\nResult:\n\n"<< v6; + + cout<< "\n\n\nSubtraction\n"; + v6 = v10 - v12; + cout<< "\n" << v10 << "\n" << v12; + cout<< "\nDifference:\n" << v6 << endl; + + float x = 4.0; + float x1 = -2.5; + cout<< "\n\n\nScalar subtraction\n"; + v13 = v1 - x; + v6 = v10 - x1; + cout<< "\nNumber Subtracted:" << x; + cout<< "\n\n" << v1; + cout<< "\nResult:\n\n" << v13; + cout<< "\nNumber Subtracted:" << x1; + cout<< "\n\n" << v10; + cout<< "\nResult:\n\n" << v6; + + float xx = 7.2; + cout<<"\n\n\nMultiplication\n"; + v13 = v2 * xx; + cout<< "\n" << v2 <<"\n"<< xx; + cout<< "\nProduct:\n" << v13 << endl; + + cout<< "\n\n\nMultiplication matrix x vector:\n"; + matrix m102 = m32 * v22; + cout<< "\n" << m32 <<"\n"<< v22; + cout<< "\nProduct:\n"<< m102 << endl; + + cout<< "\n\n\nVector x Multiplication matrix:\n"; + vector v102 = (v22 * m12); + cout<< "\n" << v22 << "\n" << m12; + cout<< "\nProduct:\n" << v102 << endl; + float val = mul(v22, m32); + cout<< "\n" << v22 << "\n" << m32; + cout<< "\nProduct:\n" << val << endl; + + float z = 3.50; + float z1 = -5.567; + cout<< "\n\n\nScalar multiplication\n"; + v13 = v1 * z; + v6 = v12 * z1; + cout<< "\nNumber Multiplied:" << z; + cout<< "\n\n" << v1; + cout<< "\nResult:\n\n" << v13; + cout<< "\nNumber Multiplied:" << z1; + cout<< "\n\n" << v12; + cout<< "\nResult:\n\n" << v6; + + float num2 = 5.5; + cout<< "\n\n\nDivision\n"; + v3 = v1 / num2; + cout<< "\n" << v1 << "\n" << num2; + cout<< "\nResult:\n" << v3 << endl; + + cout<< "\n\n\nTranspose:"; + cout << "\n\n" << v20; + cout << "\nResult:\n\n"; + matrix m101 = (transpose(v20)); + cout << m101; + + cout << "\n\nv1:\n\n" << v1; + cout << "\n\nv2:\n\n" << v2; + cout << "\n\n\nv1 == v2 :"; + cout << (v1 == v2); + + cout << "\n\nv10:\n\n" << v10; + cout << "\n\nv10:\n\n" << v10; + cout << "\n\n\nv10 == v10 :"; + cout << (v10 == v10); + + cout << "\n\nv12:\n\n" << v12; + cout << "\n\nv15:\n\n" << v15; + cout << "\n\n\nv12 != v15 :"; + cout << (v12 != v15); + + cout << "\n\nv15:\n\n" << v15; + cout << "\n\nv15:\n\n" << v15; + cout << "\n\n\nv15 != v15 :"; + cout << (v15 != v15); +} + diff --git a/src/sensor_fusion/standalone/util/vector.cpp b/src/sensor_fusion/standalone/util/vector.cpp old mode 100755 new mode 100644 index dee5244..e234319 --- a/src/sensor_fusion/standalone/util/vector.cpp +++ b/src/sensor_fusion/standalone/util/vector.cpp @@ -17,106 +17,233 @@ * */ -#include +#if defined (_VECTOR_H) && defined (_MATRIX_H) template vector::vector(void) { - + m_vec = NULL; } template vector::vector(const int size) { - + m_size = size; + m_vec = NULL; + m_vec = new TYPE [m_size]; } template vector::vector(const int size, TYPE *vec_data) { + m_size = size; + m_vec = NULL; + m_vec = new TYPE [m_size]; + for (int j = 0; j < m_size; j++) + m_vec[j] = *vec_data++; } template vector::vector(const vector& v) { + m_size = v.m_size; + m_vec = NULL; + m_vec = new TYPE [m_size]; + for (int q = 0; q < m_size; q++) + m_vec[q] = v.m_vec[q]; } template vector::~vector() { - + delete[] m_vec; } template vector vector::operator =(const vector& v) { + if (this == &v) + { + return *this; + } + + delete[] m_vec; + m_size = v.m_size; + m_vec = new TYPE [m_size]; + + for (int q = 0; q < m_size; q++) + m_vec[q] = v.m_vec[q]; + return *this; } template -vector operator +(const vector v1, const vector v2) +ostream& operator <<(ostream& dout, vector& v) { + for (int j = 0; j < v.m_size; j++) + { + dout << v.m_vec[j] << "\t"; + } + dout << endl; + + return dout; } -template -vector operator +(const vector v, const TYPE val) +template +vector operator +(const vector v1, const vector v2) { + assert(v1.m_size == v2.m_size); + + vector v3(v1.m_size); + for (int j = 0; j < v1.m_size; j++) + v3.m_vec[j] = v1.m_vec[j] + v2.m_vec[j]; + + return v3; } -template -vector operator -(const vector v1, const vector v2) +template +vector operator +(const vector v, const T val) { + vector v1(v.m_size); + for (int j = 0; j < v.m_size; j++) + v1.m_vec[j] = v.m_vec[j] + val; + + return v1; } -template -vector operator -(const vector v, const TYPE val) +template +vector operator -(const vector v1, const vector v2) { + assert(v1.m_size == v2.m_size); + + vector v3(v1.m_size); + for (int j = 0; j < v1.m_size; j++) + v3.m_vec[j] = v1.m_vec[j] - v2.m_vec[j]; + + return v3; } -template -matrix operator *(const matrix m, const vector v) +template +vector operator -(const vector v, const T val) { + vector v1(v.m_size); + for (int j = 0; j < v.m_size; j++) + v1.m_vec[j] = v.m_vec[j] - val; + + return v1; } -template -TYPE operator *(const vector v, const matrix m) +template +matrix operator *(const matrix m, const vector v) { + assert(m.m_rows == v.m_size); + assert(m.m_cols == 1); + + matrix m1(m.m_rows, v.m_size); + for (int i = 0; i < m1.m_rows; i++) + { + for (int j = 0; j < m1.m_cols; j++) + { + m1.m_mat[i][j] = m.m_mat[i][0] * v.m_vec[j]; + } + } + + return m1; } -template -vector operator *(const vector v, const TYPE val) +template +vector operator *(const vector v, const matrix m) { + assert(m.m_rows == v.m_size); + assert(m.m_cols != 1); + vector v1(m.m_cols); + + for (int j = 0; j < m.m_cols; j++) + { + v1.m_vec[j] = 0; + for (int k = 0; k < m.m_rows; k++) + v1.m_vec[j] += v.m_vec[k] * m.m_mat[k][j]; + } + + return v1; } -template -vector operator /(const vector v1, const vector v2) +template +vector operator *(const vector v, const T val) { + vector v1(v.m_size); + for (int j = 0; j < v.m_size; j++) + v1.m_vec[j] = v.m_vec[j] * val; + + return v1; } -template -bool operator ==(const vector v1, const vector v2) +template +vector operator /(const vector v, const T val) { + vector v1(v.m_size); + for (int j = 0; j < v.m_size; j++) + v1.m_vec[j] = v.m_vec[j] / val; + + return v1; } -template -bool operator !=(const vector v1, const vector v2) +template +bool operator ==(const vector v1, const vector v2) { + if (v1.m_size == v2.m_size) + { + for (int i = 0; i < v1.m_size; i++) + if (v1.m_vec[i] != v2.m_vec[i]) + return false; + } + else + return false; + return true; } -template -matrix vector::transpose(const vector v) +template +bool operator !=(const vector v1, const vector v2) +{ + return (!(v1 == v2)); +} + +template +matrix transpose(const vector v) +{ + matrix m(v.m_size, 1); + + for (int i = 0; i < v.m_size; i++) + m.m_mat[i][0] = v.m_vec[i]; + + return m; +} + +template +T mul(const vector v, const matrix m) { + assert(m.m_rows == v.m_size); + assert(m.m_cols == 1); + + T result = (T) 0; + + for (int k = 0; k < v.m_size; k++) + result += v.m_vec[k] * m.m_mat[k][0]; + return result; } + +#endif + diff --git a/src/sensor_fusion/standalone/util/vector.h b/src/sensor_fusion/standalone/util/vector.h old mode 100755 new mode 100644 index 559c8ed..772109d --- a/src/sensor_fusion/standalone/util/vector.h +++ b/src/sensor_fusion/standalone/util/vector.h @@ -20,7 +20,7 @@ #ifndef _VECTOR_H #define _VECTOR_H -#include +#include "matrix.h" template class vector { @@ -36,18 +36,33 @@ public: vector operator =(const vector& v); - friend vector operator +(const vector v1, const vector v2); - friend vector operator +(const vector v, const TYPE val); - friend vector operator -(const vector v1, const vector v2); - friend vector operator -(const vector v, const TYPE val); - friend matrix operator *(const matrix v1, const vector v2); - friend TYPE operator *(const vector v, const matrix m); - friend vector operator *(const vector v, const TYPE val); - friend vector operator /(const vector v1, const vector v2); - friend bool operator ==(const vector v1, const vector v2); - friend bool operator !=(const vector v1, const vector v2); - - friend matrix transpose(const vector v); + template friend ostream& operator << (ostream& dout, + vector& v); + template friend vector operator +(const vector v1, + const vector v2); + template friend vector operator +(const vector v, + const T val); + template friend vector operator -(const vector v1, + const vector v2); + template friend vector operator -(const vector v, + const T val); + template friend matrix operator *(const matrix v1, + const vector v2); + template friend vector operator *(const vector v, + const matrix m); + template friend vector operator *(const vector v, + const T val); + template friend vector operator /(const vector v1, + const T val); + template friend bool operator ==(const vector v1, + const vector v2); + template friend bool operator !=(const vector v1, + const vector v2); + + template friend T mul(const vector v, const matrix m); + template friend matrix transpose(const vector v); }; -#endif //_VECTOR_H +#include "vector.cpp" + +#endif /* _VECTOR_H */ -- 2.7.4 From 51937d62180a35c024ff3a145320bf38ff860fbe Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 19 Jun 2014 13:39:00 +0530 Subject: [PATCH 13/16] Adding quaternion class implementation - Adding quaternion template class - Adding implementation for the quaternion template class - Adding quaternion class testing code signed-off-by: Ramasamy Change-Id: Ia200184bf5ac5ada93e829d422a32bae8314fd63 --- src/sensor_fusion/standalone/util/quaternion.cpp | 135 +++++++++++++++++++++ src/sensor_fusion/standalone/util/quaternion.h | 51 ++++++++ .../standalone/util/test/quaternion_test/.cproject | 112 +++++++++++++++++ .../standalone/util/test/quaternion_test/.project | 89 ++++++++++++++ .../util/test/quaternion_test/quaternion_main.cpp | 72 +++++++++++ 5 files changed, 459 insertions(+) create mode 100755 src/sensor_fusion/standalone/util/quaternion.cpp create mode 100755 src/sensor_fusion/standalone/util/quaternion.h create mode 100644 src/sensor_fusion/standalone/util/test/quaternion_test/.cproject create mode 100644 src/sensor_fusion/standalone/util/test/quaternion_test/.project create mode 100644 src/sensor_fusion/standalone/util/test/quaternion_test/quaternion_main.cpp diff --git a/src/sensor_fusion/standalone/util/quaternion.cpp b/src/sensor_fusion/standalone/util/quaternion.cpp new file mode 100755 index 0000000..d226828 --- /dev/null +++ b/src/sensor_fusion/standalone/util/quaternion.cpp @@ -0,0 +1,135 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#if defined (_QUATERNION_H) && defined (_VECTOR_H) + +#include + +#define QUAT_SIZE 4 + +template +quaternion::quaternion() : m_quat(QUAT_SIZE) +{ +} + +template +quaternion::quaternion(const TYPE w, const TYPE x, const TYPE y, const TYPE z) +{ + TYPE vec_data[QUAT_SIZE] = {w, x, y, z}; + + vector v(QUAT_SIZE, vec_data); + m_quat = v; +} + +template +quaternion::quaternion(const vector v) +{ + m_quat = v; +} + +template +quaternion::quaternion(const quaternion& q) +{ + m_quat = q.m_quat; +} + +template +quaternion::~quaternion() +{ +} + +template +quaternion quaternion::operator =(const quaternion& q) +{ + m_quat = q.m_quat; +} + +template +quaternion operator *(const quaternion q, const T val) +{ + return (q.m_quat * val); +} + +template +quaternion operator *(const quaternion q1, const quaternion q2) +{ + T w, x, y, z; + T w1, x1, y1, z1; + T w2, x2, y2, z2; + + w1 = q1.m_quat.m_vec[0]; + x1 = q1.m_quat.m_vec[1]; + y1 = q1.m_quat.m_vec[2]; + z1 = q1.m_quat.m_vec[3]; + + w2 = q2.m_quat.m_vec[0]; + x2 = q2.m_quat.m_vec[1]; + y2 = q2.m_quat.m_vec[2]; + z2 = q2.m_quat.m_vec[3]; + + x = x1*w2 + y1*z2 - z1*y2 + w1*x2; + y = -x1*z2 + y1*w2 + z1*x2 + w1*y2; + z = x1*y2 - y1*x2 + z1*w2 + w1*z2; + w = -x1*x2 - y1*y2 - z1*z2 + w1*w2; + + quaternion q(w, x, y, z); + + return q; +} + +template +quaternion operator +(const quaternion q1, const quaternion q2) +{ + return (q1.m_quat + q2.m_quat); +} + +template +quaternion quat_normalize(const quaternion q) +{ + T w, x, y, z; + T val; + + w = q.m_quat.m_vec[0] * q.m_quat.m_vec[0]; + x = q.m_quat.m_vec[1] * q.m_quat.m_vec[1]; + y = q.m_quat.m_vec[2] * q.m_quat.m_vec[2]; + z = q.m_quat.m_vec[3] * q.m_quat.m_vec[3]; + + val = sqrt(w + x + y + z); + + quaternion q1(q.m_quat / val); + + return (q1); +} + +template +quaternion quat_conj(const quaternion q) +{ + T w, x, y, z; + + w = q.m_quat.m_vec[0]; + x = q.m_quat.m_vec[1]; + y = q.m_quat.m_vec[2]; + z = q.m_quat.m_vec[3]; + + quaternion q1(w, -x, -y, -z); + + return q1; +} + +#endif //_QUATERNION_H diff --git a/src/sensor_fusion/standalone/util/quaternion.h b/src/sensor_fusion/standalone/util/quaternion.h new file mode 100755 index 0000000..0313797 --- /dev/null +++ b/src/sensor_fusion/standalone/util/quaternion.h @@ -0,0 +1,51 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _QUATERNION_H +#define _QUATERNION_H + +#include "vector.h" + +template +class quaternion { +public: + vector m_quat; + + quaternion(); + quaternion(const TYPE w, const TYPE x, const TYPE y, const TYPE z); + quaternion(const vector v); + quaternion(const quaternion& q); + ~quaternion(); + + quaternion operator =(const quaternion& q); + + template friend quaternion operator *(const quaternion q, + const T val); + template friend quaternion operator *(const quaternion q1, + const quaternion q2); + template friend quaternion operator +(const quaternion q1, + const quaternion q2); + + template friend quaternion quat_normalize(const quaternion q); + template friend quaternion quat_conj(const quaternion q); +}; + +#include "quaternion.cpp" + +#endif //_QUATERNION_H diff --git a/src/sensor_fusion/standalone/util/test/quaternion_test/.cproject b/src/sensor_fusion/standalone/util/test/quaternion_test/.cproject new file mode 100644 index 0000000..de46268 --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/quaternion_test/.cproject @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/sensor_fusion/standalone/util/test/quaternion_test/.project b/src/sensor_fusion/standalone/util/test/quaternion_test/.project new file mode 100644 index 0000000..74b100d --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/quaternion_test/.project @@ -0,0 +1,89 @@ + + + quaternion_test + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/quaternion_test/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + org.tizen.nativecpp.apichecker.core.builder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.tizen.nativecpp.apichecker.core.tizenCppNature + + diff --git a/src/sensor_fusion/standalone/util/test/quaternion_test/quaternion_main.cpp b/src/sensor_fusion/standalone/util/test/quaternion_test/quaternion_main.cpp new file mode 100644 index 0000000..ca43b8d --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/quaternion_test/quaternion_main.cpp @@ -0,0 +1,72 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "../../quaternion.h" + +int main() +{ + float arr0[4] = {2344.98, 345.24, 456.12, 98.33}; + float arr1[4] = {0.056, 0.34, -0.0076, 0.001}; + + vector v0(4, arr0); + vector v1(4, arr1); + + quaternion q0(v0); + quaternion q1(v1); + quaternion q2((float)2344.98, (float)345.24, (float)456.12, (float)98.33); + quaternion q3(q1); + quaternion q4; + + cout << "Constructor tests\n"; + cout << "input\t" << v0 << "\n"; + cout << "output\t" << q0.m_quat << "\n\n"; + cout << "input\t" << v1 << "\n"; + cout << "output\t" << q1.m_quat << "\n\n"; + cout << "input\t" << v0 << "\n"; + cout << "output\t" << q2.m_quat << "\n\n"; + cout << "input\t" << v1 << "\n"; + cout << "output\t" << q3.m_quat << "\n\n"; + cout << "default constructor\n"; + cout << "output\t" << q4.m_quat << "\n\n"; + + cout << "Multiplication\n"; + float val = 0.1; + quaternion q5 = q0 * val; + cout << "input\t" << q0.m_quat << "\n" << 0.1 << "\n"; + cout << "output\t" << q5.m_quat << "\n\n"; + quaternion q6 = q0 * q1; + cout << "input\t" << q0.m_quat << "\n" << q1.m_quat << "\n"; + cout << "output\t" << q6.m_quat << "\n\n"; + + cout << "Addition\n"; + quaternion q7 = q0 + q1; + cout << "input\t" << q0.m_quat << "\n" << q1.m_quat << "\n"; + cout << "output\t" << q7.m_quat << "\n\n"; + + cout << "Quaternion Normalization\n"; + quaternion q8 = quat_normalize(q1); + cout << "input\t" << q1.m_quat << "\n"; + cout << "output\t" << q8.m_quat << "\n\n"; + + cout << "Quaternion Conjugate\n"; + quaternion q9 = quat_conj(q1); + cout << "input\t" << q1.m_quat << "\n"; + cout << "output\t" << q9.m_quat << "\n\n"; +} + -- 2.7.4 From 896bab1d5dac7404cc0a3072f2cc50d9696e7818 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 19 Jun 2014 15:31:58 +0530 Subject: [PATCH 14/16] Adding euler_angles class implementation - Adding euler_angles template class - Adding implementation for the euler_angles template class - Adding euler_angles class testing code signed-off-by: Ramasamy Change-Id: Idd8498ce0decf89d0ae53cf2efa424013d692c86 --- src/sensor_fusion/standalone/util/euler_angles.cpp | 104 +++++++++++++++++++ src/sensor_fusion/standalone/util/euler_angles.h | 46 +++++++++ .../util/test/euler_angles_test/.cproject | 112 +++++++++++++++++++++ .../util/test/euler_angles_test/.project | 89 ++++++++++++++++ .../test/euler_angles_test/euler_angles_main.cpp | 73 ++++++++++++++ 5 files changed, 424 insertions(+) create mode 100644 src/sensor_fusion/standalone/util/euler_angles.cpp create mode 100644 src/sensor_fusion/standalone/util/euler_angles.h create mode 100644 src/sensor_fusion/standalone/util/test/euler_angles_test/.cproject create mode 100644 src/sensor_fusion/standalone/util/test/euler_angles_test/.project create mode 100644 src/sensor_fusion/standalone/util/test/euler_angles_test/euler_angles_main.cpp diff --git a/src/sensor_fusion/standalone/util/euler_angles.cpp b/src/sensor_fusion/standalone/util/euler_angles.cpp new file mode 100644 index 0000000..00f9439 --- /dev/null +++ b/src/sensor_fusion/standalone/util/euler_angles.cpp @@ -0,0 +1,104 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#if defined (_EULER_ANGLES_H) && defined (_VECTOR_H) + +#include + +#define EULER_SIZE 3 +#define RAD2DEG 57.2957795 +#define DEG2RAD 0.0174532925 + +template +euler_angles::euler_angles() : m_ang(EULER_SIZE) +{ +} + +template +euler_angles::euler_angles(const TYPE roll, const TYPE pitch, const TYPE yaw) +{ + TYPE euler_data[EULER_SIZE] = {roll, pitch, yaw}; + + vector v(EULER_SIZE, euler_data); + m_ang = v; +} + +template +euler_angles::euler_angles(const vector v) +{ + m_ang = v; +} + +template +euler_angles::euler_angles(const euler_angles& e) +{ + m_ang = e.m_ang; +} + +template +euler_angles::~euler_angles() +{ + +} + +template +euler_angles euler_angles::operator =(const euler_angles& e) +{ + m_ang = e.m_ang; +} + +template +euler_angles quat2euler(const quaternion q) +{ + T w, x, y, z; + T R11, R21, R31, R32, R33; + T phi, theta, psi; + + w = q.m_quat.m_vec[0]; + x = q.m_quat.m_vec[1]; + y = q.m_quat.m_vec[2]; + z = q.m_quat.m_vec[3]; + + R11 = 2 * (w * w) - 1 + 2 * (x * x); + R21 = 2 * ((x * y) - (w * z)); + R31 = 2 * ((x * z) + (w * y)); + R32 = 2 * ((y * z) - (w * x)); + R33 = 2 * (w * w) - 1 + 2 * (z * z); + + phi = atan2(R32, R33); + theta = -atan(R31 / sqrt(1 - (R31 * R31))); + psi = atan2(R21, R11); + + euler_angles e(phi, theta, psi); + + return e; +} + +template +euler_angles rad2deg(const euler_angles e) +{ + return (e.m_ang * (T) RAD2DEG); +} + +template +euler_angles deg2rad(const euler_angles e) +{ + return (e.m_ang * (T) DEG2RAD); +} + +#endif //_EULER_ANGLES_H diff --git a/src/sensor_fusion/standalone/util/euler_angles.h b/src/sensor_fusion/standalone/util/euler_angles.h new file mode 100644 index 0000000..bafe8df --- /dev/null +++ b/src/sensor_fusion/standalone/util/euler_angles.h @@ -0,0 +1,46 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _EULER_ANGLES_H +#define _EULER_ANGLES_H + +#include "vector.h" +#include "quaternion.h" + +template +class euler_angles { +public: + vector m_ang; + + euler_angles(); + euler_angles(const TYPE roll, const TYPE pitch, const TYPE yaw); + euler_angles(const vector v); + euler_angles(const euler_angles& e); + ~euler_angles(); + + euler_angles operator =(const euler_angles& e); + + template friend euler_angles quat2euler(const quaternion q); + template friend euler_angles rad2deg(const euler_angles e); + template friend euler_angles deg2rad(const euler_angles e); +}; + +#include "euler_angles.cpp" + +#endif //_EULER_ANGLES_H diff --git a/src/sensor_fusion/standalone/util/test/euler_angles_test/.cproject b/src/sensor_fusion/standalone/util/test/euler_angles_test/.cproject new file mode 100644 index 0000000..7f29995 --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/euler_angles_test/.cproject @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/sensor_fusion/standalone/util/test/euler_angles_test/.project b/src/sensor_fusion/standalone/util/test/euler_angles_test/.project new file mode 100644 index 0000000..eca2f5e --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/euler_angles_test/.project @@ -0,0 +1,89 @@ + + + euler_angles_test + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/euler_angles_test/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + org.tizen.nativecpp.apichecker.core.builder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.tizen.nativecpp.apichecker.core.tizenCppNature + + diff --git a/src/sensor_fusion/standalone/util/test/euler_angles_test/euler_angles_main.cpp b/src/sensor_fusion/standalone/util/test/euler_angles_test/euler_angles_main.cpp new file mode 100644 index 0000000..592e782 --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/euler_angles_test/euler_angles_main.cpp @@ -0,0 +1,73 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "../../euler_angles.h" + +int main() +{ + float arr0[3] = {234.98, 345.24, -56.12}; + float arr1[3] = {56, -34, 76}; + float arr2[4] = {0.6, 0.6, -.18, -.44}; + float arr3[4] = {-0.5, -0.36, .43, .03}; + + vector v0(3, arr0); + vector v1(3, arr1); + vector v2(4, arr2); + vector v3(4, arr3); + + quaternion q1(v2); + quaternion q2(v3); + + euler_angles e0(v0); + euler_angles e1(v1); + euler_angles e2((float)234.98, (float)345.24, (float)-56.12); + euler_angles e3(e1); + euler_angles e4; + + cout << "Constructor tests\n"; + cout << "input\t" << v0 << "\n"; + cout << "output\t" << e0.m_ang << "\n\n"; + cout << "input\t" << v1 << "\n"; + cout << "output\t" << e1.m_ang << "\n\n"; + cout << "input\t" << v0 << "\n"; + cout << "output\t" << e2.m_ang << "\n\n"; + cout << "input\t" << v1 << "\n"; + cout << "output\t" << e3.m_ang << "\n\n"; + cout << "default constructor\n"; + cout << "output\t" << e4.m_ang << "\n\n"; + + cout << "Quaternion to Euler\n"; + euler_angles e5 = quat2euler(q1); + cout << "input\t" << q1.m_quat << "\n"; + cout << "output\t" << e5.m_ang << "\n\n"; + euler_angles e8 = quat2euler(q2); + cout << "input\t" << q2.m_quat << "\n"; + cout << "output\t" << e8.m_ang << "\n\n"; + + cout << "Radians to Degrees\n"; + euler_angles e6 = deg2rad(e0); + cout << "input\t" << e0.m_ang << "\n"; + cout << "output\t" << e6.m_ang << "\n\n"; + + cout << "Degrees to Radians\n"; + euler_angles e7 = rad2deg(e6); + cout << "input\t" << e6.m_ang << "\n"; + cout << "output\t" << e7.m_ang << "\n\n"; +} + -- 2.7.4 From 7a7f06c1ebfbf1d692a0e0b29c9a18957cc41ddb Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Mon, 23 Jun 2014 11:15:55 +0530 Subject: [PATCH 15/16] Adding sensor_data class implementation - Adding sensor_data template class - Adding implementation for the sensor_data template class - Adding sensor_data class testing code - Testing application contributed by Gurleen Kaur signed-off-by: Ramasamy Change-Id: I96ff03a716b562d0c006bbe95b054936f5b90775 --- src/sensor_fusion/standalone/util/sensor_data.cpp | 104 +++++++++++++++++++ src/sensor_fusion/standalone/util/sensor_data.h | 48 +++++++++ .../util/test/sensor_data_test/.cproject | 112 +++++++++++++++++++++ .../standalone/util/test/sensor_data_test/.project | 89 ++++++++++++++++ .../test/sensor_data_test/sensor_data_main.cpp | 61 +++++++++++ 5 files changed, 414 insertions(+) create mode 100644 src/sensor_fusion/standalone/util/sensor_data.cpp create mode 100644 src/sensor_fusion/standalone/util/sensor_data.h create mode 100644 src/sensor_fusion/standalone/util/test/sensor_data_test/.cproject create mode 100644 src/sensor_fusion/standalone/util/test/sensor_data_test/.project create mode 100644 src/sensor_fusion/standalone/util/test/sensor_data_test/sensor_data_main.cpp diff --git a/src/sensor_fusion/standalone/util/sensor_data.cpp b/src/sensor_fusion/standalone/util/sensor_data.cpp new file mode 100644 index 0000000..ed00cee --- /dev/null +++ b/src/sensor_fusion/standalone/util/sensor_data.cpp @@ -0,0 +1,104 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#if defined (_SENSOR_DATA_H) && defined (_VECTOR_H) + +#include "math.h" + +#define SENSOR_DATA_SIZE 3 + +template +sensor_data::sensor_data() : m_data(SENSOR_DATA_SIZE) +{ +} + +template +sensor_data::sensor_data(const TYPE x, const TYPE y, const TYPE z) +{ + TYPE vec_data[SENSOR_DATA_SIZE] = {x, y, z}; + + vector v(SENSOR_DATA_SIZE, vec_data); + m_data = v; +} + +template +sensor_data::sensor_data(const vector v) +{ + m_data = v; +} + +template +sensor_data::sensor_data(const sensor_data& s) +{ + m_data = s.m_data; +} + +template +sensor_data::~sensor_data() +{ +} + +template +sensor_data sensor_data::operator =(const sensor_data& s) +{ + m_data = s.m_data; +} + +template +sensor_data operator +(sensor_data data1, sensor_data data2) +{ + return (data1.m_data + data2.m_data); +} + +template +sensor_data normalize(sensor_data data) +{ + T x, y, z; + + x = data.m_data.m_vec[0]; + y = data.m_data.m_vec[1]; + z = data.m_data.m_vec[2]; + + T val = sqrt(x*x + y*y + z*z); + + x /= val; + y /= val; + z /= val; + + sensor_data s(x, y, z); + + return s; +} + +template +sensor_data scale_data(sensor_data data, T scaling_factor) +{ + T x, y, z; + + x = data.m_data.m_vec[0] / scaling_factor; + y = data.m_data.m_vec[1] / scaling_factor; + z = data.m_data.m_vec[2] / scaling_factor; + + sensor_data s(x, y, z); + + return s; +} + +#endif /* _SENSOR_DATA_H */ + diff --git a/src/sensor_fusion/standalone/util/sensor_data.h b/src/sensor_fusion/standalone/util/sensor_data.h new file mode 100644 index 0000000..18a5ee1 --- /dev/null +++ b/src/sensor_fusion/standalone/util/sensor_data.h @@ -0,0 +1,48 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _SENSOR_DATA_H +#define _SENSOR_DATA_H + +#include "vector.h" + +template +class sensor_data { +public: + vector m_data; + + sensor_data(); + sensor_data(const TYPE x, const TYPE y, const TYPE z); + sensor_data(const vector v); + sensor_data(const sensor_data& s); + ~sensor_data(); + + sensor_data operator =(const sensor_data& s); + + template friend sensor_data operator +(sensor_data data1, + sensor_data data2); + + template friend sensor_data normalize(sensor_data data); + template friend sensor_data scale_data(sensor_data data, + T scaling_factor); +}; + +#include "sensor_data.cpp" + +#endif /* _SENSOR_DATA_H */ diff --git a/src/sensor_fusion/standalone/util/test/sensor_data_test/.cproject b/src/sensor_fusion/standalone/util/test/sensor_data_test/.cproject new file mode 100644 index 0000000..031195b --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/sensor_data_test/.cproject @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/sensor_fusion/standalone/util/test/sensor_data_test/.project b/src/sensor_fusion/standalone/util/test/sensor_data_test/.project new file mode 100644 index 0000000..2e0296a --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/sensor_data_test/.project @@ -0,0 +1,89 @@ + + + sensor_data_test + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/sensor_data_test/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + org.tizen.nativecpp.apichecker.core.builder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.tizen.nativecpp.apichecker.core.tizenCppNature + + diff --git a/src/sensor_fusion/standalone/util/test/sensor_data_test/sensor_data_main.cpp b/src/sensor_fusion/standalone/util/test/sensor_data_test/sensor_data_main.cpp new file mode 100644 index 0000000..8040ad6 --- /dev/null +++ b/src/sensor_fusion/standalone/util/test/sensor_data_test/sensor_data_main.cpp @@ -0,0 +1,61 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "../../sensor_data.h" + +int main() +{ + float arr1[3] = {1.04, -4.678, -2.34}; + + vector v1(3, arr1); + + sensor_data sd1(2.0, 3.0, 4.0); + sensor_data sd2(1.04, -4.678, -2.34); + sensor_data sd3(0.054, 1.097, 4.456); + sensor_data sd10(v1); + + cout << "Constructor tests\n"; + cout << "input\t" << v1 << "\n"; + cout << "output\t" << sd10.m_data << "\n\n"; + cout << "input\t" << v1 << "\n"; + cout << "output\t" << sd2.m_data<< "\n\n"; + + cout<< "Addition:\n"; + sensor_data sd4 = sd1 + sd2; + cout<< "\n" << sd1.m_data << "\n" << sd2.m_data; + cout<< "\nSum:\n" << sd4.m_data << endl; + sensor_data sd9 = sd1 + sd10; + cout<< "\n" << sd1.m_data << "\n" << sd10.m_data; + cout<< "\nSum:\n" << sd9.m_data << endl; + + cout<< "\n\n\nNormalization:\n"; + sensor_data sd6 = normalize(sd3); + cout<< "\n" << sd3.m_data; + cout<< "\nResult:\n" << sd6.m_data << endl; + sensor_data sd7 = normalize(sd2); + cout<< "\n" << sd2.m_data; + cout<< "\nResult:\n" << sd7.m_data << endl; + + float xx = 2.5; + cout<<"\n\n\nScale data:\n"; + sensor_data sd8 = scale_data(sd2, xx); + cout<< "\n" << sd2.m_data << "\n" << xx; + cout<< "\nResult:\n" << sd8.m_data << endl; +} + -- 2.7.4 From eb6ead93469da6a0c2de7fcbe9a508420b62b195 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Jun 2014 09:03:01 +0530 Subject: [PATCH 16/16] Fix related return values of assignment operators - Added return value for assignment operators that was missing - Cleanup of code signed-off-by: Ramasamy Change-Id: I584a56146c371ec2d398899f3a96f3101153e756 --- src/sensor_fusion/standalone/util/euler_angles.cpp | 2 ++ src/sensor_fusion/standalone/util/matrix.cpp | 40 ++++++++++++++++------ src/sensor_fusion/standalone/util/quaternion.cpp | 2 ++ src/sensor_fusion/standalone/util/sensor_data.cpp | 2 ++ .../util/test/matrix_test/matrix_main.cpp | 10 ++++-- .../util/test/vector_test/vector_main.cpp | 5 +++ src/sensor_fusion/standalone/util/vector.cpp | 23 ++++++++++--- 7 files changed, 67 insertions(+), 17 deletions(-) diff --git a/src/sensor_fusion/standalone/util/euler_angles.cpp b/src/sensor_fusion/standalone/util/euler_angles.cpp index 00f9439..4241788 100644 --- a/src/sensor_fusion/standalone/util/euler_angles.cpp +++ b/src/sensor_fusion/standalone/util/euler_angles.cpp @@ -60,6 +60,8 @@ template euler_angles euler_angles::operator =(const euler_angles& e) { m_ang = e.m_ang; + + return *this; } template diff --git a/src/sensor_fusion/standalone/util/matrix.cpp b/src/sensor_fusion/standalone/util/matrix.cpp index b6841ac..4c30d84 100755 --- a/src/sensor_fusion/standalone/util/matrix.cpp +++ b/src/sensor_fusion/standalone/util/matrix.cpp @@ -72,9 +72,12 @@ matrix::matrix(const int rows, const int cols, TYPE *mat_data) template matrix::~matrix() { - for (int i = 0; i < m_rows; i++) - delete[] m_mat[i]; - delete[] m_mat; + if (m_mat != NULL) + { + for (int i = 0; i < m_rows; i++) + delete[] m_mat[i]; + delete[] m_mat; + } } template @@ -85,16 +88,31 @@ matrix matrix::operator =(const matrix& m) return *this; } - for (int i = 0; i < m_rows; i++) - delete[] m_mat[i]; - delete[] m_mat; + if (m_mat == NULL) + { + m_rows = m.m_rows; + m_cols = m.m_cols; + m_mat = new TYPE *[m_rows]; - m_rows = m.m_rows; - m_cols = m.m_cols; - m_mat = new TYPE *[m_rows]; + for (int i = 0; i < m_rows; i++) + m_mat[i] = new TYPE [m_cols]; + } + else + { + if ((m_rows != m.m_rows) || (m_cols != m.m_cols)) + { + for (int i = 0; i < m_rows; i++) + delete[] m_mat[i]; + delete[] m_mat; - for (int i = 0; i < m_rows; i++) - m_mat[i] = new TYPE [m_cols]; + m_rows = m.m_rows; + m_cols = m.m_cols; + m_mat = new TYPE *[m_rows]; + + for (int i = 0; i < m_rows; i++) + m_mat[i] = new TYPE [m_cols]; + } + } for (int p = 0; p < m_rows; p++) for (int q = 0; q < m_cols; q++) diff --git a/src/sensor_fusion/standalone/util/quaternion.cpp b/src/sensor_fusion/standalone/util/quaternion.cpp index d226828..37e8ac6 100755 --- a/src/sensor_fusion/standalone/util/quaternion.cpp +++ b/src/sensor_fusion/standalone/util/quaternion.cpp @@ -58,6 +58,8 @@ template quaternion quaternion::operator =(const quaternion& q) { m_quat = q.m_quat; + + return *this; } template diff --git a/src/sensor_fusion/standalone/util/sensor_data.cpp b/src/sensor_fusion/standalone/util/sensor_data.cpp index ed00cee..4276631 100644 --- a/src/sensor_fusion/standalone/util/sensor_data.cpp +++ b/src/sensor_fusion/standalone/util/sensor_data.cpp @@ -58,6 +58,8 @@ template sensor_data sensor_data::operator =(const sensor_data& s) { m_data = s.m_data; + + return *this; } template diff --git a/src/sensor_fusion/standalone/util/test/matrix_test/matrix_main.cpp b/src/sensor_fusion/standalone/util/test/matrix_test/matrix_main.cpp index f7cbf80..3fc2fd6 100644 --- a/src/sensor_fusion/standalone/util/test/matrix_test/matrix_main.cpp +++ b/src/sensor_fusion/standalone/util/test/matrix_test/matrix_main.cpp @@ -92,11 +92,11 @@ int main() float x = 4.0; float x1 = -2.5; cout<< "\n\n\nScalar subtraction\n"; - m3 = m11 - x; + m13 = m11 - x; m6 = m10 - x1; cout<< "\nNumber Subtracted:" << x; cout<< "\n\n" << m11; - cout<< "\nResult:\n\n" << m3; + cout<< "\nResult:\n\n" << m13; cout<< "\nNumber Subtracted:" << x1; cout<< "\n\n" << m10; cout<< "\nResult:\n\n" << m6; @@ -137,4 +137,10 @@ int main() cout << "\n\nm1:\n\n" << m1; cout << "\n\n\nm6 != m1 :"; cout << (m6 != m1); + + + cout<< "\n\nAssignment\n"; + m3 = m12; + cout<< "Input \n" << m12; + cout<< "\nOutput:\n" << m3 << endl; } diff --git a/src/sensor_fusion/standalone/util/test/vector_test/vector_main.cpp b/src/sensor_fusion/standalone/util/test/vector_test/vector_main.cpp index 6ec31b8..8e46ab2 100644 --- a/src/sensor_fusion/standalone/util/test/vector_test/vector_main.cpp +++ b/src/sensor_fusion/standalone/util/test/vector_test/vector_main.cpp @@ -147,5 +147,10 @@ int main() cout << "\n\nv15:\n\n" << v15; cout << "\n\n\nv15 != v15 :"; cout << (v15 != v15); + + cout<< "\n\nAssignment\n"; + v3 = v1; + cout<< "Input \n" << v1; + cout<< "\nOutput:\n" << v3 << endl; } diff --git a/src/sensor_fusion/standalone/util/vector.cpp b/src/sensor_fusion/standalone/util/vector.cpp index e234319..3a572fc 100644 --- a/src/sensor_fusion/standalone/util/vector.cpp +++ b/src/sensor_fusion/standalone/util/vector.cpp @@ -58,7 +58,8 @@ vector::vector(const vector& v) template vector::~vector() { - delete[] m_vec; + if (m_vec != NULL) + delete[] m_vec; } template @@ -69,13 +70,27 @@ vector vector::operator =(const vector& v) return *this; } - delete[] m_vec; - m_size = v.m_size; - m_vec = new TYPE [m_size]; + if (m_vec == NULL) + { + m_size = v.m_size; + m_vec = new TYPE [m_size]; + } + else + { + if (m_size != v.m_size) + { + delete[] m_vec; + + m_size = v.m_size; + m_vec = new TYPE [m_size]; + } + } + for (int q = 0; q < m_size; q++) m_vec[q] = v.m_vec[q]; + return *this; } -- 2.7.4