
HDL‐64ES3
High DefinitionLiDARSensor Page29
Velodyne,Inc.
©
2013
63‐HDL64ES3REV G
Appendix D: MATLAB Sample Code
Matlab sample code to read calibration data from sensor output.
fileFilter = ‘*.pcap‘;
[File^name,Directory]=uigetfile(fileFilter,‘Open
a .pcap file‘) ;
Filename=[Directory File^name];
tic; fid=fopen(Filename); ttc=fread(fid,40); ttc=fread(fid,42);
ttc=fread(fid,inf,‘1206*uint8=>uint8‘,58);
%ttch=dec2hex(ttc);
% Determine how many data packets.
Packet=size(ttc)/1206;
% Convert data to single precision.
S1=single(ttc(2,:))*256+single(ttc(1,:));
S2=single(ttc(102,:))*256+single(ttc(101,:));
S3=single(ttc(202,:))*256+single(ttc(201,:));
S4=single(ttc(302,:))*256+single(ttc(301,:));
for i=0:10000 % Packets loop
status(i+1)=(ttc(1205+i*1206)); value(i+1)=(ttc(1206+i*1206));
end
a=[85 78 73 84 35]
fclose(fid);
toc;
Ind=strfind(value,a);
% Loop through 64 lasers.
for i=1:64
temp=single(value(Ind(1)+64*(i—1)+16:Ind(1)+64*(i—1)+16+7));
temp1=single(value(Ind(1)+64*(i—1)+32:Ind(1)+64*(i—1)+32+7));
temp2=single(value(Ind(1)+64*(i—1)+48:Ind(1)+64*(i—1)+48+7));
temp3=single(value(Ind(1)+64*(i—1)+64:Ind(1)+64*(i—1)+64+7));
LaserId(i)=temp(1);
% Add high and low bytes of Vertical Correction Factor together and check if
positive or negative correction factor.
VerticalCorr(i)=temp(3)*256+temp(2);
if VerticalCorr(i)>32768
VerticalCorr(i)=VerticalCorr(i)—65536;
End
% Scale Vertical Correction Factor by Dividing by 100.
VerticalCorr(i)=VerticalCorr(i)/100;
% Add high and low bytes of Rotational Correction Factor together and check
if positive or negative correction factor.
RotationalCorr(i)=temp(5)*256+temp(4);
if
RotationalCorr(i)>32768
RotationalCorr(i)=RotationalCorr(i)—65536;
End
% Scale Rotational Correction Factor by Dividing by 100.
RotationalCorr(i)=RotationalCorr(i)/100;
% Add high and low bytes of remaining 2 Byte Correction Factors together and
check if positive or negative correction factor, if necessary. Scale
dimensions in mm to cm by Dividing by 10. Scale Focal Slope by Dividing by
10.
DistanceCorr(i)=(temp(7)*256+temp(6))/10;
DistanceCorrX(i)=(temp1(2)*256+temp1(1))/10;
DistanceCorrY(i)=(temp1(4)*256+temp1(3))/10;
VerticalOffset(i)=(temp1(6)*256+temp1(5))/10;
HorizonOffset(i)=(temp2(1)*256+temp1(7));
if HorizonOffset(i)>32768
HorizonOffset(i)=HorizonOffset(i)—65536; end
HorizonOffset(i)=HorizonOffset(i)/10;
FocalDist(i)=temp2(3)*256+temp2(2); if FocalDist(i)>32768
Komentarze do niniejszej Instrukcji