localize.m

00001 function xhat = localize(y)
00002 init
00003 Phi=[diff(y); y(1)-y(end)];
00004 
00005 beacon=desc.area.beacon;
00006 
00007 beta=Phi(3);
00008 alpha=Phi(2);
00009 theta=beacon_angle(1, beacon);
00010 phi=beacon_angle(2, beacon);
00011 psi=beacon_angle(3, beacon);
00012 
00013 q=sin(phi)/sin(theta)*sin(alpha)/sin(beta);
00014 omega=2*pi-psi-alpha-beta;
00015 
00016 delta = atan2(sin(omega), 1/q+cos(omega));
00017 
00018 v32=beacon(2,:)-beacon(3,:);
00019 
00020 l1ang=atan2(v32(2), v32(1)) -pi+delta;
00021 
00022 a=norm(beacon(2,:)-beacon(3,:));
00023 
00024 l1=a/sin(alpha)*sin(pi-alpha-delta);
00025 r=beacon(2,:)+l1*[cos(l1ang) sin(l1ang)];
00026 
00027 angle=mean(atan2(beacon(:,2)-r(2), beacon(:,1)-r(1))-y);
00028 
00029 xhat=[r angle];
00030 
00031 function angle=beacon_angle(b, beacon)
00032   beacons=size(beacon,1);
00033   prev=mod(b-1-1, beacons)+1;
00034   next=mod(b-1+1, beacons)+1;
00035   bp=beacon(prev,:);
00036   bn=beacon(next,:);
00037   bb=beacon(b,:);
00038   v1=bp-bb;
00039   v2=bn-bb;
00040   angle=acos(sum(v1.*v2)/(norm(v1)*norm(v2)));

Generated on Thu Sep 13 11:28:28 2007 for DCE-Eurobot by  doxygen 1.5.3