Git Product home page Git Product logo

lio_sam_6axis's Introduction

hkust

LIO_SAM_6AXIS

LIO_SAM_6AXIS is an open-source SLAM project based on the project LIO_SAM that has been modified to support a wider range of sensors. It includes support for a 6-axis IMU and low-cost GNSS, making it easier to adapt for your own sensor setup.

image-20220609035032131

Features

LIO_SAM_6AXIS includes the following features:

  • Support for a 6-axis IMU: This allows you to use orientation information in state estimation, improving the accuracy of your results.
  • Support for low-cost GNSS: By eliminating the need to adapt for the robot_localization node, this feature makes it easier to integrate GNSS into your SLAM system.
  • GPS constraint visualization: This feature helps with debugging by allowing you to visualize the GPS constraints that are being used in the optimization.
  • Compatible with a range of lidars: LIO_SAM_6AXIS can be adapted to work with a range of lidars, including popular models like the VLP-16 ,Pandar32 and Ouster OS-1.
  • Easy to adapt: With minor changes to the original code, LIO_SAM_6AXIS can be adapted to work with your own sensors and lidars.

Getting Started

To get started with LIO_SAM_6AXIS, follow these steps:

  1. Clone the repository:
git clone https://github.com/JokerJohn/LIO_SAM_6AXIS.git
  1. Install the dependencies:
cd LIO_SAM_6AXIS
catkin build
  1. Launch the roslaunch file for your sensor setup:
# set your bag_path here
roslaunch lio_sam_6axis test_vlp16.launch

For more information on how to use LIO_SAM_6AXIS, see the video tutorial and documentation.

  1. finally, save your point cloud map.
# map is in the LIO-SAM-6AXIS/data 
rosservice call /lio_sam_6axis/save_map

image-20220609044824460

  1. for docker support.

Dockerfile is for people who don't want to break their own environment.

# please cd the folder which have Dockerfile first, approximately 10mins based on your internet and CPU
docker build -t zhangkin/lio_sam_6axis .

docker run -it --net=host --gpus all --name lio_sam_6axis zhangkin/lio_sam_6axis /bin/zsh

# OR -v to link the folder from your computer into container (your_computer_loc:container_loc)
docker run -it --net=host --gpus all --name lio_sam_6axis -v /home/kin/bag_data:/home/xchu/data/ramlab_dataset zhangkin/lio_sam_6axis /bin/zsh

# in the container
catkin build
source devel/setup.zsh

# with dataset download and linked ==> please see more usage in previous section
roslaunch lio_sam_6axis ouster128_indoors.launch

# 对于在内地的同学,可以换源`dockerhub`后,直接拉取:
docker pull zhangkin/lio_sam_6axis

Documentation

The documentation for LIO_SAM_6AXIS can be found in the doc directory of the repository. It includes instructions on how to adapt the code for your own sensors and lidars.

Latest News(2024-04-25)

Here are the latest updates to LIO_SAM_6AXIS:

Dataset and Adaptation

LIO_SAM_6AXIS is compatible with a range of datasets and sensor setups. To help you get started, we have included a table that lists some of the datasets and sensors that have been tested with LIO_SAM_6AXIS.

Dataset Description Sensors Download Links Ground Truth Comments
hkust_20201105full image-20221030035547512 VLP-16, STIM300 IMU, left camera, normal GPS Dropbox, BaiduNetdisk (password: m8g4) GT (password:123) About 10 km outdoor, see this doc
HILTI DATASET 2022 img Hesai32 lidar, low-cost IMU, 5 Fisher Eye cameras Download The config/params_pandar.yaml is prepared for the HILTI sensors kit
FusionPortable DATASET Garden Ouster OS1-128, STIM300 IMU, stereo camera Download GT Indoors. When you download this compressed data, remember to execute the following command: rosbag decompress 20220216_garden_day_ref_compressed.bag
Multimodal Dataset image-20240426170824723 MS1600 Download Multimodal Dataset from Harsh Sub-Terranean Environment with Aerosol Particles for Frontier Exploration

Related Package

  • LIO_SAM 6轴IMU适配香港城市数据集UrbanNav,并给出添加GPS约束和不加GPS约束的结果

Credits

We would like to thank TixiaoShan for creating the LIO_SAM project that served as the foundation for this work.

Acknowledgments

Our deep gratitude goes to pedrotomas27, Guoqing Zhang, Jianhao Jiao, Jin Wu, and Qingwen Zhang for their invaluable contributions to this project. A special mention goes to the LIO_SAM for laying the groundwork for our efforts. We also thank the open-source community, whose relentless pursuit of SLAM technology advancement has made this project possible.

Star History Chart

lio_sam_6axis's People

Contributors

gitouni avatar jokerjohn avatar kin-zhang avatar pedrotomas27 avatar zarathustr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lio_sam_6axis's Issues

save PCD not working

Hi @JokerJohn,

Firstly, Thank you so much for the work. I am currently working with LIO-SAM for a use case where my robot is indoors (where there is no GNSS data) and I want to save the estimated pose in TUM format which then goes as an input to one of my 3D object detection network. In the datasaver, I see that this is already an option to save the optimized pose to text file in TUM format. The mapOptimizationGps.cpp instantiates the dataSaver and creates the subdirectory to save the text file, but, even after my run ends (I have a bag file), the subdirectory did not have the text file. I then saw that the "saveMapService" where the actual saving happens wasn't called anywhere and so I instantiated that too. I still don't see the text file being saved. Could you please help m with this?

Quaternion not normalized properly

Hi, I was testing lio-sam over custom data using ouster's internal IMU. I am getting the following warnings:
image
Any idea where I be going wrong?

Adaptable for solid state lidar?

Hello @JokerJohn,

Thank you for the great work. I tried this with my vlp16 and it worked great. I wanted to know if this is also compatible with a solid state lidar like the L515? What would be the configuration changes needed if so since the velodyne pointcloud clouds have a format of XYZIRT?

Dataset availability through dropbox/google drive

I am trying to access the hkust...full dataset (used for main .gif file?) to test some changes to the gps tools. I was wondering if the link to google drive was intentional, when the label is "dropbox"? I sent an access request through google drive a couple weeks ago

一些疑问

你好大佬,首先十分感谢你的开源,谢谢。但我有些问题哈,我看过原版的lio_sam,也看了你的,对于9轴imu而言,它多了个orientation这个姿态量,但是我看原版的代码,它这个量好像用处不是特别大,甚至我觉得这个量并没有用上,具体原因看updateInitialGuess()这个函数,初始位姿还是用odom的。
所以,我是不是可以理解成原版的lio_sam其实也能用六轴imu?
ps:可能是我遗漏了哪里,如果错误希望可以指点一下,十分感谢。

save traj on my own dataset

您好!
我根据您的readme在运行算法后保存了轨迹
有几点疑问想向您咨询一下
2022-11-03 14-04-29 的屏幕截图

1、这个odo_tum.txtoptimized_odom_tum.txt有什么区别嘛,我用evo查看他们是没有任何区别的。
2、另外一个问题比较困扰我,昨天询问了您GPS初始化后主导轨迹的问题
我也调整了gps参数使其能初始化成功,我发现在gps初始化前,gps轨迹和LIO轨迹是有一些差距的,在初始化后会有一个轨迹跳变,LIO的轨迹向gps轨迹靠近,那进行最后的轨迹保存,是跳变之后,带有gps约束的轨迹吗?( 我是在数据集跑完的情况下执行的rosservice call )
3、我用evo查看了保存的轨迹的pose个数,相比其他算法或地面真值都是较少的,想向您询问一下这种轨迹pose个数少的情况是不是正常的
如下图终端的底部所示
2022-11-03 14-22-21 的屏幕截图
但是整体轨迹是一致的(如下图)
2022-11-03 14-22-24 的屏幕截图
最后,非常感谢您的工作,希望得到您的建议。

一些疑问

十分抱歉,上一个问题我不小心点close了,如果打扰到你十分抱歉。
你好大佬,首先十分感谢你的开源,谢谢。但我有些问题哈,我看过原版的lio_sam,也看了你的,对于9轴imu而言,它多了个orientation这个姿态量,但是我看原版的代码,它这个量好像用处不是特别大,甚至我觉得这个量并没有用上,具体原因看updateInitialGuess()这个函数,初始位姿还是用odom的。
所以,我是不是可以理解成原版的lio_sam其实也能用六轴imu?
ps:可能是我遗漏了哪里,如果错误希望可以指点一下,十分感谢。

Does not work on Jetson

Hi @JokerJohn,

Thank you for the great work. I am currently working with liosam 6 axis for my jetson platform (Jetson xavier NX). I Got the setup working on my PC (Ubuntu 20.04). When I port the same onto jetson (as a docker image). my map starts to drift and I continuously get a large velocity warning. Could you please let me know what could be wrong? I know it is to do with the params.yaml file. I tried reducing the voxel grid size as well, but it doesn't fix the issue.

Best Regards,
Sai

ros2 version

Hi:
I was wondering if there is ros2 version of lio-sam?
Thanks a lot

gps因子图

您好,请问下为啥累计20个gps因子加入的时候就会崩掉?是前面累计的时候pose不能有太大的变化?
2022-12-19 17-43-29屏幕截图

点云到谷歌地图

感谢你们伟大的开源!

有一个代码之外的问题想要请问一下,我看到您有一个hkust.gif将点云地图映射到了谷歌地图上,这实在太酷辣!但我搜索了很久没有找到相关的教程,我想请问一下你们用的是什么工具呢?

2023-04-25 22-06-14屏幕截图

单帧点云保存

您好,很棒的项目!

有一些关于地图保存疑问,因为我在做完slam后,还需要对单帧进行相应的处理,所以在使用原版lio-sam时,通过修改代码,将所有帧都加入key frame并保存,但是保存出来的帧跟原始数据中的帧不能一一对应,例如我使用kitti raw数据的2011_09_26_0104中,一共有312帧,通过上述操作,并将rosbag play设置参数 -r 0.1降低播放速度,最终保存的帧数只有310帧。请问在您的项目中,能否有方法将bag包中的所有帧做完slam后,全部保存吗?

how to compare your pcd map with google map?

Hello,JokerJohn.
Thanks for your work.I am working with lio-sam.My pcd map have no flat ground point cloud.In your work,you path is able to match with satelite map. So,I wonder how to make this.

The mapped point cloud starts to disappearing

Hi,
I had a question. I was testing the code, and observed that once all the data from bagfile is published, the point cloud mapped starts to disappear. Can you tell why is that? And also, is there some parameter which can tweaked to delay it? And also which part of code takes care of it?
Thank You.

z形跳跃

您好,在自己录制的室内数据包后运行出现轨迹的z形跳跃,请问这种情况如何解决呢?

您好!关于6轴IMU的标定?Calibration of 6 axis IMU

您好,请问一下如何将六轴IMU的数据转换为sensor_msgs::Imu类型,因为目前对IMU进行标定的算法都是需要sensor_msgs::Imu数据类型,因为六轴IMU的数据只有angular_velocity和linear_acceleration,没有orientation,该怎么求出orientation进行标定呢?求解惑。Hello, how to convert the data of the six-axis IMU to sensor_msgs :: Imu? Because the current calibration algorithm for IMU requires sensor_msgs :: imu data type. Because the six-axis IMU data only has angular_velocity and linear_acceleration, but no orientation, how to calculate the orientation for calibration? Seek to reassure.

imu_type in yaml

感谢大佬的开源!好像发现了个小问题:

yaml文件内的imu_type应修改为imuType。
因为utility.h使用的是nh.param("lio_sam_6axis/imuType", imuType, 0);

simpleGpsOdom 关于 error origin ?

感谢作者。
image
simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

Question about SimpleGPsOdometry

If I understand your code correctly, you convert LLA -> ECEF -> ENU, and add this value to the factor graph.

I don't quite understand how this is possible, since the keyframes in addOdomFactor are in the lidar frame, not ENU. How do you convert the ENU pose into the robot's frame?

Also, could you explain this comment? The IMU is in it's own frame in normal systems, to my understanding

    // maybe you need to get the extrinsics between your gnss and imu
    // most of the time, they are in the same frame
    Eigen::Vector3d calib_enu = enu;

Thanks a lot for your help!

[ERROR] system need to be initialized

Hi,

I am trying to run the the 6axis liosam for my setup (vlp16 with intel realsense for imu). The config file is updated to point to params_vlp.yaml. When I run the launch file, I get an error saying "system need to be initialized". May I know what additional initialization is expected?

gps_odom与后端优化的轨迹不重合

你好,非常感谢在方向初始化方面提供的思路帮助,但是还有一个问题想请教,如下图如果在gps信号良好的时候,我们认为gps_odom轨迹为真值,但是后端优化的轨迹与gps_odom却不重合,这是什么原因呢?理论上如果lidar_odom与gps_odom已经对齐过,他们俩的轨迹应该有较高重合才对,期待解答,谢谢。
image

The demo video

Hi, @JokerJohn

Thanks for your great work.

YouTube videos cannot be viewed for some reason;

Can you upload the video in bilibili?

IMU 标定?

请问一下6轴IMU标定的时候需要四元数吗?Do you need quaternions for 6-axis IMU calibration?

The IMU lidar coordinate frame transformation for the hilti slam dataset

Hi @JokerJohn, thank you for sharing the work.
I am running the codebase with the hiltislam dataset, e.g. exp01.

Can you please clarify how you compute the lidar IMU extrinsic parameters R_lidar_imu?
The rotation part R_lidar_imu are given in here as

  extrinsicRot: [ 1, 0, 0;
                  0, 1, 0;
                  0, 0, -1 ].

From hiltislam calibration file, we have
R_imu_pandar = [0, -1, 0;
-1, 0, 0;
0, 0, -1]
According to the pointcloud projection for hesai in here, we know that
R_velodyne_pandar = [0, -1, 0;
1, 0, 0;
0, 0, 1];

To my understanding, extrinsicRot = R_velodyne_imu = R_velodyne_pandar * R_imu_pandar^T =
[ 1, 0, 0;
0, -1, 0;
0, 0, -1 ].
But this is different from that given in here.

Can you please clarify this point?

FYI, I have tried both sets of parameters, the matrix given in params_pandar.yaml seems to work better, but still is not visually satisfactory.

Type of LIDAR

HI, I was testing the code for the data collected by using a Below Horizon type OS1 Lidar, Can you suggest any changes to make it work?

rtk_gnss 相关问题

您好,非常感谢您这个开源项目.
请问如果用一个 rtk_gnss,并且全程rtk结果都很精确, 那么是不是可以直接用 mapping时候的位姿做 localization, 而不需要先mapping,然后 scan_to_map做定位呢?
祝好

time synchronization

What kind of time synchronization does your IMU and lidar(hesai) use, hardware synchronization or software synchronization?

Is there any recommendation for hardware synchronization?

password of GT

Thank you for your nice work!
I have tested this code , it works perfectly !Now i want to evaluate this trajectory by evo. But i can not find this password of GT. Can you tell me the password?By the way, How are the ground truth values obtained for these two datasets?
2022-12-02 19-08-30 的屏幕截图

the yaw offset between gnss odom and lidar odom

Hi, thanks for your work.
I have tested your codes using my own datasets. The problem is that there is a yaw offset between gnss odometer and lidar-inertial odometer. Also, in the backend optimization part, the gps constraint is not used.
Screenshot from 2022-05-15 02-38-14

For my understanding, gnss odometer is under the ENU coordinate system, and there is a yaw offset between ENU and LIO system. How to compute or reduce the yaw offset?

Thanks in advance.

error: ‘make_unique’ is not a member of ‘std’

Hello, thank you for sharing your work. I encountered this error when compiling. May I ask for you some advice?

My operating system is Ubuntu18.04
The C compiler identification is GNU 11.1.0
The CXX compiler identification is GNU 11.1.0

/home/xwcd/Project/LIO_SAM_6AXIS-main/src/LIO-SAM-6AXIS/src/mapOptmizationGps.cpp:256:29: error: ‘make_unique’ is not a member of ‘std’
256 | dataSaverPtr = std::make_unique(saveDirectory, sequence);
| ^~~~~~~~~~~
/home/xwcd/Project/LIO_SAM_6AXIS-main/src/LIO-SAM-6AXIS/src/mapOptmizationGps.cpp:256:29: note: ‘std::make_unique’ is only available from C++14 onwards
/home/xwcd/Project/LIO_SAM_6AXIS-main/src/LIO-SAM-6AXIS/src/mapOptmizationGps.cpp:256:50: error: expected primary-expression before ‘>’ token
256 | dataSaverPtr = std::make_unique(saveDirectory, sequence);

DataSaver eigen new 没有对齐

lio_sam_6axis_mapOptmization: /usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128: Eigen::internal::plain_array<T, Size, MatrixOrArrayOptions, 32>::plain_array() [with T = double; int Size = 4; int MatrixOrArrayOptions = 0]: Assertion `(internal::UIntPtr(eigen_unaligned_array_assert_workaround_gcc47(array)) & (31)) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.

dataDaver使用了Eigen的数据结构作为成员变量,需要加上EIGEN_MAKE_ALIGNED_OPERATOR_NEW 进行对齐,要不然new的时候会报错
image

image

Runing LIO_SAM_6AXIS on other dataset

您好,首先非常感谢您这么棒的工作
我想使用LIO_SAM_6AXIS在其它数据集上进行测试,并且开启GPS
1、但是我在运行时,发现了GPS与系统估计的状态差别较大,请问这是正常现象嘛,还是我的一些参数设置错误的问题?
2022-11-02 20-13-50 的屏幕截图
2、我看了一下源代码和您在其他issue下的回答,貌似开启useGPS,一定是要等待GPS信号,才能初始化整个系统嘛,那如下这个现象就是正常的吧
2022-11-02 20-14-04 的屏幕截图

(我的配置文件如下,数据集为M2DGR)
2022-11-02 20-14-29 的屏幕截图
再次非常感谢您的工作,非常希望您能给予一些帮助!

IMU preintegration jerky

Dear John,

great work with that repo!

If I test it with the provided datasets everything works as expected.

Now I have a custom dataset, where the tf are a bit different. The LiDAR odometry works still although the IMU preintegration seems to be off by a fair bit as show in the screenshot. Do you have any clue what could cause that and what I could check?

The parameters extrinsicRot and extrinsicRPY seem ok. Could this also happen because of wrong noise parameters or must there be something of in the tf tree?

Thanks a lot,
gwl27
Screenshot from 2022-09-28 15-55-41

Not able to build

I am facing issue when I run "catkin_make -j20"
The following is the error.
image

基于地图定位

感谢大佬的工作。
想请教下,通过gps融合建图后,基于地图的ndt输出的位置是在哪个坐标系呢,似乎和enu坐标系还有些偏移?这导致在定位时候融合gps会出现坐标系偏差,有什么解决方法么?

PCD maps not being saved

Hi, regarding a previous issue: #29

The above issue, is still persistent can you help with it?
bool saveMapService(lio_sam_6axis::save_mapRequest& req, lio_sam_6axis::save_mapResponse& res) The mentioned function in the mapOptimization.cpp file is not running.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.