Contents
Introduction
Prerequisites
LIO equipment setup
Processing:
Debugging LIO data
Introduction
OxTS LIO is a post-processing tool that allows you to utilise LiDAR data to enhance your navigation solution. In dense urban environments, GNSS is often unable to produce an accurate and reliable ground-truthing measurement as multi-path errors and a lack of satellites cause erratic raw position updates. In these situations INS drift performance is key and this is where LIO comes into its own, substantially reducing position drift. the following table is for 60s GNSS-denied drift performance using LIO.
Measurement | RMSE |
Position 2D | 0.218m |
Heading | 0.05° |
Roll/Pitch | 0.02° |
Velocity 3D | 0.037m/s |
Altitude | 0.128m |
Conversely, OxTS LIO excels in these environments, as large buildings and other common features in an urban canyon provide the perfect input for our LiDAR odometry algorithm, producing high-accuracy velocity updates despite GNSS outages.
OxTS LIO will produce a GAD (Generic Aiding) file of velocity updates from LiDAR data and then process the data with these updates.
The effect is that navigation data processed with OxTS LIO traverses difficult environments where typically INS devices struggle to get good data. This means high accuracy surveys despite GNSS-challenged conditions.
View the OxTS LIO Technical Paper attached at the bottom of this page for more on the applications and evaluation of performance for LiDAR Odometry.
To produce a generic aiding (GAD) file using OxTS LIO, four files are required:
- OXTS raw navigation data (.RD)
- INS to LiDAR position offset (.LIP)
- INS to LiDAR rotation offset (.LIR)
- LiDAR data (.PCAP)
See the OxTS Georeferencer guides for more on getting the best LiDAR data collection, the exact same applies to LiDAR odometry.
The RD file used will need the following feature codes present at the time it was logged:
- LiDAR Odometry
- GAD
Contact support@oxts.com to purchase or obtain trial feature codes.
The LIP and LIR files describe the position and orientation of the LiDAR respectively, and are relative to the INS frame. The LIP is the x, y and z displacement from the INS measurement point to the LiDAR device, and the LIR is the relative yaw, pitch and roll displacement between the INS measurement axes and the LiDAR device axes, both are text files with the format:
x/yaw measurement
y/pitch measurement
z/roll measurement
1 or 0 (indicates if data has been calibrated)
Use the OxTS Georeferencer hardware tab to create these files easily with a visual aid.
To fully calibrate your LIP and LIR we highly recommend performing a boresight calibration which will significantly improve the LiDAR odometry. A guide on doing this can be found here. The accuracy of the LIR is of most importance, and so this step is a high priority. The accuracy of LiDAR velocity updates will depend strongly on the accuracy of these relative orientation measurements.
The "Getting the best data" section in this guide covers the key parts of getting the best out of your LiDAR and INS data which will in turn result in the best LiDAR odometry possible.
The LiDAR data can be in three different formats, either raw packets in .pcap, .pcapng or the OxTS format LCOM.
The equipment setup for an OxTS LIO data collection is essentially the same as any other georeferencing application. The main difference is that ideally the LiDAR in a LIO setup is flat on the roof and not angled as is common in surveying setups. Use a live viewer (such as PandarView 2) to ensure that the LiDAR is not seeing bonnet or roof of the car as this will obstruct the data, however this can be removed in post-processing.
You must have an INS and a LiDAR rigidly mounted together (such that they do not move relative to each other). This is best done by having both devices on a mounting solution together.
It is essential that there is some form of time syncing contained in the LiDAR data, either from PTP or NMEA and PPS, depending on the LiDAR you are using. Both of these methods are supported by OxTS units.
LiDAR data is best recorded as .pcap files typically using Wireshark. See the guides under OxTS Georeferencer for more on collecting LiDAR data. You can also use .lcom which is a capture of the raw LiDAR data that is recorded directly onto the internal storage of an OxTS unit.
Networking
Most LiDAR setups will use an ethernet switch to route PTP messages from the RT to the LiDAR. LiDAR data puts a lot of stress on any network. Ensure that your switch is gigabit ethernet and can cope with large flows of data. If you are also using real time corrections (NTRIP) then it might be the case that differential age increases (time between subsequent received correction messages) or it might be that corrections are not received for a period of time. A simple solution for this is to set the LiDAR to send corrections to a specific IP address that is set up on your PC.
Georeferencing
The best way to test the absolute precision of your LiDAR setup is to georeference a pointcloud. This should be done as a first step to prove your setup before LIO data collection. It can also be used to spot problems in the setup down the line. Use a data collection in perfect GNSS to test the LiDAR setup.
Perhaps the simplest and quickest way to evaluate your setup precision is by georeferencing your boresight data collection. With a well calibrated setup your boresight pointcloud should look very clean, the targets should look crisp, the correct size and shape. You can load your boresight PCAP into Georeferencer and process it with the option Reflectivity threshold= 135. This will give you a very small pointcloud with just the targets in a few seconds.
Another test you can do is travelling down a street, turning around, and returning down the street in the opposite direction. Georeference this pointcloud. (Ensure GNSS is perfect throughout). If your setup is well calibrated then objects should not appear blurry or in doublets. Poorly calibrated setups will decrease precision when LiDAR data is overlaid from different directions, whereas well-calibrated setups will have the objects overlapping.
As a first step, ensure your setup is calibrated and capable of producing a crisp pointcloud.
Input files
The first tab within OxTS-LIO user interface (GUI) is where all the required files are input, mentioned in the Prerequisites section above. Put in your LIP, LIR, RD and PCAP files. You can also add your base station rinex files if you want to add RTK corrections in post-processing.
If multiple LiDAR files are added these will be combined into a single GAD file. It is assumed you are using a single LiDAR with the same LIP/LIR configuration in all PCAP files.
File options
In the next tab, several file options can be selected before processing.
LiDAR model and type: LiDAR model and type is required for the LiDAR odometry to decode the PCAP.
LiDAR RPM: The RPM the .pcap was recorded at is important to be configured. RPM is typically 300, 600 or 1200.
Calibration file: Some LiDARs such as Hesai LiDAR devices come with files specifying refinements of the laser elevations and azimuths. This can be put in to increase the accuracy of the odometry.
Optimised configuration: By default the configuration settings for the INS data are extracted from the RD file, however this may not be an improved configuration, which is recommended. So, either an NCOM can be input and an improved config will be calculated from this, or a separate config from another folder can be selected.
File cleanup: Enable file cleanup will automatically delete the raw pointcloud produced, which can be quite large, as well as the any duplicate NCOM/GAD files.
Use custom LIO configuration file: This is an advanced option which allows the user to manually configure certain options for the odometry processing. For most users we do not recommend using this option.
Processing options
The processing options tab controls the settings for both the GAD processing as well as the resulting NCOM.
Blended processing type: For best results you will want to use 'Combined' processing which blends forwards and backwards processing runs.
Advanced commands for Blended processing can also be added, these will affect the processed NCOMs.
GNSS recovery settings: These options determine how long the processing engine will rely on GNSS updates before rejecting them if they are too far away from what is expected. -1 implies default settings. This can be changed to control the number of unexpected GNSS updates that are ignored before being forced to use them. GNSS updates at 4hz and velocity at 10hz.
Use angular GAD updates (Beta): By default, LIO only provides velocity updates, however it can also provide angular rate updates as well. This feature is a beta function as the performance benefits are undetermined so far.
Use ZVU (Zero Velocity Updates): The Zero Velocity Updates (ZVU) is a very powerful tool that drastically reduces drift when stationary in GNSS outage, so it is recommended to enable this. The speed threshold and packets before activation can be altered, however the default values are also recommended.
Configuration files
Default configuration files can be found within the bin folder.
OxTS-LIO configuration file
The LIO configuration file gives commands for the LiDAR odometry and can change certain aspects of the processing. The GUI will make amend the file for the LiDAR type and RPM, however you can manually change other values as well, although the default values are recommended in most cases.
The "min_lidar_range" and "max_lidar_range" can be manipulated if you want to add or remove features in the environment. For example, increase the minimum range to remove a car bonnet. Or increase the maximum range to include a larger number of features such as buildings or lampposts.
The following is a list of supported LiDAR models with their respective configuration command values,
Hesai
- [PANDARXT16]
- PANDARXT32
- [XT32M2X]
- [PANDAR40M]
- [PANDAR40P]
- [PANDAR40]
- [PANDAR64]
- [PANDARQT]
- PANDAR128
Ouster
- [OS032]*
- [OS064]*
- [OS0128]*
- [OS116]*
- [OS132]*
- [OS164]*
- [OS1128]*
- [OS232]*
- [OS264]*
- [OS2128]*
Robosense
- [RUBYPLUS]*
- [RUBY]
- [RUBYLITE]
- [HELIOS1615]
- [HELIOS5515]
- [HELIOS16P]
- [LIDARM1]
- [BPEARL]
Velodyne
- [PUCKLITE]
- PUCK
- [ULTRAPUCK]
- [PUCKHIRES]
- ALPHAPRIME
- [PUCK32MR]
- [HDL32E]
- [HDL64E]
[*] These models have configurable angular resolution independently of RPM. When using these models, one must specify horizontal_scanpoints as well as the lidar model.
[Implemented but untested]
Processing outputs
You are then ready to produce your aided navigation data as an NCOM file. Simply click 'Process'. This can take some time! Depending on the processing mode selected (simulated or combined) there will an "unaided_sim"/"unaided_cmb" and "sim"/"cmb" folder, the latter will contain the NCOM aided with the GAD file.
After processing there should be a folder called lio which will contain all outputs from the GUI. An important file is the "output.gad" file, this is an OxTS format which contains all the LiDAR Odometry velocity (and angular) updates which will be used alongside the RD file to produce a LIO aided NCOM. The GUI will have done this for you.
This section will introduce a few reasons why your LIO data might be performing poorly and suggestions on how to improve it. This list is by no means exhaustive.
Report
The fastest way to check if your processing has problems is to view the graphs output in the GUI. This will be shown in the Report tab after your data is processed.
Here you will see various graphs that indicate the accuracy of your data before and after applying OxTS LiDAR Odometry. In the graph shown above for example, you can see the forward-backward analysis of a certain dataset. (Forward-backward analysis is a reliable way to evaluate performance. From each dataset we can get two essentially independent processing runs, 'forward' and 'backward'. Although not flawless, by comparing these we get a good indication of performance.) You can see the large difference between forward and backward before LiO is applied, and the very small difference after LiO is applied. This implies that OxTS LiO has corrected the data from roughly 50cm accuracy in this area to cm level accuracy.
You can have a look at other graphs such as the velocity difference. This will indicate the performance of OxTS LiO as an odometer. From this graph you can see that on this dataset OxTS LiO is operating at about 0.02m/s accuracy.
Troubleshooting
After processing you can then view both of the aided and unaided NCOMs in NAVgraph to compare the effect that LIO has had. To check when the NCOM is aided, you can add "GPS Velocity mode" to the graph and it will be in "Gen Aid (34)" when LIO velocity updates are being received.
An "Analysis" folder will be produced which will contain all the report graphs such as GAD vs NCOM velocities and comparisons of forward vs backward processing of unaided and aided NCOMs. These are the first port of call if you suspect there is an issue.
The most common issue with poor LIO data is poor georeferencing performance. This will be an artefact of the physical LiDAR setup or of the settings chosen. Revisit the recommendations for LiDAR setup.
If LiDAR setup has been troubleshooted, and you are able to produce crisp pointclouds in good conditions, consider next the environment of the LIO data collection. Whereas buildings and manmade objects exhibit many planes and edges and geometrical shapes for the algorithm to pick up on, natural surroundings such as trees and hedges can present many difficulties and peak LIO performance should not be expected here.
If you are in a busy traffic area or traversing tunnels, OxTS LIO is robust at handling these situations. However on occasion it can struggle. Vehicles close to the LiDAR and travelling at varying speeds can throw the velocity updates off.
Please contact support@oxts.com for further enquiries.
OxTS LIO, navigate anywhere.
Comments
0 comments
Please sign in to leave a comment.