how to get element from matrix
Show older comments
function btn_forward_Callback(hObject, eventdata, handles)
% hObject handle to btn_forward (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Th_1 = str2double(get(handles.Theta_1,'string'))*pi/180;
Th_2 = str2double(get(handles.Theta_2,'string'))*pi/180;
Th_3 = str2double(get(handles.Theta_3,'string'))*pi/180;
Th_4 = str2double(get(handles.Theta_4,'string'))*pi/180;
L_1 = 10;
L_2 = 20;
L_3 = 30;
L_4 = 10;
L(1) = Link([0 L_1 0 pi/2]);
L(2) = Link([0 0 L_2 0]);
L(3) = Link([0 0 L_3 0]);
L(4) = Link([0 0 L_4 0]);
Robot = SerialLink(L);
Robot.name = 'anosh';
Robot.plot([Th_1 Th_2 Th_3 Th_4]);
T = Robot.fkine([Th_1 Th_2 Th_3 Th_4]);
handles.Pos_X.string = num2str(floor(T(1,4)));
function Pos_X_Callback(hObject, eventdata, handles)
there is error
Index exceeds matrix dimensions.
Error in ggg>btn_forward_Callback (line 188)
handles.Pos_X.string = num2str(floor(T(1,4)));
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in ggg (line 42)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)ggg('btn_forward_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback.
12 Comments
Geoff Hayes
on 18 Feb 2019
ans - what can you tell us about T? From the code
T = Robot.fkine([Th_1 Th_2 Th_3 Th_4]);
handles.Pos_X.string = num2str(floor(T(1,4)));
you are assuming that T has (at least) four columns but the error message is telling you that the index exceeds the matrix dimensions...so T may not have four columns.
ans sobhi
on 18 Feb 2019
Adam Danz
on 18 Feb 2019
Please copy the value of T from the command window and paste it here. I'm guessing T does not have 4 columns.
ans sobhi
on 18 Feb 2019
ans sobhi
on 18 Feb 2019
Geoff Hayes
on 18 Feb 2019
Is this always true? Is there perhaps some cases where T is not a 4x4 matrix? Perhaps try adding the following checks before updating the position
T = Robot.fkine([Th_1 Th_2 Th_3 Th_4]);
if size(T,2) >= 4 % ensure that there at least four columns
handles.Pos_X.string = num2str(floor(T(1,4)));
else
fprintf('T does not have four columns\n ');
end
ans sobhi
on 18 Feb 2019
Adam Danz
on 19 Feb 2019
According to the error message, at least sometimes T does not have 4 columns. I would add an sanity check similar to what Geoff suggested. If you put this conditional statement in your code just prior to the line causing error, you'll know if T is not the expected size.
T = Robot.fkine([Th_1 Th_2 Th_3 Th_4]);
if size(T,2) < 4
error('T does not have at least 4 columns.')
end
handles.Pos_X.string = num2str(floor(T(1,4)));
After doing so, run your code and I bet you'll see the error message indicated above.
If you do not see the error message indicated above, there's something fishy going on.
- Perhaps 'floor' is a global variable and you're trying to index it. (unlikely but something to check)
- The same could be true for 'num2str' (again, unlikely).
ans sobhi
on 20 Feb 2019
Geoff Hayes
on 20 Feb 2019
you many want to rename the T in
T = Robot.fkine([Th_1 Th_2 Th_3 Th_4]);
to avoid confusion with the field that you are accessing of the same name.
Adam Danz
on 20 Feb 2019
This suggests that T was not originally a matrix with 4 columns but instead, a structure. When you tried to get data from the 4th "column" of a structure, you got the error. 

Arianna Arianna Clemente
on 24 Mar 2021
Hi, have you managed to run also the inverse kinematics?
Answers (1)
Here's a summary of the comments under the question so that this question is marked as answered.
The variable "T" is a structure but was being accessed as if it were a matrix.
Here's a replication of the error
T.T1 = magic(4); % a 4x4 matrix stored in field 'T1' of structure "T"
T(1,4)
Index exceeds matrix dimensions. %matlab 2017b
Index in position 2 exceeds array bounds (must not exceed 1). %Matlab 2018a
Here's the solution
T.T1(1,4)
ans =
13
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!