livox_horizon_loam is a robust, low drift, and real time odometry and mapping package for Livox LiDARs, significant low cost and high performance LiDARs that are designed for massive industrials uses. Our package is mainly designed for low-speed scenes(~5km/h) and address many key issues: feature extraction and selection in a very limited FOV, and motion distortion compensation. We use Ceres-Solver for scan matching to avoid complicated differential geometry derivation. The codes are well structured and streamlined to improve readability and extendability.
In the development of our package, we reference to LOAM, LOAM_NOTED, and A-LOAM.
Developer: Livox
Ubuntu 64-bit 16.04 or 18.04. ROS Kinetic or Melodic. ROS Installation
Follow Ceres Installation. Recommend version 1.13.0 and 1.14.0.
Follow PCL Installation. Recommend version 1.7.
Recommend version 3.3.7.
Follow the introduction livox_ros_driver.
Clone the repository and catkin_make:
cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/livox_horizon_loam.git
cd ../
catkin_make
source ~/catkin_ws/devel/setup.bash
Connect to your PC to Livox LiDAR (horizon) by following Livox-ros-driver installation, then
roslaunch livox_ros_driver livox_lidar_msg.launch
roslaunch loam_horizon loam_livox_horizon.launch
If you want to use horizon's internal IMU to eliminate rotation distortion, run
roslaunch livox_ros_driver livox_lidar_msg.launch
roslaunch loam_horizon loam_livox_horizon_imu.launch
Download parking lot rosbag or outdoor scene rosbag and then
roslaunch loam_horizon loam_livox_horizon.launch
rosbag play YOUR_DOWNLOADED.bag
We can check nodes relationship by rqt_graph
:
If you want to use horizon's internal IMU to eliminate rotation distortion, run
roslaunch loam_horizon loam_livox_horizon_imu.launch
rosbag play YOUR_DOWNLOADED.bag
When using IMU messages, check rqt_graph
:
If you want to use an external IMU with horizon to eliminate rotation distortion, you need to manually obtain external parameters. For example, we record a rosbag containing external imu data and horizon data, and the extrinsic quaternion is (0, 1, 0, 0), then:
ExtIL
rosparam in loam_livox_horizon_ext_imu.launch
in order[q.w, q.x, q.y, q.z, t.x, t.y, t.z]
:
<rosparam param="ExtIL"> [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]</rosparam>
roslaunch loam_horizon loam_livox_horizon_ext_imu.launch
rosbag play imu-demo.bag
Thanks for LOAM(J. Zhang and S. Singh. LOAM: Lidar Odometry and Mapping in Real-time), LOAM_NOTED, and A-LOAM.