function [matice]=primka(robot,bodA,bodB) flag=[0 0]; %mujposun2(robot,0,450,10000,0); %bbwaitforready(robot); soucstav=bbirctodeg(robot,bbgetirc(robot)); soucstav(3)=-fix(soucstav(3)); moznebody=[0 0;0 0]; BA=mojeikt(robot,bodA(1),bodA(2),soucstav(3),0); BB=mojeikt(robot,bodB(1),bodB(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 vzd = sqrt ((bodA(1)-bodB(1))^2+(bodA(2)-bodB(2))^2); vzdX=fix(abs(bodA(1)-bodB(1))); vzdY=fix(abs(bodA(2)-bodB(2))); %vzdZ=fix(abs(bodA(3)-bodB(3))); if vzdX~=0 pomerstran1=vzdY/vzdX; % pomerstranZ1=vzdZ/vzdX; end if vzdY~=0 pomerstran2=vzdX/vzdY; % pomerstranZ2=vzdZ/vzdY; end if vzdX==0 & vzdY==0 bbmoveirc(robot,bbdegtoirc(robot,BA(flag(1),:))); bbwaitforready(robot); return end if vzdX>=vzdY %nakresleni primky %flag urcuje natoceni ramen i = 1:vzdX; j = i*pomerstran1; % l = i*pomerstranZ1; if bodA(1)>bodB(1) i=i*(-1); end if bodA(2)>bodB(2) j=j*(-1); end % if bodA(3)>bodB(3) % l=l*(-1); % end x(1:vzdX)=bodA(1); y(1:vzdX)=bodA(2); % z(1:vzdZ)=bodA(3); i=i+x; j=j+y; % l=l+z; Uhly(vzdX,:)=[0 0 0 0]; for k=1:vzdX; pom=mojeikt(robot,i(k),j(k),soucstav(3),0); if ( (pom(flag(1),1)<-85) | (pom(flag(1),1)>85) | (pom(flag(1),2)<-120) | (pom(flag(1),2)>120) ) %kontrola jestli se muze robot dostat do bodu A if flag(2)==0 disp('Primka protina oblast do ktere se robot nemuze dostat'); matice=[]; return end k=1; flag(1)=flag(2); flag(2)=0; end Uhly(k,:)=bbdegtoirc(robot,pom(flag(1),:)); end matice=[BA(flag(1),:);Uhly;BB(flag(1),:)]; BA(flag(1),:); bbmoveirc(robot,bbdegtoirc(robot,BA(flag(1),:))) ; %bbwaitforready(robot); bbmoveircs(robot,Uhly,40,10); bbmoveirc(robot,bbdegtoirc(robot,BB(flag(1),:))); else j = 1:vzdY; i = j*pomerstran2; % l = j*pomerstranZ2; if bodA(1)>bodB(1) i=i*(-1); end if bodA(2)>bodB(2) j=j*(-1); end % if bodA(3)>bodB(3) % l=l*(-1); % end x(1:vzdY)=bodA(1); y(1:vzdY)=bodA(2); % z(1:vzdZ)=bodA(3); i=i+x; j=j+y; % l=l+z; Uhly(vzdY,:)=[0 0 0 0]; for k=1:vzdY; pom=mojeikt(robot,i(k),j(k),soucstav(3),0); if ( (pom(flag(1),1)<-85) | (pom(flag(1),1)>85) | (pom(flag(1),2)<-120) | (pom(flag(1),2)>120) ) %kontrola jestli se muze robot dostat do bodu A if flag(2)==0 disp('Primka protina oblast do ktere se robot nemuze dostat'); matice=[]; return end k=1; flag(1)=flag(2); flag(2)=0; end Uhly(k,:)=bbdegtoirc(robot,pom(flag(1),:)); end matice=[BA(flag(1),:);Uhly;BB(flag(1),:)]; bbmoveirc(robot,bbdegtoirc(robot,BA(flag(1),:))); %bbwaitforready(robot); bbmoveircs(robot,Uhly,40,10); bbmoveirc(robot,bbdegtoirc(robot,BB(flag(1),:))); end