3D激光雷达-Robotsense使用---LIO_SAM测试

3D激光雷达-Robotsense使用—LIO_SAM测试

1. 参考链接

2. 雷达驱动-更改点云类型

运行lio-sam需要用到ringtimestamp两个参数,点云类型是XYZIRT ,lio-sam作者用的velodyne雷达是带这两个参数的

IR_M200小车上速腾的robotsense雷达默认发布的点云类型是XYZI,需要在CMakeLists.txt手动修改

------------------------------最新的SDK下载在debug_ws------------------------------

打开**/home/shansu/debug_ws/src/rslidar_sdk/CMakeLists.txt**

#=======================================
# Custom Point Type (XYZI, XYZIRT)
#=======================================
set(POINT_TYPE XYZIRT)

在文件顶部便可以选择点的类型,把set(POINT_TYPE XYZI)改为set(POINT_TYPE XYZIRT),然后需要重新编译整个工程

3. rslidar_points转velodyne_points

直接在lio-sam的config/params.yaml中文件修改雷达的话题为rslidar_points的话会出现如下错误:

[ERROR] [1608623674.483017189]: Point cloud is not in dense format, please remove NaN points first!

使用如下功能包将rslidar_points转成velodyne_points

HViktorTsoi/rs_to_velodyne: A ros tool for converting Robosense pointcloud to Velodyne pointcloud format.

功能包编译完成后,终端运行如下命令:

rosrun rs_to_velodyne rs_to_velodyne XYZIRT XYZIRT

会出现如下信息:

caohaojie@caohaojie-virtual-machine:~$ rosrun rs_to_velodyne rs_to_velodyne XYZIRT XYZIRT
[ INFO] [1671807722.528597207]: Listening to /rslidar_points ......
Failed to find match for field 'intensity'.
Failed to find match for field 'intensity'.
Failed to find match for field 'intensity'.
Failed to find match for field 'intensity'.
Failed to find match for field 'intensity'.
Failed to find match for field 'intensity'.
Failed to find match for field 'intensity'.

可以修改该功能包下的rs_to_velodyne.cpp

intensity的数据类型改为float, 重新编译即可

struct RsPointXYZIRT {
    PCL_ADD_POINT4D;
    float intensity;  //intensity 该为float类型,如下同理
    uint16_t ring = 0;
    double timestamp = 0;

EIGEN_MAKE_ALIGNED_OPERATOR_NEW

} EIGEN_ALIGN16;
POINT_CLOUD_REGISTER_POINT_STRUCT(RsPointXYZIRT,
                                  (float, x, x)(float, y, y)(float, z, z)(float, intensity, intensity)
                                          (uint16_t, ring, ring)(double, timestamp, timestamp))
  • 节点加入launch文件
<launch>
  <node pkg="rs_to_velodyne" name="rs_to_velodyne" type="rs_to_velodyne"  args="XYZIRT XYZIRT"   output="screen">
  </node>
</launch>
  • rslidar_points转velodyne_points
roslaunch rs_to_velodyne rs2velodyne.launch

4. 使用imu_utils工具标定imu的内参

参考链接
安装依赖项
sudo apt-get install libdw-dev
编译
  • 先编译code_utils: https://github.com/gaowenliang/code_utils

code_utils/下打开sumpixel_test.cpp文件

修改#include "backward.hpp"#include ''code_utils/backward.hpp''

  • 再编译imu_utils:https://github.com/gaowenliang/imu_utils
录制imu数据包

全程保持imu静止不动,imu上电运行十分钟后开始录制,录制两个小时)

rosbag record -O imu.bag /imu/data
标定imu(标定过程imu不要运行)

在 imu_utils/src/imu_utils/launch/下找到xsense.launch,修改imu话题名和time,两小时就设为120

#启动launch
roslaunch imu_utils xsense.launch

#在放imu包的文件夹下右键新开终端,以两百倍速播放imu包
rosbag play -r200  imu.bag /imu/data:=/imu_an/imu/data

播包结束时才会显示标定完成,标定结果在data文件夹下会生成一堆文件我们需要的是第一个标定结束

标定结果存在imu_utils/src/imu_utils/data/xsense_imu_param.yaml

修改lio_sam下的.yaml文件的对应参数

avg-axis:

​ acc_n---->imuAccNoise

avg-axis:

​ gyr_n---->imuGyrNoise

avg-axis:

​ acc_w---->imuAccBiasN

avg-axis:

​ gyr_w----> imuGyrBiasN

5. imu和雷达的外参标定

  • https://github.com/chennuo0125-HIT/lidar_imu_calib

6. 录制Lidar和Imu数据

  • 小车上电开机后,启动3D激光robotsense
roslaunch rslidar_sdk start.launch 
  • rslidar_points转velodyne_points
roslaunch rs_to_velodyne rs2velodyne.launch
  • 录制lidar和imu
rosbag record -O 701_v1.bag /imu/data /velodyne_points

7. 运行LIO_SAM

版本为liorf/launch/include at main · YJZLuckyBoy/liorf (github.com)

修改版本2:为了后续想要适配更多激光雷达(机械/固态/多雷达),而不用考虑特征提取模块的通用性,因此参考FAST-LIO2更改了一版移除LIO-SAM特征提取模块的代码,直接使用全部点云数据进行里程计解算,并且代码适配了速腾雷达、6轴IMU、9轴IMU数据,目前测试LIO-SAM提供数据(Velodyne、Livox、Ouster)及UrbanNavDataset数据集均没有问题,并且进行一些性能测试和对比,现已上传到github, 有需要的朋友可以Star一下, 具体适配自己设备需要修改的参数可以参考README.md文件.
原文链接:https://blog.csdn.net/qq_42938987/article/details/108434290

在小车主机上编译通过,但在本地20.04虚拟机测试编译的时候出现如下错误

image-20221225144334457

修改liorf下的 CMakeLists.txt的31行

timer后面添加 serialization thread

find_package(Boost REQUIRED COMPONENTS timer serialization thread)

这里最终使用原版LIO_SAM,并通过本地虚拟机的容器启动

  • 通过vs code的docker插件配置,启动LIO_SAM
    参考博客

  • 修改lio_sam 的 params.yaml 文件
    根据上述步骤imu和雷达的外参标定
    修改params.yaml 文件中# Extrinsics: T_lb (lidar -> imu)的相关数据

# Extrinsics: T_lb (lidar -> imu)
  extrinsicTrans: [-0.365, 0.0, 1.12]
  extrinsicRot: [0.944813,-0.327588, 0.00378493,
                 0.327583, 0.944821, 0.00180425,
                 -0.00416713, -0.000464799,0.999991]
  extrinsicRPY: [0.944813,-0.327588, 0.00378493,
                 0.327583, 0.944821, 0.00180425,
                 -0.00416713, -0.000464799,0.999991]
  • 启动LIO_SAM
roslaunch lio_sam run.launch 
  • 播放数据集

    1. 701_v1.bag (室内环境)
    rosbag play 701_v1.bag /imu/data:=/imu_raw /velodyne_points:=/points_raw
    

  1. data_rs2velodyne.bag (室外环境)
rosbag play data_rs2velodyne.bag /imu/data:=/imu_raw /velodyne_points:=/points_raw --clock --topics /imu/data /velodyne_points
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值