Tag Archives: matlab
Plotting 1D Conditional Distributions with kdensity stacked in a 3D figure.
Hi guys. It’s my first time here and I am not a native English speaker. So, first of all, apologize.
Here is my problem: I have a T x 2 Matrix, where in the second column I have some daily financial returns and in the first column I have an indicator, which can assume integer values in the interval [1, 9].
I want to extract 9 different conditional distributions of my returns, conditioned on the values assumed by the indicator. At this point, I want to plot the conditional densities through a Gaussian smoothing with the function ‘ksdensity’ and plot them in the same 3D plot. The final output should be similar to this one:
Image
I tried to reach this result by adapting the answer I found at this thread: function.
Now suppose that x = axis of returns, y = axis of indicator possible values, z = smoothed conditional densities.
My problem is that, while the meshgrid requires for all the values of y to share the same values of x by construction, I have different values of x (the returns) because of the conditioning.
I hope I have been clear.
Thanks you guys in advance, and sorry for any mistake.Hi guys. It’s my first time here and I am not a native English speaker. So, first of all, apologize.
Here is my problem: I have a T x 2 Matrix, where in the second column I have some daily financial returns and in the first column I have an indicator, which can assume integer values in the interval [1, 9].
I want to extract 9 different conditional distributions of my returns, conditioned on the values assumed by the indicator. At this point, I want to plot the conditional densities through a Gaussian smoothing with the function ‘ksdensity’ and plot them in the same 3D plot. The final output should be similar to this one:
Image
I tried to reach this result by adapting the answer I found at this thread: function.
Now suppose that x = axis of returns, y = axis of indicator possible values, z = smoothed conditional densities.
My problem is that, while the meshgrid requires for all the values of y to share the same values of x by construction, I have different values of x (the returns) because of the conditioning.
I hope I have been clear.
Thanks you guys in advance, and sorry for any mistake. Hi guys. It’s my first time here and I am not a native English speaker. So, first of all, apologize.
Here is my problem: I have a T x 2 Matrix, where in the second column I have some daily financial returns and in the first column I have an indicator, which can assume integer values in the interval [1, 9].
I want to extract 9 different conditional distributions of my returns, conditioned on the values assumed by the indicator. At this point, I want to plot the conditional densities through a Gaussian smoothing with the function ‘ksdensity’ and plot them in the same 3D plot. The final output should be similar to this one:
Image
I tried to reach this result by adapting the answer I found at this thread: function.
Now suppose that x = axis of returns, y = axis of indicator possible values, z = smoothed conditional densities.
My problem is that, while the meshgrid requires for all the values of y to share the same values of x by construction, I have different values of x (the returns) because of the conditioning.
I hope I have been clear.
Thanks you guys in advance, and sorry for any mistake. 3d plots MATLAB Answers — New Questions
Positioning Subsystem Ports in Simulink/Simscape via MATLAB Code (LConn / RConn)
Dear Community,
I’m currently working on my master’s thesis and attempting to create a Simulink/Simscape model directly from MATLAB. I aim to consolidate certain "Building Blocks" that are used repeatedly into a subsystem for the sake of clarity. My goal is to position the ports of this subsystem directly from MATLAB.
Presently, I have a result that looks similar to the attached image.
However, I wish to rearrange the ports, all of which are currently situated on the left side of the subsystem, so that they are positioned as follows (Manual Post-Processing Performed):
In my attempts thus far, I’ve encountered the issue that the ports are set as "read-only," preventing me from defining their positions. I’ve tried to set the position as follows:
subsystem_block = "path_to_subsystem"
port_handles = get_param(subsystem_block, ‘PortHandles’)
N = length(port_handles.LConn)
newx = 1:N % example
newy = 1:N % example
for k = 1:N
set_param(port_handles.LConn(i), ‘Position’, [newx(k), newy(k)]);
end
Unfortunately, this yields the error message "Port parameter ‘Position’ is read-only."
Is there a way to set the position of the ports of the subsystem directly from MATLAB? If so, could someone explain how to do it? If not, what alternatives would I have if I still want to utilize a sort of "Building Block"?
Any assistance would be greatly appreciated!Dear Community,
I’m currently working on my master’s thesis and attempting to create a Simulink/Simscape model directly from MATLAB. I aim to consolidate certain "Building Blocks" that are used repeatedly into a subsystem for the sake of clarity. My goal is to position the ports of this subsystem directly from MATLAB.
Presently, I have a result that looks similar to the attached image.
However, I wish to rearrange the ports, all of which are currently situated on the left side of the subsystem, so that they are positioned as follows (Manual Post-Processing Performed):
In my attempts thus far, I’ve encountered the issue that the ports are set as "read-only," preventing me from defining their positions. I’ve tried to set the position as follows:
subsystem_block = "path_to_subsystem"
port_handles = get_param(subsystem_block, ‘PortHandles’)
N = length(port_handles.LConn)
newx = 1:N % example
newy = 1:N % example
for k = 1:N
set_param(port_handles.LConn(i), ‘Position’, [newx(k), newy(k)]);
end
Unfortunately, this yields the error message "Port parameter ‘Position’ is read-only."
Is there a way to set the position of the ports of the subsystem directly from MATLAB? If so, could someone explain how to do it? If not, what alternatives would I have if I still want to utilize a sort of "Building Block"?
Any assistance would be greatly appreciated! Dear Community,
I’m currently working on my master’s thesis and attempting to create a Simulink/Simscape model directly from MATLAB. I aim to consolidate certain "Building Blocks" that are used repeatedly into a subsystem for the sake of clarity. My goal is to position the ports of this subsystem directly from MATLAB.
Presently, I have a result that looks similar to the attached image.
However, I wish to rearrange the ports, all of which are currently situated on the left side of the subsystem, so that they are positioned as follows (Manual Post-Processing Performed):
In my attempts thus far, I’ve encountered the issue that the ports are set as "read-only," preventing me from defining their positions. I’ve tried to set the position as follows:
subsystem_block = "path_to_subsystem"
port_handles = get_param(subsystem_block, ‘PortHandles’)
N = length(port_handles.LConn)
newx = 1:N % example
newy = 1:N % example
for k = 1:N
set_param(port_handles.LConn(i), ‘Position’, [newx(k), newy(k)]);
end
Unfortunately, this yields the error message "Port parameter ‘Position’ is read-only."
Is there a way to set the position of the ports of the subsystem directly from MATLAB? If so, could someone explain how to do it? If not, what alternatives would I have if I still want to utilize a sort of "Building Block"?
Any assistance would be greatly appreciated! simscape, simulink, create simulink model from matlab MATLAB Answers — New Questions
Plot for Month and year
Dear All,
I have data with format of NETCDF file. I can read one of them and plot it. For each day I have many data so I wish to read all of them to provide result for one day and then expand it to provide it for month and year. Also, I would like to have a data in .mat format, for example for each month. Would you please help me in this regard?
Best,
AraDear All,
I have data with format of NETCDF file. I can read one of them and plot it. For each day I have many data so I wish to read all of them to provide result for one day and then expand it to provide it for month and year. Also, I would like to have a data in .mat format, for example for each month. Would you please help me in this regard?
Best,
Ara Dear All,
I have data with format of NETCDF file. I can read one of them and plot it. For each day I have many data so I wish to read all of them to provide result for one day and then expand it to provide it for month and year. Also, I would like to have a data in .mat format, for example for each month. Would you please help me in this regard?
Best,
Ara netcdf MATLAB Answers — New Questions
Solver library while converting from Simulink to C
Hi, How to choose, what solver library should be their in the C code which is generated using my Simulink model?Hi, How to choose, what solver library should be their in the C code which is generated using my Simulink model? Hi, How to choose, what solver library should be their in the C code which is generated using my Simulink model? c, coder, library, simulink, embedded coder MATLAB Answers — New Questions
What is the idea behind mpcobject.Weight.ECR?
Say you have an arbitrary mpc object from the MPC Toolbox.
It has the following property: mpcobject.Weight.ECR which is set to 1*10^5 by default. On the MATLAB documentation page (see: https://de.mathworks.com/help/mpc/ug/specifying-constraints.html#buj077i ) it says that it is an "overall constraint softening parameter of the controller (controller object property: Weights.ECR) to penalize a tolerable soft constraint violation relative to the other cost function terms".
However, I dont understand what that means. I’ve already specified ECR values for their respective OV/MV’s.
How can a single ECR value be used to penalize a soft constraint violation relative to multiple cost function terms?
What happens when I just leave it at 1*10^5? Does this effectively change the resulting ECR value of each OV/MV’s?
What happens when I set it to 0 or 1?
Thanks in advance :)Say you have an arbitrary mpc object from the MPC Toolbox.
It has the following property: mpcobject.Weight.ECR which is set to 1*10^5 by default. On the MATLAB documentation page (see: https://de.mathworks.com/help/mpc/ug/specifying-constraints.html#buj077i ) it says that it is an "overall constraint softening parameter of the controller (controller object property: Weights.ECR) to penalize a tolerable soft constraint violation relative to the other cost function terms".
However, I dont understand what that means. I’ve already specified ECR values for their respective OV/MV’s.
How can a single ECR value be used to penalize a soft constraint violation relative to multiple cost function terms?
What happens when I just leave it at 1*10^5? Does this effectively change the resulting ECR value of each OV/MV’s?
What happens when I set it to 0 or 1?
Thanks in advance 🙂 Say you have an arbitrary mpc object from the MPC Toolbox.
It has the following property: mpcobject.Weight.ECR which is set to 1*10^5 by default. On the MATLAB documentation page (see: https://de.mathworks.com/help/mpc/ug/specifying-constraints.html#buj077i ) it says that it is an "overall constraint softening parameter of the controller (controller object property: Weights.ECR) to penalize a tolerable soft constraint violation relative to the other cost function terms".
However, I dont understand what that means. I’ve already specified ECR values for their respective OV/MV’s.
How can a single ECR value be used to penalize a soft constraint violation relative to multiple cost function terms?
What happens when I just leave it at 1*10^5? Does this effectively change the resulting ECR value of each OV/MV’s?
What happens when I set it to 0 or 1?
Thanks in advance 🙂 mpc, mpc toolbox, ecr, constraint softening, constraint violation, weight ecr MATLAB Answers — New Questions
Select folders one by one using imageDatastore function
Dear all,
I have a "Parent_Folder" and inside it I have another 5-subfolders that contain images inside them: Folder_1, Folder_2, Folder_3, Folder_4, Folder_5.
By using "imageDatastore" function, I want to make a loop in order to chose folders one by one, something like this:
for i = 1: 5
%in the 1st loop when i = 1
Group_A = Folder_1
Group_B = Folder_2, Folder_3, Folder_4, Folder_5
%in the 2nd loop when i = 2
Group_A = Folder_2
Group_B = Folder_1, Folder_3, Folder_4, Folder_5
%in the 3rd loop when i = 3
Group_A = Folder_3
Group_B = Folder_1, Folder_2, Folder_4, Folder_5
and so on.
Any idea how to make such a loop?
best regards,
MeshoDear all,
I have a "Parent_Folder" and inside it I have another 5-subfolders that contain images inside them: Folder_1, Folder_2, Folder_3, Folder_4, Folder_5.
By using "imageDatastore" function, I want to make a loop in order to chose folders one by one, something like this:
for i = 1: 5
%in the 1st loop when i = 1
Group_A = Folder_1
Group_B = Folder_2, Folder_3, Folder_4, Folder_5
%in the 2nd loop when i = 2
Group_A = Folder_2
Group_B = Folder_1, Folder_3, Folder_4, Folder_5
%in the 3rd loop when i = 3
Group_A = Folder_3
Group_B = Folder_1, Folder_2, Folder_4, Folder_5
and so on.
Any idea how to make such a loop?
best regards,
Mesho Dear all,
I have a "Parent_Folder" and inside it I have another 5-subfolders that contain images inside them: Folder_1, Folder_2, Folder_3, Folder_4, Folder_5.
By using "imageDatastore" function, I want to make a loop in order to chose folders one by one, something like this:
for i = 1: 5
%in the 1st loop when i = 1
Group_A = Folder_1
Group_B = Folder_2, Folder_3, Folder_4, Folder_5
%in the 2nd loop when i = 2
Group_A = Folder_2
Group_B = Folder_1, Folder_3, Folder_4, Folder_5
%in the 3rd loop when i = 3
Group_A = Folder_3
Group_B = Folder_1, Folder_2, Folder_4, Folder_5
and so on.
Any idea how to make such a loop?
best regards,
Mesho imagedatastore in a loop MATLAB Answers — New Questions
Can I replace custom types during code generation?
I have a Simulink model that I use to develop my algorithm.
I am part of a larger project, other teams do not use Matlab nor Simulink.
I am using a manually defined bus that is based on a "typedef struct {} foo;" provided in a header that I can access.
To minimize complexity at the interface, I would like to use this type rather than having a separate type being defined in "<my model>_types.h".
I tried data type replacement, but that seems to work only for basic types.
Is there any way to achieve what I need?I have a Simulink model that I use to develop my algorithm.
I am part of a larger project, other teams do not use Matlab nor Simulink.
I am using a manually defined bus that is based on a "typedef struct {} foo;" provided in a header that I can access.
To minimize complexity at the interface, I would like to use this type rather than having a separate type being defined in "<my model>_types.h".
I tried data type replacement, but that seems to work only for basic types.
Is there any way to achieve what I need? I have a Simulink model that I use to develop my algorithm.
I am part of a larger project, other teams do not use Matlab nor Simulink.
I am using a manually defined bus that is based on a "typedef struct {} foo;" provided in a header that I can access.
To minimize complexity at the interface, I would like to use this type rather than having a separate type being defined in "<my model>_types.h".
I tried data type replacement, but that seems to work only for basic types.
Is there any way to achieve what I need? code generation, type replacement MATLAB Answers — New Questions
Matlab default app to open .m files
I am trying to associate Matlab with opening of .m files
It is not showing up in my default apps so I cannot make the change as specified below…
Any other ideas?
<https://uk.mathworks.com/matlabcentral/answers/94655-how-do-i-associate-file-types-with-a-certain-application> For Windows 8, Windows 10, and if the file extension is not in a list of file extensions:
1. Right click on any .m file in Windows and select Open With.
2. Select the More Apps option to show a full list of programs installed on your computer.
3. Select MATLAB and make sure the box at the bottom is checked that says "Always use this app to open .m files"I am trying to associate Matlab with opening of .m files
It is not showing up in my default apps so I cannot make the change as specified below…
Any other ideas?
<https://uk.mathworks.com/matlabcentral/answers/94655-how-do-i-associate-file-types-with-a-certain-application> For Windows 8, Windows 10, and if the file extension is not in a list of file extensions:
1. Right click on any .m file in Windows and select Open With.
2. Select the More Apps option to show a full list of programs installed on your computer.
3. Select MATLAB and make sure the box at the bottom is checked that says "Always use this app to open .m files" I am trying to associate Matlab with opening of .m files
It is not showing up in my default apps so I cannot make the change as specified below…
Any other ideas?
<https://uk.mathworks.com/matlabcentral/answers/94655-how-do-i-associate-file-types-with-a-certain-application> For Windows 8, Windows 10, and if the file extension is not in a list of file extensions:
1. Right click on any .m file in Windows and select Open With.
2. Select the More Apps option to show a full list of programs installed on your computer.
3. Select MATLAB and make sure the box at the bottom is checked that says "Always use this app to open .m files" matlab default .m files MATLAB Answers — New Questions
find 0 crossing points trough all the image rows
Hello all,
I have a vertical laser stripe image and my goal is to find the 0 crossing point of every row of the image in order to plot them as points afterwards.
This is my code, I have done the process for one row of the image. Now I have problems to do this same process for all the rows of the image. I’m trying to do that with a for loop but no way.
Resuming, is to to apply this same code for all the image rows. Thanks in advance!
clc; clear; close all;
%% calibracion de laser real con blur
%cargar la imagen que se va a medir
img=imread(fullfile(‘LaserTestPatternBlurred.bmp’));
img=imrotate(img,90);
% imshow(img)
% title(‘Imagen original’)
%% procesado de la imagen
img_o=rgb2gray(img);
%mask = (I(:, :, 1) > 100) & (I(:, :, 2) > 100);
mask=(img_o(:,:) > 50);
img = bsxfun(@times, img_o, cast(mask, ‘like’, img_o));
% figure()
% imshow(img)
% title(‘Binarizada’)
%% seleccionar una linea de la imagen y buscar su 0 crossing
[rows, columns, numberOfColorChannels] = size(img);
%seleccionamos la linea 900 y se le aplica un filtro para suavizar
linea=img(900,:);
sm=sgolayfilt(double(linea),2,25);
% figure()
% plot(img_o(900,:),’b’)
% hold on
% plot(linea,’r’)
% plot(sm,’g’)
% grid on
% ylim([0 255])
% title(‘Linea’)
% legend(‘imagen’,’linea’,’filtrado’)
% hold off
%buscamos los picos maximos de la gradiente
Lder=gradient(sm);
[picosp,locsp]=findpeaks(Lder);
[picosn,locsn]=findpeaks(-Lder);
% figure()
% plot(Lder)
% hold on
% scatter(locsn(1,2),-picosn(1,2),’g’)
% scatter(locsp(1,1),picosp(1,1),’g’)
% plot([locsn(1,2) locsp(1,1)],[-picosn(1,2) picosp(1,1)])
% axis([450 550 -15 15])
% grid on
%obtener la ecuacion de la recta entre los maximos y el paso por 0
recta = polyfit([locsp, locsn], [picosp, -picosn], 1);
a = recta (1);
b = recta (2);
subpixel= -b/(a);
scatter(subpixel,0,’r’)
hold offHello all,
I have a vertical laser stripe image and my goal is to find the 0 crossing point of every row of the image in order to plot them as points afterwards.
This is my code, I have done the process for one row of the image. Now I have problems to do this same process for all the rows of the image. I’m trying to do that with a for loop but no way.
Resuming, is to to apply this same code for all the image rows. Thanks in advance!
clc; clear; close all;
%% calibracion de laser real con blur
%cargar la imagen que se va a medir
img=imread(fullfile(‘LaserTestPatternBlurred.bmp’));
img=imrotate(img,90);
% imshow(img)
% title(‘Imagen original’)
%% procesado de la imagen
img_o=rgb2gray(img);
%mask = (I(:, :, 1) > 100) & (I(:, :, 2) > 100);
mask=(img_o(:,:) > 50);
img = bsxfun(@times, img_o, cast(mask, ‘like’, img_o));
% figure()
% imshow(img)
% title(‘Binarizada’)
%% seleccionar una linea de la imagen y buscar su 0 crossing
[rows, columns, numberOfColorChannels] = size(img);
%seleccionamos la linea 900 y se le aplica un filtro para suavizar
linea=img(900,:);
sm=sgolayfilt(double(linea),2,25);
% figure()
% plot(img_o(900,:),’b’)
% hold on
% plot(linea,’r’)
% plot(sm,’g’)
% grid on
% ylim([0 255])
% title(‘Linea’)
% legend(‘imagen’,’linea’,’filtrado’)
% hold off
%buscamos los picos maximos de la gradiente
Lder=gradient(sm);
[picosp,locsp]=findpeaks(Lder);
[picosn,locsn]=findpeaks(-Lder);
% figure()
% plot(Lder)
% hold on
% scatter(locsn(1,2),-picosn(1,2),’g’)
% scatter(locsp(1,1),picosp(1,1),’g’)
% plot([locsn(1,2) locsp(1,1)],[-picosn(1,2) picosp(1,1)])
% axis([450 550 -15 15])
% grid on
%obtener la ecuacion de la recta entre los maximos y el paso por 0
recta = polyfit([locsp, locsn], [picosp, -picosn], 1);
a = recta (1);
b = recta (2);
subpixel= -b/(a);
scatter(subpixel,0,’r’)
hold off Hello all,
I have a vertical laser stripe image and my goal is to find the 0 crossing point of every row of the image in order to plot them as points afterwards.
This is my code, I have done the process for one row of the image. Now I have problems to do this same process for all the rows of the image. I’m trying to do that with a for loop but no way.
Resuming, is to to apply this same code for all the image rows. Thanks in advance!
clc; clear; close all;
%% calibracion de laser real con blur
%cargar la imagen que se va a medir
img=imread(fullfile(‘LaserTestPatternBlurred.bmp’));
img=imrotate(img,90);
% imshow(img)
% title(‘Imagen original’)
%% procesado de la imagen
img_o=rgb2gray(img);
%mask = (I(:, :, 1) > 100) & (I(:, :, 2) > 100);
mask=(img_o(:,:) > 50);
img = bsxfun(@times, img_o, cast(mask, ‘like’, img_o));
% figure()
% imshow(img)
% title(‘Binarizada’)
%% seleccionar una linea de la imagen y buscar su 0 crossing
[rows, columns, numberOfColorChannels] = size(img);
%seleccionamos la linea 900 y se le aplica un filtro para suavizar
linea=img(900,:);
sm=sgolayfilt(double(linea),2,25);
% figure()
% plot(img_o(900,:),’b’)
% hold on
% plot(linea,’r’)
% plot(sm,’g’)
% grid on
% ylim([0 255])
% title(‘Linea’)
% legend(‘imagen’,’linea’,’filtrado’)
% hold off
%buscamos los picos maximos de la gradiente
Lder=gradient(sm);
[picosp,locsp]=findpeaks(Lder);
[picosn,locsn]=findpeaks(-Lder);
% figure()
% plot(Lder)
% hold on
% scatter(locsn(1,2),-picosn(1,2),’g’)
% scatter(locsp(1,1),picosp(1,1),’g’)
% plot([locsn(1,2) locsp(1,1)],[-picosn(1,2) picosp(1,1)])
% axis([450 550 -15 15])
% grid on
%obtener la ecuacion de la recta entre los maximos y el paso por 0
recta = polyfit([locsp, locsn], [picosp, -picosn], 1);
a = recta (1);
b = recta (2);
subpixel= -b/(a);
scatter(subpixel,0,’r’)
hold off laser stripe, calibration, 0 crossing MATLAB Answers — New Questions
Problem with Simulink support package for arduino
All of a sudden, my installation of Matlab R2024a is not working with the Arduino support packages in simulink. I tried reinstalling MATLAB and the support packages themselves, but am getting the following error message:
Unrecognized method, property, or field ‘ArduinoPrefDirFolderName’ for class ‘arduino.setup.internal.TestConectionScreen’
I am using the support package v. 24.1.1All of a sudden, my installation of Matlab R2024a is not working with the Arduino support packages in simulink. I tried reinstalling MATLAB and the support packages themselves, but am getting the following error message:
Unrecognized method, property, or field ‘ArduinoPrefDirFolderName’ for class ‘arduino.setup.internal.TestConectionScreen’
I am using the support package v. 24.1.1 All of a sudden, my installation of Matlab R2024a is not working with the Arduino support packages in simulink. I tried reinstalling MATLAB and the support packages themselves, but am getting the following error message:
Unrecognized method, property, or field ‘ArduinoPrefDirFolderName’ for class ‘arduino.setup.internal.TestConectionScreen’
I am using the support package v. 24.1.1 arduino, simulink, hardware support MATLAB Answers — New Questions
3D Wavelet Transform via Linear Algebra
Hello, I am putting this out there to see if anyone can help me take my linear algebra solution to the wavelet transform from 2D to 3D. The reason I am doing this is because there is no lwt3 function in the wavelet toolbox, and dwt3 does not organize the coefficients in a way that I would prefer.
The equations for 1D and 2D are fairly simple. Working with an operator "L" and "H" which are N/2 by N, one can perform the 1D by multiplying the vector by the transpose of the operator. In 2D you perform L*X*L’ for every combination of L and H (resulting in 4, N/2 by N/2 matrices). Here is some code demonstrating 1D and 2D, if anyone could help me figure out 3D it would be greatly appreciated.
%% Datasets
X1 = reshape(1:4,1,4);
X2 = reshape(1:16,4,4);
X3 = reshape(1:64,4,4,4);
%% Get Operators
ls = liftingScheme(‘Wavelet’,’db2′);
[LoD,HiD,LoR,HiR] = ls2filt(ls);
L = operator(LoD,4);
H = operator(HiD,4);
%% 1D transform
l = X1*H’;
h = X1*L’;
%% 2D transform
ll = L*X2*L’;
lh = H*X2*L’;
hl = L*X2*H’;
hh = H*X2*H’;
%% 3D transform???
%% FUNCTIONS
function L = operator(a,N)
L = zeros(N/2,N);
for i = 1:N/2
L(i,2*(i-1)+1:2*(i-1)+numel(a)) = a;
end
L = L(:,1:N) + [L(:,N+1:N+floor(numel(a)/2)),zeros(N/2,N-floor(numel(a)/2))];
endHello, I am putting this out there to see if anyone can help me take my linear algebra solution to the wavelet transform from 2D to 3D. The reason I am doing this is because there is no lwt3 function in the wavelet toolbox, and dwt3 does not organize the coefficients in a way that I would prefer.
The equations for 1D and 2D are fairly simple. Working with an operator "L" and "H" which are N/2 by N, one can perform the 1D by multiplying the vector by the transpose of the operator. In 2D you perform L*X*L’ for every combination of L and H (resulting in 4, N/2 by N/2 matrices). Here is some code demonstrating 1D and 2D, if anyone could help me figure out 3D it would be greatly appreciated.
%% Datasets
X1 = reshape(1:4,1,4);
X2 = reshape(1:16,4,4);
X3 = reshape(1:64,4,4,4);
%% Get Operators
ls = liftingScheme(‘Wavelet’,’db2′);
[LoD,HiD,LoR,HiR] = ls2filt(ls);
L = operator(LoD,4);
H = operator(HiD,4);
%% 1D transform
l = X1*H’;
h = X1*L’;
%% 2D transform
ll = L*X2*L’;
lh = H*X2*L’;
hl = L*X2*H’;
hh = H*X2*H’;
%% 3D transform???
%% FUNCTIONS
function L = operator(a,N)
L = zeros(N/2,N);
for i = 1:N/2
L(i,2*(i-1)+1:2*(i-1)+numel(a)) = a;
end
L = L(:,1:N) + [L(:,N+1:N+floor(numel(a)/2)),zeros(N/2,N-floor(numel(a)/2))];
end Hello, I am putting this out there to see if anyone can help me take my linear algebra solution to the wavelet transform from 2D to 3D. The reason I am doing this is because there is no lwt3 function in the wavelet toolbox, and dwt3 does not organize the coefficients in a way that I would prefer.
The equations for 1D and 2D are fairly simple. Working with an operator "L" and "H" which are N/2 by N, one can perform the 1D by multiplying the vector by the transpose of the operator. In 2D you perform L*X*L’ for every combination of L and H (resulting in 4, N/2 by N/2 matrices). Here is some code demonstrating 1D and 2D, if anyone could help me figure out 3D it would be greatly appreciated.
%% Datasets
X1 = reshape(1:4,1,4);
X2 = reshape(1:16,4,4);
X3 = reshape(1:64,4,4,4);
%% Get Operators
ls = liftingScheme(‘Wavelet’,’db2′);
[LoD,HiD,LoR,HiR] = ls2filt(ls);
L = operator(LoD,4);
H = operator(HiD,4);
%% 1D transform
l = X1*H’;
h = X1*L’;
%% 2D transform
ll = L*X2*L’;
lh = H*X2*L’;
hl = L*X2*H’;
hh = H*X2*H’;
%% 3D transform???
%% FUNCTIONS
function L = operator(a,N)
L = zeros(N/2,N);
for i = 1:N/2
L(i,2*(i-1)+1:2*(i-1)+numel(a)) = a;
end
L = L(:,1:N) + [L(:,N+1:N+floor(numel(a)/2)),zeros(N/2,N-floor(numel(a)/2))];
end wavelet, 3d, linear-algebra, mathematics, lifting-scheme MATLAB Answers — New Questions
Strange results with asymptotics function
I have a Markov chain with K communication classes, each communication class forms an ergodic subchain. Then I use the asymptotics function to get the K limit distributions of this Markov chain. However, results from the asymptotics function seems very sensitive to the transition matrix. Then I impliment the asymptotics function by my self following the Spedicato’s algorithm (ref), i.e.:
And I found that Spedicato’s algorithm is not that sensitive to the transition matrix.
Here is the code:
%% load data
clear;clc;
load(‘data.mat’); % load the example transition matrix A and indicator matrix C
% note: A is a left stochastic matrix, i.e., all cols sum to 1
% A2, C2 is slightly changed from A1, C1
% disp(sum(sum(abs(A1-A2)))); %7.1385e-05
if true
A=A1;
C=C1;
else
A=A2;
C=C2;
end
%% matlab asymptotics function
K = 3;
S=size(A,1);
mc = dtmc(A’);
[pi, tmix] = asymptotics(mc);
pi=pi’;
prss = sum(C*pi);
fprintf(‘prss=%sn’, mat2str(prss));
fprintf(‘prss diff = %.3f%%n’, (max(prss)-min(prss))/min(prss)*100);
%% Spedicato’s algorithm
[bins,ClassStates,ClassRecurrence,ClassPeriod] = classify(mc);
num_classes = size(ClassStates, 2);
prss = zeros(1, num_classes);
for c =1 : num_classes
sc = subchain(mc,str2num(ClassStates{c}(1)));
Cs = zeros(size(C,1), sc.NumStates);
for i=1:sc.NumStates
idx = str2num(sc.StateNames(i));
Cs(:,i) = C(:, idx);
end
As = sc.P’;
% get stationary distribution
% the condition number is not very large, so I think using inv() is ok
pi = inv(ones(sc.NumStates)+eye(sc.NumStates)-As)*ones(sc.NumStates,1);
prss(c) = sum(Cs * pi);
end
fprintf(‘prss=%sn’, mat2str(prss));
fprintf(‘prss diff = %.3f%%n’, (max(prss)-min(prss))/min(prss)*100);I have a Markov chain with K communication classes, each communication class forms an ergodic subchain. Then I use the asymptotics function to get the K limit distributions of this Markov chain. However, results from the asymptotics function seems very sensitive to the transition matrix. Then I impliment the asymptotics function by my self following the Spedicato’s algorithm (ref), i.e.:
And I found that Spedicato’s algorithm is not that sensitive to the transition matrix.
Here is the code:
%% load data
clear;clc;
load(‘data.mat’); % load the example transition matrix A and indicator matrix C
% note: A is a left stochastic matrix, i.e., all cols sum to 1
% A2, C2 is slightly changed from A1, C1
% disp(sum(sum(abs(A1-A2)))); %7.1385e-05
if true
A=A1;
C=C1;
else
A=A2;
C=C2;
end
%% matlab asymptotics function
K = 3;
S=size(A,1);
mc = dtmc(A’);
[pi, tmix] = asymptotics(mc);
pi=pi’;
prss = sum(C*pi);
fprintf(‘prss=%sn’, mat2str(prss));
fprintf(‘prss diff = %.3f%%n’, (max(prss)-min(prss))/min(prss)*100);
%% Spedicato’s algorithm
[bins,ClassStates,ClassRecurrence,ClassPeriod] = classify(mc);
num_classes = size(ClassStates, 2);
prss = zeros(1, num_classes);
for c =1 : num_classes
sc = subchain(mc,str2num(ClassStates{c}(1)));
Cs = zeros(size(C,1), sc.NumStates);
for i=1:sc.NumStates
idx = str2num(sc.StateNames(i));
Cs(:,i) = C(:, idx);
end
As = sc.P’;
% get stationary distribution
% the condition number is not very large, so I think using inv() is ok
pi = inv(ones(sc.NumStates)+eye(sc.NumStates)-As)*ones(sc.NumStates,1);
prss(c) = sum(Cs * pi);
end
fprintf(‘prss=%sn’, mat2str(prss));
fprintf(‘prss diff = %.3f%%n’, (max(prss)-min(prss))/min(prss)*100); I have a Markov chain with K communication classes, each communication class forms an ergodic subchain. Then I use the asymptotics function to get the K limit distributions of this Markov chain. However, results from the asymptotics function seems very sensitive to the transition matrix. Then I impliment the asymptotics function by my self following the Spedicato’s algorithm (ref), i.e.:
And I found that Spedicato’s algorithm is not that sensitive to the transition matrix.
Here is the code:
%% load data
clear;clc;
load(‘data.mat’); % load the example transition matrix A and indicator matrix C
% note: A is a left stochastic matrix, i.e., all cols sum to 1
% A2, C2 is slightly changed from A1, C1
% disp(sum(sum(abs(A1-A2)))); %7.1385e-05
if true
A=A1;
C=C1;
else
A=A2;
C=C2;
end
%% matlab asymptotics function
K = 3;
S=size(A,1);
mc = dtmc(A’);
[pi, tmix] = asymptotics(mc);
pi=pi’;
prss = sum(C*pi);
fprintf(‘prss=%sn’, mat2str(prss));
fprintf(‘prss diff = %.3f%%n’, (max(prss)-min(prss))/min(prss)*100);
%% Spedicato’s algorithm
[bins,ClassStates,ClassRecurrence,ClassPeriod] = classify(mc);
num_classes = size(ClassStates, 2);
prss = zeros(1, num_classes);
for c =1 : num_classes
sc = subchain(mc,str2num(ClassStates{c}(1)));
Cs = zeros(size(C,1), sc.NumStates);
for i=1:sc.NumStates
idx = str2num(sc.StateNames(i));
Cs(:,i) = C(:, idx);
end
As = sc.P’;
% get stationary distribution
% the condition number is not very large, so I think using inv() is ok
pi = inv(ones(sc.NumStates)+eye(sc.NumStates)-As)*ones(sc.NumStates,1);
prss(c) = sum(Cs * pi);
end
fprintf(‘prss=%sn’, mat2str(prss));
fprintf(‘prss diff = %.3f%%n’, (max(prss)-min(prss))/min(prss)*100); markov chain, asymptotics MATLAB Answers — New Questions
Why the the forward kinematics formula chain is different with the result of the getTransform function?
Hello guys,
I made a test of the forward kinematics formula chain of the robot is constructed by extracting motion parameters from URDF, and the calculated results are inconsistent with the getTransform function. Can someone help me with this problem.My test codes are below
robot = importrobot(‘StepByStepChanged.urdf’,DataFormat=’column’);
q0 = deg2rad([90, -90, 0, 90, 0, 90, 0])’;
Tn=transl([0 0 0.1789])*trotx(0)*troty(0)*trotz(1.570796326794897)*trotz(-q0(1))…
*transl([0.002928236431969 2.430013955534704e-04 0.119599103269260])*trotx(0)*troty(3.062357948966975e-04)*trotz(0)*trotx(q0(2))…
*transl([-0.002914729213097 -0.001033720384413 0.155156998604446])*trotx(0.003609596843643)*troty(0)*trotz(0.022904943980785)*trotz(-q0(3))…
*transl([0.002968235617925 -0.065351124778835 0.304178518630177])*trotx(-0.003609596843643)*troty(0)*trotz(-0.022904943980785)*trotx(q0(4))…
*transl([-0.005205306143812 0.052692560433216 0.077902477491654])*trotx(0.004548981482162)*troty(-0.003199754330450)*trotz(-8.266717521666507e-05)*trotz(-q0(5))…
*transl([0.005280972133389 -9.031931320468978e-05 0.379510019774372])*trotx(3.137042207549150)*troty(-4.894462134554110e-05)*trotz(0.004660804199542)*trotx(-q0(6))…
*transl([-9.820067340677299e-04 -0.076367223695928 -0.106323102347568])*trotx(-3.130442252053242)*troty(-0.005548107438167)*trotz(1.567890031620816)*trotz(-q0(7))
jointPositions=q0′;
T_urdf1=robot.getTransform(jointPositions’,’Link1′,’base_link’)*robot.getTransform(jointPositions’,’Link2′,’Link1′)…
*robot.getTransform(jointPositions’,’Link3′,’Link2′)*robot.getTransform(jointPositions’,’Link4′,’Link3′)…
*robot.getTransform(jointPositions’,’Link5′,’Link4′)*robot.getTransform(jointPositions’,’Link6′,’Link5′)…
*robot.getTransform(jointPositions’,’Link7′,’Link6′)
T_urdf=robot.getTransform(q0,’Link7′,’base_link’)
StepByStepChanged.urdf is as follows:
<?xml version="1.0" encoding="utf-8"?>
<!– This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com)
Commit Version: 1.6.0-4-g7f85cfe Build Version: 1.6.7995.38578
For more information, please see http://wiki.ros.org/sw_urdf_exporter –>
<robot
name="Diana7Med">
<link name="world"/>
<joint name="fixed" type="fixed">
<parent link="world"/>
<child link="base_link"/>
</joint>
<link
name="base_link">
<inertial>
<origin
xyz="-0.00024914 -0.00023302 0.076031"
rpy="0 0 0" />
<mass
value="1.732" />
<inertia
ixx="0.0085914"
ixy="-2.9842E-05"
ixz="-2.6598E-05"
iyy="0.0085918"
iyz="-2.4568E-05"
izz="0.006987" />
</inertial>
<visual>
<origin
xyz="0 0 0.013"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/base_link.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0.013"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/base_link.STL" />
</geometry>
</collision>
</link>
<joint
name="joint1"
type="revolute">
<origin
xyz="0 0 0.17890"
rpy="0 0 1.570796326794897" />
<parent
link="base_link" />
<child
link="Link1" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="254"
velocity="1.5708" />
</joint>
<link
name="Link1">
<inertial>
<origin
xyz="0.043475 -3.8174E-06 0.096019"
rpy="0 0 0" />
<mass
value="2.727" />
<inertia
ixx="0.011033"
ixy="-4.8083E-07"
ixz="-0.0022068"
iyy="0.011337"
iyz="-3.3735E-07"
izz="0.008112" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link1.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link1.STL" />
</geometry>
</collision>
</link>
<joint
name="joint2"
type="revolute">
<origin
xyz="0.002928236431969 2.430013955534704e-04 0.119599103269260"
rpy="0 3.062357948966975e-04 0" />
<parent
link="Link1" />
<child
link="Link2" />
<axis
xyz="1 0 0" />
<limit
lower="-1.5708"
upper="1.5708"
effort="253"
velocity="1.5708" />
</joint>
<link
name="Link2">
<inertial>
<origin
xyz="-0.036812 7.2275E-07 0.04165"
rpy="0 0 0" />
<mass
value="3.1817" />
<inertia
ixx="0.016888"
ixy="8.9891E-08"
ixz="-0.0043558"
iyy="0.018072"
iyz="-2.2014E-07"
izz="0.0096122" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link2.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link2.STL" />
</geometry>
</collision>
</link>
<joint
name="joint3"
type="revolute">
<origin
xyz="-0.002914729213097 -0.001033720384413 0.155156998604446"
rpy="0.003609596843643 0 0.022904943980785" />
<parent
link="Link2" />
<child
link="Link3" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="111"
velocity="1.5708" />
</joint>
<link
name="Link3">
<inertial>
<origin
xyz="0 -0.014808 0.17679"
rpy="0 0 0" />
<mass
value="3.9362" />
<inertia
ixx="0.054706"
ixy="0.0029594"
ixz="-0.0079553"
iyy="0.052971"
iyz="0.010083"
izz="0.013339" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link3.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link3.STL" />
</geometry>
</collision>
</link>
<joint
name="joint4"
type="revolute">
<origin
xyz="0.002968235617925 -0.065351124778835 0.304178518630177"
rpy="-0.003609596843643 0 -0.022904943980785" />
<parent
link="Link3" />
<child
link="Link4" />
<axis
xyz="1 0 0" />
<limit
lower="0"
upper="3.0543"
effort="111"
velocity="1.5708" />
</joint>
<link
name="Link4">
<inertial>
<origin
xyz="-0.041116 0.015134 0.012416"
rpy="0 0 0" />
<mass
value="1.5847" />
<inertia
ixx="0.0043925"
ixy="-0.00067906"
ixz="-0.00067352"
iyy="0.0038733"
iyz="-0.00083279"
izz="0.0042261" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link4.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link4.STL" />
</geometry>
</collision>
</link>
<joint
name="joint5"
type="revolute">
<origin
xyz="-0.005205306143812 0.052692560433216 0.077902477491654"
rpy="0.004548981482162 -0.003199754330450 -8.266717521666507e-05" />
<parent
link="Link4" />
<child
link="Link5" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="53"
velocity="2.9671" />
</joint>
<link
name="Link5">
<inertial>
<origin
xyz="-0.028829 0.0020991 0.15664"
rpy="0 0 0" />
<mass
value="1.9268" />
<inertia
ixx="0.027058"
ixy="0.00012672"
ixz="0.007118"
iyy="0.029321"
iyz="-0.00025937"
izz="0.0041403" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link5.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link5.STL" />
</geometry>
</collision>
</link>
<joint
name="joint6"
type="revolute">
<origin
xyz="0.005280972133389 -9.031931320468978e-05 0.379510019774372"
rpy="3.137042207549150 -4.894462134554110e-05 0.004660804199542" />
<parent
link="Link5" />
<child
link="Link6" />
<axis
xyz="-1 0 0" />
<limit
lower="-3.1241"
upper="3.1241"
effort="53"
velocity="2.9671" />
</joint>
<link
name="Link6">
<inertial>
<origin
xyz="0 -0.0122 1.2021"
rpy="0 0 0" />
<mass
value="4.434E-12" />
<inertia
ixx="7.2173E-20"
ixy="-9.8454E-20"
ixz="-1.1913E-20"
iyy="1.6421E-19"
iyz="-7.0312E-21"
izz="2.2322E-19" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link6.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link6.STL" />
</geometry>
</collision>
</link>
<joint
name="joint7"
type="revolute">
<origin
xyz="-9.820067340677299e-04 -0.076367223695928 -0.106323102347568"
rpy="-3.130442252053242 -0.005548107438167 1.567890031620816" />
<parent
link="Link6" />
<child
link="Link7" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="53"
velocity="2.9671" />
</joint>
<link
name="Link7">
<inertial>
<origin
xyz="1.2416E-09 -0.00041281 -0.015665"
rpy="0 0 0" />
<mass
value="0.1669" />
<inertia
ixx="8.8902E-05"
ixy="-9.3654E-10"
ixz="-1.1631E-12"
iyy="8.7425E-05"
iyz="-2.6369E-07"
izz="0.0001438" />
</inertial>
<visual>
<origin
xyz="0 0 -0.0369"
rpy="3.1416 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link7.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 -0.0369"
rpy="3.1416 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link7.STL" />
</geometry>
</collision>
</link>
<joint
name="joint8"
type="fixed">
<origin
xyz="0.05 0 0"
rpy="0 0 0" />
<parent
link="Link7" />
<child
link="Link8" />
</joint>
<link
name="Link8">
<inertial>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<mass
value="0" />
<inertia
ixx="0"
ixy="0"
ixz="-0"
iyy="0"
iyz="0"
izz="0" />
</inertial>
</link>
</robot>
The results of the two calculation methods are as follows:
So as the figure shows the results of the two calculations are different, can someone tell me why? I have done several tests and have not been able to find out what is the cause of this result. Hope someone help me with this. And by the way,I wonder if there is any current experience or paper on the calibration of motion and dynamics in URDF?Hello guys,
I made a test of the forward kinematics formula chain of the robot is constructed by extracting motion parameters from URDF, and the calculated results are inconsistent with the getTransform function. Can someone help me with this problem.My test codes are below
robot = importrobot(‘StepByStepChanged.urdf’,DataFormat=’column’);
q0 = deg2rad([90, -90, 0, 90, 0, 90, 0])’;
Tn=transl([0 0 0.1789])*trotx(0)*troty(0)*trotz(1.570796326794897)*trotz(-q0(1))…
*transl([0.002928236431969 2.430013955534704e-04 0.119599103269260])*trotx(0)*troty(3.062357948966975e-04)*trotz(0)*trotx(q0(2))…
*transl([-0.002914729213097 -0.001033720384413 0.155156998604446])*trotx(0.003609596843643)*troty(0)*trotz(0.022904943980785)*trotz(-q0(3))…
*transl([0.002968235617925 -0.065351124778835 0.304178518630177])*trotx(-0.003609596843643)*troty(0)*trotz(-0.022904943980785)*trotx(q0(4))…
*transl([-0.005205306143812 0.052692560433216 0.077902477491654])*trotx(0.004548981482162)*troty(-0.003199754330450)*trotz(-8.266717521666507e-05)*trotz(-q0(5))…
*transl([0.005280972133389 -9.031931320468978e-05 0.379510019774372])*trotx(3.137042207549150)*troty(-4.894462134554110e-05)*trotz(0.004660804199542)*trotx(-q0(6))…
*transl([-9.820067340677299e-04 -0.076367223695928 -0.106323102347568])*trotx(-3.130442252053242)*troty(-0.005548107438167)*trotz(1.567890031620816)*trotz(-q0(7))
jointPositions=q0′;
T_urdf1=robot.getTransform(jointPositions’,’Link1′,’base_link’)*robot.getTransform(jointPositions’,’Link2′,’Link1′)…
*robot.getTransform(jointPositions’,’Link3′,’Link2′)*robot.getTransform(jointPositions’,’Link4′,’Link3′)…
*robot.getTransform(jointPositions’,’Link5′,’Link4′)*robot.getTransform(jointPositions’,’Link6′,’Link5′)…
*robot.getTransform(jointPositions’,’Link7′,’Link6′)
T_urdf=robot.getTransform(q0,’Link7′,’base_link’)
StepByStepChanged.urdf is as follows:
<?xml version="1.0" encoding="utf-8"?>
<!– This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com)
Commit Version: 1.6.0-4-g7f85cfe Build Version: 1.6.7995.38578
For more information, please see http://wiki.ros.org/sw_urdf_exporter –>
<robot
name="Diana7Med">
<link name="world"/>
<joint name="fixed" type="fixed">
<parent link="world"/>
<child link="base_link"/>
</joint>
<link
name="base_link">
<inertial>
<origin
xyz="-0.00024914 -0.00023302 0.076031"
rpy="0 0 0" />
<mass
value="1.732" />
<inertia
ixx="0.0085914"
ixy="-2.9842E-05"
ixz="-2.6598E-05"
iyy="0.0085918"
iyz="-2.4568E-05"
izz="0.006987" />
</inertial>
<visual>
<origin
xyz="0 0 0.013"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/base_link.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0.013"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/base_link.STL" />
</geometry>
</collision>
</link>
<joint
name="joint1"
type="revolute">
<origin
xyz="0 0 0.17890"
rpy="0 0 1.570796326794897" />
<parent
link="base_link" />
<child
link="Link1" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="254"
velocity="1.5708" />
</joint>
<link
name="Link1">
<inertial>
<origin
xyz="0.043475 -3.8174E-06 0.096019"
rpy="0 0 0" />
<mass
value="2.727" />
<inertia
ixx="0.011033"
ixy="-4.8083E-07"
ixz="-0.0022068"
iyy="0.011337"
iyz="-3.3735E-07"
izz="0.008112" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link1.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link1.STL" />
</geometry>
</collision>
</link>
<joint
name="joint2"
type="revolute">
<origin
xyz="0.002928236431969 2.430013955534704e-04 0.119599103269260"
rpy="0 3.062357948966975e-04 0" />
<parent
link="Link1" />
<child
link="Link2" />
<axis
xyz="1 0 0" />
<limit
lower="-1.5708"
upper="1.5708"
effort="253"
velocity="1.5708" />
</joint>
<link
name="Link2">
<inertial>
<origin
xyz="-0.036812 7.2275E-07 0.04165"
rpy="0 0 0" />
<mass
value="3.1817" />
<inertia
ixx="0.016888"
ixy="8.9891E-08"
ixz="-0.0043558"
iyy="0.018072"
iyz="-2.2014E-07"
izz="0.0096122" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link2.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link2.STL" />
</geometry>
</collision>
</link>
<joint
name="joint3"
type="revolute">
<origin
xyz="-0.002914729213097 -0.001033720384413 0.155156998604446"
rpy="0.003609596843643 0 0.022904943980785" />
<parent
link="Link2" />
<child
link="Link3" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="111"
velocity="1.5708" />
</joint>
<link
name="Link3">
<inertial>
<origin
xyz="0 -0.014808 0.17679"
rpy="0 0 0" />
<mass
value="3.9362" />
<inertia
ixx="0.054706"
ixy="0.0029594"
ixz="-0.0079553"
iyy="0.052971"
iyz="0.010083"
izz="0.013339" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link3.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link3.STL" />
</geometry>
</collision>
</link>
<joint
name="joint4"
type="revolute">
<origin
xyz="0.002968235617925 -0.065351124778835 0.304178518630177"
rpy="-0.003609596843643 0 -0.022904943980785" />
<parent
link="Link3" />
<child
link="Link4" />
<axis
xyz="1 0 0" />
<limit
lower="0"
upper="3.0543"
effort="111"
velocity="1.5708" />
</joint>
<link
name="Link4">
<inertial>
<origin
xyz="-0.041116 0.015134 0.012416"
rpy="0 0 0" />
<mass
value="1.5847" />
<inertia
ixx="0.0043925"
ixy="-0.00067906"
ixz="-0.00067352"
iyy="0.0038733"
iyz="-0.00083279"
izz="0.0042261" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link4.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link4.STL" />
</geometry>
</collision>
</link>
<joint
name="joint5"
type="revolute">
<origin
xyz="-0.005205306143812 0.052692560433216 0.077902477491654"
rpy="0.004548981482162 -0.003199754330450 -8.266717521666507e-05" />
<parent
link="Link4" />
<child
link="Link5" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="53"
velocity="2.9671" />
</joint>
<link
name="Link5">
<inertial>
<origin
xyz="-0.028829 0.0020991 0.15664"
rpy="0 0 0" />
<mass
value="1.9268" />
<inertia
ixx="0.027058"
ixy="0.00012672"
ixz="0.007118"
iyy="0.029321"
iyz="-0.00025937"
izz="0.0041403" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link5.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link5.STL" />
</geometry>
</collision>
</link>
<joint
name="joint6"
type="revolute">
<origin
xyz="0.005280972133389 -9.031931320468978e-05 0.379510019774372"
rpy="3.137042207549150 -4.894462134554110e-05 0.004660804199542" />
<parent
link="Link5" />
<child
link="Link6" />
<axis
xyz="-1 0 0" />
<limit
lower="-3.1241"
upper="3.1241"
effort="53"
velocity="2.9671" />
</joint>
<link
name="Link6">
<inertial>
<origin
xyz="0 -0.0122 1.2021"
rpy="0 0 0" />
<mass
value="4.434E-12" />
<inertia
ixx="7.2173E-20"
ixy="-9.8454E-20"
ixz="-1.1913E-20"
iyy="1.6421E-19"
iyz="-7.0312E-21"
izz="2.2322E-19" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link6.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link6.STL" />
</geometry>
</collision>
</link>
<joint
name="joint7"
type="revolute">
<origin
xyz="-9.820067340677299e-04 -0.076367223695928 -0.106323102347568"
rpy="-3.130442252053242 -0.005548107438167 1.567890031620816" />
<parent
link="Link6" />
<child
link="Link7" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="53"
velocity="2.9671" />
</joint>
<link
name="Link7">
<inertial>
<origin
xyz="1.2416E-09 -0.00041281 -0.015665"
rpy="0 0 0" />
<mass
value="0.1669" />
<inertia
ixx="8.8902E-05"
ixy="-9.3654E-10"
ixz="-1.1631E-12"
iyy="8.7425E-05"
iyz="-2.6369E-07"
izz="0.0001438" />
</inertial>
<visual>
<origin
xyz="0 0 -0.0369"
rpy="3.1416 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link7.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 -0.0369"
rpy="3.1416 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link7.STL" />
</geometry>
</collision>
</link>
<joint
name="joint8"
type="fixed">
<origin
xyz="0.05 0 0"
rpy="0 0 0" />
<parent
link="Link7" />
<child
link="Link8" />
</joint>
<link
name="Link8">
<inertial>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<mass
value="0" />
<inertia
ixx="0"
ixy="0"
ixz="-0"
iyy="0"
iyz="0"
izz="0" />
</inertial>
</link>
</robot>
The results of the two calculation methods are as follows:
So as the figure shows the results of the two calculations are different, can someone tell me why? I have done several tests and have not been able to find out what is the cause of this result. Hope someone help me with this. And by the way,I wonder if there is any current experience or paper on the calibration of motion and dynamics in URDF? Hello guys,
I made a test of the forward kinematics formula chain of the robot is constructed by extracting motion parameters from URDF, and the calculated results are inconsistent with the getTransform function. Can someone help me with this problem.My test codes are below
robot = importrobot(‘StepByStepChanged.urdf’,DataFormat=’column’);
q0 = deg2rad([90, -90, 0, 90, 0, 90, 0])’;
Tn=transl([0 0 0.1789])*trotx(0)*troty(0)*trotz(1.570796326794897)*trotz(-q0(1))…
*transl([0.002928236431969 2.430013955534704e-04 0.119599103269260])*trotx(0)*troty(3.062357948966975e-04)*trotz(0)*trotx(q0(2))…
*transl([-0.002914729213097 -0.001033720384413 0.155156998604446])*trotx(0.003609596843643)*troty(0)*trotz(0.022904943980785)*trotz(-q0(3))…
*transl([0.002968235617925 -0.065351124778835 0.304178518630177])*trotx(-0.003609596843643)*troty(0)*trotz(-0.022904943980785)*trotx(q0(4))…
*transl([-0.005205306143812 0.052692560433216 0.077902477491654])*trotx(0.004548981482162)*troty(-0.003199754330450)*trotz(-8.266717521666507e-05)*trotz(-q0(5))…
*transl([0.005280972133389 -9.031931320468978e-05 0.379510019774372])*trotx(3.137042207549150)*troty(-4.894462134554110e-05)*trotz(0.004660804199542)*trotx(-q0(6))…
*transl([-9.820067340677299e-04 -0.076367223695928 -0.106323102347568])*trotx(-3.130442252053242)*troty(-0.005548107438167)*trotz(1.567890031620816)*trotz(-q0(7))
jointPositions=q0′;
T_urdf1=robot.getTransform(jointPositions’,’Link1′,’base_link’)*robot.getTransform(jointPositions’,’Link2′,’Link1′)…
*robot.getTransform(jointPositions’,’Link3′,’Link2′)*robot.getTransform(jointPositions’,’Link4′,’Link3′)…
*robot.getTransform(jointPositions’,’Link5′,’Link4′)*robot.getTransform(jointPositions’,’Link6′,’Link5′)…
*robot.getTransform(jointPositions’,’Link7′,’Link6′)
T_urdf=robot.getTransform(q0,’Link7′,’base_link’)
StepByStepChanged.urdf is as follows:
<?xml version="1.0" encoding="utf-8"?>
<!– This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com)
Commit Version: 1.6.0-4-g7f85cfe Build Version: 1.6.7995.38578
For more information, please see http://wiki.ros.org/sw_urdf_exporter –>
<robot
name="Diana7Med">
<link name="world"/>
<joint name="fixed" type="fixed">
<parent link="world"/>
<child link="base_link"/>
</joint>
<link
name="base_link">
<inertial>
<origin
xyz="-0.00024914 -0.00023302 0.076031"
rpy="0 0 0" />
<mass
value="1.732" />
<inertia
ixx="0.0085914"
ixy="-2.9842E-05"
ixz="-2.6598E-05"
iyy="0.0085918"
iyz="-2.4568E-05"
izz="0.006987" />
</inertial>
<visual>
<origin
xyz="0 0 0.013"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/base_link.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0.013"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/base_link.STL" />
</geometry>
</collision>
</link>
<joint
name="joint1"
type="revolute">
<origin
xyz="0 0 0.17890"
rpy="0 0 1.570796326794897" />
<parent
link="base_link" />
<child
link="Link1" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="254"
velocity="1.5708" />
</joint>
<link
name="Link1">
<inertial>
<origin
xyz="0.043475 -3.8174E-06 0.096019"
rpy="0 0 0" />
<mass
value="2.727" />
<inertia
ixx="0.011033"
ixy="-4.8083E-07"
ixz="-0.0022068"
iyy="0.011337"
iyz="-3.3735E-07"
izz="0.008112" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link1.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link1.STL" />
</geometry>
</collision>
</link>
<joint
name="joint2"
type="revolute">
<origin
xyz="0.002928236431969 2.430013955534704e-04 0.119599103269260"
rpy="0 3.062357948966975e-04 0" />
<parent
link="Link1" />
<child
link="Link2" />
<axis
xyz="1 0 0" />
<limit
lower="-1.5708"
upper="1.5708"
effort="253"
velocity="1.5708" />
</joint>
<link
name="Link2">
<inertial>
<origin
xyz="-0.036812 7.2275E-07 0.04165"
rpy="0 0 0" />
<mass
value="3.1817" />
<inertia
ixx="0.016888"
ixy="8.9891E-08"
ixz="-0.0043558"
iyy="0.018072"
iyz="-2.2014E-07"
izz="0.0096122" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link2.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link2.STL" />
</geometry>
</collision>
</link>
<joint
name="joint3"
type="revolute">
<origin
xyz="-0.002914729213097 -0.001033720384413 0.155156998604446"
rpy="0.003609596843643 0 0.022904943980785" />
<parent
link="Link2" />
<child
link="Link3" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="111"
velocity="1.5708" />
</joint>
<link
name="Link3">
<inertial>
<origin
xyz="0 -0.014808 0.17679"
rpy="0 0 0" />
<mass
value="3.9362" />
<inertia
ixx="0.054706"
ixy="0.0029594"
ixz="-0.0079553"
iyy="0.052971"
iyz="0.010083"
izz="0.013339" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link3.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link3.STL" />
</geometry>
</collision>
</link>
<joint
name="joint4"
type="revolute">
<origin
xyz="0.002968235617925 -0.065351124778835 0.304178518630177"
rpy="-0.003609596843643 0 -0.022904943980785" />
<parent
link="Link3" />
<child
link="Link4" />
<axis
xyz="1 0 0" />
<limit
lower="0"
upper="3.0543"
effort="111"
velocity="1.5708" />
</joint>
<link
name="Link4">
<inertial>
<origin
xyz="-0.041116 0.015134 0.012416"
rpy="0 0 0" />
<mass
value="1.5847" />
<inertia
ixx="0.0043925"
ixy="-0.00067906"
ixz="-0.00067352"
iyy="0.0038733"
iyz="-0.00083279"
izz="0.0042261" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link4.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link4.STL" />
</geometry>
</collision>
</link>
<joint
name="joint5"
type="revolute">
<origin
xyz="-0.005205306143812 0.052692560433216 0.077902477491654"
rpy="0.004548981482162 -0.003199754330450 -8.266717521666507e-05" />
<parent
link="Link4" />
<child
link="Link5" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="53"
velocity="2.9671" />
</joint>
<link
name="Link5">
<inertial>
<origin
xyz="-0.028829 0.0020991 0.15664"
rpy="0 0 0" />
<mass
value="1.9268" />
<inertia
ixx="0.027058"
ixy="0.00012672"
ixz="0.007118"
iyy="0.029321"
iyz="-0.00025937"
izz="0.0041403" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link5.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link5.STL" />
</geometry>
</collision>
</link>
<joint
name="joint6"
type="revolute">
<origin
xyz="0.005280972133389 -9.031931320468978e-05 0.379510019774372"
rpy="3.137042207549150 -4.894462134554110e-05 0.004660804199542" />
<parent
link="Link5" />
<child
link="Link6" />
<axis
xyz="-1 0 0" />
<limit
lower="-3.1241"
upper="3.1241"
effort="53"
velocity="2.9671" />
</joint>
<link
name="Link6">
<inertial>
<origin
xyz="0 -0.0122 1.2021"
rpy="0 0 0" />
<mass
value="4.434E-12" />
<inertia
ixx="7.2173E-20"
ixy="-9.8454E-20"
ixz="-1.1913E-20"
iyy="1.6421E-19"
iyz="-7.0312E-21"
izz="2.2322E-19" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link6.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link6.STL" />
</geometry>
</collision>
</link>
<joint
name="joint7"
type="revolute">
<origin
xyz="-9.820067340677299e-04 -0.076367223695928 -0.106323102347568"
rpy="-3.130442252053242 -0.005548107438167 1.567890031620816" />
<parent
link="Link6" />
<child
link="Link7" />
<axis
xyz="0 0 -1" />
<limit
lower="-3.1241"
upper="3.1241"
effort="53"
velocity="2.9671" />
</joint>
<link
name="Link7">
<inertial>
<origin
xyz="1.2416E-09 -0.00041281 -0.015665"
rpy="0 0 0" />
<mass
value="0.1669" />
<inertia
ixx="8.8902E-05"
ixy="-9.3654E-10"
ixz="-1.1631E-12"
iyy="8.7425E-05"
iyz="-2.6369E-07"
izz="0.0001438" />
</inertial>
<visual>
<origin
xyz="0 0 -0.0369"
rpy="3.1416 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link7.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 -0.0369"
rpy="3.1416 0 0" />
<geometry>
<mesh
filename="package://Diana7Med/meshes/Link7.STL" />
</geometry>
</collision>
</link>
<joint
name="joint8"
type="fixed">
<origin
xyz="0.05 0 0"
rpy="0 0 0" />
<parent
link="Link7" />
<child
link="Link8" />
</joint>
<link
name="Link8">
<inertial>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<mass
value="0" />
<inertia
ixx="0"
ixy="0"
ixz="-0"
iyy="0"
iyz="0"
izz="0" />
</inertial>
</link>
</robot>
The results of the two calculation methods are as follows:
So as the figure shows the results of the two calculations are different, can someone tell me why? I have done several tests and have not been able to find out what is the cause of this result. Hope someone help me with this. And by the way,I wonder if there is any current experience or paper on the calibration of motion and dynamics in URDF? urdf, calibration, gettransform MATLAB Answers — New Questions
Averaging rotation matrices and calculating the variability
Hi
I have multiple rotation matrices in the form of cell aray (attached).
I would like to calculate an average or a mean matrix and variability around the mean (standard deviation)
So far I have tried converting the rotation matrices to quaternions and using the meanrot to calculate the quaternion mean. But I do not know how to calculate the variability (STD or variance).
Reading around this, one approach may be to calculate the diffrence between the quaternion mean and each quaternion and porceed (not sure how)
The other way is to use the vector for the mean and the vectors for each rotation matrix; then calculate the diffrence between mean vector and each vector.
I am not sure which is mathematically correct and also how to do that.
ThanksHi
I have multiple rotation matrices in the form of cell aray (attached).
I would like to calculate an average or a mean matrix and variability around the mean (standard deviation)
So far I have tried converting the rotation matrices to quaternions and using the meanrot to calculate the quaternion mean. But I do not know how to calculate the variability (STD or variance).
Reading around this, one approach may be to calculate the diffrence between the quaternion mean and each quaternion and porceed (not sure how)
The other way is to use the vector for the mean and the vectors for each rotation matrix; then calculate the diffrence between mean vector and each vector.
I am not sure which is mathematically correct and also how to do that.
Thanks Hi
I have multiple rotation matrices in the form of cell aray (attached).
I would like to calculate an average or a mean matrix and variability around the mean (standard deviation)
So far I have tried converting the rotation matrices to quaternions and using the meanrot to calculate the quaternion mean. But I do not know how to calculate the variability (STD or variance).
Reading around this, one approach may be to calculate the diffrence between the quaternion mean and each quaternion and porceed (not sure how)
The other way is to use the vector for the mean and the vectors for each rotation matrix; then calculate the diffrence between mean vector and each vector.
I am not sure which is mathematically correct and also how to do that.
Thanks mean rotation, rotation matrix, averaging rotations MATLAB Answers — New Questions
Lead Concatenation in ECG Classification Using CWT: Required or Optional?
Dear Matlab Community,
I am currently working on a classification task with ECG recordings stored in a CSV file with dimensions of (5001, 12). The first row contains headers, and each column represents a lead of the ECG, totaling 12 leads. These recordings were made over a duration of 10 seconds at a sampling frequency of 500 Hz. Therefore, each lead comprises a sequence of 5000 values. The unit of measurement is 0.01 mV, adhering to the Philips standard recording system.
My specific question pertains to the methodology of feature extraction for classification purposes using the Continuous Wavelet Transform (CWT). Should I proceed by creating a scalogram for each lead independently and then concatenating them, or should I generate 12 scalograms from each ECG and consider them as belonging to the same class?
Put differently, is each lead’s scalogram regarded as a class instance, or is it pivotal to concatenate the 12 leads to accurately represent an ECG? Your insights and guidance on this matter would be greatly appreciated.
Sincerely,Dear Matlab Community,
I am currently working on a classification task with ECG recordings stored in a CSV file with dimensions of (5001, 12). The first row contains headers, and each column represents a lead of the ECG, totaling 12 leads. These recordings were made over a duration of 10 seconds at a sampling frequency of 500 Hz. Therefore, each lead comprises a sequence of 5000 values. The unit of measurement is 0.01 mV, adhering to the Philips standard recording system.
My specific question pertains to the methodology of feature extraction for classification purposes using the Continuous Wavelet Transform (CWT). Should I proceed by creating a scalogram for each lead independently and then concatenating them, or should I generate 12 scalograms from each ECG and consider them as belonging to the same class?
Put differently, is each lead’s scalogram regarded as a class instance, or is it pivotal to concatenate the 12 leads to accurately represent an ECG? Your insights and guidance on this matter would be greatly appreciated.
Sincerely, Dear Matlab Community,
I am currently working on a classification task with ECG recordings stored in a CSV file with dimensions of (5001, 12). The first row contains headers, and each column represents a lead of the ECG, totaling 12 leads. These recordings were made over a duration of 10 seconds at a sampling frequency of 500 Hz. Therefore, each lead comprises a sequence of 5000 values. The unit of measurement is 0.01 mV, adhering to the Philips standard recording system.
My specific question pertains to the methodology of feature extraction for classification purposes using the Continuous Wavelet Transform (CWT). Should I proceed by creating a scalogram for each lead independently and then concatenating them, or should I generate 12 scalograms from each ECG and consider them as belonging to the same class?
Put differently, is each lead’s scalogram regarded as a class instance, or is it pivotal to concatenate the 12 leads to accurately represent an ECG? Your insights and guidance on this matter would be greatly appreciated.
Sincerely, ecg, classification, feature extraction, continuous wavelet transform (cwt), scalogram, lead concatenation, signal processing MATLAB Answers — New Questions
how to get variable of function in for loop
Hello, someone please help me.
I created a polynomial function f(x,y) using two variables. I varied the values of both variables to get the maximum f(x,y) using for loop and i got it. But, i dont know how to get or display the values of the x and y that made it. can you tell me the syntax to get them? thanks!!
x = 1:20;
y = 1:13;
f = [];
for i = 1:length(x), j = 1:length(j);
f(i,j) = x(i).^2 – x(i) -2*y(j).^2 + y(j) -25;
end
fmax = max(max(f));
display(fmax)Hello, someone please help me.
I created a polynomial function f(x,y) using two variables. I varied the values of both variables to get the maximum f(x,y) using for loop and i got it. But, i dont know how to get or display the values of the x and y that made it. can you tell me the syntax to get them? thanks!!
x = 1:20;
y = 1:13;
f = [];
for i = 1:length(x), j = 1:length(j);
f(i,j) = x(i).^2 – x(i) -2*y(j).^2 + y(j) -25;
end
fmax = max(max(f));
display(fmax) Hello, someone please help me.
I created a polynomial function f(x,y) using two variables. I varied the values of both variables to get the maximum f(x,y) using for loop and i got it. But, i dont know how to get or display the values of the x and y that made it. can you tell me the syntax to get them? thanks!!
x = 1:20;
y = 1:13;
f = [];
for i = 1:length(x), j = 1:length(j);
f(i,j) = x(i).^2 – x(i) -2*y(j).^2 + y(j) -25;
end
fmax = max(max(f));
display(fmax) for loop, polynomial, variables, display MATLAB Answers — New Questions
Windows updates…Grrr!!!
Does Windows not see Matlab when checking to see if it can do an auto-restart to install updates? I read somewhere that Windows makes sure the computer is not busy before automatically restarting, but alas I came in this morning to find my overnight simulation had been aborted due to Windows installing updates!
:'(Does Windows not see Matlab when checking to see if it can do an auto-restart to install updates? I read somewhere that Windows makes sure the computer is not busy before automatically restarting, but alas I came in this morning to find my overnight simulation had been aborted due to Windows installing updates!
:'( Does Windows not see Matlab when checking to see if it can do an auto-restart to install updates? I read somewhere that Windows makes sure the computer is not busy before automatically restarting, but alas I came in this morning to find my overnight simulation had been aborted due to Windows installing updates!
:'( windows sucks! MATLAB Answers — New Questions
finding indexed max values of a matrix using logical array
Hi. Note I have a hard-coded example for this question below you can run to see what I am referring in the question.
To illustrate the problem, I have an m x n matrix G of values. Each row represents a time series of a given repeated measure. I want to get the max values along each row of G and find the (i,j) indexes of the max values of G. Then I want to find the exact time point for where in the time series the max value of G lie for each corresponding row.
My approach was to first make the time series S a repeated matix of the same row values. Then I made a logical mask M = (G == max(G, [],2)). The occurrences of logical ones do correspond to where the max values of G lie, as expected. However when I used the the logical mask M in S to get the time points for the max values of each row using S(M), I get nonsense. I am not sure what I am not understanding or doing wrong.
For instance. The first row max of G is 3 and at index =3 in the time series. Using the S(M) scheme should give "202" but doesn’t. The values for the other rows are all off as well.
Any help with this would be greatly appreciated.
_______________________________________________
UPDATE:
I realized that the scheme is technically working with the problem the values for the sequential rows is not preserved. When I type:
[i,j] = find(G == max(G, [],2)), the row order is weirdly randomized (see code section below of the order of the i values). Does any one know why this would happen? I would need to preserve the sequential order of the row values from 1:9.
S = repmat((200:202), [9,1]); % repeated matrix of consecutive indices
G = [2 1 3
4 8 12
3 4 2
2 1 3
4 8 12
3 4 2
2 1 3
4 8 12
3 4 2]; % matrix of random values
M = (G == max(G, [],2)) % find logical mask of max values along the rows
S(M)
[i,j] = find(G == max(G, [],2))Hi. Note I have a hard-coded example for this question below you can run to see what I am referring in the question.
To illustrate the problem, I have an m x n matrix G of values. Each row represents a time series of a given repeated measure. I want to get the max values along each row of G and find the (i,j) indexes of the max values of G. Then I want to find the exact time point for where in the time series the max value of G lie for each corresponding row.
My approach was to first make the time series S a repeated matix of the same row values. Then I made a logical mask M = (G == max(G, [],2)). The occurrences of logical ones do correspond to where the max values of G lie, as expected. However when I used the the logical mask M in S to get the time points for the max values of each row using S(M), I get nonsense. I am not sure what I am not understanding or doing wrong.
For instance. The first row max of G is 3 and at index =3 in the time series. Using the S(M) scheme should give "202" but doesn’t. The values for the other rows are all off as well.
Any help with this would be greatly appreciated.
_______________________________________________
UPDATE:
I realized that the scheme is technically working with the problem the values for the sequential rows is not preserved. When I type:
[i,j] = find(G == max(G, [],2)), the row order is weirdly randomized (see code section below of the order of the i values). Does any one know why this would happen? I would need to preserve the sequential order of the row values from 1:9.
S = repmat((200:202), [9,1]); % repeated matrix of consecutive indices
G = [2 1 3
4 8 12
3 4 2
2 1 3
4 8 12
3 4 2
2 1 3
4 8 12
3 4 2]; % matrix of random values
M = (G == max(G, [],2)) % find logical mask of max values along the rows
S(M)
[i,j] = find(G == max(G, [],2)) Hi. Note I have a hard-coded example for this question below you can run to see what I am referring in the question.
To illustrate the problem, I have an m x n matrix G of values. Each row represents a time series of a given repeated measure. I want to get the max values along each row of G and find the (i,j) indexes of the max values of G. Then I want to find the exact time point for where in the time series the max value of G lie for each corresponding row.
My approach was to first make the time series S a repeated matix of the same row values. Then I made a logical mask M = (G == max(G, [],2)). The occurrences of logical ones do correspond to where the max values of G lie, as expected. However when I used the the logical mask M in S to get the time points for the max values of each row using S(M), I get nonsense. I am not sure what I am not understanding or doing wrong.
For instance. The first row max of G is 3 and at index =3 in the time series. Using the S(M) scheme should give "202" but doesn’t. The values for the other rows are all off as well.
Any help with this would be greatly appreciated.
_______________________________________________
UPDATE:
I realized that the scheme is technically working with the problem the values for the sequential rows is not preserved. When I type:
[i,j] = find(G == max(G, [],2)), the row order is weirdly randomized (see code section below of the order of the i values). Does any one know why this would happen? I would need to preserve the sequential order of the row values from 1:9.
S = repmat((200:202), [9,1]); % repeated matrix of consecutive indices
G = [2 1 3
4 8 12
3 4 2
2 1 3
4 8 12
3 4 2
2 1 3
4 8 12
3 4 2]; % matrix of random values
M = (G == max(G, [],2)) % find logical mask of max values along the rows
S(M)
[i,j] = find(G == max(G, [],2)) indexing, logical arrays MATLAB Answers — New Questions
Each time maximum number of valid configs changes depending on the pick up point
Hello,
I am trying to generate some valid pick up configurations for a given orientation ( I have 17 different orientations to test) around some points in space with UR5e. I count them as well so that I know the exact number of valid pick up configurations around each point. The thing is, sometimes when I run the simulation for some points, it counts less or more then it did before. So let’s say the result of the first execution for the point A was 16 valid pick up configs around that point, the second time it can be 13 for example instead of 16. Why is this happening ? Should I modify the solver parameters of gik to overcome this ? Because if sometimes it looks like the UR5 can’t reach certain poses but other times it can so it’s not really viable.
Hello,
I am trying to generate valid pick-up configurations for a given orientation with a UR5e robot. I have 17 different orientations to test around specific points in space. For each point, I count the number of valid pick-up configurations to determine the exact number of feasible configurations.
However, I have encountered an inconsistency: the number of valid configurations varies between simulation runs. For instance, for a given point A, the first execution might yield 16 valid configurations, while the second might yield only 13.
Why is this inconsistency happening? Should I modify the solver parameters of the Generalized Inverse Kinematics (GIK) solver to achieve consistent results ? How can I be sure of getting the maximum reachable configurations? Because of this problem, it appears that sometimes the UR5e can reach certain poses, but other times it cannot, which undermines the reliability of the simulations.
Thank you for your assistance.Hello,
I am trying to generate some valid pick up configurations for a given orientation ( I have 17 different orientations to test) around some points in space with UR5e. I count them as well so that I know the exact number of valid pick up configurations around each point. The thing is, sometimes when I run the simulation for some points, it counts less or more then it did before. So let’s say the result of the first execution for the point A was 16 valid pick up configs around that point, the second time it can be 13 for example instead of 16. Why is this happening ? Should I modify the solver parameters of gik to overcome this ? Because if sometimes it looks like the UR5 can’t reach certain poses but other times it can so it’s not really viable.
Hello,
I am trying to generate valid pick-up configurations for a given orientation with a UR5e robot. I have 17 different orientations to test around specific points in space. For each point, I count the number of valid pick-up configurations to determine the exact number of feasible configurations.
However, I have encountered an inconsistency: the number of valid configurations varies between simulation runs. For instance, for a given point A, the first execution might yield 16 valid configurations, while the second might yield only 13.
Why is this inconsistency happening? Should I modify the solver parameters of the Generalized Inverse Kinematics (GIK) solver to achieve consistent results ? How can I be sure of getting the maximum reachable configurations? Because of this problem, it appears that sometimes the UR5e can reach certain poses, but other times it cannot, which undermines the reliability of the simulations.
Thank you for your assistance. Hello,
I am trying to generate some valid pick up configurations for a given orientation ( I have 17 different orientations to test) around some points in space with UR5e. I count them as well so that I know the exact number of valid pick up configurations around each point. The thing is, sometimes when I run the simulation for some points, it counts less or more then it did before. So let’s say the result of the first execution for the point A was 16 valid pick up configs around that point, the second time it can be 13 for example instead of 16. Why is this happening ? Should I modify the solver parameters of gik to overcome this ? Because if sometimes it looks like the UR5 can’t reach certain poses but other times it can so it’s not really viable.
Hello,
I am trying to generate valid pick-up configurations for a given orientation with a UR5e robot. I have 17 different orientations to test around specific points in space. For each point, I count the number of valid pick-up configurations to determine the exact number of feasible configurations.
However, I have encountered an inconsistency: the number of valid configurations varies between simulation runs. For instance, for a given point A, the first execution might yield 16 valid configurations, while the second might yield only 13.
Why is this inconsistency happening? Should I modify the solver parameters of the Generalized Inverse Kinematics (GIK) solver to achieve consistent results ? How can I be sure of getting the maximum reachable configurations? Because of this problem, it appears that sometimes the UR5e can reach certain poses, but other times it cannot, which undermines the reliability of the simulations.
Thank you for your assistance. matlab, inversekinematics MATLAB Answers — New Questions
BLDC/PMSM parametrization based on datasheet
Hello everyone,
I would like to ask regarding parameterization of BLDC/PMSM based on manufacturer’s datasheet. I have a motor datasheet in which interphase-resistance, induction values and number of poles are given? The datasheet is hereby attached. The circled part is my requirement for motor. Could you please guide how to do I calculate:
D&Q Inductance
Torque/BEMF constant or permanent flux linkage
Phase resistance
I believe many manufacturer do not simply provide constant values. Looking forward to hearing from the expert in this field.
Thank you.Hello everyone,
I would like to ask regarding parameterization of BLDC/PMSM based on manufacturer’s datasheet. I have a motor datasheet in which interphase-resistance, induction values and number of poles are given? The datasheet is hereby attached. The circled part is my requirement for motor. Could you please guide how to do I calculate:
D&Q Inductance
Torque/BEMF constant or permanent flux linkage
Phase resistance
I believe many manufacturer do not simply provide constant values. Looking forward to hearing from the expert in this field.
Thank you. Hello everyone,
I would like to ask regarding parameterization of BLDC/PMSM based on manufacturer’s datasheet. I have a motor datasheet in which interphase-resistance, induction values and number of poles are given? The datasheet is hereby attached. The circled part is my requirement for motor. Could you please guide how to do I calculate:
D&Q Inductance
Torque/BEMF constant or permanent flux linkage
Phase resistance
I believe many manufacturer do not simply provide constant values. Looking forward to hearing from the expert in this field.
Thank you. electric_motor_control, pmsm, bldc, motor_parameterization MATLAB Answers — New Questions