# Warning: Matrix is singular, close to singular or badly scaled. Results may be inaccurate. RCOND = NaN.

조회 수: 11 (최근 30일)
Lorenzo Bianchi 2023년 1월 16일
답변: Nadia Shaik 2023년 3월 7일
Good evening everyone.
I have to implement in MATLAB/SIMULINK the kinematic inversion algorithm with inverse (and transpose) of the jacobian. I defined the trajectory to follow with the trapveltraj function and obtained the relative values ​​of position, speed, acceleration, etc. of the end effector. When I start the simulink model it gives completely wrong results and the error :"Warning: Matrix is ​​singular, close to singular or badly scaled. Results may be inaccurate. RCOND = NaN.". I tried to change solver but it didn't solve the problem. Below is the code I used and the simulink model. Thanks a lot to whoever will help me.
the code:
% IMPLEMENTARE IN MATLAB GLI ALGORITMI PER L'IINVERSIONE
% CINEMATICA CON INVERSA E TRASPOSTA DELLO JACOBIANO LUNGO LA TRAIETTORIA.
% ADOTTARE LA REGOLA DI INTEGRAZIONE NUMERICA DI EULERO CON
% TEMPO DI INTEGRAZIONE DI 1 MS.
close all
clc
% numero di giunti
n=4;
q=zeros(n,N);
% vettore variabili di giunto (th1 , th2 , d3 , th4)
q(:,1) = [90/180*pi -90/180*pi 0 0/180*pi]';
q(:,2) = [60/180*pi -120/180*pi 0 0/180*pi]';
q(:,3) = [15/180*pi -30/180*pi 0 0/180*pi]';
q(:,4)= [45/180*pi 90/180*pi 0 0/180*pi]';
q(:,5) = [45/180*pi -60/180*pi 0 0/180*pi]';
a=[0.5 0.5 0 0]';
alpha=[0 pi 0 0]';
d=[0 0 q(3,1) 0]';
theta=[q(1,1) q(2,1) 0 q(4,1)]';
DH=[a alpha d theta];
% definizione traiettoria
x = -10: 1 : 10;
raggio = 10;
y = sqrt (raggio^2 -x .^ 2);
k = zeros(length(x));
z = k(1,:);
punti_di_percorso = [0 70 90 90 50 50 20 -10 x 10 0;
90 90 70 50 40 -30 -60 -60 y 30 90;
0 0 30 30 50 50 10 10 z 0 0];
[q,qd,qdd,tvec,pp] = trapveltraj(punti_di_percorso, 1000);
Jacobian_scara_rectangular = Jacobian_Scara(DH);
Jacobian_scara_square = [Jacobian_scara_rectangular(1,:); Jacobian_scara_rectangular(2,:); Jacobian_scara_rectangular(3,:); Jacobian_scara_rectangular(6,:)];
K = [100 0 0 0; 0 100 0 0 ; 0 0 100 0; 0 0 0 100];
inversa_jacobiano = inv(Jacobian_scara_square);
q0 = [0 -90/180*pi -0.5 0]';
a = zeros(1,1000);
tvec = tvec';
zero=zeros(1,1000);
q1 = q';
q2 = qd';
xd = [tvec q1 zero'];
dxd = [tvec q2 zero'];
the matlab functions:
1)
function xe = fcn(q)
xe = zeros(4,1);
a=[0.5 0.5 0 0]';
alpha=[0 pi 0 0]';
d=[0 0 q(3,1) 0]';
theta=[q(1,1) q(2,1) 0 q(4,1)]';
DH=[a alpha d theta];
cinematica_diretta=DirectKinematics(DH);
xe(1)=cinematica_diretta(1,4,4);
xe(2)=cinematica_diretta(2,4,4);
xe(3)=cinematica_diretta(3,4,4);
xe(4)=q(1)+q(2)+q(4);
end
2)
function j_inversa=fcn(q)
a=[0.5 0.5 0 0]';
alpha=[0 pi 0 0]';
d=[0 0 q(3,1) 0]';
theta=[q(1,1) q(2,1) 0 q(4,1)]';
DH=[a alpha d theta];
Jacobian_scara_rectangular = Jacobian_Scara(DH);
Jacobian_scara_square = [Jacobian_scara_rectangular(1,:); Jacobian_scara_rectangular(2,:); Jacobian_scara_rectangular(3,:); Jacobian_scara_rectangular(6,:)];
j_inversa = inv(Jacobian_scara_square);
end

댓글을 달려면 로그인하십시오.

### 답변 (1개)

Hi Lorenzo,
I understand that you are getting the below warning message while running the Simulink model.
Warning: Matrix is close to singular or badly scaled
A common cause for this warning is that a program or function you run is using a matrix that is badly conditioned (difficult to invert) as one of the arguments to the backslash (\) or forward slash (/) operators, which are commonly used to solve systems of linear equations.
As a workaround, stop MATLAB on the line where the warning occurs. Examine the line for instances of the two slash operators. If you find one, determine the condition number of the coefficient matrix (the matrix on the left side of the backslash (\) or on the right side of the forward slash (/) using the COND function. Large results for the condition number indicate the matrix is extremely ill-conditioned. You should verify (using the matrix multiplication operator (*)) that the result of solving the system is numerically reliable.
I hope the above information resolves your query.

댓글을 달려면 로그인하십시오.

### 카테고리

Help CenterFile Exchange에서 Linear Algebra에 대해 자세히 알아보기

R2022b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by