Verify Velodyne HDL-64E is Receiving GPS Information

On a Velodyne Puck or Velodyne HDL-32E, verifying GPS information is as simple as going to the web interfaces provided by the sensors. On the HDL-64E there is no web interface provided, so knowing if the LiDAR is receiving GPS requires parsing data packets and reading the information. Velodyne provides a MatLab script that parses the calibration information among other information like GPS. If you have access to MatLab, the file is called Cal_Table_Build.m and is included in the flash drive included in the shipping box that the HDL-64E was delivered in. The steps below can be followed mostly the same for MatLab, but they are intended for use with GNU Octave on Ubuntu 16.04 which is an open source program similar to MatLab.

Step-by-step guide

  1. If you do not already have GNU Octave installed, install it

    apt install octave
  2. Download a modified version of the Cal_Table_Build.m script below:
    Cal_Table_Build_octave.m
  3. Open GNU Octave.
  4. In GNU Octave, navigate to the folder containing the script downloaded in step 2.
  5. Open a terminal window and navigate to the folder in step 4. You may also navigate using the file browser, and when you are in the correct folder, right click and select "Open in Terminal".
  6. Record a pcap file using 'tcpdump' and target the ethernet interface that the HDL-64E is attached to. While recording there will be very little output. Record for approximately 10 seconds and when finished hit 'Ctrl-C' to stop. 
    Note: In the next example I use eth0 as the interface, your interface may be named differently. You can find the interfaces from your machine by running 'ip addr show'. The '-w' option writes the output of tcpdump to a file that I called 'test.pcap'

    sudo tcpdump -i eth0 -w test.pcap
  7. Run the script in the Command Window by typing the script name and pressing Enter on your keyboard

  8. Select the pcap recorded in step 6 above:
  9. The output may look similar to the following

    a = UNIT#
    Elapsed time is 0.264295 seconds.
    s =  2252
    ans = 1234567HMSDNYGTV1234567HMSDNYGTV��34567HMSDNYGTV1234567HMSDNYGTV1234567HMSDNYGTV1234567
    ans =
    
     Columns 1 through 25:
    
      255  250    0   10    0    5  255   16   16   38   17    5   17   65   23   71   16   11   11    9   38   11   24   16   16
    
     Columns 26 through 50:
    
       38   17    5   17   65   23   71   89    2    0    0  160  140  247   16   16   38   17    5   17   65   23   71    6  192
    
     Columns 51 through 75:
    
      168    3   43  192  168   16   16   38   17    5   17   65   23   71    3  255    2   96  168   28    7   16   16   38   17
    
     Columns 76 through 87:
    
        5   17   65   23   71   85   78   73   84   35   24   24
    
    Version = 47
    Temperature = 23
    GPS = A
    speed =  601
    Fov_start = 0
    Fov_end =  36000
    power = A8
    warning = 96
    Humidity = 24

    If the output contains the following error you will need to record a longer pcap file as the error denotes that the proper data packet could not be found in the pcap supplied.

    a = UNIT#
    Elapsed time is 1.08075 seconds.
    error: Cal_Table_Build_octave: A(I): index out of bounds; value 1 out of bound 0
    error: called from
        Cal_Table_Build_octave at line 25 column 5


    To determine the current GPS status for the Velodyne consult the following table in the Velodyne HDL-64E S3 manual. A '0' will show as blank when using the octave version of the script. The Velodyne provided script may only show the ASCII values. A GPS value of A (ASCII 65) is the best configuration as the Velodyne is receiving both the NMEA time and the PPS signal. When the GPS does not have signal (e.g. when indoors) you may see a GPS status of V (ASCII 86) which indicates that a NMEA string is being received but no PPS is found and GPS status of P (ASCII 80) indicates the opposite, a PPS signal is received but no NMEA string.