Skip to content




Lidar Mapping (PoC) »

Livox's Reference Project

Last update: 2022-06-29


Overview#

The official guide and source code is hosted in livox_high_precision_mapping.

This project aims to stick geographical information into a pointcloud. The data from GNSS and INS module is used to calculate high precision position of every point captured from the Lidar. The sample project uses a Livox Mid-40 Lidar and an APX-15 GNSS-INS module.


Install and build:

cd ws_livox/src && \
git clone https://github.com/Livox-SDK/livox_high_precision_mapping.git && \
cd ws_livox && \
catkin_make && \
source ./devel/setup.sh


The system block diagram looks like below:

Livox mapping using APX-15

  • The APX-15 module sends PPS pulse to Livox, and sends GPS timestamp in GNRMC messages to the Manifold 2 computer which forwards timestamp to Livox through an Ethernet connection

  • The APX-15 module sends Trimble’s GSOF messages which contains GNSS location data and IMU information to the Manifold 2

  • The Livox Mid-40, gets PPS and GNRMC timestamp then sends pointcloud message to the Manifold 2 on the Ethernet connection

  • The Manifold2 processes GNSS, IMU and pointcloud together to create a geo-referenced pointcloud

Mapping package#

The data flow is described in the below diagram:

Lidar Mapping system calls and data flow

User configuration points:

  • Turn on Timestamp Synchronization and set GNRMC input device in livox_lidar_config.json
  • Set GSOF input device in apx15.launch

Run the mapping_online.launch file to generate pointcloud data in the pointcloud2 format that combines the IMU pose and GNSS position:

roslaunch livox_mapping mapping_online.launch

APX-15 Node#

The APX-15 node reads GSOF messages from APX and extract the GNSS and IMU data from the Report Packet (0x40 — GENOUT).

There are 3 interesting message types:

  • UTC message (ID = 16)
  • INS Navigation message (ID = 49)
  • INS RMS message (ID = 50)

These extracted information will be used to make 2 new messages: sensor_msgs::NavSatFix and sensor_msgs::Imu which are posted to the mapping node.

Extract data from APX-15 GSOF message

Mapping node#

The mapping node gets the pointcloud from the Lidar ROS driver node, the GNSS and IMU data from the APX-15 node and processes them together:

  • Store pointcloud with timestamp
  • Store GNSS with timestamp
  • Store IMU with timestamp
  • Align packets using timestamp
  • Apply IMU to GNSS point, and stick geographical information to pointcloud

Combine position and pose into pointcloud