Version 37 (modified by edfi, 11 years ago) (diff)


Calibration of the Leica ALS50 II LIDAR

This page describes the procedure for calibrating the ARSF LIDAR. The procedure is performed in 3 main stages: Boresight, Range correction and validation. For full information on the calibration see here.

Lil Riss cal site + GCP locations


The first stage of calibrating the LIDAR is to calculate the boresight angles. These are the angles in pitch, roll and heading that describe the pointing direction of the laser scanner with respect to the nadir. Using incorrect boresight parameters will result in georeferencing errors and gross errors will be obvious when comparing overlapping flight lines, especially lines flown in varying directions. The boresight calibration is performed using data taken at 3 altitudes: 750m, 1350m and 2300m. The flight lines are acquired in 'cross formations' and parallel lines with a sizeable overlap.


To correct pitch we take opposing flight lines. If there is a pitch error, the lidar will be sensing pulses ahead/behind (along track) the nadir point. There will be a small overall range error, but the main effect will be that the data is shifted backwards/forwards of where it should be.


If there is a small roll error, surfaces will be tilted up on one side of the swath and down on the other. In opposing lines, these errors will be on different sides. Vertical displacements due to roll error will be most noticeable at the edges of the swath. For small errors, the nadir point will be roughly the same, for large ones, there will be some across-track shift, but that will be much harder to measure than the vertical errors.

Heading / Yaw

If there is a heading error, the left side of swath will move backwards while the right side will move forwards (or vice versa). If you reverse the direction of flight (ie. with opposing flight lines), these errors will overlap (left side down in one direction matches right side up in the other) and not be visible. Instead, take two parallel flight lines with 30-50% overlap

Pitch error slope

The mirror will not be mounted exactly flat to the laser so, as the mirror moves, the pitch of the beam will change by a small amount. The resulting errors are along-track offsets just like the pitch errors, but varying, with no error at nadir and maximum error at the edges of the swath.


The main procedure in the boresight correction is:

  • Process Navigation
  • Process raw scan to attune files in ALS Post Processor
  • Use Attune to calculate boresight parameters
  • Analyse in LAG - reprocess if necessary

Copy the folder structure under /users/rsg/arsf/backups/windows_software/leica_lidar/leica-original_dvds/dvd1/Software/WorkStation/Directory\ Structure\ -\ ALS\ Calibration/RevD_Cal/ to the processing directory.

For calibration procedure information from Leica check under /users/rsg/arsf/backups/windows_software/leica_lidar/ for the latest updates.

Leica will send a set of files including a reg file, IBRC file and a calibration report. These are usually saved under /users/rsg/arsf/doc/leica/$YEAR. Check the values in the reg file match against those in the calibration report. If a dual IBRC file is used ensure the TPR range offset is set to 0.

Known software issues and solutions within this process can be found here

  1. Process the Navigation as per usual using IPAS Pro and Grafnav
  1. In ALS Post Processor:
    • Load up the calibrated reg file (received from Leica) to get correct scanner settings
    • Set the pitch, roll and heading values to 0
    • Check the output as attune files in the outputs dialog
    • Add all the flight data into the ALSPP, including the BIT mode data.
    • Run the Rangecardcal program from the utilities menu. Select the use all SCN files option when prompted.
      • Enter range offset A1 as 0 since it is unknown (if a good Range card value is known it should be used instead of zero)
      • Enter the output Range offsets into the range corrections dialog of ALSPP.
    • Run Compute Scanner Offsets
      • check the values are close (=/-500) to the Scan Angle Correct value
      • If not then take the average value and use that instead.
      • If you change the value make a note on the ticket as it will not match the calibrated value given to us by Leica
      • Ask Ops to check the value at the next available opportunity (
    • For Attune a minimum of 6 flightlines should be used: 2 orthogonal at mid altitude, 2 orthogonal a high altitude, 1 opposed at high altitude and 1 parallel at high altitude (30% overlap)
    • Uncheck the BIT mode data (we don't need to process this) and any flightlines not needed for Attune - run the ALSPP processing
    • Look at the filesizes of the output data. If the ATN.LAS files are over 400MB in size then Attune will not run. If this is the case re-process with only the part of interest of the line.
      • Part of interest will be the area where all flight lines overlap.
  1. Converting the ATN.LAS files to bin files. Ground classification needs to be performed on the files before tie pointing in Attune. To do this we need to first import the ATN.LAS files into Attune to convert them to .bin files. To do this we need to start the Attune software
    • We do this so that we only use points on the ground in the tie pointing (since we don't want errors due to perspective or shadowing)
    • In Attune - Add ALS data -> add the real ATN.LAS files from the ALSPP output
      • The suggested pixel sizes (from top level calibration pdf) are 0.3m for 750m, 0.4m for 1350m and 0.8m for 2300m.
    • View the image pngs to make sure no data holes. (Some are OK. Re-load using a different resolution if too many holes. e.g. Try 0.35m for 750m)
      • 'a' centres the image
      • '+/-' to zoom in/zoom out
    • There should now be some files with .bin extension- they are created automatically alongside the .pngs.
  1. Ground classify the bin files. Run in a directory containing only the .bin files created in the above step. The classified files will be created in a ground_classified/ subdirectory.

    Manual way. To ground classify the *.bin files, we use lasground from LASTools. This tool has a 1.5million point limit so the *.bin files need to be split up first into smaller files.
    • run las2las with the option -subseq: e.g. las2las -i lasfile1.bin -subseq 0 1500000 -o lasfile1_a.bin; las2las -i lasfile1.bin -subseq 1500000 3000000 -o lasfile1_b.bin etc.
    • run lasground.exe -i lasfile1_a.bin -o lasfile1_a_gr.bin
    • run lasmerge -i lasfile1*gr.bin -o ground_classified/lasfile1.bin
    • las2las -i ground_classified/lasfile1.bin -o ground_classified/lasfile1.LAS

Check the ground_classified LAS files in LAG to make sure that the classification has worked as expected. If doing it manually, you can alter the settings used in lasground e.g. using -step, -spike. See the lasground Readme for more info. When satisfied, replace the attune created *.bin files with the ground classified ones.

Note: Ground classification procedures using TerraScan can be found here.

  1. Tie point the data
    Once the data have been ground classified re-start Attune and tie point the data
    • Now select tie points. We use streets for tie points since these should be on the ground so no (little) effects due to look angles and also has slow varying topography
      • Open tie point editor in Attune.
      • Press 'm' to measure a point and then click where you want it. Do this for each image (selecting the same point). Then press 'sample all' to record the locations.
      • To change one, re-measure it and then just click 'sample point'.
    • See this for hints on how to select tie points and improve location accuracy.
    • Save the project after selecting 50-100 points. (Attune is very crash-able, save often)
    • Select points on roads with uniform intensity. Use lines of roads and field boundaries to get the same place in each image. Don't use buildings as markers due to perspective/shadow.
    • Edit project file properties.
      • Torsion constant =-100,000
      • Image observation Weights 0.2, 0.2, 0.1
      • Atmosphere same parameters as in the ALSPP processing
      • Set class as ground = 2 (ground is usually class 2)
      • Adjustment criteria maxiter=50, angular (?)=1.00e-08
    • Click Solve Calibration parameters and deselect Torsion, just want to solve roll, pitch and heading.
    • Analyse adjustment
      • A good result would have aposteriori reference of between 1 and 2.
      • No. of observations of 300 is good
      • Standard deviations of around 0.00001 for Roll and Pitch, 0.00005 for Heading.
      • Average residuals of 25cm for X and Y, 5cm for Z is good.
    • If the above criteria are not met (roughly...they are only guidelines)
      • Analyse results and remove or adjust any points with large residuals
        • Open all the images + point editor and then can select a point from the solution list and zoom to it on the images
        • You could just remove the point from one or two images (especially the high altitude images) or from all images. Then recalculate the network adjustment and iterate until Aposteriori reference is approx 1-2 and average residuals are 0.25,0.25 and 0.05.
        • Can remove the points from the lower resolution images if it will help. We want more measurements in the higher resolution images than the lower ones if they are unclear to measure in (so don't just measure in them for the sake of it)
      • When happy save the solution - also note down roll, pitch and heading values in case of crashes
  1. Return to ALS Post Processor
    • Add the Pitch, Roll and Heading values into the boresight calibration dialog.
    • Change output to LAS (not attune)
    • Change output directory
    • Additional flightlines should be processed to check the validity of the calibration (not just the 6 used for Attune)
    • Re-run the processing
  1. Now analyse the results in LAG or TerraScan
    • Check profiles etc for misaligning flightlines.
    • To load all flightlines will probably need to use a fence (this is like a region of interest)
    • To check the Roll accuracy – check opposing flights and look at cross sections at either end of the swath for a tilt (across track).
    • To check the Pitch accuracy – check along track on slopes for offsets
    • To check the Heading accuracy – check the parallel lines for offsets
    • Also possible to check for errors by re-ordering points by elevation
  1. The boresight parameters can be manually twiddled (rather than using Attune) by reprocessing in ALS, changing the R,P,H values one at time. Only process parts of the flightlines for speed benefits.
  1. When happy with the results save the ALS Post Processor settings to a .reg file for future reference.

Range Calibration

The second stage in the calibration process is to calibrate the range offsets.

Can do range correction if the boresight results are good. This is a 2 stage process:

  • 1. Nominal offset determination A1
  • 2. Define relative differences for A2,A3,A4 and B1,B2,B3,B4
  • 3. Check if an offset exists between bank A and bank B

points have approx. the same range error within +/-7 degrees of Nadir, so we look only at this region firstly.

Note: You need to have the program RangeCardCal in your windows SentTo folder [located at C:\Documents and Settings\$user\SendTo ]


  1. Start up ALS Post Processor
    • In filters dialog set the angles to +7 and -7 degrees
    • Change the output directory (to 02a_Roff+-7deg if using suggested directory structure)
    • Run the processing on the 4 low altitude flight lines.
  1. Calculate the A1 nominal range offset. This can be done using LASTools or TerraScan. The GCPs for Little Rissington are available here
    • LASTools:
      • Copy the GCP's to the 02a_ROff_+-7Deg folder. You may need to edit this file to remove some points.
      • Run lascontrol.exe -i *.LAS -cp gcp_points.txt -parse xyz (you may need to edit the parse command depending on the format of the GCP's you are using e.g. -parse sxyz for 4 columns)
      • Scan the output and remove any bad points from the gcp file and re-run
      • Look at the average (abs) value, this is used for the nominal range offset A1. This value should not change dramatically from season to season
      • Note: if there are negative values in the lascontrol output then calculate the average value yourself (lascontrol gives the average absolute value)
      • Save the output to a text file
    • TerraScan:
      • Load the results into TerraScan and use the 30-40 GCPs of the calibration site.
      • Tools -> Output Control Report
      • Browse -> GCP file and remove bad points (maybe an error occurred in the surveying of a certain point)
      • Look at the dz value, the average dz is used for the nominal range offset A1.
      • Save the text file.
  1. Preferably using data including areas of forest (little riss should do) and the BIT mode data, run Rangecardcal (from ALSPP tools menu) on all flightlines. (on ~45 degrees?).
    • Enter the average dz value as A1 to get the other offsets.
    • Add the outputs to the ALSPP dialog and save the settings reg file (to a new name)
  1. Analyse the results
    • Check these results and re-run using the full FOV (~45 degrees) on the low flightlines again (remember to change output back to normal folder)
    • Check average dz is less than 1cm or so, and standard deviation <5cm using lascontrol or TerraScan control report. Save the output from this check as it is used in the Data Quality report. Note for lascontrol output you will need to calculate the average dz value.
    • Check the flightlines in LAG/TerraScan (also look at cross sections)
    • Process the 4 high altitude flights in ALSPP and check in LAG/TerraScan (around nadir and swath edges) (looking at absolute height).
    • Run lascontrol/TerraScan control report for the high altitude flightlines and check for reasonable values. Save the output as it is used in the Data Quality report. Note for lascontrol output you will need to calculate the average dz value.
    • Finally load in all flights into LAG/TerraScan (within a fence if memory issues) and check them (ideally along a stream because this has a “good” profile) Can use the travel path tool in TerraScan for comparing cross sections along a path.

Final validation

The final stage of the processing is tweaking the parameters and validating the calibration.

  1. Check the torsion and pitch slope
    • To check the Torsion look at cross sections of high altitude cross flight. Flat roads and grassy areas are good. Look for “smiles” in the data. This can be done by looking at the centres of the edges of the overlapping area
    • May also be able to do this by re-ordering points by elevation
  1. Check for offset between bank A and bank B
    • Leica have advised that *some* systems have an offset between bank A and bank B. To check for an offset process a single line using only returns from bank A then using only returns from bank B (ALSPP: Filters > Pre-Proc Filters > Filter Range Bank A/B).
    • Load the results in LAG or TerraScan and check for any elevation difference.
      • If there is none then great.
      • If a consistent offset is visible then adjust all the values for bank B by this offset. Re-run the line again and check the result.
  1. If full waveform data has been collected then the Trigger Delay values need to be checked
    • Use LasHistoViewer to verify that the LAS file is suitable for calibration purposes
      • check the AGC activity is not jumping around or saturated - value of ~150
      • 1 volt is good target for timing offset
      • Intensity ~ 60-80
      • waves where there is one discrete return only
    • In ALSPP > Ultilies > Load Wave Viewer
      • display by time and volts
      • the peak of the FW signal and the discrete point should coincide
      • zoom in and manually calculate the difference in time between the peak of the FW and the first discrete return
      • under Options there is a box where the trigger delay can be entered - this can be used to assist in visualising the calibration
      • repeat until an accurate result is obtained
      • check for several waves over varying parts of the flightline and calculate the average value
      • above and below TPR (transition pulse rate) are independent and calculated separately
        • below TPR, less than 100,000 Hz
        • above TPR, greater than 100,000 Hz
    • Make a note in the ticket if either of the trigger delay values have been validated
  1. Save the final ALSPP options to a .reg file

Once finished

When the calibration has been completed and accepted, copy the reg files for each stage and the attune project files onto the Linux systems for backup. The final reg file should be copied to the arsf calibration repository and noted at the bottom of the wiki here

Attachments (1)

Download all attachments as: .zip