how to get element from matrix
古いコメントを表示
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 件のコメント
Geoff Hayes
2019 年 2 月 18 日
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
2019 年 2 月 18 日
Adam Danz
2019 年 2 月 18 日
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
2019 年 2 月 18 日
ans sobhi
2019 年 2 月 18 日
Geoff Hayes
2019 年 2 月 18 日
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
2019 年 2 月 18 日
Adam Danz
2019 年 2 月 19 日
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
2019 年 2 月 20 日
Geoff Hayes
2019 年 2 月 20 日
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
2019 年 2 月 20 日
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
2021 年 3 月 24 日
Hi, have you managed to run also the inverse kinematics?
回答 (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
カテゴリ
ヘルプ センター および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!