function [matice]=oblouk(robot,r,s,f,smer); %r-polomer, s-souradnice stredu flag=[0 0]; moznebody=[0 0;0 0]; %dolu = -10950; %f-pocatecni a koncovy uhel, smer-orientace soucstav=bbirctodeg(robot,bbgetirc(robot)); soucstav(3)=-fix(soucstav(3)); a = [r*cos(f(1)*2*pi/360)+s(1),r*sin(f(1)*2*pi/360)+s(2)]; b = [r*cos(f(2)*2*pi/360)+s(1),r*sin(f(2)*2*pi/360)+s(2)]; BA = mojeikt(robot,a(1),a(2),soucstav(3),0); BB = mojeikt(robot,b(1),b(2),soucstav(3),0); if isempty(BA) %kontrola je-li tento bod mozny v ikt disp('Nelze se dostat do prvniho bodu'); matice=[]; return end if isempty(BB) %kontrola je-li tento bod mozny v ikt disp('Nelze se dostat do druheho bodu'); matice=[]; return end if ( (BA(1,1)>=-85) & (BA(1,1)<=85) & (BA(1,2)>=-120) & (BA(1,2)<=120) ) %kontrola jestli se muze robot dostat do bodu A moznebody(1,1)=1; end if ( (BA(2,1)>=-85) & (BA(2,1)<=85) & (BA(2,2)>=-120) & (BA(2,2)<=120) ) moznebody(1,2)=1; end; if ( (BB(1,1)>=-85) & (BB(1,1)<=85) & (BB(1,2)>=-120) & (BB(1,2)<=120) ) %kontrola jestli se muze robot dostat do bodu B moznebody(2,1)=1; end if ( (BB(2,1)>=-85) & (BB(2,1)<=85) & (BB(2,2)>=-120) & (BB(2,2)<=120) ) moznebody(2,2)=1; end; if soucstav(2)>=0 %vyber konfiguraci ramen if moznebody(:,1)==[1;1] flag(1)=1; if moznebody(:,2)==[1;1] flag(2)=2; end elseif moznebody(:,2)==[1;1] flag(1)=2; else disp('Nelze se dostat do obou bodu se stejnou konfiguraci ramen'); matice=[]; return end else if moznebody(:,2)==[1;1] flag(1)=2; if moznebody(:,1)==[1;1] flag(2)=1; end elseif moznebody(:,1)==[1;1] flag(1)=1; else disp('Nelze se dostat do obou bodu se stejnou konfiguraci ramen'); matice=[]; return end end %******************************************************************************************** if r>100 smer=smer/2; end if r<100 smer=smer*2; end if r<50 smer=smer*2; end if r<10 smer=smer*1.5; end if r<5 smer=smer*4/3; end %algoritmus vypoctu oblouku if (f(1)f(2))&(smer>0) f(2)=f(2)+360; end pom=0; for k=f(1):smer:f(2) pom=pom+1; Body=[r*cos(k*2*pi/360)+s(1),r*sin(k*2*pi/360)+s(2)]; Uhly=mojeikt(robot,Body(1),Body(2),soucstav(3),0); if isempty(Uhly) disp('Cast oblouku lezi mimo pracovni prostor') matice=[]; return; end matice(pom,:)=bbdegtoirc(robot,Uhly(flag(1),:)); end matice(pom+1,:)=bbdegtoirc(robot,BB(flag(1),:)); bbmoveirc(robot,matice(1,:)); bbwaitforready(robot); bbmoveircs(robot,matice,40,5); bbwaitforready(robot);