[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
uicontrol fails to callback
From: |
Octave User |
Subject: |
uicontrol fails to callback |
Date: |
Mon, 21 Mar 2016 23:29:17 -0700 (PDT) |
Dear Sir
I run a robotic simulation code to octave and encounter some callback issue.
I hope experts on this forum can help me to go through it.
the original code is here.
<http://www.mathworks.com/matlabcentral/fileexchange/25855-plot-and-animate-robot/content/FK.m>
when it executes to
*uicontrol('sty','pu','callback',@pp,'string','Go','backgroundcolor','w')*
the error shows:
*error: @setmap: no function and no method found
error: called from
testUncontrolCallback at line 20 column 11
error: evaluating argument list element number 8
error: called from
testUncontrolCallback at line 20 column 11
error: octave_base_value::int_value (): wrong type argument 'scalar'
error: octave_base_value::int_value (): wrong type argument 'scalar'*
However, the function pp is just at the bottom of the same code.
In order to verify the question, I also run the matlab uicontrol example
code <https://www.mathworks.com/help/matlab/ref/uicontrol.html> on octave.
It also didn't work with the same error.
I would appreciate if anyone can help. Thank you very much
Finally, in case some one does not have a matlab account, I post the code at
below as reference.
===============================================================
function roboticsc(varargin)
global tts ss5 T2 f kkx kky kkz
figure('un','n','num','off','nam','Robot','color','w','pos',[.1 .1 .8
.8])
ma = axes('pos',[.15 .15 1 1]);
axis off
view(3)
rotate3d
grid on
hold on
axes('pos',[.01 .91 .45 .05])
text('position',[0.01,.5],'string','\alpha_i_-_1 a_i_-_1 d_i
\theta_i q_i','fontsize',15,'fontangle','i')
axis off
axes(ma)
e1=uicontrol('sty','e','un','n','pos',[.01 .5 .225
.4],'backgroundcolor','w','max',2,'ho','l','fonts',10,'fontn','courier');
e5=uicontrol('sty','e','un','n','pos',[.25 .5 .05
.4],'backgroundcolor','w','max',2,'fonts',10,'fontn','courier');
uicontrol('sty','pu','callback',@pp,'string','Go','backgroundcolor','w')
lxf=uicontrol('sty','li','string',{'Null';'Planar';'Puma
560';'Complete';'Piper''s 1st';'Yasukawa
L-3';'Stanford';'IRB1400';'DIESTRO';'DLR'},'callback',@dl,'un','n','pos',[.7
.05 .2 .1],'backgroundcolor','w');
function T=trans(al,a,d,t)
T=[cos(t) -sin(t) 0 a;
sin(t)*cos(al) cos(t)*cos(al) -sin(al) -sin(al)*d;
sin(t)*sin(al) cos(t)*sin(al) cos(al) cos(al)*d;
0 0 0 1];
end
function dl(varargin)
set(dumd,'string','0')
switch get(lxf,'value')
case 1
set([e5,e1],'string','','sty','e')
case 2
set(e1,'string',strvcat('0 2 0 0','0 2 0 0','0
2 0 0')) %#ok<*VCAT>
set(e5,'string',['t';'d';'t'])
case 3
set(e1,'sty','e')
set(e1,'str',strvcat('0 0 0 0','-pi/2 0 0 0','0
3 1 0','-pi/2 1 2
0','pi/2 0 0 0','-pi/2 0 0 0'))
set(e5,'string',['t';'t';'t';'t';'t';'t'])
case 4
set(e1,'sty','e')
set(e1,'str',strvcat('0 0 3 0','-pi/2 0 3
pi/2','pi/2 0 3 0'))
set(e5,'string',['d';'d';'d'])
case 5
set(e1,'sty','e')
set(e5,'string',['t';'t';'t';'t';'t';'t'])
set(e1,'str',strvcat('0 0 0 0','pi/2 0 2
0','-pi/2 2 2 0','pi/2 2 2
0','-pi/2 0 0 0','pi/2 0 0 0'))
case 6
set(e1,'sty','e')
set(e5,'string',['t';'t';'t';'t';'t'])
set(e1,'str',strvcat('0 0 0 0','-pi/2 0 0 0','0
3 0 0','0 4 0 0','pi/2 0
0 0'))
case 7
set(e1,'sty','e')
set(e5,'string',['t';'t';'d';'t';'t';'t'])
set(e1,'str',strvcat('0 0 0 0','-pi/2 0 4
0','pi/2 0 3 0','0 0 0
0','-pi/2 0 0 0',...
'pi/2 0 2 0'))
case 8
set(e1,'sty','e')
set(e5,'string',['t';'t';'t';'t';'t';'d'])
set(e1,'str',num2str([ 0 0
4.75 0
1.5708 1.5 0
1.5708
0 6 0 0
1.5708 1.2 7.2
0
-1.5708 0 0
0
1.5708 0 0.85
0]));
case 9
sdgsdg=[-1.5708 5 5
0.25533
1.5708 5 5
0.25533
-1.5708 5 5
1.2766
1.5708 5 5
1.2766
-1.5708 5 5
1.2766
1.5708 5 5
1.2766];
sdgsdg(:,end) = zeros(6,1);
set(e1,'sty','e','str',num2str(sdgsdg))
set(e5,'string',['t';'t';'t';'t';'t';'t'])
case 10
sdgsdg=[ 1.5708 0 0
0
1.5708 0 0
0
1.5708 0 3
0
1.5708 0 0
0
1.5708 0 3
0
1.5708 0 0
0
1.5708 0 4
0
];
sdgsdg(:,end) = rand(7,1);
set(e1,'sty','e','str',num2str(sdgsdg))
set(e5,'string',['t';'t';'t';'t';'t';'t';'t'])
end
end
function pp(varargin)
cla
plot3(0,0,0,'r*')
set(dumd,'string','0');
DH=str2num(get(e1,'string'));
al=DH(:,1);
a=DH(:,2);
d=DH(:,3);
t=DH(:,4);
w=get(e5,'string');
delete(findobj('type','uicontrol','style','slider'));
delete(findobj('type','uicontrol','style','text'));
tts=uicontrol('sty','te','backgroundcolor','w','un','n','pos',[.7 0 .2
.05],'string','','fontsize',15);
for k=1:length(a)
if strcmp(w(k),'t')
eval(['uicontrol(''style'',''slider'',''units'',''norm'',''pos'',[.1
',num2str(k*.1/2),' .1 .05
],''callback'',@slm,''min'',-2*pi-.1,''max'',2*pi+.1,''value'',',...
num2str(t(k)),')'])
eval(['uicontrol(''style'',''text'',''fontsize'',14,''fontname'',''calibri'',''fontangle'',''italic'',''units'',''norm'',''backgroundcolor'',''w'',''pos'',[.2
',num2str(k*.1/2),' .05 .05 ],''string'',',...
'[''t',num2str(k),'''])'])
else
eval(['uicontrol(''style'',''slider'',''units'',''norm'',''pos'',[.1
',num2str(k*.1/2),' .1 .05
],''callback'',@slm,''min'',-50,''max'',50,''value'',',...
num2str(d(k)),',''sliderstep'',[.001
.05])'])
eval(['uicontrol(''style'',''text'',''fontname'',''calibri'',''fontsize'',14,''fontangle'',''italic'',''units'',''norm'',''backgroundcolor'',''w'',''pos'',[.2
',num2str(k*.1/2),' .05 .05 ],''string'',',...
'[''d',num2str(k),'''])'])
end
end
T=cell(length(a),1);
f=1;
for k=1:length(a)
T{k}=trans(al(k),a(k),d(k),t(k));
f=f*T{k};
end
set(e1,'style','li')
delete(findobj('type','uicontrol','style','pus','string','Set'));
delete(findobj('type','uicontrol','style','edit','pos',[.025 .4
.2
.025]));
ep=uicontrol('sty','ed','un','n','pos',[.025 .4 .2
.025],'backgroundcolor','w');
uicontrol('sty','pu','un','n','pos',[.025 .425 .05
.025],'string','Set','callback',@chl,'backgroundcolor','w');
set(e1,'value',1,'callback',@leq)
ss5=abs(sum([d;a]));
slm(ss5)
leq
function leq(varargin)
ss=get(e1,'string');
vv=get(e1,'value');
sv=ss(vv,:);
set(ep,'string',sv)
end
function chl(varargin)
set(dumd,'string','0');
val=str2num(get(ep,'string'));
ss=get(e1,'string');
vv=get(e1,'value');
ss=str2num(ss);
ss(vv,:)=val;
set(e1,'string',num2str(ss))
pp;
end
end
function slm(varargin)
axis on
set(e1,'value',1)
ll=flipud(findobj('type','uicontrol','style','slider'));
cla;
hold on
plot3(0,0,0,'r*')
DH=(str2num(get(e1,'string'))); %#ok<*ST2NM>
al=DH(:,1);
a=DH(:,2);
d=DH(:,3);
t=DH(:,4);
w=get(e5,'string');
n=length(a);
for k=1:length(a)
if strcmp(w(k),'t')
t(k)=get(ll(k),'value');
else
d(k)=get(ll(k),'value');
end
end
FFF=num2str([al,a,d,t],5);
set(e1,'string',FFF)
T=cell(length(a),1);
f=1;
for k=1:length(a)
T{k}=trans(al(k),a(k),d(k),t(k));
end
T2=cell(n,1);
T2{1}=T{1};
for k=2:n
T2{k}=T2{k-1}*T{k};
end
pv=plotorg([eye(4),[0;0;0;0]]);
for k=1:n
if w(k)=='d'
T2{k}=T2{k}+[0,0,0,0;0,0,0,0;0,0,0,0;1,0,0,0];
else
T2{k}=T2{k}.*(1-[0,0,0,0;0,0,0,0;0,0,0,0;1,0,0,0]);
end
if k<n && abs(a(k+1))>1e-10 && abs(d(k))>1e-10
pv=plotorg([double(T2{k}),[pv;k]],'t',[a(k+1),d(k),al(k)]);
elseif k<n && abs(a(k+1))>1e-10
pv=plotorg([double(T2{k}),[pv;k]],'a',a(k+1));
elseif abs(d(k))>1e-10
pv=plotorg([double(T2{k}),[pv;k]],'d',[d(k),al(k)]);
else
pv=plotorg([double(T2{k}),[pv;k]]);
end
end
% axis([-ss5-2 ss5+2 -ss5-2 ss5+2 -ss5-2 ss5+2])
PPPPP=T2{end};
set(tts,'string',sprintf('%2.2f ',transpose(PPPPP(1:3,4))));
dddd=T2{end};
disp((dddd))
if strcmp(get(dumd,'string'),'0')
JL = zeros(length(w),2);
for klk = 1:length(w)
if strcmp(w(klk),'t')
JL(klk,:) = [0,2*pi];
else
JL(klk,:) = [-ss5,ss5];
end
end
[kkx,kky,kkz] = mc(DH,w,JL);
set(dumd,'string','1');
end
axis([min(kkx),max(kkx),min(kky),max(kkx),min(kkz),max(kkz)]);
axis square
function [pv,g]=plotorg(T,varargin)
nuk = T(end);
w=get(e5,'string');
res=10;
R=T(1:3,1:3);
g2=tr2eul(R);
g=struct;
g.a=g2(1);
g.b=g2(2);
g.g=g2(3);
P=T(1:3,4);
pp=plot3(P(1),P(2),P(3),'k.');
set(pp,'markersize',20)
[A,B,C]=sphere(res);
pp1=surf(A.*.5+P(1),B.*.5+P(2),C.*.5+P(3));
if T(4,1)==1
set(pp1,'edgecolor','none','facealpha',.5,'facecolor','y')
else
set(pp1,'edgecolor','none','facealpha',.5,'facecolor','c')
end
lz=line([P(1) P(1)],[P(2) P(2)],[ P(3) P(3)+2.5]);
set(lz,'color','g','linewidth',1.5,'linestyle','-.')
ly=line([P(1) P(1)],[P(2) P(2)+2.5],[ P(3) P(3)]);
set(ly,'color','r','linewidth',1.5,'linestyle','-.')
lx=line([P(1) P(1)+2.5],[P(2) P(2)],[P(3) P(3)]);
set(lx,'color','b','linewidth',1.5,'linestyle','-.')
t1=text('string',['x_',num2str(T(4,5))],'position',[P(1)+1.25 P(2)
P(3)+.05]);
t3=text('string',['y_',num2str(T(4,5))],'position',[P(1) P(2)+1.25
P(3)+.05]);
t2=text('string',['z_',num2str(T(4,5))],'position',[P(1)+.05 P(2)
P(3)+1.25]);
pv=T(1:3,5);
if T(4,5)==0
set([ly,lx,lz],'color','k','linestyle','-','linewidth',1)
delete(pp1)
return
end
ppj=[];
if numel(varargin)
if strcmp(varargin{1},'a')
[A,B,C]=cylinder(.5,res);
mor=surf(A+P(1),B+P(2),C.*varargin{2}+P(3));
set(mor,'facecolor',[.4 .8 .4])
rotate(mor,[0,1,0],90,P)
elseif strcmp(varargin{1},'d')
ll=varargin{2};
[A,B,C]=cylinder(.5,res);
mor=surf(A+P(1),B+P(2),C.*ll(1)+P(3));
[A,B,C]=sphere(res);
ppj1=surf(A.*.5+P(1),B.*.5+P(2),C.*.5+P(3)-ll(1));
if strcmp(w(T(4,5)),'d')
set(mor,'facecolor',[.14 .18
.14])
set(ppj1,'facecolor',[.4 .8
.4],'facealpha',.5,'facecolor','y')
else
set(mor,'facecolor',[.4 .8 .4])
set(ppj1,'facecolor',[.4 .8
.4],'facealpha',.5,'facecolor','c')
end
rotate(mor,[0,1,0],180,P)
ppj=[ppj,ppj1];
else
ll=varargin{2};
[A,B,C]=cylinder(.5,res);
mor1=surf(A+P(1),B+P(2),C.*ll(1)+P(3));
set(mor1,'facecolor',[.4 .8 .4])
rotate(mor1,[0,1,0],90,P)
[A,B,C]=cylinder(.5,res);
mor=surf(A+P(1),B+P(2),C.*ll(2)+P(3));
[A,B,C]=sphere(res);
ppj2=surf(A.*.5+P(1),B.*.5+P(2),C.*.5+P(3)-ll(2));
if strcmp(w(T(4,5)),'d')
set(mor,'facecolor',[.14 .18
.14])
set(ppj2,'edgecolor','none','facecolor','y')
else
set(mor,'facecolor',[.4 .8 .4])
set(ppj2,'edgecolor','none','facecolor','c')
end
rotate(mor,[0,1,0],180,P)
mor=[mor,mor1];
ppj=[ppj,ppj2];
end
else
mor=[];
end
set(findobj('type','surface'),'facealpha',.5,'edgecolor','k','edgealpha',.25)
set(findobj(gca,'type','text'),'fontsize',8,'fontweight','b')
set(findobj('type','surface','facecolor',[.4 .8
.4]),'facecolor',[.6 .7
.5])
T12=[t1 t2 t3];
if nuk == length(w)
x=P(1);
y=P(2);
z=P(3);
NLS1=line([x,x+1,x+2],[y,y-.25,y-.15],[z,z,z]);
NLS2=line([x,x+1,x+2],[y,y+.25,y+.15],[z,z,z]);
set([NLS1,NLS2],'color','k','linewidth',3)
set([lx,ly,lz],'linestyle','-','linewidth',2)
lx=[lx,NLS1,NLS2];
end
rotate([lx,ly,lz,mor,T12,pp1,ppj],[0,0,1],g.a*180/pi,P');%+[max(max(get(mor,'xdata'))),max(max(get(mor,'ydata'))),max(max(get(mor,'zdata')))])
pxx=get(ly,'xdata');
pyy=get(ly,'ydata');
pzz=get(ly,'zdata');
rotate([lx,ly,lz,mor,T12,pp1,ppj],[pxx(2)-pxx(1),pyy(2)-pyy(1),pzz(2)-pzz(1)],g.b*180/pi,P');%+[max(max(get(mor,'xdata'))),max(max(get(mor,'ydata'))),max(max(get(mor,'zdata')))])
pxx=get(lz,'xdata');
pyy=get(lz,'ydata');
pzz=get(lz,'zdata');
rotate([lx,ly,lz,mor,T12,pp1,ppj],[pxx(2)-pxx(1),pyy(2)-pyy(1),pzz(2)-pzz(1)],g.g*180/pi,P');%+[max(max(get(mor,'xdata'))),max(max(get(mor,'ydata'))),max(max(get(mor,'zdata')))])
% axis equal
end
end
dumd = uicontrol('visible','off','string','0');
function [xx,yy,zz] = mc(DH,w,JL)
Xn=[0;0;0;1];
ns=1000;
n=length(w);
xx=zeros(1,ns);
yy=zeros(1,ns);
zz=zeros(1,ns);
JR=JL(:,2)-JL(:,1);
cc=0;
for index=1:ns
fkDH=DH;
for kn=1:n
if w(kn)=='d'
fkDH(kn,3)=JL(kn,1)+rand*JR(kn);
else
fkDH(kn,4)=JL(kn,1)+rand*JR(kn);
end
end
X0=FK(fkDH,w,0,n,0)*Xn;
cc=cc+1;
xx(cc)=X0(1);
yy(cc)=X0(2);
zz(cc)=X0(3);
end
end
function euler = tr2eul(m) % from downloaded robotics toolbox
euler = zeros(1,3);
euler(1) = atan2(m(2,3), m(1,3));
sp = sin(euler(1));
cp = cos(euler(1));
euler(2) = atan2(cp*m(1,3) + sp*m(2,3), m(3,3));
euler(3) = atan2(-sp * m(1,1) + cp * m(2,1), -sp*m(1,2) +
cp*m(2,2));
end
end
reference: original code in case someone do not have a matlab forum account.
--
View this message in context:
http://octave.1599824.n4.nabble.com/uicontrol-fails-to-callback-tp4675700.html
Sent from the Octave - General mailing list archive at Nabble.com.
- uicontrol fails to callback,
Octave User <=