High Definition LiDAR Sensor
Velodyne LiDAR, Inc.
©
2019
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