New features:
Important notes:
A. Please make sure the IMU and LiDAR are Synchronized, that's important.
B. Please obtain the saturation values of your used IMU (i.e., accelerator and gyroscope), and the units of the accelerator of your used IMU, then modify the .yaml file according to those settings, including values of 'satu_acc', 'satu_gyro', 'acc_norm'. That's improtant.
C. The warning message "Failed to find match for field 'time'." means the timestamps of each LiDAR points are missed in the rosbag file. That is important because Point-LIO processes at the sampling time of each LiDAR point.
D. We recommend to set the extrinsic_est_en to false if the extrinsic is given. As for the extrinsic initiallization, please refer to our recent work: Robust and Online LiDAR-inertial Initialization.
E. If a high odometry output frequency without downsample is required, set publish_odometry_without_downsample
as true. Then the warning message of tf "TF_REPEATED_DATA" will pop up in the terminal window, because the time interval between two publish odometery is too small. The following command could be used to suppress this warning to a smaller frequency:
in your catkin_ws/src,
git clone --branch throttle-tf-repeated-data-error git@github.com:BadgerTechnologies/geometry2.git
Then rebuild, source setup.bash, run and then it should be reduced down to once every 10 seconds. If 10 seconds is still too much log output then change the ros::Duration(10.0) to 10000 seconds or whatever you like.
F. If you want to use Point-LIO without imu, set the "imu_en" as false, and provide a predefined value of gavity in "gravity_init" as true as possible in the yaml file, and keep the "use_imu_as_input" as 0.
The codes of this repo are contributed by: Dongjiao He (贺东娇) and Wei Xu (徐威)
Our paper is published on Advanced Intelligent Systems(AIS). Point-LIO, DOI: 10.1002/aisy.202200459
Our accompany video is available on YouTube.
We tested our code on Ubuntu20.04 with noetic. Ubuntu18.04 and lower versions have problems of environments to support the Point-LIO, try to avoid using Point-LIO in those systems. Additional ROS package is required:
sudo apt-get install ros-xxx-pcl-conversions
Following the official Eigen installation, or directly install Eigen by:
sudo apt-get install libeigen3-dev
Follow livox_ros_driver Installation.
Remarks:
source $Licox_ros_driver_dir$/devel/setup.bash
to the end of file ~/.bashrc
, where $Licox_ros_driver_dir$
is the directory of the livox ros driver workspace (should be the ws_livox
directory if you completely followed the livox official document).Clone the repository and catkin_make:
cd ~/$A_ROS_DIR$/src
git clone https://github.com/hku-mars/Point-LIO.git
cd Point-LIO
git submodule update --init
cd ../..
catkin_make
source devel/setup.bash
export PCL_ROOT={CUSTOM_PCL_PATH}
Connect to your PC to Livox Avia LiDAR by following Livox-ros-driver installation, then
cd ~/$Point_LIO_ROS_DIR$
source devel/setup.bash
roslaunch point_lio mapping_avia.launch
roslaunch livox_ros_driver livox_lidar_msg.launch
livox_lidar_msg.launch
since only its livox_ros_driver/CustomMsg
data structure produces the timestamp of each LiDAR point which is very important for Point-LIO. livox_lidar.launch
can not produce it right now.mapping_avia.launch theratically supports mid-70, mid-40 or other livox serial LiDAR, but need to setup some parameters befor run:
Edit config/avia.yaml
to set the below parameters:
lid_topic
imu_topic
extrinsic_T
extrinsic_R
(only support rotation matrix)
satu_acc
, satu_gyro
acc_norm
Step A: Setup before run
Edit config/velodyne.yaml
to set the below parameters:
lid_topic
imu_topic
(both internal and external, 6-aixes or 9-axies are fine)timestamp_unit
based on the unit of time (Velodyne) or t (Ouster) field in PoindCloud2 rostopicscan_line
extrinsic_T
extrinsic_R
(only support rotation matrix)
satu_acc
, satu_gyro
acc_norm
Step B: Run below
cd ~/$Point_LIO_ROS_DIR$
source devel/setup.bash
roslaunch point_lio mapping_velody16.launch
Step C: Run LiDAR's ros driver or play rosbag.
Set pcd_save_enable
in launchfile to 1
. All the scans (in global frame) will be accumulated and saved to the file Point-LIO/PCD/scans.pcd
after the Point-LIO is terminated. pcl_viewer scans.pcd
can visualize the point clouds.
Tips for pcl_viewer:
1 is all random
2 is X values
3 is Y values
4 is Z values
5 is intensity
The example datasets could be downloaded through onedrive. Pay attention that if you want to test on racing_drone.bag, [0.0, 9.810, 0.0] should be input in 'mapping/gravity_init' in avia.yaml, and set the 'start_in_aggressive_motion' as true in the yaml. Because this bag start from a high speed motion. And for PULSAR.bag, we change the measuring range of the gyroscope of the built-in IMU to 17.5 rad/s. Therefore, when you test on this bag, please change 'satu_gyro' to 17.5 in avia.yaml.
PULSAR is a self-rotating UAV actuated by only one motor, PULSAR
If you have any questions about this work, please feel free to contact me