Creating a vector made of three different unit vectors
11 次查看(过去 30 天)
显示 更早的评论
Good afternoon,
I have three different unit vectors (I, J, K) composed of [Ix, Iy, Iz], [Jx, Jy, Jz], and lastly [Kx, Ky, Kz]. Each in dimension of 6349X3. I would like to create a vector P1 in the from that P1 = [Ix Jx Kx
Iy Jy Ky
Iz Jz Kz ]
And P2 in the same format of P1 but has different values of I, J, K
I need to create this P1 and P2 vector in order to calculate the rotation matrix, [R] = [P2]T[P1]
How do I create P1 and P2 so that the P1 and P2 is in dimesion 3X3 and cycles through the first index to the last calculating the rotation vector for each index?
I tried creating a for loop, however I landed up getting a vector in dimesnions 6349X9.
Please let me know if you require any data, workspace or code for reference.
Thank you in advance
采纳的回答
Mathieu NOE
2021-6-28
hello Alexandra
see demo code below ; the matrixes P and R have size 3 x 3 x 6349 (iterations are in 3rd index)
% A = [Ix, Iy, Iz] dimension of 6349X3
% B = [Jx, Jy, Jz] dimension of 6349X3
% C = [Kx, Ky, Kz] dimension of 6349X3
% P1 = [Ix Jx Kx
% Iy Jy Ky
% Iz Jz Kz ];
% so P1 = [A' B' C'];
m = 6349;
n = 3;
A = rand(m,n);
B = rand(m,n);
C = rand(m,n);
T = eye(n,n);
for ci = 1:m
P1 = [A(ci,:)' B(ci,:)' C(ci,:)'];
P2 = P1; % dummy code => change the P2 computation as needed
R(:,:,ci) = P2*T*P1;
end
11 个评论
alexandra ligeti
2021-6-28
Hi,
Thank you for your help... I am getting this issue when I implement the code. Please would you advise?![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/667600/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/667600/image.png)
Mathieu NOE
2021-6-28
hello again
I had to comment a more few lines to avoid errors due to missing data
I continued the work in the last portion and , found probably a mistake in the selection of the R matrix elements of the gamma angle (first row and not second row elements are used)
otherwise, so far so good !
% Comparing Vicon to MotionSense
% Dynamic Test completed at various differnet held angles
% Angles measured with the inclinometer
% Run before running the plotting matlab file
% Opens all required files
% Run this file first
%22/06/2021
clearvars
clc
close all
%% Open Desired Files
%Open Static vicon files trial 1
% VicREF = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\StaticRefAngle.csv');
% VicDyn_5 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\Dynamic_5Deg.csv');
VicREF = readmatrix('StaticRefAngle.csv');
VicDyn_5 = readmatrix('Dynamic_5Deg.csv');
% VicDyn_10 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\Dynamic_10Deg.csv');
% VicDyn_20 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\Dynamic_20Deg.csv');
%
% %Open Static vicon files trial 2
% VicDyn_5_2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\Dynamic_5Deg01.csv');
% VicDyn_10_2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\Dynamic_10Deg01.csv');
% VicDyn_20_2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\Dynamic_20Deg01.csv');
%
% %Open Static vicon files trial 3
% VicDyn_5_3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\Dynamic_5Deg02.csv');
% VicDyn_10_3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\Dynamic_10Deg02.csv');
% VicDyn_20_3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210622\Dynamic_20Deg02.csv');
% %Open motion sense static file
% %First trial
% Sen_StaREF = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Static\16QA_log_22062021_10-54-27.csv');
% Sen_Dyn_5 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Dynamic\16QA_log_22062021_13-36-24');
% Sen_Dyn_10 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Dynamic\16QA_log_22062021_14-03-03.csv');
% Sen_Dyn_20 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Dynamic\16QA_log_22062021_14-20-44.csv');
%
% %Second trial
% Sen_Dyn_5_2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Dynamic\16QA_log_22062021_13-49-43.csv');
% Sen_Dyn_10_2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Dynamic\16QA_log_22062021_14-08-28.csv');
% Sen_Dyn_20_2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Dynamic\16QA_log_22062021_14-26-08.csv');
%
% %Third trial
% Sen_Dyn_5_3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Dynamic\16QA_log_22062021_13-57-42.csv');
% Sen_Dyn_10_3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Dynamic\16QA_log_22062021_14-13-24.csv');
% Sen_Dyn_20_3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\22_06_2021\Dynamic\16QA_log_22062021_14-30-33.csv');
% This file sets up the markers and the vectors for the anaysis
% Run second
close all
%% Marker Points
%Static Reference Trial
% Marker Positions for static marker
marker_1_Ref = VicREF(5:end,3:5)/1000;
marker_2_Ref = VicREF(5:end,6:8)/1000;
marker_3_Ref = VicREF(5:end,9:11)/1000;
%Trail one
% Marker Positions for static marker at 5 deg
marker_1_D5 = VicDyn_5(5:end,3:5)/1000;
marker_2_D5 = VicDyn_5(5:end,6:8)/1000;
marker_3_D5 = VicDyn_5(5:end,9:11)/1000;
% % Marker Positions for static marker at 10 deg
% marker_1_D10 = VicDyn_10(5:end,3:5)/1000;
% marker_2_D10 = VicDyn_10(5:end,6:8)/1000;
% marker_3_D10 = VicDyn_10(5:end,9:11)/1000;
% % Marker Positions for static marker at 20 deg
% marker_1_D20 = VicDyn_20(:,3:5)/1000;
% marker_2_D20 = VicDyn_20(:,6:8)/1000;
% marker_3_D20 = VicDyn_20(:,9:11)/1000;
%
% %Trail Two
% % Marker Positions for static marker at 5 deg
% marker_1_D5_2 = VicDyn_5_2(5:end,3:5)/1000;
% marker_2_D5_2 = VicDyn_5_2(5:end,6:8)/1000;
% marker_3_D5_2 = VicDyn_5_2(5:end,9:11)/1000;
% % Marker Positions for static marker at 10 deg
% marker_1_D10_2 = VicDyn_10_2(:,3:5)/1000;
% marker_2_D10_2 = VicDyn_10_2(:,6:8)/1000;
% marker_3_D10_2 = VicDyn_10_2(:,9:11)/1000;
% % Marker Positions for static marker at 20 deg
% marker_1_D20_2 = VicDyn_20_2(:,3:5)/1000;
% marker_2_D20_2 = VicDyn_20_2(:,6:8)/1000;
% marker_3_D20_2 = VicDyn_20_2(:,9:11)/1000;
%
% %Trail Three
% % Marker Positions for static marker at 5 deg
% marker_1_D5_3 = VicDyn_5_3(:,3:5)/1000;
% marker_2_D5_3 = VicDyn_5_3(:,6:8)/1000;
% marker_3_D5_3 = VicDyn_5_3(:,9:11)/1000;
% % Marker Positions for static marker at 10 deg
% marker_1_D10_3 = VicDyn_10_3(5:end,3:5)/1000;
% marker_2_D10_3 = VicDyn_10_3(5:end,6:8)/1000;
% marker_3_D10_3 = VicDyn_10_3(5:end,9:11)/1000;
% % Marker Positions for static marker at 20 deg
% marker_1_D20_3 = VicDyn_20_3(:,3:5)/1000;
% marker_2_D20_3 = VicDyn_20_3(:,6:8)/1000;
% marker_3_D20_3 = VicDyn_20_3(:,9:11)/1000;
%Create Source Vectors
%Trial 1
%REF VECTOR
Refvec_1 = marker_2_Ref - marker_1_Ref;
Refvec_2 = marker_3_Ref - marker_1_Ref;
Refvec_3 = cross(Refvec_1, Refvec_2);
Refvec_4 = cross(Refvec_3, Refvec_1); %Vector in pendulums swining plane
%DYNAMIC
%Vectors at 5 deg
Dvec_1_5 = marker_2_D5 - marker_1_D5;
Dvec_2_5 = marker_3_D5- marker_1_D5;
Dvec_3_5 = cross(Dvec_1_5, Dvec_2_5);
Dvec_4_5 = cross(Dvec_3_5, Dvec_1_5); %Vector in pendulums swining plane
% %Vectors at 10 deg
% Dvec_1_10 = marker_2_D10 - marker_1_D10;
% Dvec_2_10 = marker_3_D10- marker_1_D10;
% Dvec_3_10 = cross(Dvec_1_10, Dvec_2_10);
% Dvec_4_10 = cross(Dvec_3_10, Dvec_1_10); %Vector in pendulums swining plane
% %Vectors at 20 deg
% Dvec_1_20 = marker_2_D20 - marker_1_D20;
% Dvec_2_20 = marker_3_D20- marker_1_D20;
% Dvec_3_20 = cross(Dvec_1_20, Dvec_2_20);
% Dvec_4_20 = cross(Dvec_3_20, Dvec_1_20); %Vector in pendulums swining plane
%
% %Trial 2
% %Vectors
% %Vectors at 5 deg
% Dvec_1_5T2 = marker_2_D5_2 - marker_1_D5_2;
% Dvec_2_5T2 = marker_3_D5_2- marker_1_D5_2;
% Dvec_3_5T2 = cross(Dvec_1_5T2, Dvec_2_5T2);
% Dvec_4_5T2 = cross(Dvec_3_5T2, Dvec_1_5T2); %Vector in pendulums swining plane
% %Vectors at 10 deg
% Dvec_1_10T2 = marker_2_D10_2 - marker_1_D10_2;
% Dvec_2_10T2 = marker_3_D10_2- marker_1_D10_2;
% Dvec_3_10T2 = cross(Dvec_1_10T2, Dvec_2_10T2);
% Dvec_4_10T2 = cross(Dvec_3_10T2, Dvec_1_10T2); %Vector in pendulums swining plane
% %Vectors at 20 deg
% Dvec_1_20T2 = marker_2_D20_2 - marker_1_D20_2;
% Dvec_2_20T2 = marker_3_D20_2- marker_1_D20_2;
% Dvec_3_20T2 = cross(Dvec_1_20T2, Dvec_2_20T2);
% Dvec_4_20T2 = cross(Dvec_3_20T2, Dvec_1_20T2); %Vector in pendulums swining plane
%
% %Trial 3
% %Vectors at 5 deg
% Dvec_1_5T3 = marker_2_D5_3 - marker_1_D5_3;
% Dvec_2_5T3 = marker_3_D5_3- marker_1_D5_3;
% Dvec_3_5T3 = cross(Dvec_1_5T3, Dvec_2_5T3);
% Dvec_4_5T3 = cross(Dvec_3_5T3, Dvec_1_5T3); %Vector in pendulums swining plane
% %Vectors at 10 deg
% Dvec_1_10T3 = marker_2_D10_3 - marker_1_D10_3;
% Dvec_2_10T3 = marker_3_D10_3- marker_1_D10_3;
% Dvec_3_10T3 = cross(Dvec_1_10T3, Dvec_2_10T3);
% Dvec_4_10T3 = cross(Dvec_3_10T3, Dvec_1_10T3); %Vector in pendulums swining plane
% %Vectors at 20 deg
% Dvec_1_20T3 = marker_2_D20_3 - marker_1_D20_3;
% Dvec_2_20T3 = marker_3_D20_3- marker_1_D20_3;
% Dvec_3_20T3 = cross(Dvec_1_20T3, Dvec_2_20T3);
% Dvec_4_20T3 = cross(Dvec_3_20T3, Dvec_1_20T3); %Vector in pendulums swining plane
%% Making vectors the same length
%Determine longest vector
% Vicmax = max([size(Refvec_4,1) size(Refvec_3,1) size(Refvec_1,1) size(Dvec_4_5,1) size(Dvec_1_5,1) size(Dvec_3_5,1) size(Dvec_4_10,1) size(Dvec_1_10,1) size(Dvec_3_10,1) size(Dvec_4_20,1) size(Dvec_1_20,1) size(Dvec_3_20,1) size(Dvec_4_5T2,1) size(Dvec_4_10T2,1) size(Dvec_4_20T2,1) size(Dvec_4_5T3,1) size(Dvec_4_10T3,1) size(Dvec_4_20T3,1) size(Dvec_1_5T2,1) size(Dvec_1_10T2,1) size(Dvec_1_20T2,1) size(Dvec_1_5T3,1) size(Dvec_1_10T3,1) size(Dvec_1_20T3,1) size(Dvec_3_5T2,1) size(Dvec_3_10T2,1) size(Dvec_3_20T2,1) size(Dvec_3_5T3,1) size(Dvec_3_10T3,1) size(Dvec_3_20T3,1)]);
Vicmax = max([size(Refvec_4,1) size(Refvec_3,1) size(Refvec_1,1),size(Dvec_4_5,1) size(Dvec_1_5,1) size(Dvec_3_5,1)]);% size(Dvec_4_10,1) size(Dvec_1_10,1) size(Dvec_3_10,1) size(Dvec_4_20,1) size(Dvec_1_20,1) size(Dvec_3_20,1) size(Dvec_4_5T2,1) size(Dvec_4_10T2,1) size(Dvec_4_20T2,1) size(Dvec_4_5T3,1) size(Dvec_4_10T3,1) size(Dvec_4_20T3,1) size(Dvec_1_5T2,1) size(Dvec_1_10T2,1) size(Dvec_1_20T2,1) size(Dvec_1_5T3,1) size(Dvec_1_10T3,1) size(Dvec_1_20T3,1) size(Dvec_3_5T2,1) size(Dvec_3_10T2,1) size(Dvec_3_20T2,1) size(Dvec_3_5T3,1) size(Dvec_3_10T3,1) size(Dvec_3_20T3,1)]);
%Padding with zero to make same length
Zpad = zeros(Vicmax,3);
newREFvec_4= Zpad;
newDvec_4_5= Zpad;
% newDvec_4_10= Zpad;
% newDvec_4_20= Zpad;
% newDvec_4_5T2= Zpad;
% newDvec_4_10T2= Zpad;
% newDvec_4_20T2= Zpad;
% newDvec_4_5T3= Zpad;
% newDvec_4_10T3= Zpad;
% newDvec_4_20T3= Zpad;
newREFvec_1= Zpad;
newDvec_1_5= Zpad;
% newDvec_1_10= Zpad;
% newDvec_1_20= Zpad;
newDvec_1_5T2= Zpad;
% newDvec_1_10T2= Zpad;
% newDvec_1_20T2= Zpad;
newDvec_1_5T3= Zpad;
% newDvec_1_10T3= Zpad;
% newDvec_1_20T3= Zpad;
newREFvec_3= Zpad;
newDvec_3_5= Zpad;
% newDvec_3_10= Zpad;
% newDvec_3_20= Zpad;
newDvec_3_5T2= Zpad;
% newDvec_3_10T2= Zpad;
% newDvec_3_20T2= Zpad;
newDvec_3_5T3= Zpad;
% newDvec_3_10T3= Zpad;
% newDvec_3_20T3= Zpad;
%Ensuring all sizes are the same
newREFvec_4(1:size(Refvec_4),:)= Refvec_4;
newDvec_4_5(1:size(Dvec_4_5),:)= Dvec_4_5;
% newDvec_4_10(1:size(Dvec_4_10),:)= Dvec_4_10;
% newDvec_4_20(1:size(Dvec_4_20),:)= Dvec_4_20;
% newDvec_4_5T2(1:size(Dvec_4_5T2),:)= Dvec_4_5T2;
% newDvec_4_10T2(1:size(Dvec_4_10T2),:)= Dvec_4_10T2;
% newDvec_4_20T2(1:size(Dvec_4_20T2),:)= Dvec_4_20T2;
% newDvec_4_5T3(1:size(Dvec_4_5T3),:)= Dvec_4_5T3;
% newDvec_4_10T3(1:size(Dvec_4_10T3),:)= Dvec_4_10T3;
% newDvec_4_20T3(1:size(Dvec_4_20T3),:)= Dvec_4_20T3;
newREFvec_1(1:size(Refvec_1),:)= Refvec_1;
newDvec_1_5(1:size(Dvec_1_5),:)= Dvec_1_5;
% newDvec_1_10(1:size(Dvec_1_10),:)= Dvec_1_10;
% newDvec_1_20(1:size(Dvec_1_20),:)= Dvec_1_20;
% newDvec_1_5T2(1:size(Dvec_1_5T2),:)= Dvec_1_5T2;
% newDvec_1_10T2(1:size(Dvec_1_10T2),:)= Dvec_1_10T2;
% newDvec_1_20T2(1:size(Dvec_1_20T2),:)= Dvec_1_20T2;
% newDvec_1_5T3(1:size(Dvec_1_5T3),:)= Dvec_1_5T3;
% newDvec_1_10T3(1:size(Dvec_1_10T3),:)= Dvec_1_10T3;
% newDvec_1_20T3(1:size(Dvec_1_20T3),:)= Dvec_1_20T3;
newREFvec_3(1:size(Refvec_3),:)= Refvec_3;
newDvec_3_5(1:size(Dvec_3_5),:)= Dvec_3_5;
% newDvec_3_10(1:size(Dvec_3_10),:)= Dvec_3_10;
% newDvec_3_20(1:size(Dvec_3_20),:)= Dvec_3_20;
% newDvec_3_5T2(1:size(Dvec_3_5T2),:)= Dvec_3_5T2;
% newDvec_3_10T2(1:size(Dvec_3_10T2),:)= Dvec_3_10T2;
% newDvec_3_20T2(1:size(Dvec_3_20T2),:)= Dvec_3_20T2;
% newDvec_3_5T3(1:size(Dvec_3_5T3),:)= Dvec_3_5T3;
% newDvec_3_10T3(1:size(Dvec_3_10T3),:)= Dvec_3_10T3;
% newDvec_3_20T3(1:size(Dvec_3_20T3),:)= Dvec_3_20T3;
%% Vector Magnitudes for pendulum plane
Mag_newvec_4_Ref = sqrt((newREFvec_4(:,1)).^2 + (newREFvec_4(:,2)).^2 + (newREFvec_4(:,3)).^2);
Mag_newDvec_4_5 = sqrt((newDvec_4_5(:,1)).^2 + (newDvec_4_5(:,2)).^2 + (newDvec_4_5(:,3)).^2);
% Mag_newDvec_4_10= sqrt((newDvec_4_10(:,1)).^2 + (newDvec_4_10(:,2)).^2 + (newDvec_4_10(:,3)).^2);
% Mag_newDvec_4_20= sqrt((newDvec_4_20(:,1)).^2 + (newDvec_4_20(:,2)).^2 + (newDvec_4_20(:,3)).^2);
% Mag_newDvec_4_5T2= sqrt((newDvec_4_5T2(:,1)).^2 + (newDvec_4_5T2(:,2)).^2 + (newDvec_4_5T2(:,3)).^2);
%Mag_newDvec_4_10T2= sqrt((newDvec_4_10T2(:,1)).^2 + (newDvec_4_10T2(:,2)).^2 + (newDvec_4_10T2(:,3)).^2);
%Mag_newDvec_4_20T2= sqrt((newDvec_4_20T2(:,1)).^2 + (newDvec_4_20T2(:,2)).^2 + (newDvec_4_20T2(:,3)).^2);
% Mag_newDvec_4_5T3= sqrt((newDvec_4_5T3(:,1)).^2 + (newDvec_4_5T3(:,2)).^2 + (newDvec_4_5T3(:,3)).^2);
%Mag_newDvec_4_10T3= sqrt((newDvec_4_10T3(:,1)).^2 + (newDvec_4_10T3(:,2)).^2 + (newDvec_4_10T3(:,3)).^2);
%Mag_newDvec_4_20T3= sqrt((newDvec_4_20T3(:,1)).^2 + (newDvec_4_20T3(:,2)).^2 + (newDvec_4_20T3(:,3)).^2);
Mag_newvec_1_Ref = sqrt((newREFvec_1(:,1)).^2 + (newREFvec_1(:,2)).^2 + (newREFvec_1(:,3)).^2);
Mag_newDvec_1_5 = sqrt((newDvec_1_5(:,1)).^2 + (newDvec_1_5(:,2)).^2 + (newDvec_1_5(:,3)).^2);
%Mag_newDvec_1_10= sqrt((newDvec_1_10(:,1)).^2 + (newDvec_1_10(:,2)).^2 + (newDvec_1_10(:,3)).^2);
%Mag_newDvec_1_20= sqrt((newDvec_1_20(:,1)).^2 + (newDvec_1_20(:,2)).^2 + (newDvec_1_20(:,3)).^2);
% Mag_newDvec_1_5T2= sqrt((newDvec_1_5T2(:,1)).^2 + (newDvec_1_5T2(:,2)).^2 + (newDvec_1_5T2(:,3)).^2);
%Mag_newDvec_1_10T2= sqrt((newDvec_1_10T2(:,1)).^2 + (newDvec_1_10T2(:,2)).^2 + (newDvec_1_10T2(:,3)).^2);
%Mag_newDvec_1_20T2= sqrt((newDvec_1_20T2(:,1)).^2 + (newDvec_1_20T2(:,2)).^2 + (newDvec_1_20T2(:,3)).^2);
% Mag_newDvec_1_5T3= sqrt((newDvec_1_5T3(:,1)).^2 + (newDvec_1_5T3(:,2)).^2 + (newDvec_1_5T3(:,3)).^2);
%Mag_newDvec_1_10T3= sqrt((newDvec_1_10T3(:,1)).^2 + (newDvec_1_10T3(:,2)).^2 + (newDvec_1_10T3(:,3)).^2);
%Mag_newDvec_1_20T3= sqrt((newDvec_1_20T3(:,1)).^2 + (newDvec_1_20T3(:,2)).^2 + (newDvec_1_20T3(:,3)).^2);
Mag_newvec_3_Ref = sqrt((newREFvec_3(:,1)).^2 + (newREFvec_3(:,2)).^2 + (newREFvec_3(:,3)).^2);
Mag_newDvec_3_5 = sqrt((newDvec_3_5(:,1)).^2 + (newDvec_3_5(:,2)).^2 + (newDvec_3_5(:,3)).^2);
%Mag_newDvec_3_10= sqrt((newDvec_3_10(:,1)).^2 + (newDvec_3_10(:,2)).^2 + (newDvec_3_10(:,3)).^2);
%Mag_newDvec_3_20= sqrt((newDvec_3_20(:,1)).^2 + (newDvec_3_20(:,2)).^2 + (newDvec_3_20(:,3)).^2);
% Mag_newDvec_3_5T2= sqrt((newDvec_3_5T2(:,1)).^2 + (newDvec_3_5T2(:,2)).^2 + (newDvec_3_5T2(:,3)).^2);
%Mag_newDvec_3_10T2= sqrt((newDvec_3_10T2(:,1)).^2 + (newDvec_3_10T2(:,2)).^2 + (newDvec_3_10T2(:,3)).^2);
%Mag_newDvec_3_20T2= sqrt((newDvec_3_20T2(:,1)).^2 + (newDvec_3_20T2(:,2)).^2 + (newDvec_3_20T2(:,3)).^2);
% Mag_newDvec_3_5T3= sqrt((newDvec_3_5T3(:,1)).^2 + (newDvec_3_5T3(:,2)).^2 + (newDvec_3_5T3(:,3)).^2);
%Mag_newDvec_3_10T3= sqrt((newDvec_3_10T3(:,1)).^2 + (newDvec_3_10T3(:,2)).^2 + (newDvec_3_10T3(:,3)).^2);
%Mag_newDvec_3_20T3= sqrt((newDvec_3_20T3(:,1)).^2 + (newDvec_3_20T3(:,2)).^2 + (newDvec_3_20T3(:,3)).^2);
%% Unit vectors for all trails
iunit_REFvec_3 = newREFvec_3./(Mag_newvec_3_Ref);
iunit_Dvec_3_5 = newDvec_3_5./(Mag_newDvec_3_5);
% iunit_Dvec_3_10 = newDvec_3_10./(Mag_newDvec_3_10);
% iunit_Dvec_3_20 = newDvec_3_20./(Mag_newDvec_3_20);
% iunit_Dvec_3_5T2 = newDvec_3_5T2./(Mag_newDvec_3_5T2);
% iunit_Dvec_3_10T2 = newDvec_3_10T2./(Mag_newDvec_3_10T2);
% iunit_Dvec_3_20T2 = newDvec_3_20T2./(Mag_newDvec_3_20T2);
% iunit_Dvec_3_5T3 = newDvec_3_5T3./(Mag_newDvec_3_5T3);
% iunit_Dvec_3_10T3 = newDvec_3_10T3./(Mag_newDvec_3_10T3);
% iunit_Dvec_3_20T3 = newDvec_3_20T3./(Mag_newDvec_3_20T3);
junit_REFvec_4 = newREFvec_4./(Mag_newvec_4_Ref);
junit_Dvec_4_5 = newDvec_4_5./(Mag_newDvec_4_5);
% junit_Dvec_4_10 = newDvec_4_10./(Mag_newDvec_4_10);
% junit_Dvec_4_20 = newDvec_4_20./(Mag_newDvec_4_20);
% junit_Dvec_4_5T2 = newDvec_4_5T2./(Mag_newDvec_4_5T2);
% junit_Dvec_4_10T2 = newDvec_4_10T2./(Mag_newDvec_4_10T2);
% junit_Dvec_4_20T2 = newDvec_4_20T2./(Mag_newDvec_4_20T2);
% junit_Dvec_4_5T3 = newDvec_4_5T3./(Mag_newDvec_4_5T3);
% junit_Dvec_4_10T3 = newDvec_4_10T3./(Mag_newDvec_4_10T3);
% junit_Dvec_4_20T3 = newDvec_4_20T3./(Mag_newDvec_4_20T3);
kunit_REFvec_1 = -newREFvec_1./(Mag_newvec_1_Ref);
kunit_Dvec_1_5 = -newDvec_1_5./(Mag_newDvec_1_5);
% kunit_Dvec_1_10 = -newDvec_1_10./(Mag_newDvec_1_10);
% kunit_Dvec_1_20 = -newDvec_1_20./(Mag_newDvec_1_20);
% kunit_Dvec_1_5T2 = -newDvec_1_5T2./(Mag_newDvec_1_5T2);
%kunit_Dvec_1_10T2 = -newDvec_1_10T2./(Mag_newDvec_1_10T2);
%kunit_Dvec_1_20T2 = -newDvec_1_20T2./(Mag_newDvec_1_20T2);
% kunit_Dvec_1_5T3 = -newDvec_1_5T3./(Mag_newDvec_1_5T3);
%kunit_Dvec_1_10T3 = -newDvec_1_10T3./(Mag_newDvec_1_10T3);
%kunit_Dvec_1_20T3 = -newDvec_1_20T3./(Mag_newDvec_1_20T3);
%% Setting up Segment coordinate system
%Proximal = Static Ref vector
iREF= iunit_REFvec_3';
jREF= junit_REFvec_4';
kREF= kunit_REFvec_1';
i5deg = iunit_Dvec_3_5';
j5deg = junit_Dvec_4_5';
k5deg = kunit_Dvec_1_5';
% for ci = 1:6349
% P1 = [iunit_REFvec_3(:,ci) junit_REFvec_4(:,ci) kunit_REFvec_1(:,ci)];
% P2 = [iunit_Dvec_3_5(:,ci) junit_Dvec_4_5(:,ci) kunit_Dvec_1_5(:,ci)]; % dummy code => change the P2 computation as needed
% R(ci,:,:) = dot(P2',P1);
% end
for ci = 1:Vicmax
p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
p2 = [iunit_Dvec_3_5(ci,:)', junit_Dvec_4_5(ci,:)', kunit_Dvec_1_5(ci,:)']; %First entry
R = p2'.*p1;
sinBeta = R(3,1); % ok
Beta(ci) = (180.*(asin(sinBeta))./pi); % ok
tanalpha = -(R(3,2))./(R(3,3)); % ok
alpha(ci) = (180.*(atan(tanalpha))./pi); % ok
%tangamma = -(R(2,2))./(R(1,2)); % no...?
tangamma = -(R(2,1))./(R(1,1)); % my suggestion
gamma(ci) = (180.*(atan(tangamma))./pi);
end
alexandra ligeti
2021-6-28
Thank you so much for that!
You have been a massive help. I am sure I will be asking a couple more questions again. But appreciate the help thus far.
alexandra ligeti
2021-7-2
Hi Mathieu,
I have tried implementing this method with other files, however at the step where we calculate P1 in the hopes of getting a 3X3 matric, I get a 3X3 matrix compiled of NaN values. If I do the same step but do not take the transpose if get a 1X9 vector with integer values. Would you be bale to advise as to what I should do to get a 3X3 matrix while avoiding NaN.
Many thanks,
Alexandra
Mathieu NOE
2021-7-2
hello
yes sure , can you provide the code and data (file) when it generates the NaN ?
Mathieu NOE
2021-7-4
hello Alexandra
sorry but it seems to me there is a portion of code that is missing, about how you load the attached data files and to which variables they are related
thanks
alexandra ligeti
2021-7-4
编辑:alexandra ligeti
2021-7-4
Hi,
I have just run the code and this is the working code but produces the NaN values. I cant upload all the files because it only allows ten files to be uploaded at a time, so will upload the files tomorrow.
I have files for angles 0 (refernce), 5 degrees, 10 degrees and 15 degrees with three trials recorded for angles 5, 10 and 15). I commented the code to just focus on the 5 degree scenarios as the Nan Values appear for all cases, if we can sort it for one case, I will be able to fix all cases. I think I forgot to upload the static trial which acts as the refence and so that is why the code is not running as desired. Will upload when the daily upload limit allows me to.
close all
clear all
%Open vicon files
VicSta = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Static_Trial_WeightHigh');
VicDyn5 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Dynamic_Trial_Weight_5degHigh01');
%VicDyn5T2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Dynamic_Trial_Weight_5degHigh02');
% VicDyn5T3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Dynamic_Trial_WeightHigh5Deg03');
% VicDyn10 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Dynamic_Trial_WeightHigh10Deg');
% VicDyn10T2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Dynamic_Trial_WeightHigh10Deg02');
% VicDyn10T3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Dynamic_Trial_WeightHigh10Deg03');
% VicDyn15 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Dynamic_Trial_WeightHigh15Deg');
% VicDyn15T2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Dynamic_Trial_WeightHigh15Deg01');
% VicDyn15T3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\ViconData\20210625\Dynamic_Trial_WeightHigh15Deg02');
%Open MotionSense
MSSta = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_12-32-09');
MSDyn5 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_12-36-38');
% MSDyn5T2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_12-39-47');
% MSDyn5T3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_12-48-10');
% MSDyn10 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_12-52-37');
% MSDyn10T2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_12-56-02');
% MSDyn10T3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_13-04-28');
% MSDyn15 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_13-07-32');
% MSDyn15T2 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_13-09-41');
% MSDyn15T3 = readmatrix('C:\Users\lexil\Documents\PhD\Code\MotionSenseData\25_06_2021\Weight_High\16QA_log_25062021_13-11-53');
close all
%% Marker Points
%Static Trial 1
% Marker Positions for static marker
marker_1_S = VicSta(:,3:5)/1000;
marker_2_S = VicSta(:,6:8)/1000;
marker_3_S = VicSta(:,9:11)/1000;
% Marker Positions 5 deg
marker_1_5 = VicDyn5(:,3:5)/1000;
marker_2_5 = VicDyn5(:,6:8)/1000;
marker_3_5 = VicDyn5(:,9:11)/1000;
% Marker Positions 10 deg
% marker_1_10 = VicDyn10(:,3:5)/1000;
% marker_2_10 = VicDyn10(:,6:8)/1000;
% marker_3_10 = VicDyn10(:,9:11)/1000;
% % Marker Positions 15 deg
% marker_1_15 = VicDyn15(:,3:5)/1000;
% marker_2_15 = VicDyn15(:,6:8)/1000;
% marker_3_15 = VicDyn15(:,9:11)/1000;
%
% %Trial 2
% % Marker Positions 5 deg
% marker_1_5T2 = VicDyn5T2(:,3:5)/1000;
% marker_2_5T2 = VicDyn5T2(:,6:8)/1000;
% marker_3_5T2 = VicDyn5T2(:,9:11)/1000;
% % Marker Positions 10 deg
% marker_1_10T2 = VicDyn10T2(:,3:5)/1000;
% marker_2_10T2 = VicDyn10T2(:,6:8)/1000;
% marker_3_10T2 = VicDyn10T2(:,9:11)/1000;
% % Marker Positions 15 deg
% marker_1_15T2 = VicDyn15T2(:,3:5)/1000;
% marker_2_15T2 = VicDyn15T2(:,6:8)/1000;
% marker_3_15T2 = VicDyn15T2(:,9:11)/1000;
%
% %Trial 3
% % Marker Positions 5 deg
% marker_1_5T3 = VicDyn5T3(:,3:5)/1000;
% marker_2_5T3 = VicDyn5T3(:,6:8)/1000;
% marker_3_5T3 = VicDyn5T3(:,9:11)/1000;
% % Marker Positions 10 deg
% marker_1_10T3 = VicDyn10T3(:,3:5)/1000;
% marker_2_10T3 = VicDyn10T3(:,6:8)/1000;
% marker_3_10T3 = VicDyn10T3(:,9:11)/1000;
% % Marker Positions 15 deg
% marker_1_15T3 = VicDyn15T3(:,3:5)/1000;
% marker_2_15T3 = VicDyn15T3(:,6:8)/1000;
% marker_3_15T3 = VicDyn15T3(:,9:11)/1000;
%% Create Vectors- Require vector in the plane of the pendulum swing to calculate angles
%Trial 1
%Static Vectors
Svec_1 = marker_2_S - marker_1_S;
Svec_2 = marker_3_S - marker_1_S;
Svec_3 = cross(Svec_1, Svec_2);
Svec_4 = cross(-Svec_1, Svec_3); %Vector in pendulums swining plane
%Dynamic vector
%5 deg
Dvec_1_5 = marker_2_5 - marker_1_5;
Dvec_2_5 = marker_3_5- marker_1_5;
Dvec_3_5 = cross(Dvec_1_5, Dvec_2_5);
Dvec_4_5 = cross(-Dvec_1_5,Dvec_3_5); %Vector in pendulums swining plane
%Vectors at 10 deg
% Dvec_1_10 = marker_2_10 - marker_1_10;
% Dvec_2_10 = marker_3_10- marker_1_10;
% Dvec_3_10 = cross(Dvec_1_10, Dvec_2_10);
% Dvec_4_10 = cross(-Dvec_1_10, Dvec_3_10); %Vector in pendulums swining plane
% %Vectors at 15 deg
% Dvec_1_15 = marker_2_15 - marker_1_15;
% Dvec_2_15 = marker_3_15- marker_1_15;
% Dvec_3_15 = cross(Dvec_1_15, Dvec_2_15);
% Dvec_4_15 = cross(-Dvec_1_15, Dvec_3_15); %Vector in pendulums swining plane
% %Trail 2
% %5 deg
% Dvec_1_5T2 = marker_2_5T2 - marker_1_5T2;
% Dvec_2_5T2 = marker_3_5T2- marker_1_5T2;
% Dvec_3_5T2 = cross(Dvec_1_5T2, Dvec_2_5T2);
% Dvec_4_5T2 = cross(-Dvec_1_5T2, Dvec_3_5T2); %Vector in pendulums swining plane
% %Vectors at 10 deg
% Dvec_1_10T2 = marker_2_10T2 - marker_1_10T2;
% Dvec_2_10T2 = marker_3_10T2- marker_1_10T2;
% Dvec_3_10T2 = cross(Dvec_1_10T2, Dvec_2_10T2);
% Dvec_4_10T2 = cross(-Dvec_1_10T2, Dvec_3_10T2); %Vector in pendulums swining plane
% %Vectors at 15 deg
% Dvec_1_15T2 = marker_2_15T2 - marker_1_15T2;
% Dvec_2_15T2 = marker_3_15T2- marker_1_15T2;
% Dvec_3_15T2 = cross(Dvec_1_15T2, Dvec_2_15T2);
% Dvec_4_15T2 = cross(-Dvec_1_15T2, Dvec_3_15T2); %Vector in pendulums swining plane
%
% %Trail 3
% %5 deg
% Dvec_1_5T3 = marker_2_5T3 - marker_1_5T3;
% Dvec_2_5T3 = marker_3_5T3- marker_1_5T3;
% Dvec_3_5T3 = cross(Dvec_1_5T3, Dvec_2_5T3);
% Dvec_4_5T3 = cross(-Dvec_1_5T3, Dvec_3_5T3); %Vector in pendulums swining plane
% %Vectors at 10 deg
% Dvec_1_10T3 = marker_2_10T3 - marker_1_10T3;
% Dvec_2_10T3 = marker_3_10T3- marker_1_10T3;
% Dvec_3_10T3 = cross(Dvec_1_10T3, Dvec_2_10T3);
% Dvec_4_10T3 = cross(-Dvec_1_10T3, Dvec_3_10T3); %Vector in pendulums swining plane
% %Vectors at 15 deg
% Dvec_1_15T3 = marker_2_15T3 - marker_1_15T3;
% Dvec_2_15T3 = marker_3_15T3- marker_1_15T3;
% Dvec_3_15T3 = cross(Dvec_1_15T3, Dvec_2_15T3);
% Dvec_4_15T3 = cross(-Dvec_1_15T3, Dvec_3_15T3); %Vector in pendulums swining plane
%% Making vectors the same length
%Determine longest vector
Vicmax = max([size(Svec_1,1) size(Svec_3,1) size(Svec_4,1) size(Dvec_1_5,1) size(Dvec_3_5,1) size(Dvec_4_5,1)]); %size(Dvec_1_10,1) size(Dvec_3_10,1) size(Dvec_4_10,1) size(Dvec_1_15,1) size(Dvec_3_15,1) size(Dvec_4_15,1) size(Dvec_1_5T2,1) size(Dvec_3_5T2,1) size(Dvec_4_5T2,1) size(Dvec_1_10T2,1) size(Dvec_3_10T2,1) size(Dvec_4_10T2,1) size(Dvec_1_15T2,1) size(Dvec_3_15T2,1) size(Dvec_4_15T2,1) size(Dvec_1_5T3,1) size(Dvec_3_5T3,1) size(Dvec_4_5T3,1) size(Dvec_1_10T3,1) size(Dvec_3_10T3,1) size(Dvec_4_10T3,1) size(Dvec_1_15T3,1) size(Dvec_3_15T3,1) size(Dvec_4_15T3,1)]);
%Padding with zero to make same length
Zpad = zeros(Vicmax,3);
newSvec_1= Zpad;
newSvec_3= Zpad;
newSvec_4= Zpad;
newDvec_1_5= Zpad;
newDvec_3_5= Zpad;
newDvec_4_5= Zpad;
% newDvec_1_10= Zpad;
% newDvec_3_10= Zpad;
% newDvec_4_10= Zpad;
% newDvec_1_15= Zpad;
% newDvec_3_15= Zpad;
% newDvec_4_15= Zpad;
% newDvec_1_5T2= Zpad;
% newDvec_3_5T2= Zpad;
% newDvec_4_5T2= Zpad;
% newDvec_1_10T2= Zpad;
% newDvec_3_10T2= Zpad;
% newDvec_4_10T2= Zpad;
% newDvec_1_15T2= Zpad;
% newDvec_3_15T2= Zpad;
% newDvec_4_15T2= Zpad;
% newDvec_1_5T3= Zpad;
% newDvec_3_5T3= Zpad;
% newDvec_4_5T3= Zpad;
% newDvec_1_10T3= Zpad;
% newDvec_3_10T3= Zpad;
% newDvec_4_10T3= Zpad;
% newDvec_1_15T3= Zpad;
% newDvec_3_15T3= Zpad;
% newDvec_4_15T3= Zpad;
%Ensuring all sizes are the same
newSvec_1(1:size(Svec_1),:)= Svec_1;
newSvec_3(1:size(Svec_3),:)= Svec_3;
newSvec_4(1:size(Svec_4),:)= Svec_4;
newDvec_1_5(1:size(Dvec_1_5),:)= Dvec_1_5;
newDvec_3_5(1:size(Dvec_3_5),:)= Dvec_3_5;
newDvec_4_5(1:size(Dvec_4_5),:)= Dvec_4_5;
% newDvec_1_5T2(1:size(Dvec_1_5T2),:)= Dvec_1_5T2;
% newDvec_3_5T2(1:size(Dvec_3_5T2),:)= Dvec_3_5T2;
% newDvec_4_5T2(1:size(Dvec_4_5T2),:)= Dvec_4_5T2;
% newDvec_1_5T3(1:size(Dvec_1_5T3),:)= Dvec_1_5T3;
% newDvec_3_5T3(1:size(Dvec_3_5T3),:)= Dvec_3_5T3;
% newDvec_4_5T3(1:size(Dvec_4_5T3),:)= Dvec_4_5T3;
% newDvec_1_10(1:size(Dvec_1_10),:)= Dvec_1_10;
% newDvec_3_10(1:size(Dvec_3_10),:)= Dvec_3_10;
% newDvec_4_10(1:size(Dvec_4_10),:)= Dvec_4_10;
% newDvec_1_10T2(1:size(Dvec_1_10T2),:)= Dvec_1_10T2;
% newDvec_3_10T2(1:size(Dvec_3_10T2),:)= Dvec_3_10T2;
% newDvec_4_10T2(1:size(Dvec_4_10T2),:)= Dvec_4_10T2;
% newDvec_1_10T3(1:size(Dvec_1_10T3),:)= Dvec_1_10T3;
% newDvec_3_10T3(1:size(Dvec_3_10T3),:)= Dvec_3_10T3;
% newDvec_4_10T3(1:size(Dvec_4_10T3),:)= Dvec_4_10T3;
% newDvec_1_15(1:size(Dvec_1_15),:)= Dvec_1_15;
% newDvec_3_15(1:size(Dvec_3_15),:)= Dvec_3_15;
% newDvec_4_15(1:size(Dvec_4_15),:)= Dvec_4_15;
% newDvec_1_15T2(1:size(Dvec_1_15T2),:)= Dvec_1_15T2;
% newDvec_3_15T2(1:size(Dvec_3_15T2),:)= Dvec_3_15T2;
% newDvec_4_15T2(1:size(Dvec_4_15T2),:)= Dvec_4_15T2;
% newDvec_1_15T3(1:size(Dvec_1_15T3),:)= Dvec_1_15T3;
% newDvec_3_15T3(1:size(Dvec_3_15T3),:)= Dvec_3_15T3;
% newDvec_4_15T3(1:size(Dvec_4_15T3),:)= Dvec_4_15T3;
%% Vector Magnitudes for pendulum plane
Mag_newSvec_4 = sqrt((newSvec_4(:,1)).^2 + (newSvec_4(:,2)).^2 + (newSvec_4(:,3)).^2);
Mag_newSvec_3 = sqrt((newSvec_3(:,1)).^2 + (newSvec_3(:,2)).^2 + (newSvec_3(:,3)).^2);
Mag_newSvec_1 = sqrt((newSvec_1(:,1)).^2 + (newSvec_1(:,2)).^2 + (newSvec_1(:,3)).^2);
Mag_newDvec_4_5 = sqrt((newDvec_4_5(:,1)).^2 + (newDvec_4_5(:,2)).^2 + (newDvec_4_5(:,3)).^2);
Mag_newDvec_3_5 = sqrt((newDvec_3_5(:,1)).^2 + (newDvec_3_5(:,2)).^2 + (newDvec_3_5(:,3)).^2);
Mag_newDvec_1_5 = sqrt((newDvec_1_5(:,1)).^2 + (newDvec_1_5(:,2)).^2 + (newDvec_1_5(:,3)).^2);
% Mag_newDvec_4_10= sqrt((newDvec_4_10(:,1)).^2 + (newDvec_4_10(:,2)).^2 + (newDvec_4_10(:,3)).^2);
% Mag_newDvec_3_10= sqrt((newDvec_3_10(:,1)).^2 + (newDvec_3_10(:,2)).^2 + (newDvec_3_10(:,3)).^2);
% Mag_newDvec_1_10= sqrt((newDvec_1_10(:,1)).^2 + (newDvec_1_10(:,2)).^2 + (newDvec_1_10(:,3)).^2);
% Mag_newDvec_4_15= sqrt((newDvec_4_15(:,1)).^2 + (newDvec_4_15(:,2)).^2 + (newDvec_4_15(:,3)).^2);
% Mag_newDvec_3_15= sqrt((newDvec_3_15(:,1)).^2 + (newDvec_3_15(:,2)).^2 + (newDvec_3_15(:,3)).^2);
% Mag_newDvec_1_15= sqrt((newDvec_1_15(:,1)).^2 + (newDvec_1_15(:,2)).^2 + (newDvec_1_15(:,3)).^2);
% Mag_newDvec_4_5T2 = sqrt((newDvec_4_5T2(:,1)).^2 + (newDvec_4_5T2(:,2)).^2 + (newDvec_4_5T2(:,3)).^2);
% Mag_newDvec_3_5T2 = sqrt((newDvec_3_5T2(:,1)).^2 + (newDvec_3_5T2(:,2)).^2 + (newDvec_3_5T2(:,3)).^2);
% Mag_newDvec_1_5T2 = sqrt((newDvec_1_5T2(:,1)).^2 + (newDvec_1_5T2(:,2)).^2 + (newDvec_1_5T2(:,3)).^2);
% Mag_newDvec_4_10T2= sqrt((newDvec_4_10T2(:,1)).^2 + (newDvec_4_10T2(:,2)).^2 + (newDvec_4_10T2(:,3)).^2);
% Mag_newDvec_3_10T2= sqrt((newDvec_3_10T2(:,1)).^2 + (newDvec_3_10T2(:,2)).^2 + (newDvec_3_10T2(:,3)).^2);
% Mag_newDvec_1_10T2= sqrt((newDvec_1_10T2(:,1)).^2 + (newDvec_1_10T2(:,2)).^2 + (newDvec_1_10T2(:,3)).^2);
% Mag_newDvec_4_15T2= sqrt((newDvec_4_15T2(:,1)).^2 + (newDvec_4_15T2(:,2)).^2 + (newDvec_4_15T2(:,3)).^2);
% Mag_newDvec_3_15T2= sqrt((newDvec_3_15T2(:,1)).^2 + (newDvec_3_15T2(:,2)).^2 + (newDvec_3_15T2(:,3)).^2);
% Mag_newDvec_1_15T2= sqrt((newDvec_1_15T2(:,1)).^2 + (newDvec_1_15T2(:,2)).^2 + (newDvec_1_15T2(:,3)).^2);
%
% Mag_newDvec_4_5T3 = sqrt((newDvec_4_5T3(:,1)).^2 + (newDvec_4_5T3(:,2)).^2 + (newDvec_4_5T3(:,3)).^2);
% Mag_newDvec_3_5T3 = sqrt((newDvec_3_5T3(:,1)).^2 + (newDvec_3_5T3(:,2)).^2 + (newDvec_3_5T3(:,3)).^2);
% Mag_newDvec_1_5T3 = sqrt((newDvec_1_5T3(:,1)).^2 + (newDvec_1_5T3(:,2)).^2 + (newDvec_1_5T3(:,3)).^2);
% Mag_newDvec_4_10T3= sqrt((newDvec_4_10T3(:,1)).^2 + (newDvec_4_10T3(:,2)).^2 + (newDvec_4_10T3(:,3)).^2);
% Mag_newDvec_3_10T3= sqrt((newDvec_3_10T3(:,1)).^2 + (newDvec_3_10T3(:,2)).^2 + (newDvec_3_10T3(:,3)).^2);
% Mag_newDvec_1_10T3= sqrt((newDvec_1_10T3(:,1)).^2 + (newDvec_1_10T3(:,2)).^2 + (newDvec_1_10T3(:,3)).^2);
% Mag_newDvec_4_15T3= sqrt((newDvec_4_15T3(:,1)).^2 + (newDvec_4_15T3(:,2)).^2 + (newDvec_4_15T3(:,3)).^2);
% Mag_newDvec_3_15T3= sqrt((newDvec_3_15T3(:,1)).^2 + (newDvec_3_15T3(:,2)).^2 + (newDvec_3_15T3(:,3)).^2);
% Mag_newDvec_1_15T3= sqrt((newDvec_1_15T3(:,1)).^2 + (newDvec_1_15T3(:,2)).^2 + (newDvec_1_15T3(:,3)).^2);
%% Unit vectors
junit_REFvec_4 = newSvec_4./(Mag_newSvec_4);
iunit_REFvec_3 = newSvec_3./(Mag_newSvec_3);
kunit_REFvec_1 = -newSvec_1./(Mag_newSvec_1);
junit_Dvec_4_5 = newDvec_4_5./(Mag_newDvec_4_5);
iunit_Dvec_3_5 = newDvec_3_5./(Mag_newDvec_3_5);
kunit_Dvec_1_5 = -newDvec_1_5./(Mag_newDvec_1_5);
% junit_Dvec_4_10 = newDvec_4_10./(Mag_newDvec_4_10);
% iunit_Dvec_3_10 = newDvec_3_10./(Mag_newDvec_3_10);
% kunit_Dvec_1_10 = -newDvec_1_10./(Mag_newDvec_1_10);
% junit_Dvec_4_15 = newDvec_4_15./(Mag_newDvec_4_15);
% iunit_Dvec_3_15 = newDvec_3_15./(Mag_newDvec_3_15);
% kunit_Dvec_1_15 = -newDvec_1_15./(Mag_newDvec_1_15);
% junit_Dvec_4_5T2 = newDvec_4_5T2./(Mag_newDvec_4_5T2);
% iunit_Dvec_3_5T2 = newDvec_3_5T2./(Mag_newDvec_3_5T2);
% kunit_Dvec_1_5T2 = -newDvec_1_5T2./(Mag_newDvec_1_5T2);
% junit_Dvec_4_10T2 = newDvec_4_10T2./(Mag_newDvec_4_10T2);
% iunit_Dvec_3_10T2 = newDvec_3_10T2./(Mag_newDvec_3_10T2);
% kunit_Dvec_1_10T2 = -newDvec_1_10T2./(Mag_newDvec_1_10T2);
% junit_Dvec_4_15T2 = newDvec_4_15T2./(Mag_newDvec_4_15T2);
% iunit_Dvec_3_15T2 = newDvec_3_15T2./(Mag_newDvec_3_15T2);
% kunit_Dvec_1_15T2= -newDvec_1_15T2./(Mag_newDvec_1_15T2);
% junit_Dvec_4_5T3 = newDvec_4_5T3./(Mag_newDvec_4_5T3);
% iunit_Dvec_3_5T3 = newDvec_3_5T3./(Mag_newDvec_3_5T3);
% kunit_Dvec_1_5T3 = -newDvec_1_5T3./(Mag_newDvec_1_5T3);
% junit_Dvec_4_10T3 = newDvec_4_10T3./(Mag_newDvec_4_10T3);
% iunit_Dvec_3_10T3 = newDvec_3_10T3./(Mag_newDvec_3_10T3);
% kunit_Dvec_1_10T3 = -newDvec_1_10T3./(Mag_newDvec_1_10T3);
% junit_Dvec_4_15T3 = newDvec_4_15T3./(Mag_newDvec_4_15T3);
% iunit_Dvec_3_15T3 = newDvec_3_15T3./(Mag_newDvec_3_15T3);
% kunit_Dvec_1_15T3= -newDvec_1_15T3./(Mag_newDvec_1_15T3);
%% Setting up Segment coordinate system and calculate angles
%Proximal = Static Ref vector
% 5Deg Trial 1
for ci = 1:Vicmax
p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
p5 = [iunit_Dvec_3_5(ci,:)', junit_Dvec_4_5(ci,:)', kunit_Dvec_1_5(ci,:)']; %First entry
R_5 = p5'.*p1;
sinBeta_5 = R_5(3,1); % ok
Beta_5(ci) = (180.*(asin(sinBeta_5))./pi); % ok
tanalpha_5 = -(R_5(3,2))./(R_5(3,3)); % ok
alpha_5(ci) = (180.*(atan(tanalpha_5))./pi);
tangamma_5 = -(R_5(2,1))./(R_5(1,1));
gamma_5(ci) = (180.*(atan(tangamma_5))./pi);
end
% 5Deg Trial 2
% for ci = 1:Vicmax
% p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
% p5_T2 = [iunit_Dvec_3_5T2(ci,:)', junit_Dvec_4_5T2(ci,:)', kunit_Dvec_1_5T2(ci,:)']; %First entry
% R_5T2 = p5_T2'.*p1;
% sinBeta_5T2 = R_5T2(3,1); % ok
% Beta_5T2(ci) = (180.*(asin(sinBeta_5T2))./pi); % ok
% tanalpha_5T2 = -(R_5T2(3,2))./(R_5T2(3,3)); % ok
% alpha_5T2(ci) = (180.*(atan(tanalpha_5T2))./pi);
% tangamma_5T2 = -(R_5T2(2,1))./(R_5T2(1,1));
% gamma_5T2(ci) = (180.*(atan(tangamma_5T2))./pi);
% end
% % 5Deg Trial 3
% for ci = 1:Vicmax
% p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
% p5T3 = [iunit_Dvec_3_5T3(ci,:)', junit_Dvec_4_5T3(ci,:)', kunit_Dvec_1_5T3(ci,:)']; %First entry
% R_5T3 = p5T3'.*p1;
% sinBeta_5T3 = R_5T3(3,1); % ok
% Beta_5T3(ci) = (180.*(asin(sinBeta_5T3))./pi); % ok
% tanalpha_5T3 = -(R_5T3(3,2))./(R_5T3(3,3)); % ok
% alpha_5T3(ci) = (180.*(atan(tanalpha_5T3))./pi);
% tangamma_5T3 = -(R_5T3(2,1))./(R_5T3(1,1));
% gamma_5T3(ci) = (180.*(atan(tangamma_5T3))./pi);
% end
%
% % 10Deg
% for ci = 1:Vicmax
% p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
% p10 = [iunit_Dvec_3_10(ci,:)', junit_Dvec_4_10(ci,:)', kunit_Dvec_1_10(ci,:)']; %First entry
% R_10 = p10'.*p1;
% sinBeta_10 = R_10(3,1); % ok
% Beta_10(ci) = (180.*(asin(sinBeta_10))./pi); % ok
% tanalpha_10 = -(R_10(3,2))./(R_10(3,3)); % ok
% alpha_10(ci) = (180.*(atan(tanalpha_10))./pi);
% tangamma_10 = -(R_10(2,1))./(R_10(1,1));
% gamma_10(ci) = (180.*(atan(tangamma_10))./pi);
% end
%
%
% % 10Deg trail 2
% for ci = 1:Vicmax
% p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
% p10T2 = [iunit_Dvec_3_10T2(ci,:)', junit_Dvec_4_10T2(ci,:)', kunit_Dvec_1_10T2(ci,:)']; %First entry
% R_10T2 = p10T2'.*p1;
% sinBeta_10T2 = R_10T2(3,1); % ok
% Beta_10T2(ci) = (180.*(asin(sinBeta_10T2))./pi); % ok
% tanalpha_10T2 = -(R_10T2(3,2))./(R_10T2(3,3)); % ok
% alpha_10T2(ci) = (180.*(atan(tanalpha_10T2))./pi);
% tangamma_10T2 = -(R_10T2(2,1))./(R_10T2(1,1));
% gamma_10T2(ci) = (180.*(atan(tangamma_10T2))./pi);
% end
%
% % 10Deg trail 3
% for ci = 1:Vicmax
% p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
% p10T3 = [iunit_Dvec_3_10T3(ci,:)', junit_Dvec_4_10T3(ci,:)', kunit_Dvec_1_10T3(ci,:)']; %First entry
% R_10T3 = p10T3'.*p1;
% sinBeta_10T3 = R_10T3(3,1); % ok
% Beta_10T3(ci) = (180.*(asin(sinBeta_10T3))./pi); % ok
% tanalpha_10T3 = -(R_10T3(3,2))./(R_10T3(3,3)); % ok
% alpha_10T3(ci) = (180.*(atan(tanalpha_10T3))./pi);
% tangamma_10T3 = -(R_10T3(2,1))./(R_10T3(1,1));
% gamma_10T3(ci) = (180.*(atan(tangamma_10T3))./pi);
% end
%
% % 15 Deg trail 1
% for ci = 1:Vicmax
% p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
% p15 = [iunit_Dvec_3_15(ci,:)', junit_Dvec_4_15(ci,:)', kunit_Dvec_1_15(ci,:)']; %First entry
% R_15 = p15'.*p1;
% sinBeta_15 = R_15(3,1); % ok
% Beta_15(ci) = (180.*(asin(sinBeta_15))./pi); % ok
% tanalpha_15 = -(R_15(3,2))./(R_15(3,3)); % ok
% alpha_15(ci) = (180.*(atan(tanalpha_15))./pi);
% tangamma_15 = -(R_15(2,1))./(R_15(1,1));
% gamma_15(ci) = (180.*(atan(tangamma_15))./pi);
% end
%
% % 15 Deg trail 2
% for ci = 1:Vicmax
% p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
% p15T2 = [iunit_Dvec_3_15T2(ci,:)', junit_Dvec_4_15T2(ci,:)', kunit_Dvec_1_15T2(ci,:)']; %First entry
% R_15T2 = p15T2'.*p1;
% sinBeta_15T2 = R_15T2(3,1); % ok
% Beta_15T2(ci) = (180.*(asin(sinBeta_15T2))./pi); % ok
% tanalpha_15T2 = -(R_15T2(3,2))./(R_15T2(3,3)); % ok
% alpha_15T2(ci) = (180.*(atan(tanalpha_15T2))./pi);
% tangamma_15T2 = -(R_15T2(2,1))./(R_15T2(1,1));
% gamma_15T2(ci) = (180.*(atan(tangamma_15T2))./pi);
% end
%
% %15 Deg trial 3
% for ci = 1:Vicmax
% p1 = [iunit_REFvec_3(ci,:)', junit_REFvec_4(ci,:)', kunit_REFvec_1(ci,:)']; %First entry
% p15T3 = [iunit_Dvec_3_15T3(ci,:)', junit_Dvec_4_15T3(ci,:)', kunit_Dvec_1_15T3(ci,:)']; %First entry
% R_15T3 = p15T3'.*p1;
% sinBeta_15T3 = R_15T3(3,1); % ok
% Beta_15T3(ci) = (180.*(asin(sinBeta_15T3))./pi); % ok
% tanalpha_15T3 = -(R_15T3(3,2))./(R_15T3(3,3)); % ok
% alpha_15T3(ci) = ((180.*(atan(tanalpha_15T3))./pi)).*10;
% tangamma_15T3 = -(R_15T3(2,1))./(R_15T3(1,1));
% gamma_15T3(ci) = (180.*(atan(tangamma_15T3))./pi);
% end
%% Motion Sense Angles
%Open motion sense static file
%First trial
Sen_StaREF = MSSta(:,6);
Sen_Dyn_5 = MSDyn5(:,6);
% Sen_Dyn_10 = MSDyn10(:,6);
% Sen_Dyn_15 =MSDyn15(:,6);
%
% %Second trial
% Sen_Dyn_5_2 = MSDyn5T2(:,6);
% Sen_Dyn_10_2 = MSDyn10T2(:,6);
% Sen_Dyn_15_2 = MSDyn15T2(:,6);
%
% %Third trial
% Sen_Dyn_5_3 = MSDyn5T3(:,6);
% Sen_Dyn_10_3 = MSDyn10T3(:,6);
% Sen_Dyn_15_3 = MSDyn15T3(:,6);
%Determine longest Motionsense vector
MSmax = max([size(Sen_StaREF,1) size(Sen_Dyn_5,1)}); %size(Sen_Dyn_10,1) size(Sen_Dyn_15,1) size(Sen_Dyn_5_2,1) size(Sen_Dyn_10_2,1) size(Sen_Dyn_15_2,1) size(Sen_Dyn_5_3,1) size(Sen_Dyn_10_3,1) size(Sen_Dyn_15_3,1)]);
%Padding with zero to make same length
MSpad = zeros(MSmax,1);
newMS= MSpad;
newMS_5= MSpad;
% newMS_10= MSpad;
% newMS_15= MSpad;
% newMS_5T2= MSpad;
% newMS_10T2= MSpad;
% newMS_15T2= MSpad;
% newMS_5T3= MSpad;
% newMS_10T3= MSpad;
% newMS_15T3= MSpad;
%Ensuring all sizes are the same
newMS(1:size(Sen_StaREF),:)= Sen_StaREF;
newMS_5(1:size(Sen_Dyn_5),:)= Sen_Dyn_5;
% newMS_10(1:size(Sen_Dyn_10),:)= Sen_Dyn_10;
% newMS_15(1:size(Sen_Dyn_15),:)= Sen_Dyn_15;
% newMS_5T2(1:size(Sen_Dyn_5_2),:)= Sen_Dyn_5_2;
% newMS_10T2(1:size(Sen_Dyn_10_2),:)= Sen_Dyn_10_2;
% newMS_15T2(1:size(Sen_Dyn_15_2),:)= Sen_Dyn_15_2;
% newMS_5T3(1:size(Sen_Dyn_5_3),:)= Sen_Dyn_5_3;
% newMS_10T3(1:size(Sen_Dyn_10_3),:)= Sen_Dyn_10_3;
% newMS_15T3(1:size(Sen_Dyn_15_3),:)= Sen_Dyn_15_3;
%% Correcting angle of motionsense due to misalignment of reference angle.
%Reference Vector for motionSense - this the angle read when the pendulum
%is at rest in the vertical position. Should be 0 degrees in this position
RefAngle_T1 = newMS;
%Accounting for misalignment- All angles as if the vertical reference is
%zero degrees.
MS_Alignmnet= newMS - abs(RefAngle_T1);
MS_5_Alignment = newMS_5 + abs(RefAngle_T1);
% MS_10_Alignment = newMS_10 + abs(RefAngle_T1);
% MS_15_Alignment = newMS_15 + abs(RefAngle_T1);
% MS_5_AlignmentT2 = newMS_5T2 + abs(RefAngle_T1);
% MS_10_AlignmentT2 = newMS_10T2 + abs(RefAngle_T1);
% MS_15_AlignmentT2 = newMS_15T2 + abs(RefAngle_T1);
% MS_5_AlignmentT3 = newMS_5T3 + abs(RefAngle_T1);
% MS_10_AlignmentT3 = newMS_10T3 + abs(RefAngle_T1);
% MS_15_AlignmentT3 = newMS_15T3 + abs(RefAngle_T1);
%% Quick check of data
figure
close all
fs_vicon = 100;
fs_sensor = 50; %approximately 50HZ
dt_v = 1/fs_vicon;
dt_s = 1/fs_sensor;
time_v = (0:dt_v:4860*dt_v);%+0.54;
time_v = time_v';
time_s = 0:dt_s:1996*dt_s;
time_s = time_s';
plot(time_v,(alpha_5)');
hold on
plot(time_s, MS_5_Alignment);
hold on
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/674403/image.png)
Mathieu NOE
2021-7-5
hello Alexandra
tip of the day : zip all the data files in one zip so you use only 1 of the 10 files allowed per day. :)
Mathieu NOE
2021-7-5
hello again
so the NaN are generated here , because with the actual way to zero pad the data , these lines of code will do zero divided by zero , and this gives NaN
%% Unit vectors
junit_REFvec_4 = newSvec_4./(Mag_newSvec_4+eps);
iunit_REFvec_3 = newSvec_3./(Mag_newSvec_3+eps);
kunit_REFvec_1 = -newSvec_1./(Mag_newSvec_1+eps);
junit_Dvec_4_5 = newDvec_4_5./(Mag_newDvec_4_5+eps);
iunit_Dvec_3_5 = newDvec_3_5./(Mag_newDvec_3_5+eps);
kunit_Dvec_1_5 = -newDvec_1_5./(Mag_newDvec_1_5+eps);
one way is to add at the denominator a tiny non zero value (like eps = 2.2204e-16) so that the division gives zero instead of NaN
one other alternative is to zero padd the data after you have done the divisions , but that requires a bit reworking the entire code.
hope it helped
also I did modify a bit the end of your code as I prefer this way of managing the time vectors (and not manually put the amount of samples) :
%% Quick check of data
figure
close all
fs_vicon = 100;
fs_sensor = 50; %approximately 50HZ
dt_v = 1/fs_vicon;
dt_s = 1/fs_sensor;
% time_v = (0:dt_v:4860*dt_v);%+0.54;
time_v = (0:Vicmax-1)'*dt_v;;%+0.54;
% time_v = time_v';
% time_s = 0:dt_s:1996*dt_s; %MSmax
time_s = (0:MSmax-1)'*dt_s; %MSmax
% time_s = time_s';
plot(time_v,(alpha_5)');
hold on
plot(time_s, MS_5_Alignment);
hold on
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Applications 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!发生错误
由于页面发生更改,无法完成操作。请重新加载页面以查看其更新后的状态。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
亚太
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)