Giter VIP home page Giter VIP logo

liorf's Introduction

liorf's People

Contributors

yjzluckyboy 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

liorf's Issues

Multiple Lidar Example

Hi,

I was quickly looking over the code and don't see any examples for using multiple lidars... However, there are some screenshots showing the use of two lidars.

Are you combining the clouds then having liorf subscribe to the combined cloud?

License

Thanks for the great project!

There isn't currently a license and, according to GitHub (https://choosealicense.com/no-permission/#for-users), no one is allowed to use or modify this project.

Would you please consider adding a license? LIO-SAM uses the BSD-3-Clause license, but MIT is another great option.

Thanks so much!

Ouster-128, 6 axis IMU on LIO-SAM

你好,我查看您这份代码,跟踪imuType将需要quaternion部分的IMU计算都按照相同的方式排除掉了。(基于lio-sam ros2 branch进行的修改)但在我的rosbag里, (ouster-1-128)起点总是飘忽,有时候启动方向错了,就直接带崩图 。 当启动方向正确时,运动不到100米就开始z方向上的移动,导致点云起飞或者钻地。
我的params.yaml的部分信息:

Sensor Settings

sensor: ouster                               # lidar sensor type, either 'velodyne', 'ouster' or 'livox'
N_SCAN: 128                              # number of lidar channels (i.e., Velodyne/Ouster: 16, 32, 64, 128, Livox Horizon: 6)
Horizon_SCAN:  1024                             # lidar horizontal resolution (Velodyne:1800, Ouster:512,1024,2048, Livox Horizon: 4000)
downsampleRate: 1                            # default: 1. Downsample your data if too many
# points. i.e., 16 = 64 / 4, 16 = 16 / 1
lidarMinRange: 1.0                           # default: 1.0, minimum lidar range to be used
lidarMaxRange: 1000.0                        # default: 1000.0, maximum lidar range to be used
imuType: 0   # 0 means 6 axis imu, 1 means 9 axis imu
# for our Ouster OS1-128
extrinsicRot:    [-1.0,  0.0,  0.0,
                   0.0, -1.0,  0.0,
                   0.0,  0.0,  1.0 ]  # OS-1-128, x and y are reversed, z is the same   . R_lidar_imu  rotate imu to lidar
extrinsicRPY: [ -1.0,  0.0,  0.0,
                0.0,  -1.0,  0.0,
                0.0,  0.0,  1.0 ] #if acceleration and attitude have the same coordinate , same as the "extrinsicRot". R_imu_lidar  rotate lidar to imu

rviz_screenshot_ouster_2
rviz_ouster_3

这样的报错依次出现
Message Filter dropping message: frame 'laser_data_frame' at time 1121.020 for reason 'discarding message because the queue is full'

[lio_sam_imuPreintegration-3] [ERROR] [1713445968.597919217] [lio_sam_imuPreintegration]: Could not find a connection between 'lidar_link' and 'base_link' because they are not part of the same tree.Tf has two or more unconnected trees.

[lio_sam_imuPreintegration-3] [ERROR] [1713445970.234711798] [lio_sam_imuPreintegration]: Lookup would require extrapolation into the past. Requested time 1117.569728 but the earliest data is at time 1117.891844, when looking up transform from frame [base_link] to frame [lidar_link]

[rviz2-7] [INFO] [1713445659.368645001] [rviz2]: Message Filter dropping message: frame 'laser_data_frame' at time 1116.920 for reason 'the timestamp on the message is earlier than all the data in the transform cache'

catkin_make error

undefined reference to `cv::Mat::Mat(int, int, int, cv::Scalar_ const&)'

Drifting on MulRan Datasets

Thanks for your great work.

I recently tested this solution on MulRan dataset, but got drifting on every subset after running for couple seconds. It warns about 'large velocity, reset IMU-preintegration'. This happened both with and without GPS data.

I've set lidar type to MulRan as suggested, set corresponding extrinsics for lidar to imu, set number of scan to 64, and also set message topics correctly. Others are just kept the same as the default of 'lio_sam_ouster.yaml'.

Since you have mentioned your result on MulRan dataset, would you share your .yaml file for MulRan?

catkin_make Image Projection Error with CommonLib

Hi, thank you for sharing your code. I am currently trying to run it on ROS Noetic, Ubuntu 20.04 however am unable to fix an error during the catkin_make step. I followed the installation instructions and am able to build LIO-SAM successfully, so I am unsure why I am receiving a build error. Below is the output from catkin_make, which seems to indicate the header file common_lib.h is not being referenced correctly in ImageProjection. Please let me know if you have advice on how to fix this error.

/usr/bin/ld: CMakeFiles/liorf_imageProjection.dir/src/imageProjection.cpp.o: in function void __gnu_cxx::new_allocator<CommonLib::common_lib>::destroy<CommonLib::common_lib>(CommonLib::common_lib*)': /usr/include/c++/9/ext/new_allocator.h:152: undefined reference to CommonLib::common_lib::~common_lib()'
/usr/bin/ld: CMakeFiles/liorf_imageProjection.dir/src/imageProjection.cpp.o: in function void __gnu_cxx::new_allocator<CommonLib::common_lib>::construct<CommonLib::common_lib, char const (&) [8]>(CommonLib::common_lib*, char const (&) [8])': /usr/include/c++/9/ext/new_allocator.h:146: undefined reference to CommonLib::common_lib::common_lib(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)'
/usr/bin/ld: CMakeFiles/liorf_imageProjection.dir/src/imageProjection.cpp.o: in function ImageProjection::projectPointCloud()': /home/tigeriv/Code/catkin_ws/src/liorf/src/imageProjection.cpp:580: undefined reference to float CommonLib::common_lib::pointDistancepcl::PointXYZI(pcl::PointXYZI const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [liorf/CMakeFiles/liorf_imageProjection.dir/build.make:455: /home/tigeriv/Code/catkin_ws/devel/lib/liorf/liorf_imageProjection] Error 1
make[1]: *** [CMakeFiles/Makefile2:9942: liorf/CMakeFiles/liorf_imageProjection.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/bin/ld: CMakeFiles/liorf_mapOptmization.dir/src/mapOptmization.cpp.o: in function mapOptimization::addGPSFactor()': /home/tigeriv/Code/catkin_ws/src/liorf/src/mapOptmization.cpp:1412: undefined reference to float CommonLib::common_lib::pointDistancepcl::PointXYZI(pcl::PointXYZI const&, pcl::PointXYZI const&)'
/usr/bin/ld: /home/tigeriv/Code/catkin_ws/src/liorf/src/mapOptmization.cpp:1465: undefined reference to float CommonLib::common_lib::pointDistance<pcl::PointXYZI>(pcl::PointXYZI const&, pcl::PointXYZI const&)' /usr/bin/ld: CMakeFiles/liorf_mapOptmization.dir/src/mapOptmization.cpp.o: in function mapOptimization::publishGlobalMap()':
/home/tigeriv/Code/catkin_ws/src/liorf/src/mapOptmization.cpp:491: undefined reference to float CommonLib::common_lib::pointDistance<pcl::PointXYZI>(pcl::PointXYZI const&, pcl::PointXYZI const&)' /usr/bin/ld: CMakeFiles/liorf_mapOptmization.dir/src/mapOptmization.cpp.o: in function mapOptimization::extractCloud(boost::shared_ptr<pcl::PointCloudpcl::PointXYZI >)':
/home/tigeriv/Code/catkin_ws/src/liorf/src/mapOptmization.cpp:1018: undefined reference to `float CommonLib::common_lib::pointDistancepcl::PointXYZI(pcl::PointXYZI const&, pcl::PointXYZI const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [liorf/CMakeFiles/liorf_mapOptmization.dir/build.make:484: /home/tigeriv/Code/catkin_ws/devel/lib/liorf/liorf_mapOptmization] Error 1
make[1]: *** [CMakeFiles/Makefile2:10303: liorf/CMakeFiles/liorf_mapOptmization.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

Large velocity detected, triggering IMU-preintegration reset --- Livox Horizon Lidar

@YJZLuckyBoy
I encountered a warning message in my ROS system with the following content:

Large velocity detected, triggering IMU-preintegration reset and unable to build proper map of the environment

  1. Run the following launch commands:

    • roslaunch liorf run_lio_sam_livox.launch
    • roslaunch livox_ros_driver livox_lidar_msg.launch
  2. Modify the lio_sam_livox.yaml configuration file as follows:

    • Set imuTopic to /livox/imu instead of imu_raw.
    • Use pointCloudTopic: "points_raw" for the pointCloudTopic.

Environment:

  • ROS distribution/version: [ROS1 , noetic]
  • Operating System: [Ubuntu 20.04]
  • using Livox Horizon Lidar

Can someone help me resolve this issue?

test1-1

test1-2

test1-3

Param File:

liorf:

Topics

pointCloudTopic: "points_raw" # Point cloud data
imuTopic: "/livox/imu" # IMU data
odomTopic: "odometry/imu" # IMU pre-preintegration odometry, same frequency as IMU
gpsTopic: "odometry/gpsz" # GPS odometry topic from navsat, see module_navsat.launch file

Frames

lidarFrame: "base_link"
baselinkFrame: "base_link"
odometryFrame: "odom"
mapFrame: "map"

GPS Settings

useImuHeadingInitialization: false # if using GPS data, set to "true"
useGpsElevation: false # if GPS elevation is bad, set to "false"
gpsCovThreshold: 2.0 # m^2, threshold for using GPS data
poseCovThreshold: 25.0 # m^2, threshold for using GPS data

Export settings

savePCD: false # TixiaoShan/LIO-SAM#3
savePCDDirectory: "/Downloads/LOAM/" # in your home folder, starts and ends with "/". Warning: the code deletes "LOAM" folder then recreates it. See "mapOptimization" for implementation

Sensor Settings

sensor: livox # lidar sensor type, 'velodyne' or 'ouster' or 'livox' or 'robosense'
N_SCAN: 6 # number of lidar channel (i.e., Velodyne/Ouster: 16, 32, 64, 128, Livox Horizon: 6)
Horizon_SCAN: 4000 # lidar horizontal resolution (Velodyne:1800, Ouster:512,1024,2048, Livox Horizon: 4000)
downsampleRate: 1 # default: 1. Downsample your data if too many points(line). i.e., 16 = 64 / 4, 16 = 16 / 1
point_filter_num: 3 # default: 3. Downsample your data if too many points(point). e.g., 16: 1, 32: 5, 64: 8
lidarMinRange: 1.0 # default: 1.0, minimum lidar range to be used
lidarMaxRange: 1000.0 # default: 1000.0, maximum lidar range to be used

IMU Settings

imuType: 0 # 0: 6-axis 1: 9-axis
imuRate: 200.0
imuAccNoise: 3.9939570888238808e-03
imuGyrNoise: 1.5636343949698187e-03
imuAccBiasN: 6.4356659353532566e-05
imuGyrBiasN: 3.5640318696367613e-05
imuGravity: 9.80511
imuRPYWeight: 0.01

Extrinsics: T_lb (lidar -> imu)

extrinsicTrans: [0.0, 0.0, 0.0]
extrinsicRot: [-1, 0, 0,
0, 1, 0,
0, 0, -1]

This parameter is set only when the 9-axis IMU is used, but it must be a high-precision IMU. e.g. MTI-680

extrinsicRPY: [0, -1, 0,
1, 0, 0,
0, 0, 1]

voxel filter paprams

mappingSurfLeafSize: 0.15 # default: 0.4 - outdoor, 0.2 - indoor

robot motion constraint (in case you are using a 2D robot)

z_tollerance: 1000 # meters
rotation_tollerance: 1000 # radians

CPU Params

numberOfCores: 4 # number of cores for mapping optimization
mappingProcessInterval: 0.0 # seconds, regulate mapping frequency

Surrounding map

surroundingkeyframeAddingDistThreshold: 0.5 # meters, regulate keyframe adding threshold
surroundingkeyframeAddingAngleThreshold: 0.2 # radians, regulate keyframe adding threshold
surroundingKeyframeDensity: 2.0 # meters, downsample surrounding keyframe poses
surroundingKeyframeSearchRadius: 50.0 # meters, within n meters scan-to-map optimization (when loop closure disabled)
surroundingKeyframeMapLeafSize: 0.3 # downsample local map point cloud

Loop closure

loopClosureEnableFlag: true
loopClosureFrequency: 1.0 # Hz, regulate loop closure constraint add frequency
surroundingKeyframeSize: 50 # submap size (when loop closure enabled)
historyKeyframeSearchRadius: 15.0 # meters, key frame that is within n meters from current pose will be considerd for loop closure
historyKeyframeSearchTimeDiff: 30.0 # seconds, key frame that is n seconds older will be considered for loop closure
historyKeyframeSearchNum: 25 # number of hostory key frames will be fused into a submap for loop closure
loopClosureICPSurfLeafSize: 0.3 # downsample icp point cloud
historyKeyframeFitnessScore: 0.3 # icp threshold, the smaller the better alignment

Visualization

globalMapVisualizationSearchRadius: 1000.0 # meters, global map visualization radius
globalMapVisualizationPoseDensity: 10.0 # meters, global map visualization keyframe density
globalMapVisualizationLeafSize: 1.0 # meters, global map visualization cloud density

Navsat (convert GPS coordinates to Cartesian)

navsat:
frequency: 50
wait_for_datum: false
delay: 0.0
magnetic_declination_radians: 0
yaw_offset: 0
zero_altitude: true
broadcast_utm_transform: false
broadcast_utm_transform_as_parent_frame: false
publish_filtered_gps: false

EKF for Navsat

ekf_gps:
publish_tf: false
map_frame: map
odom_frame: odom
base_link_frame: base_link
world_frame: odom

frequency: 50
two_d_mode: false
sensor_timeout: 0.01

-------------------------------------

External IMU:

-------------------------------------

imu0: imu_correct

make sure the input is aligned with ROS REP105. "imu_correct" is manually transformed by myself. EKF can also transform the data using tf between your imu and base_link

imu0_config: [false, false, false,
true, true, true,
false, false, false,
false, false, true,
true, true, true]
imu0_differential: false
imu0_queue_size: 50
imu0_remove_gravitational_acceleration: true

-------------------------------------

Odometry (From Navsat):

-------------------------------------

odom0: odometry/gps
odom0_config: [true, true, true,
false, false, false,
false, false, false,
false, false, false,
false, false, false]
odom0_differential: false
odom0_queue_size: 10

x y z r p y x_dot y_dot z_dot r_dot p_dot y_dot x_ddot y_ddot z_ddot

process_noise_covariance: [ 1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 10.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.25, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0.25, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0.04, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.015]

Compiling erros

Hi, thanks by share this, I found a compiling error due to set(CMAKE_CXX_FLAGS "-std=c++11")
soved with set(CMAKE_CXX_FLAGS "-std=c++14")

later I got a CV error:
``[ 71%] Built target liorf_generate_messages
[ 73%] Building CXX object livox_ros_driver/livox_ros_driver/CMakeFiles/livox_ros_driver_node.dir/livox_ros_driver/lds_lidar.cpp.o
[ 75%] Building CXX object livox_ros_driver/livox_ros_driver/CMakeFiles/livox_ros_driver_node.dir/livox_ros_driver/lds_hub.cpp.o
[ 75%] Built target livox_ros_driver_generate_messages_eus
[ 77%] Building CXX object livox_ros_driver/livox_ros_driver/CMakeFiles/livox_ros_driver_node.dir/livox_ros_driver/lddc.cpp.o
[ 80%] Building CXX object livox_ros_driver/livox_ros_driver/CMakeFiles/livox_ros_driver_node.dir/livox_ros_driver/livox_ros_driver.cpp.o
In file included from /home/iscan/lio_sam_ws/src/liorf/src/imuPreintegration.cpp:1:
/home/iscan/lio_sam_ws/src/liorf/include/utility.h:19:10: fatal error: opencv/cv.h: No such file or directory
19 | #include <opencv/cv.h>
| ^~~~~~~~~~~~~
compilation terminated.
make[2]: *** [liorf/CMakeFiles/liorf_imuPreintegration.dir/build.make:63: liorf/CMakeFiles/liorf_imuPreintegration.dir/src/imuPreintegration.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1140: liorf/CMakeFiles/liorf_imuPreintegration.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 82%] Building CXX object livox_ros_driver/livox_ros_driver/CMakeFiles/livox_ros_driver_node.dir/timesync/timesync.cpp.o
[ 84%] Building CXX object livox_ros_driver/livox_ros_driver/CMakeFiles/livox_ros_driver_node.dir/timesync/user_uart/user_uart.cpp.o
[ 86%] Building CXX object livox_ros_driver/livox_ros_driver/CMakeFiles/livox_ros_driver_node.dir/common/comm/comm_protocol.cpp.o
In file included from /home/iscan/lio_sam_ws/src/liorf/src/imageProjection.cpp:1:
/home/iscan/lio_sam_ws/src/liorf/include/utility.h:19:10: fatal error: opencv/cv.h: No such file or directory
19 | #include <opencv/cv.h>
| ^~~~~~~~~~~~~
compilation terminated.
make[2]: *** [liorf/CMakeFiles/liorf_imageProjection.dir/build.make:63: liorf/CMakeFiles/liorf_imageProjection.dir/src/imageProjection.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:694: liorf/CMakeFiles/liorf_imageProjection.dir/all] Error 2
[ 88%] Building CXX object livox_ros_driver/livox_ros_driver/CMakeFiles/livox_ros_driver_node.dir/common/comm/sdk_protocol.cpp.o
In file included from /home/iscan/lio_sam_ws/src/liorf/src/mapOptmization.cpp:1:
/home/iscan/lio_sam_ws/src/liorf/include/utility.h:19:10: fatal error: opencv/cv.h: No such file or directory
19 | #include <opencv/cv.h>
| ^~~~~~~~~~~~~
compilation terminated.
make[2]: *** [liorf/CMakeFiles/liorf_mapOptmization.dir/build.make:63: liorf/CMakeFiles/liorf_mapOptmization.dir/src/mapOptmization.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:606: liorf/CMakeFiles/liorf_mapOptmization.dir/all] Error 2

``
I could compile lio-sam without issues. 20.04, Noetic, stock opencv 4.2

thanks!

the density of result pointcloud in liorf

hi, thanks for amazing work.
I testing the same sample file "walking_dataset.bag" with Lio-sam and Liorf.

the parameter in Lio-sam is original param.yaml file and Liorf is lio_sam_default.yaml.
these two parameters are mosltly the same.

In Lio-sam it output full lidar frame, but in Liorf it just output keyframe.
Is there other reason make liorf just output keyframe?

my Lio-sam and Liorf are catkin build from git source.

many thanks.

ubran_hongkong

Hi,bro! Can you provide the ubran_hongkong dataset? I cannot find the download link.

开源伟大!!!!

1、我想用双天线测向GPS。gps odom 里面的航向信息能约束lio的yaw吗。如果不能是否可以使用航向信息把六轴imu变成9轴imu来操作。

怎么保存最后的轨迹

您好,前辈,我用kitti数据集运行了您的代码,我想请教一下怎么保存最后的轨迹。非常感谢

compile error libcommonlib.so incompatible

[ 89%] Linking CXX executable /home/nvidia/liorf-raw/devel/lib/liorf/liorf_imageProjection
/usr/bin/ld: 当搜索用于 /home/nvidia/liorf-raw/src/liorf-main/lib/libCommonLib.so 时跳过不兼容的 -lCommonLib
/usr/bin/ld: 当搜索用于 //usr/local/lib/libCommonLib.so 时跳过不兼容的 -lCommonLib
/usr/bin/ld: 找不到 -lCommonLib
collect2: error: ld returned 1 exit status
liorf-main/CMakeFiles/liorf_imageProjection.dir/build.make:768: recipe for target '/home/nvidia/liorf-raw/devel/lib/liorf/liorf_imageProjection' failed
make[2]: *** [/home/nvidia/liorf-raw/devel/lib/liorf/liorf_imageProjection] Error 1
CMakeFiles/Makefile2:2480: recipe for target 'liorf-main/CMakeFiles/liorf_imageProjection.dir/all' failed
make[1]: *** [liorf-main/CMakeFiles/liorf_imageProjection.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....

I use the arm kernel industrial computer

关于6轴imu的问题

你好想请问一下,从LIO-SAM主要是哪里需要依赖9轴imu呢?
如果我也想魔改LIO-SAM使其适配6轴imu,应该修改代码中的哪些地方呢

Path is always behind GPS

‍Hello, I just saw your video on LIORF Mapping and I'm genuinely impressed. I implemented your code and the LiDar map produced was of extremely high quality. However, I do notice that during map generation that GPS location is much faster ahead of the generated path (blue line). Do you know what might be the issue causing this? Thank you so much!

使用自己的配置,加入gps因子后飞掉了

我使用自己的配置,在只使用LIO时,效果非常好。
但是加入gps后,就产生特别大的偏差,整个飞掉了
并且显示:Large velocity, reset IMU-preintegration!
Screenshot from 2023-02-25 17-50-32

请问作者有没有遇到过类似的情况,有没有什么头绪?

MulRan dataset GT

I want to know if you have the ground truth value of the MulRan dataset

咨询一个RTK因子的问题 求助~ Ask a question about the RTK factor help!

您好,我目前在建图过程中加入RTK的时候碰到了一些问题,然后我也阅读了您修改后的代码,但是还是有疑问,所以想请教一下,目前雷达和RTK之间是有一定的距离和旋转角度的,这个外参在哪里配置呢?

liosam 的原版本是通过修改launch/include/config/robot.urdf.xacro文件,“不然robot_localization功能包无法发布"odometry/gps",修改此文件主要是添加imu->base_link,gps->base_link的tf变换,供robot_localization的节点查找并对IMU数据和GPS数据进行转换 ”, 这是您的博客写的,但是您修改后的liorf 已经不使用 robot_localization 了,那这个外参我应该在哪里,怎么配置呢? 代码里面没有看到可以配置的地方。

另外就是我发现,如果我不配置这个外参,直接用这个RTK的数据,也可以建图,就是有2个问题,一是建图的时候,经纬度里程计和激光的里程计会有一个很大的方向偏差,大约90度,然后过了一会儿,激光里程计的方向会做一个很大角度的突然调整,然后后续就按照这个方向来走了,应该是激光的里程计的方向被RTK的强制纠正过来了,这很奇怪; 第二个问题是使用RTK的高度数据的时候,会出现激光里程计往上Z轴漂移,但是走着走着,隔了一段距离后,突然被RTK拉下来的情况,然后就导致地图出现了一个明显的断层,激光里程计也出现了一个明显的阶跃,请问这种情况该怎么处理,您有经验吗?

Hello, I have encountered some issues while adding RTK during the mapping process. I have also read your modified code, but I still have some questions. So, I would like to ask for advice. Currently, there is a certain distance and rotation angle between the radar and RTK. Where is this external parameter configured?

The original version of liosam was modified by modifying the launch/include/configure/robot. urdf. xacro file. Otherwise, the robot localization feature package cannot publish "odometry/gps". The main modification of this file is to add imu ->base_link, "The tf transformation of GPS ->base_link is used by robot_localization nodes to search for and convert IMU data and GPS data." This was written on your blog, but your modified Liorf no longer uses robot_localization. So where should I use this external parameter and how should I configure it?

Additionally, I have found that if I do not configure this external parameter and use the RTK data directly, I can still create a map. However, there are two issues. Firstly, during the mapping process, there is a significant directional deviation between the latitude and longitude odometers and the laser odometer, which is about 90 degrees. After a while, the direction of the laser odometer will be suddenly adjusted at a large angle, and then I will follow this direction. It is likely that the direction of the laser odometer has been forcibly corrected by the RTK, which is very strange; The second issue is that when using RTK altitude data, the laser odometer may drift up the Z-axis, but when walking for a distance, it is suddenly pulled down by RTK, resulting in a clear fault on the map and a clear step on the laser odometer. Do you have any experience in handling this situation?

For frame [base_link]: Fixed Frame [map] does not exist

感谢您的开源!想请教一下,关于我使用liorf代码适配我自己的数据集的时候,rviz中一直显示没有map到base_link的tf,我运行的是lio_sam_default这个,我修改了对应yaml文件的数据话题、外参等,其他地方没有进行修改,是不是还有哪个地方需要我进行修改呢?

M2DGR.yaml中的激光-IMU平移外参是不是给反了?

M2DGR.yaml中,extrinsicRot和extrinsicTrans表示将IMU坐标系转换到激光坐标系的旋转和平移外参,以激光雷达为参考坐标系。从下图中可以看出,如果以激光雷达(3)为参考坐标系,IMU(5)原点位置应该是:[负数,接近0,负数],而提供的平移外参为:[0.27255, -0.00053,0.17954],是不是应该改为:[-0.27255, 0.00053,-0.17954]?
image

Support for ros2

We are using an Ouster lidar, with the integrated 6 axis IMU, and we want to use ROS 2 LIO SAM to have a reliable odometry. We tried to simulate a 9 axis IMU but we failed so we decided to use your package. What did you do to make LIO SAM work with a ouster lidar so that we can implement it in Ros 2.
Thank you

Evo Usage

Thank you for the amazing work!

I have noticed you used the evo tool, when i try to use it, i use the /liorf/mapping/odometry but it gives the path without loop closure, the correct path is probably /liorf/mapping/path but evo does not support nav_msgs/Path. So, how did you use it?

Robust initialization

Hello. I am doing a thesis on lidar SLAM on an USV. I have successfully managed to run LIO-SAM (Liorf) in real-time with Ouster OS1-32 and its internal IMU. This works with and without GNSS fusion. I am now trying to increase the robustness. My biggest issue is initialization. Depending on what position and most importantly in what surroundings I start LIO-SAM I either start drifting really fast in one direction and point cloud blurs out, or I successfully initialize and can start moving the USV. If initialization is successful I can run it endlessly without problems. On the picture you can see a point cloud of the harbor area I am testing in. To give some scale the spaces between the piers/jetties are roughly around 40-50m wide. In the green circle areas, I can successfully initialize and start LIO-SAM, but in the red cross areas, and about anywhere else I am unable to initialize LIO-SAM. The second point cloud might show the area more clearly. This is the result of FAST-LIO2 with the same sensors, which is able to initialize pretty much anywhere. I have tried tuning the IMU noise and gravity (set to the local gravity at about 9.82), with no success. The main difference from starting in the green circled areas is that the USV is surrounded by features on all sides, unlike the red cross area where there is more open water (no features in the water obviously). My intuition tells me there must be some bias at initialization which cannot be corrected without sufficient features. I appreciate any input and help you might give me. Thanks in advance.

where-init

Screenshot from 2024-03-15 11-30-06

Catkin_make Error with liorf : Undefined References

I ham having trouble while trying to catkin_make the repo by installing the correct versions of gtsam (4.0.2) and cmake(3.7.2) based on the the suggested solutions from LIOSAM and liorf issues

I have attached output log file below.
ase path: /root/catkin_ws
Source space: /root/catkin_ws/src
Build space: /root/catkin_ws/build
Devel space: /root/catkin_ws/devel
Install space: /root/catkin_ws/install

Running command: "cmake /root/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/root/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/root/catkin_ws/install -G Unix Makefiles" in "/root/catkin_ws/build"

-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using CATKIN_DEVEL_PREFIX: /root/catkin_ws/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/kinetic
-- This workspace overlays: /opt/ros/kinetic
-- Found PythonInterp: /usr/bin/python2 (found suitable version "2.7.12", minimum required is "2")
-- Using PYTHON_EXECUTABLE: /usr/bin/python2
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /root/catkin_ws/build/test_results
-- Found gtest sources under '/usr/src/gmock': gtests will be built
-- Found gmock sources under '/usr/src/gmock': gmock will be built
-- Found PythonInterp: /usr/bin/python2 (found version "2.7.12")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.7.29
-- BUILD_SHARED_LIBS is on
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 1 packages in topological order:
-- ~~ - liorf
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'liorf'
-- ==> add_subdirectory(liorf)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Try OpenMP C flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Success
-- Try OpenMP CXX flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Success
-- Found OpenMP: -fopenmp
-- Checking for module 'eigen3'
-- Found eigen3, version 3.2.92
-- Found eigen: /usr/include/eigen3
-- Checking for module 'flann'
-- Found flann, version 1.8.4
-- Found Flann: /usr/lib/x86_64-linux-gnu/libflann_cpp_s.a
-- Checking for module 'libopenni'
-- Found libopenni, version 1.5.4.0
-- Found openni: /usr/lib/libOpenNI.so
-- Checking for module 'libopenni2'
-- No package 'libopenni2' found
-- Could NOT find OpenNI2 (missing: OPENNI2_LIBRARY OPENNI2_INCLUDE_DIRS)
-- The imported target "vtkRenderingPythonTkWidgets" references the file
"/usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so"
but this file does not exist. Possible reasons include:

  • The file was deleted, renamed, or moved to another location.
  • An install or uninstall procedure did not complete successfully.
  • The installation package was faulty and contained
    "/usr/lib/cmake/vtk-6.2/VTKTargets.cmake"
    but not all the files it references.

-- The imported target "vtk" references the file
"/usr/bin/vtk"
but this file does not exist. Possible reasons include:

  • The file was deleted, renamed, or moved to another location.
  • An install or uninstall procedure did not complete successfully.
  • The installation package was faulty and contained
    "/usr/lib/cmake/vtk-6.2/VTKTargets.cmake"
    but not all the files it references.

-- LIBUSB_1_LIBRARY (missing: LIBUSB_1_INCLUDE_DIR)
-- Checking for module 'libopenni2'
-- No package 'libopenni2' found
-- Could NOT find OpenNI2 (missing: OPENNI2_LIBRARY OPENNI2_INCLUDE_DIRS)
-- Found qhull: /usr/lib/x86_64-linux-gnu/libqhull.so
-- Found PCL_COMMON: /usr/lib/x86_64-linux-gnu/libpcl_common.so
-- Found PCL_KDTREE: /usr/lib/x86_64-linux-gnu/libpcl_kdtree.so
-- Found PCL_OCTREE: /usr/lib/x86_64-linux-gnu/libpcl_octree.so
-- Found PCL_SEARCH: /usr/lib/x86_64-linux-gnu/libpcl_search.so
-- Found PCL_SAMPLE_CONSENSUS: /usr/lib/x86_64-linux-gnu/libpcl_sample_consensus.so
-- Found PCL_FILTERS: /usr/lib/x86_64-linux-gnu/libpcl_filters.so
-- Found PCL_FEATURES: /usr/lib/x86_64-linux-gnu/libpcl_features.so
-- Found PCL_KEYPOINTS: /usr/lib/x86_64-linux-gnu/libpcl_keypoints.so
-- Found PCL_IO: /usr/lib/x86_64-linux-gnu/libpcl_io.so
-- Found PCL_GEOMETRY: /usr/include/pcl-1.7
-- Found PCL_VISUALIZATION: /usr/lib/x86_64-linux-gnu/libpcl_visualization.so
-- Found PCL_SEGMENTATION: /usr/lib/x86_64-linux-gnu/libpcl_segmentation.so
-- Found PCL_PEOPLE: /usr/lib/x86_64-linux-gnu/libpcl_people.so
-- Found PCL_SURFACE: /usr/lib/x86_64-linux-gnu/libpcl_surface.so
-- Found PCL_REGISTRATION: /usr/lib/x86_64-linux-gnu/libpcl_registration.so
-- Found PCL_TRACKING: /usr/lib/x86_64-linux-gnu/libpcl_tracking.so
-- Found PCL_RECOGNITION: /usr/lib/x86_64-linux-gnu/libpcl_recognition.so
-- Could NOT find PCL_APPS (missing: PCL_APPS_LIBRARY)
-- Found PCL_IN_HAND_SCANNER: /usr/include/pcl-1.7
-- Found PCL_MODELER: /usr/include/pcl-1.7
-- Found PCL_POINT_CLOUD_EDITOR: /usr/include/pcl-1.7
-- Found PCL_OUTOFCORE: /usr/lib/x86_64-linux-gnu/libpcl_outofcore.so
-- Boost version: 1.58.0
-- Found the following Boost libraries:
-- serialization
-- system
-- filesystem
-- thread
-- program_options
-- date_time
-- timer
-- chrono
-- regex
-- atomic
-- GTSAM include directory: /usr/local/lib/cmake/GTSAM/../../../include
-- Boost version: 1.58.0
-- Found the following Boost libraries:
-- timer
-- chrono
-- system
-- Reading /home/linuxbrew/.linuxbrew/lib/cmake/GeographicLib/geographiclib-config.cmake
-- GeographicLib configuration, version 2.3
-- ${{GeographicLib_LIBRARIES}} set to shared library
-- liorf: 1 messages, 1 services
CMake Warning at /opt/ros/kinetic/share/catkin/cmake/catkin_package.cmake:166 (message):
catkin_package() DEPENDS on 'GTSAM' but neither 'GTSAM_INCLUDE_DIRS' nor
'GTSAM_LIBRARIES' is defined.
Call Stack (most recent call first):
/opt/ros/kinetic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package)
liorf/CMakeLists.txt:54 (catkin_package)

-- Configuring done
CMake Warning at liorf/CMakeLists.txt:99 (add_executable):
Cannot generate a safe runtime search path for target liorf_mapOptmization
because files in some directories may conflict with libraries in implicit
directories:

runtime library [libz.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
  /home/linuxbrew/.linuxbrew/lib

Some of these libraries may not be found correctly.

-- Generating done
-- Build files have been written to: /root/catkin_ws/build

Running command: "make -j32 -l32" in "/root/catkin_ws/build"

Scanning dependencies of target tf2_msgs_generate_messages_py
Scanning dependencies of target _liorf_generate_messages_check_deps_save_map
Scanning dependencies of target nav_msgs_generate_messages_cpp
Scanning dependencies of target geometry_msgs_generate_messages_cpp
Scanning dependencies of target sensor_msgs_generate_messages_cpp
Scanning dependencies of target _liorf_generate_messages_check_deps_cloud_info
Scanning dependencies of target liorf_imuPreintegration
Scanning dependencies of target std_msgs_generate_messages_cpp
Scanning dependencies of target visualization_msgs_generate_messages_nodejs
Scanning dependencies of target visualization_msgs_generate_messages_py
Scanning dependencies of target nav_msgs_generate_messages_eus
Scanning dependencies of target nav_msgs_generate_messages_nodejs
Scanning dependencies of target nav_msgs_generate_messages_lisp
Scanning dependencies of target visualization_msgs_generate_messages_cpp
Scanning dependencies of target visualization_msgs_generate_messages_lisp
Scanning dependencies of target pcl_msgs_generate_messages_lisp
Scanning dependencies of target pcl_msgs_generate_messages_py
Scanning dependencies of target pcl_msgs_generate_messages_nodejs
Scanning dependencies of target pcl_msgs_generate_messages_cpp
Scanning dependencies of target rosgraph_msgs_generate_messages_eus
Scanning dependencies of target tf2_msgs_generate_messages_cpp
Scanning dependencies of target pcl_msgs_generate_messages_eus
Scanning dependencies of target tf_generate_messages_cpp
Scanning dependencies of target rosgraph_msgs_generate_messages_lisp
Scanning dependencies of target actionlib_generate_messages_eus
Scanning dependencies of target roscpp_generate_messages_nodejs
Scanning dependencies of target tf_generate_messages_eus
Scanning dependencies of target roscpp_generate_messages_eus
[ 0%] Built target tf2_msgs_generate_messages_py
Scanning dependencies of target std_msgs_generate_messages_eus
Scanning dependencies of target roscpp_generate_messages_lisp
[ 0%] Built target geometry_msgs_generate_messages_cpp
Scanning dependencies of target rosgraph_msgs_generate_messages_cpp
[ 0%] Built target nav_msgs_generate_messages_cpp
[ 0%] Built target sensor_msgs_generate_messages_cpp
[ 0%] Built target visualization_msgs_generate_messages_py
[ 0%] Built target std_msgs_generate_messages_cpp
Scanning dependencies of target rosgraph_msgs_generate_messages_py
[ 0%] Built target visualization_msgs_generate_messages_nodejs
[ 0%] Built target nav_msgs_generate_messages_nodejs
[ 0%] Built target nav_msgs_generate_messages_lisp
[ 0%] Built target nav_msgs_generate_messages_eus
[ 0%] Built target pcl_msgs_generate_messages_py
[ 0%] Built target pcl_msgs_generate_messages_lisp
[ 0%] Built target visualization_msgs_generate_messages_lisp
[ 0%] Built target tf2_msgs_generate_messages_cpp
[ 0%] Built target visualization_msgs_generate_messages_cpp
[ 0%] Built target pcl_msgs_generate_messages_cpp
[ 0%] Built target pcl_msgs_generate_messages_nodejs
[ 0%] Built target tf_generate_messages_eus
[ 0%] Built target actionlib_generate_messages_eus
[ 0%] Built target rosgraph_msgs_generate_messages_eus
[ 0%] Built target pcl_msgs_generate_messages_eus
[ 0%] Built target roscpp_generate_messages_nodejs
[ 0%] Built target rosgraph_msgs_generate_messages_lisp
[ 0%] Built target tf_generate_messages_cpp
[ 0%] Built target roscpp_generate_messages_lisp
[ 0%] Built target roscpp_generate_messages_eus
[ 0%] Built target std_msgs_generate_messages_eus
[ 0%] Built target rosgraph_msgs_generate_messages_cpp
[ 0%] Built target rosgraph_msgs_generate_messages_py
Scanning dependencies of target tf_generate_messages_lisp
Scanning dependencies of target std_msgs_generate_messages_lisp
Scanning dependencies of target geometry_msgs_generate_messages_lisp
Scanning dependencies of target tf_generate_messages_py
Scanning dependencies of target geometry_msgs_generate_messages_py
Scanning dependencies of target tf2_msgs_generate_messages_nodejs
Scanning dependencies of target roscpp_generate_messages_cpp
Scanning dependencies of target std_msgs_generate_messages_nodejs
Scanning dependencies of target geometry_msgs_generate_messages_eus
Scanning dependencies of target actionlib_msgs_generate_messages_py
Scanning dependencies of target roscpp_generate_messages_py
Scanning dependencies of target tf_generate_messages_nodejs
Scanning dependencies of target std_msgs_generate_messages_py
Scanning dependencies of target sensor_msgs_generate_messages_nodejs
Scanning dependencies of target nav_msgs_generate_messages_py
Scanning dependencies of target geometry_msgs_generate_messages_nodejs
Scanning dependencies of target rosgraph_msgs_generate_messages_nodejs
Scanning dependencies of target tf2_msgs_generate_messages_lisp
Scanning dependencies of target sensor_msgs_generate_messages_lisp
Scanning dependencies of target sensor_msgs_generate_messages_py
Scanning dependencies of target actionlib_generate_messages_cpp
Scanning dependencies of target sensor_msgs_generate_messages_eus
Scanning dependencies of target actionlib_msgs_generate_messages_cpp
[ 0%] Built target std_msgs_generate_messages_lisp
Scanning dependencies of target actionlib_generate_messages_nodejs
[ 0%] Built target geometry_msgs_generate_messages_lisp
[ 0%] Built target tf_generate_messages_py
[ 0%] Built target tf_generate_messages_lisp
Scanning dependencies of target actionlib_generate_messages_py
Scanning dependencies of target actionlib_generate_messages_lisp
[ 0%] Built target geometry_msgs_generate_messages_py
Scanning dependencies of target actionlib_msgs_generate_messages_eus
[ 0%] Built target roscpp_generate_messages_cpp
[ 0%] Built target tf2_msgs_generate_messages_nodejs
[ 0%] Built target std_msgs_generate_messages_nodejs
Scanning dependencies of target actionlib_msgs_generate_messages_lisp
[ 0%] Built target geometry_msgs_generate_messages_eus
[ 0%] Built target actionlib_msgs_generate_messages_py
[ 0%] Built target roscpp_generate_messages_py
Scanning dependencies of target visualization_msgs_generate_messages_eus
[ 0%] Built target sensor_msgs_generate_messages_nodejs
[ 0%] Built target std_msgs_generate_messages_py
[ 0%] Built target nav_msgs_generate_messages_py
[ 0%] Built target rosgraph_msgs_generate_messages_nodejs
[ 0%] Built target geometry_msgs_generate_messages_nodejs
[ 0%] Built target sensor_msgs_generate_messages_lisp
[ 0%] Built target tf2_msgs_generate_messages_lisp
[ 0%] Built target sensor_msgs_generate_messages_py
[ 0%] Built target actionlib_generate_messages_nodejs
[ 0%] Built target actionlib_msgs_generate_messages_cpp
[ 0%] Built target sensor_msgs_generate_messages_eus
[ 0%] Built target actionlib_generate_messages_cpp
[ 0%] Built target actionlib_generate_messages_lisp
[ 0%] Built target tf_generate_messages_nodejs
[ 0%] Built target actionlib_generate_messages_py
[ 0%] Built target actionlib_msgs_generate_messages_eus
[ 0%] Built target actionlib_msgs_generate_messages_lisp
[ 0%] Built target visualization_msgs_generate_messages_eus
Scanning dependencies of target tf2_msgs_generate_messages_eus
Scanning dependencies of target _catkin_empty_exported_target
Scanning dependencies of target actionlib_msgs_generate_messages_nodejs
[ 0%] Built target _liorf_generate_messages_check_deps_save_map
[ 0%] Built target tf2_msgs_generate_messages_eus
[ 0%] Built target _liorf_generate_messages_check_deps_cloud_info
[ 0%] Built target _catkin_empty_exported_target
[ 0%] Built target actionlib_msgs_generate_messages_nodejs
Scanning dependencies of target liorf_generate_messages_cpp
Scanning dependencies of target liorf_generate_messages_lisp
Scanning dependencies of target liorf_generate_messages_nodejs
Scanning dependencies of target liorf_generate_messages_py
Scanning dependencies of target liorf_generate_messages_eus
[ 4%] Generating Lisp code from liorf/cloud_info.msg
[ 13%] Generating Lisp code from liorf/save_map.srv
[ 13%] Generating C++ code from liorf/save_map.srv
[ 17%] Generating Javascript code from liorf/cloud_info.msg
[ 21%] Generating Python from MSG liorf/cloud_info
[ 26%] Generating C++ code from liorf/cloud_info.msg
[ 30%] Generating EusLisp code from liorf/cloud_info.msg
[ 34%] Generating Javascript code from liorf/save_map.srv
[ 39%] Generating Python code from SRV liorf/save_map
[ 43%] Generating EusLisp code from liorf/save_map.srv
[ 47%] Generating EusLisp manifest code for liorf
[ 47%] Built target liorf_generate_messages_nodejs
[ 47%] Built target liorf_generate_messages_lisp
[ 56%] Generating Python srv init.py for liorf
[ 56%] Generating Python msg init.py for liorf
[ 60%] Building CXX object liorf/CMakeFiles/liorf_imuPreintegration.dir/src/imuPreintegration.cpp.o
[ 65%] Building CXX object liorf/CMakeFiles/liorf_imuPreintegration.dir/lib/common_lib.cpp.o
[ 65%] Built target liorf_generate_messages_cpp
Scanning dependencies of target liorf_imageProjection
Scanning dependencies of target liorf_mapOptmization
:0:15: warning: ISO C++11 requires whitespace after the macro name
:0:15: warning: ISO C++11 requires whitespace after the macro name
[ 65%] Built target liorf_generate_messages_py
[ 73%] Building CXX object liorf/CMakeFiles/liorf_imageProjection.dir/src/imageProjection.cpp.o
[ 73%] Building CXX object liorf/CMakeFiles/liorf_imageProjection.dir/lib/common_lib.cpp.o
:0:15: warning: ISO C++11 requires whitespace after the macro name
:0:15: warning: ISO C++11 requires whitespace after the macro name
[ 82%] Building CXX object liorf/CMakeFiles/liorf_mapOptmization.dir/lib/common_lib.cpp.o
[ 82%] Building CXX object liorf/CMakeFiles/liorf_mapOptmization.dir/src/mapOptmization.cpp.o
[ 86%] Building CXX object liorf/CMakeFiles/liorf_mapOptmization.dir/include/Scancontext.cpp.o
:0:15: warning: ISO C++11 requires whitespace after the macro name
:0:15: warning: ISO C++11 requires whitespace after the macro name
:0:15: warning: ISO C++11 requires whitespace after the macro name
[ 86%] Built target liorf_generate_messages_eus
Scanning dependencies of target liorf_generate_messages
[ 86%] Built target liorf_generate_messages
/root/catkin_ws/src/liorf/include/Scancontext.cpp: In function ‘float xy2theta(const float&, const float&)’:
/root/catkin_ws/src/liorf/include/Scancontext.cpp:36:1: warning: control reaches end of non-void function [-Wreturn-type]
} // xy2theta
^
/root/catkin_ws/src/liorf/src/mapOptmization.cpp: In member function ‘bool mapOptimization::saveMapService(liorf::save_mapRequest&, liorf::save_mapResponse&)’:
/root/catkin_ws/src/liorf/src/mapOptmization.cpp:389:11: warning: variable ‘unused’ set but not used [-Wunused-but-set-variable]
int unused = system((std::string("exec rm -r ") + saveMapDirectory).c_str());
^
/root/catkin_ws/src/liorf/src/mapOptmization.cpp: In member function ‘void mapOptimization::performSCLoopClosure()’:
/root/catkin_ws/src/liorf/src/mapOptmization.cpp:639:15: warning: unused variable ‘yawDiffRad’ [-Wunused-variable]
float yawDiffRad = detectResult.second; // not use for v1 (because pcl icp withi initial somthing wrong...)
^
/root/catkin_ws/src/liorf/src/mapOptmization.cpp: In member function ‘void mapOptimization::publishFrames()’:
/root/catkin_ws/src/liorf/src/mapOptmization.cpp:1768:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (lastSLAMInfoPubSize != cloudKeyPoses6D->size())
^
[ 91%] Linking CXX executable /root/catkin_ws/devel/lib/liorf/liorf_imageProjection
[ 91%] Built target liorf_imageProjection
[ 95%] Linking CXX executable /root/catkin_ws/devel/lib/liorf/liorf_imuPreintegration
[ 95%] Built target liorf_imuPreintegration
[100%] Linking CXX executable /root/catkin_ws/devel/lib/liorf/liorf_mapOptmization
/home/linuxbrew/.linuxbrew/lib/liblzma.so.5: undefined reference to pthread_condattr_setclock@GLIBC_2.34' /home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to hypot@GLIBC_2.35'
/home/linuxbrew/.linuxbrew/lib/liblzma.so.5: undefined reference to pthread_create@GLIBC_2.34' /home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to __libc_single_threaded@GLIBC_2.32'
/home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to log2@GLIBC_2.29' /home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to pow@GLIBC_2.29'
/home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to exp2@GLIBC_2.29' /home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to exp@GLIBC_2.29'
/home/linuxbrew/.linuxbrew/lib/liblzma.so.5: undefined reference to pthread_sigmask@GLIBC_2.32' /home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to hypotf@GLIBC_2.35'
/home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to std::__throw_bad_array_new_length()@GLIBCXX_3.4.29' /home/linuxbrew/.linuxbrew/lib/libuuid.so.1: undefined reference to getrandom@GLIBC_2.25'
/home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to log@GLIBC_2.29' /home/linuxbrew/.linuxbrew/lib/liblzma.so.5: undefined reference to pthread_join@GLIBC_2.34'
/home/linuxbrew/.linuxbrew/lib/libGeographicLib.so.26.0.0: undefined reference to `expf@GLIBC_2.27'
collect2: error: ld returned 1 exit status
liorf/CMakeFiles/liorf_mapOptmization.dir/build.make:506: recipe for target '/root/catkin_ws/devel/lib/liorf/liorf_mapOptmization' failed
make[2]: *** [/root/catkin_ws/devel/lib/liorf/liorf_mapOptmization] Error 1
CMakeFiles/Makefile2:589: recipe for target 'liorf/CMakeFiles/liorf_mapOptmization.dir/all' failed
make[1]: *** [liorf/CMakeFiles/liorf_mapOptmization.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j32 -l32" failed

[pcl::PCDWriter::writeBinary] Input point cloud has no data!

你好,我在跑自己的rosbag的時候或著自己啟動機器人想要建圖時都會報這樣的錯誤,想請問有解決辦法嘛?

... logging to /home/keisoku/.ros/log/fac91196-ff77-11ed-a940-fbe2fa91ebf6/roslaunch-keisoku-desktop-33436.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

xacro: in-order processing became default in ROS Melodic. You can drop the option.
started roslaunch server http://keisoku-desktop:45183/

SUMMARY

PARAMETERS

  • /ekf_gps/base_link_frame: base_link
  • /ekf_gps/frequency: 50
  • /ekf_gps/imu0: imu_correct
  • /ekf_gps/imu0_config: [False, False, Fa...
  • /ekf_gps/imu0_differential: False
  • /ekf_gps/imu0_queue_size: 50
  • /ekf_gps/imu0_remove_gravitational_acceleration: True
  • /ekf_gps/map_frame: map
  • /ekf_gps/odom0: odometry/gps
  • /ekf_gps/odom0_config: [True, True, True...
  • /ekf_gps/odom0_differential: False
  • /ekf_gps/odom0_queue_size: 10
  • /ekf_gps/odom_frame: odom
  • /ekf_gps/process_noise_covariance: [1.0, 0, 0, 0, 0,...
  • /ekf_gps/publish_tf: False
  • /ekf_gps/sensor_timeout: 0.01
  • /ekf_gps/two_d_mode: False
  • /ekf_gps/world_frame: odom
  • /lio_sam/Horizon_SCAN: 1800
  • /lio_sam/N_SCAN: 16
  • /lio_sam/baselinkFrame: base_link
  • /lio_sam/downsampleRate: 1
  • /lio_sam/edgeFeatureMinValidNum: 10
  • /lio_sam/edgeThreshold: 1.0
  • /lio_sam/extrinsicRPY: [0, -1, 0, 1, 0, ...
  • /lio_sam/extrinsicRot: [-1, 0, 0, 0, 1, ...
  • /lio_sam/extrinsicTrans: [0.0, 0.0, 0.0]
  • /lio_sam/globalMapVisualizationLeafSize: 1.0
  • /lio_sam/globalMapVisualizationPoseDensity: 10.0
  • /lio_sam/globalMapVisualizationSearchRadius: 1000.0
  • /lio_sam/gpsCovThreshold: 2.0
  • /lio_sam/gpsTopic: odometry/gpsz
  • /lio_sam/historyKeyframeFitnessScore: 0.3
  • /lio_sam/historyKeyframeSearchNum: 25
  • /lio_sam/historyKeyframeSearchRadius: 15.0
  • /lio_sam/historyKeyframeSearchTimeDiff: 30.0
  • /lio_sam/imuAccBiasN: 6.435665935353257...
  • /lio_sam/imuAccNoise: 0.003993957088823881
  • /lio_sam/imuGravity: 9.80511
  • /lio_sam/imuGyrBiasN: 3.564031869636761...
  • /lio_sam/imuGyrNoise: 0.001563634394969...
  • /lio_sam/imuRPYWeight: 0.01
  • /lio_sam/imuTopic: imu/data
  • /lio_sam/lidarFrame: base_link
  • /lio_sam/lidarMaxRange: 1000.0
  • /lio_sam/lidarMinRange: 1.0
  • /lio_sam/loopClosureEnableFlag: True
  • /lio_sam/loopClosureFrequency: 1.0
  • /lio_sam/mapFrame: map
  • /lio_sam/mappingCornerLeafSize: 0.2
  • /lio_sam/mappingProcessInterval: 0.15
  • /lio_sam/mappingSurfLeafSize: 0.4
  • /lio_sam/numberOfCores: 4
  • /lio_sam/odomTopic: odometry/imu
  • /lio_sam/odometryFrame: odom
  • /lio_sam/odometrySurfLeafSize: 0.4
  • /lio_sam/pointCloudTopic: velodyne_points
  • /lio_sam/poseCovThreshold: 25.0
  • /lio_sam/rotation_tollerance: 1000
  • /lio_sam/savePCD: True
  • /lio_sam/savePCDDirectory: /Downloads/loam/
  • /lio_sam/sensor: velodyne
  • /lio_sam/surfFeatureMinValidNum: 100
  • /lio_sam/surfThreshold: 0.1
  • /lio_sam/surroundingKeyframeDensity: 2.0
  • /lio_sam/surroundingKeyframeSearchRadius: 50.0
  • /lio_sam/surroundingKeyframeSize: 50
  • /lio_sam/surroundingkeyframeAddingAngleThreshold: 0.2
  • /lio_sam/surroundingkeyframeAddingDistThreshold: 1.0
  • /lio_sam/useGpsElevation: False
  • /lio_sam/useImuHeadingInitialization: True
  • /lio_sam/z_tollerance: 1000
  • /navsat/broadcast_utm_transform: False
  • /navsat/broadcast_utm_transform_as_parent_frame: False
  • /navsat/delay: 0.0
  • /navsat/frequency: 50
  • /navsat/magnetic_declination_radians: 0
  • /navsat/publish_filtered_gps: False
  • /navsat/wait_for_datum: False
  • /navsat/yaw_offset: 0
  • /navsat/zero_altitude: True
  • /robot_description: <?xml version="1....
  • /rosdistro: noetic
  • /rosversion: 1.16.0

NODES
/
ekf_gps (robot_localization/ekf_localization_node)
lio_sam_featureExtraction (lio_sam/lio_sam_featureExtraction)
lio_sam_imageProjection (lio_sam/lio_sam_imageProjection)
lio_sam_imuPreintegration (lio_sam/lio_sam_imuPreintegration)
lio_sam_mapOptmization (lio_sam/lio_sam_mapOptmization)
lio_sam_rviz (rviz/rviz)
navsat (robot_localization/navsat_transform_node)
robot_state_publisher (robot_state_publisher/robot_state_publisher)

auto-starting new master
process[master]: started with pid [33446]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to fac91196-ff77-11ed-a940-fbe2fa91ebf6
process[rosout-1]: started with pid [33456]
started core service [/rosout]
process[lio_sam_imuPreintegration-2]: started with pid [33463]
process[lio_sam_imageProjection-3]: started with pid [33464]
process[lio_sam_featureExtraction-4]: started with pid [33465]
process[lio_sam_mapOptmization-5]: started with pid [33466]
process[robot_state_publisher-6]: started with pid [33468]
process[ekf_gps-7]: started with pid [33481]
process[navsat-8]: started with pid [33484]
process[lio_sam_rviz-9]: started with pid [33485]
[ INFO] [1685512629.760134190]: ----> Feature Extraction Started.
[ INFO] [1685512629.763197797]: ----> Image Projection Started.
[ INFO] [1685512629.778214201]: ----> Map Optimization Started.
[ INFO] [1685512629.792441124]: ----> IMU Preintegration Started.
^C[lio_sam_rviz-9] killing on exit
[navsat-8] killing on exit
[ekf_gps-7] killing on exit
[robot_state_publisher-6] killing on exit
[lio_sam_mapOptmization-5] killing on exit
[lio_sam_featureExtraction-4] killing on exit
[lio_sam_imageProjection-3] killing on exit
[lio_sam_imuPreintegration-2] killing on exit


Saving map to pcd files ...
Save destination: /home/keisoku/Downloads/loam/
terminate called after throwing an instance of 'pcl::IOException'
what(): : [pcl::PCDWriter::writeBinary] Input point cloud has no data!
[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done

Advice on how to improve performance

First of all, thanks for the great work!

I am trying to use this repo to perform 3D SLAM with my robot, but I am facing a problem that sometimes it gets lost and finishes creating a bad map. I am using it indoors, so I am not using any GPS data, even though the IMU provides it.

I have looked into my IMU data to see what happens when it gets lost, and I haven't discovered any anomaly in the magnetometer (I first thought it was because the robot was passing near high voltage cables for example) or in the orientation values. The thing is that usually the places where it gets lost are narrow places, like a corridor or when changing between rooms, so I don't know if this is a bug in liorf because it is optimized to be used outdoors or something.

Also, if you could give me some advice on which parameters should I tune to improve performance, I would really appreciate it.

Thanks in advance for the help!

GPS odometry not published if NavSatStatus equals 1 or 2

Hi, great work in making LIO-SAM work with 6DOF IMU and without depending on the robot_localization modules!

Just thought to make a small remark. I had trouble getting the GPS odometry topic published, and noticed that in line https://github.com/YJZLuckyBoy/liorf/blob/0ecccff3b1c1d96f72a8b02b3330a08d6425e2ba/src/mapOptmization.cpp#LL279C13-L279C19 there is a condition

        if (gpsMsg->status.status != 0)
            return;

This prevented in my case the GPS odometry from being published, since the custom NavSatFix message from my RTK GNSS setup encodes the states STATUS_SBAS_FIX and STATUS_GBAS_FIX to represent whether RTK fix is achieved or not.

Thus, it might be more generalizable to only neglect the GPS if the status is STATUS_NO_FIX:

        if (gpsMsg->status.status == -1)
            return;

[liorf_imuPreintegration-2] process has died

terminate called after throwing an instance of 'gtsam::IndeterminantLinearSystemException'
what():
Indeterminant linear system detected while working near variable
8646911284551352339 (Symbol: x19).

Thrown when a linear system is ill-posed. The most common cause for this
error is having underconstrained variables. Mathematically, the system is
underdetermined. See the GTSAM Doxygen documentation at
http://borg.cc.gatech.edu/ on gtsam::IndeterminantLinearSystemException for
more information.
124644
[liorf_imuPreintegration-2] process has died

when I Run kitti dataset

宇树激光雷达L1的适配

你好,我最近在适配liorf与宇树激光雷达L1,遇到了很多问题,比如点云密度低如何调参、或者修改代码;IMU数据为250hz,且IMU受激光雷达旋转影响有抖震,我想加入低通滤波算法到liorf中,博主有兴趣适配L1激光雷达吗?

how to open fusion gps function?

hi, many thaks for your work, I am using myself dateset, and my imu topic is "imu", gps topic is "fix", I change the lio_sam_default.yaml, and the gps topic and imu topic to the folowing:
pointCloudTopic: "velodyne_points" # Point cloud data
imuTopic: "imu" # IMU data
odomTopic: "odometry/imu" # IMU pre-preintegration odometry, same frequency as IMU
gpsTopic: "fix" # GPS odometry topic from navsat, see module_navsat.launch file
and I also change module_navsat.launch file as folowing :

my gps sensor type is: sensor_msgs/NavSatFix

however when I run the code, I can not see the Odom GPS in the rviz window, what else do I need change?

How to Write the Ouster Sensor Configuration File

I am using an OS0-32 sensor and an internal imu. The following is the configuration file I wrote, but it cannot function properly.
Some parameters are not well understood and have not been modified:odomTopic、extrinsicTrans、extrinsicRot

liorf:

  # Topics
  pointCloudTopic: "ouster/points"               # Point cloud data
  imuTopic: "ouster/imu"                         # IMU data
  odomTopic: "odometry/imu"                   # IMU pre-preintegration odometry, same frequency as IMU
  gpsTopic: "odometry/gpsz"                   # GPS odometry topic from navsat, see module_navsat.launch file

  # Frames
  lidarFrame: "base_link"
  baselinkFrame: "base_link"
  odometryFrame: "odom"
  mapFrame: "map"

  # GPS Settings
  useImuHeadingInitialization: false           # if using GPS data, set to "true"
  useGpsElevation: false                      # if GPS elevation is bad, set to "false"
  gpsCovThreshold: 2.0                        # m^2, threshold for using GPS data
  poseCovThreshold: 25.0                      # m^2, threshold for using GPS data
  
  # Export settings
  savePCD: false                              # https://github.com/TixiaoShan/LIO-SAM/issues/3
  savePCDDirectory: "/Downloads/LOAM/"        # in your home folder, starts and ends with "/". Warning: the code deletes "LOAM" folder then recreates it. See "mapOptimization" for implementation

  # Sensor Settings
  sensor: ouster                            # lidar sensor type, 'velodyne' or 'ouster' or 'livox' or 'robosense'
  N_SCAN: 32                                  # number of lidar channel (i.e., Velodyne/Ouster: 16, 32, 64, 128, Livox Horizon: 6)
  Horizon_SCAN: 1024                          # lidar horizontal resolution (Velodyne:1800, Ouster:512,1024,2048, Livox Horizon: 4000)
  downsampleRate: 2                           # default: 1. Downsample your data if too many points(line). i.e., 16 = 64 / 4, 16 = 16 / 1
  point_filter_num: 5                         # default: 3. Downsample your data if too many points(point). e.g., 16: 1, 32: 5, 64: 8
  lidarMinRange: 1.0                          # default: 1.0, minimum lidar range to be used
  lidarMaxRange: 100.0                       # default: 1000.0, maximum lidar range to be used

  # IMU Settings
  imuType: 0                                  # 0: 6-axis  1: 9-axis
  imuRate: 100.0
  imuAccNoise: 3.9939570888238808e-03
  imuGyrNoise: 1.5636343949698187e-03
  imuAccBiasN: 6.4356659353532566e-05
  imuGyrBiasN: 3.5640318696367613e-05
  imuGravity: 9.80511
  imuRPYWeight: 0.01

  # Extrinsics: T_lb (lidar -> imu)
  extrinsicTrans: [0.0, 0.0, 0.0]
  extrinsicRot: [-1, 0, 0,
                  0, 1, 0,
                  0, 0, -1]

  # This parameter is set only when the 9-axis IMU is used, but it must be a high-precision IMU. e.g. MTI-680
  extrinsicRPY: [1, 0, 0,
                  0, 1, 0,
                  0, 0, 1]

  # voxel filter paprams
  mappingSurfLeafSize: 0.4                      # default: 0.4 - outdoor, 0.2 - indoor

  # robot motion constraint (in case you are using a 2D robot)
  z_tollerance: 1000                            # meters
  rotation_tollerance: 1000                     # radians

  # CPU Params
  numberOfCores: 4                              # number of cores for mapping optimization
  mappingProcessInterval: 0.0                  # seconds, regulate mapping frequency

  # Surrounding map
  surroundingkeyframeAddingDistThreshold: 1.0   # meters, regulate keyframe adding threshold
  surroundingkeyframeAddingAngleThreshold: 0.2  # radians, regulate keyframe adding threshold
  surroundingKeyframeDensity: 2.0               # meters, downsample surrounding keyframe poses   
  surroundingKeyframeSearchRadius: 50.0         # meters, within n meters scan-to-map optimization (when loop closure disabled)
  surroundingKeyframeMapLeafSize: 0.5           # downsample local map point cloud

  # Loop closure
  loopClosureEnableFlag: true
  loopClosureFrequency: 1.0                     # Hz, regulate loop closure constraint add frequency
  surroundingKeyframeSize: 50                   # submap size (when loop closure enabled)
  historyKeyframeSearchRadius: 15.0             # meters, key frame that is within n meters from current pose will be considerd for loop closure
  historyKeyframeSearchTimeDiff: 30.0           # seconds, key frame that is n seconds older will be considered for loop closure
  historyKeyframeSearchNum: 25                  # number of hostory key frames will be fused into a submap for loop closure
  loopClosureICPSurfLeafSize: 0.5               # downsample icp point cloud  
  historyKeyframeFitnessScore: 0.3              # icp threshold, the smaller the better alignment

  # Visualization
  globalMapVisualizationSearchRadius: 1000.0    # meters, global map visualization radius
  globalMapVisualizationPoseDensity: 10.0       # meters, global map visualization keyframe density
  globalMapVisualizationLeafSize: 1.0           # meters, global map visualization cloud density




# Navsat (convert GPS coordinates to Cartesian)
navsat:
  frequency: 50
  wait_for_datum: false
  delay: 0.0
  magnetic_declination_radians: 0
  yaw_offset: 0
  zero_altitude: true
  broadcast_utm_transform: false
  broadcast_utm_transform_as_parent_frame: false
  publish_filtered_gps: false

# EKF for Navsat
ekf_gps:
  publish_tf: false
  map_frame: map
  odom_frame: odom
  base_link_frame: base_link
  world_frame: odom

  frequency: 50
  two_d_mode: false
  sensor_timeout: 0.01
  # -------------------------------------
  # External IMU:
  # -------------------------------------
  imu0: imu_correct
  # make sure the input is aligned with ROS REP105. "imu_correct" is manually transformed by myself. EKF can also transform the data using tf between your imu and base_link
  imu0_config: [false, false, false,
                true,  true,  true,
                false, false, false,
                false, false, true,
                true,  true,  true]
  imu0_differential: false
  imu0_queue_size: 50 
  imu0_remove_gravitational_acceleration: true
  # -------------------------------------
  # Odometry (From Navsat):
  # -------------------------------------
  odom0: odometry/gps
  odom0_config: [true,  true,  true,
                 false, false, false,
                 false, false, false,
                 false, false, false,
                 false, false, false]
  odom0_differential: false
  odom0_queue_size: 10

  #                            x     y     z     r     p     y   x_dot  y_dot  z_dot  r_dot p_dot y_dot x_ddot y_ddot z_ddot
  process_noise_covariance: [  1.0,  0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,    0,    0,      0,
                               0,    1.0,  0,    0,    0,    0,    0,     0,     0,     0,    0,    0,    0,    0,      0,
                               0,    0,    10.0, 0,    0,    0,    0,     0,     0,     0,    0,    0,    0,    0,      0,
                               0,    0,    0,    0.03, 0,    0,    0,     0,     0,     0,    0,    0,    0,    0,      0,
                               0,    0,    0,    0,    0.03, 0,    0,     0,     0,     0,    0,    0,    0,    0,      0,
                               0,    0,    0,    0,    0,    0.1,  0,     0,     0,     0,    0,    0,    0,    0,      0,
                               0,    0,    0,    0,    0,    0,    0.25,  0,     0,     0,    0,    0,    0,    0,      0,
                               0,    0,    0,    0,    0,    0,    0,     0.25,  0,     0,    0,    0,    0,    0,      0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0.04,  0,    0,    0,    0,    0,      0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,     0.01, 0,    0,    0,    0,      0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0.01, 0,    0,    0,      0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0.5,  0,    0,      0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,    0.01, 0,      0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,    0,    0.01,   0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,    0,    0,      0.015]

density

建图密度特别低,与对应的b站上面差别很大,应该怎么提高呢。
原始数据的点云很密集,建图出来的基本上已经看不到桌子了

OS1-128 Internal IMU

When using the Ouster's internal IMU I get a Large velocity, reset IMU-preintegration! warning.
It also seems like the sensors position is jumping around when trying to construct the map.
How would I set it up to work with an internal IMU the right way? I used the run_lio_sam_ouster.launch file and did not change the config file.

image

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.