3D激光雷达-Robotsense使用—LIO_SAM测试
1. 参考链接
- TixiaoShan/LIO-SAM: LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping
- lio-sam运行自己的rosbag_heirenlop的博客-CSDN博客
- LIO-SAM:配置环境、安装测试、适配自己采集数据集_有待成长的小学生的博客-CSDN博客_lio-sam
2. 雷达驱动-更改点云类型
运行lio-sam需要用到ring和timestamp两个参数,点云类型是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的内参
参考链接
-
使用imu_utils工具标定imu的内参_大聪明墨菲特的博客-CSDN博客_imu_utils标定
-
用imu_utils标定IMU,之后用于kalibr中相机和IMU的联合标定_一ping就通的博客-CSDN博客_kalibr 很多 abandoned:
安装依赖项
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虚拟机测试编译的时候出现如下错误
修改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
-
播放数据集文章来源:https://www.toymoban.com/news/detail-771343.html
- 701_v1.bag (室内环境)
rosbag play 701_v1.bag /imu/data:=/imu_raw /velodyne_points:=/points_raw
文章来源地址https://www.toymoban.com/news/detail-771343.html
- data_rs2velodyne.bag (室外环境)
rosbag play data_rs2velodyne.bag /imu/data:=/imu_raw /velodyne_points:=/points_raw --clock --topics /imu/data /velodyne_points
-
视频链接【LIO_SAM】校园建图测试
到了这里,关于3D激光雷达-Robotsense使用---LIO_SAM测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!