Skip to content

LVI-SAM for easier using (更简单的使用LVI-SAM的方法)

License

Notifications You must be signed in to change notification settings

coolaogege/LVI-SAM-Easyused

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LVI-SAM-Easyused

This repository contains modified code of LVI-SAM for easier using.

drawing


Compile

You can use the following commands to download and compile the package.

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/Cc19245/LVI-SAM-Easyused
cd ..
catkin_make

Note:If you want to use the no-modified code (origin LVI-SAM official code), you can change the defination in CMakeLists.txt and compile again.

################## 编译开关 compile switch##############
# -DIF_OFFICIAL=1: use origin official LVI-SAM code
# -DIF_OFFICIAL=0: use modified code of this repo
add_definitions(-DIF_OFFICIAL=0)

Params config

Sensors extrinsic config

  1. params_camera.yaml: set the VIO params, especially for T_imu_camera. It's same as VINS-Mono.
###################### extrinsic between IMU and Camera  ###########################
###################### T_IMU_Camera, Camera -> IMU       ###########################  
# R_imu_camera
extrinsicRotation: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 0,    0,    -1, 
               -1,     0,    0, 
                0,     1,    0]
# t_imu_camera
extrinsicTranslation: !!opencv-matrix
   rows: 3
   cols: 1
   dt: d
   data: [0.006422381632411965, 0.019939800449065116, 0.03364235163589248]
  1. params_lidar.yaml: set the LIO params, especially for T_imu_lidar.
  ###################### extrinsic between IMU and LiDAR  ###########################
  ###################### T_IMU_LiDAR, LiDAR -> IMU       ############################
  # t_imu_lidar
  extrinsicTranslation: [0.0,   0.0,   0.0]    
  # R_imu_lidar
  extrinsicRotation: [-1,   0,    0, 
                                         0,    1,    0, 
                                         0,    0,   -1]

IMU property config

Due to the special IMU (the Euler angle coordinate system is different from the angular velocity and angular velocity coordinate system) of official dataset , you also need to set which axis the IMU rotates around counterclockwise to get a positive output. For official sensor equipment, it is set as follows.

  ## 对绝大多数IMU来说,下面三个值分别是"+z", "+y", "+x" (for most of IMUs, the following config is "+z", "+y", "+x")
  # 绕着哪个轴逆时针转动,输出yaw角度为正(which axis the IMU rotates around counterclockwise to get a positive yaw angle)
  yawAxis: "-z"  
  # 绕着哪个轴逆时针转动,输出pitch角度为正(which axis the IMU rotates counterclockwise to get a positive pitch angle)
  pitchAxis: "+x"    
  # 绕着哪个轴逆时针转动,输出roll角度为正(which axis the IMU rotates around counterclockwise to get a positive roll angle)
  rollAxis: "+y"    

drawing

==**Note**==: **For most of the IMUs, the Euler angle coordinate system is same as the angular velocity and angular velocity coordinate system**. So the above parameters should be set as follows.
  ## 对绝大多数IMU来说,下面三个值分别是"+z", "+y", "+x" (for most of IMUs, the following config is "+z", "+y", "+x")
  # 绕着哪个轴逆时针转动,输出yaw角度为正(which axis the IMU rotates around counterclockwise to get a positive yaw angle)
  yawAxis: "+z"  
  # 绕着哪个轴逆时针转动,输出pitch角度为正(which axis the IMU rotates counterclockwise to get a positive pitch angle)
  pitchAxis: "+y"    
  # 绕着哪个轴逆时针转动,输出roll角度为正(which axis the IMU rotates around counterclockwise to get a positive roll angle)
  rollAxis: "+x"    

drawing


Run the package on different datasets

  1. Official dataset

    • Run the launch file:

      roslaunch lvi_sam run.launch
      

      Note: If you want to test the origin official LVI-SAM code (e.g. set add_definitions(-DIF_OFFICIAL=1) in CMakeLists.txt to compile), you should run launch file as following.

      roslaunch lvi_sam run_official.launch
      
    • Play existing bag files, e.g. handheld.bag:

      rosbag play handheld.bag 
      
    • Results of origin official code (up fig) and our's modified code (down fig) on handheld.bag:

      drawing

      drawing

  2. M2DGR dataset

    • Run the launch file:

      roslaunch lvi_sam M2DGR.launch
      
    • Play existing bag files, e.g. gate_01.bag:

      rosbag play gate_01.bag 
      
    • Results of our's modified code on gate_01.bag:

      drawing

  3. UrbanNavDataset

    • Run the launch file:

      roslaunch lvi_sam UrbanNavDataset.launch
      
    • Play existing bag files, the params we provided is for UrbanNav-HK-Data20200314. If you use other bag files of UrbanNavDataset, please check if the params need to be changed.

      rosbag play 2020-03-14-16-45-35.bag 
      
    • Results on UrbanNav-HK-Data20200314:

      drawing

  4. KITTI Dataset

    • Run the launch file:

      roslaunch lvi_sam KITTI.launch
      
    • Play existing bag files. If you want to use KITTI dataset, you need to get rosbag files firstly. You can get it refer to LIO-SAM/config/doc/kitti2bag. Here we use KITTI_2011_09_26_drive_0084_synced raw data to get rosbag file. The transformed rosbag file can get at this link.

      rosbag play kitti_2011_09_26_drive_0084_synced.bag  
      
    • Results of our's modified code on kitti_2011_09_26_drive_0084_synced.bag:

      drawing

  5. My test dataset

    • Run the launch file:

      roslaunch lvi_sam backbag.launch
      
    • Play existing bag files, e.g. backbag.bag:

      rosbag play backbag.bag 
      
    • Results of our's modified code on backbag.bag:

      drawing

    • Results of our's modified code on our self 0117-1525.bag (Device is not same as backbag.bag, so it has another params. However, sorry for privacy issues, this data package can not open source):

      roslaunch lvi_sam ljj.launch
      rosbag play 0117-1525.bag 
      

      drawing


TODO

  • More test on different dataset, e.g. KAIST. However, these datasets' lidar data have no ring information. So LVI-SAM can't run directly. If you want to run on these datasets, you need to modifidy the code to add this information refer to LeGO-LOAM.

Notes

If you want to know what changes I made and why they make sense, you can refer to my blog: LVI-SAM坐标系外参分析与代码修改,以适配各种数据集.


Acknowledgement

About

LVI-SAM for easier using (更简单的使用LVI-SAM的方法)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 98.8%
  • Other 1.2%