KITTI数据集雷达采样点时间戳属性的思考(Failed to find match for field ‘time‘)

        最近在SLAM调研期间,看到了FAST-LIO2以及Point-lio这两个比较新的SLAM建图算法,想着上手编译并且运行一下,选择了自己了解到的比较出名的数据集KITTI,想着在上述两个开源算法上上手跑一下(原论文并没有使用KITTI数据集进行验证),研究了两天最终也没有成功解决,上述两个开源算法都需要支持bag包中含有雷达每个点的采样的时间戳(timestamp)属性,查询了几个方法并实践后发现KITTI貌似本身就不支持雷达采样点的时间戳属性。

        KITTI数据集没有雷达采样点的时间戳属性,这个观点仅代表现阶段我的调研,如果确实有这个属性并且有具体的kitti2bag方法将原始数据转换为bag包,欢迎在评论区指出,贴出链接,我也学习一下。

FAST-LIO和Point-lio官方网站

        FAST-LIO是有雷电点云的后向传播、Point-lio采用的是雷达采样点的直接配准,两者都需要雷达点云具体的时间戳属性,具体可以参考论文以及Github官网展示:

GitHub - hku-mars/FAST_LIO: A computationally efficient and robust LiDAR-inertial odometry (LIO) package

https://github.com/hku-mars/Point-LIO

心路历程

Kitti2bag官方数据包转换工具

        最先尝试的是使用Kitti2bag工具包转换KITTI官方odometry对应的数据,将其转换为bag包,随后播放bag包时显示:

        显示没有time属性,其他两个属性不是很重要,一个intensity问题自己搜索之后已经解决,可以参考我的上一篇博客(官方提供的Kitti2bag转换工具也请参考我的上一篇博客):

kitti2bag原始数据转为bag包工具使用、SLAM精度评估工具evo安装及使用、KITTI原始数据集对应关系-优快云博客

        随后只解决了intensity问题,网络搜索基本找不到有关time的解决方案。 

LIO-SAM Github网站提供的转换工具以及bag包

        随后通过某个Github上的issue了解到LIO-SAM提供的工具包能够对KITTI数据集进行转换,再次尝试:

GitHub - TixiaoShan/LIO-SAM: LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

        数据包转换工具以及提供好的bag包下载链接参考如下:

        进入LIO-SAM官网就可以看到上面图片展示的信息,自己下载LIO-SAM官方提供的数据包(上图Google Drive链接),再次修改lidar_topic以及imu_topic后上面出现的intensity以及ring警告均没有了,但是time的警告仍然存在。

其他三方转换工具

        随后又调研了几个转换工具:

  1. 针对Lego-loam跑Kitti00包的(这个方法转换后的bag包只有雷达话题,没有Imu话题,所以没有尝试,感觉也不行,贴个链接供查看):lego-loam 跑 kitti00包(kitti2bag+lego-loam+evo)详细版_kitti格式转tum-优快云博客
  2. 一个Github上阿里员工提供的kitti2bag转换工具,但是内容基本和上面一个没有太大差别:KITTI数据集转化为ROS bag包(解决各种类型数据集,实测有效)_kitti数据集转化成rosbag-优快云博客

写在最后

        暂时写到这里,自己尝试了2天,这个问题仍然没有解决,中间我查到一个Github上的issue也是关于Kitti的时间戳的问题,上面写到目前KITTI不支持雷达每个采样点的时间戳,后续有新的内容我会及时贴出来。

<think>嗯,我现在要了解一下速腾雷达如何实现Faster-LIO。首先,得弄清楚这两个概念:速腾雷达Faster-LIO分别是什么,然后看它们是怎么结合在一起的。 首先,速腾雷达应该是指速腾聚创(RoboSense)生产的激光雷达,对吧?他们家的雷达产品在自动驾驶和机器人领域用得比较多,比如RS-LiDAR系列。这类雷达通常提供高精度的三维点云数据,用于环境感知和定位。 然后是Faster-LIOLIO是Lidar-Inertial Odometry的缩写,即激光雷达惯性里程计,结合了IMU(惯性测量单元)和激光雷达的数据进行实时定位与建图。Faster-LIO应该是一个更高效的版本,可能是在计算速度或资源利用上做了优化,比如改进算法结构或采用新的数据处理方法。 接下来,用户想知道速腾雷达如何实现Faster-LIO。这里可能需要了解Faster-LIO的工作原理,以及如何适配特定的雷达硬件。比如,Faster-LIO可能依赖特定的点云数据格式、时间同步、或者IMU和雷达的标定参数。速腾雷达需要满足这些要求才能顺利集成到Faster-LIO系统中。 可能的步骤包括: 1. **硬件配置**:将速腾雷达与IMU硬件连接,确保两者时间同步,可能需要硬件层面的同步信号。 2. **数据接口**:获取雷达的点云数据和IMU的惯性数据,可能需要使用ROS(机器人操作系统)中的驱动或SDK来读取数据。 3. **标定**:进行雷达和IMU之间的外参标定,确定两者之间的相对位置和姿态,这对传感器融合至关重要。 4. **算法集成**:将速腾雷达的数据输入到Faster-LIO算法中,可能需要调整参数以适应雷达的特性,比如扫描模式、视场角、点云密度等。 5. **优化与测试**:在实际环境中测试系统性能,调整算法参数以提高定位和建图的准确性和效率。 另外,Faster-LIO可能采用了一些优化技术,比如ikd-Tree(增量式k维树)来高效管理点云地图,减少计算量。速腾雷达的高扫描速率或高分辨率可能在这方面带来优势,比如更密集的点云帮助构建更精细的地图,但同时也需要算法能够处理更大的数据量而不影响实时性。 不过,我可能对Faster-LIO的具体实现细节不太清楚,比如它是否开源,或者是否已经有适配速腾雷达的配置文件和参数。可能需要查阅相关论文或GitHub仓库,比如Faster-LIO的作者是否提供了支持不同雷达型号的指南。 另外,传感器的时间同步问题也很重要,如果雷达和IMU的时间戳没有精确对齐,会导致融合算法出现误差。速腾雷达是否支持硬件时间同步,或者需要通过软件进行插值处理? 还有,IMU的数据频率通常比雷达高很多,Faster-LIO可能利用IMU的高频数据进行运动预测,然后在雷达数据到来时进行校正。这需要良好的传感器融合策略,比如紧耦合或松耦合的方式。 总结来说,实现速腾雷达Faster-LIO需要硬件配置、数据获取、标定、算法集成和优化等多个步骤,确保传感器数据的准确性和算法的兼容性。可能需要参考Faster-LIO的文档和速腾雷达的技术规格,进行具体的配置和调试。</think>### 速腾雷达实现 Faster-LIO 的步骤解析 Faster-LIO 是一种高效的**激光雷达惯性里程计(Lidar-Inertial Odometry)**算法,通过融合激光雷达(LiDAR)和惯性测量单元(IMU)数据,实现实时定位与建图。速腾聚创(RoboSense)雷达(如 RS-LiDAR 系列)因其高精度点云数据,常用于此类系统。以下是实现的核心步骤: --- #### **1. 硬件配置与同步** - **硬件选择** 需配备速腾激光雷达(如 RS-LiDAR-16/32)和 IMU(如 Xsens MTi 系列),确保两者支持硬件时间同步(如通过 PTP 协议)。 - **时间同步** 雷达和 IMU 需严格同步时间戳,避免融合误差。速腾雷达若支持外部触发,可通过硬件信号(如 GPS PPS)实现微秒级同步。 --- #### **2. 数据接口与驱动** - **获取传感器数据** - **雷达数据**:通过速腾官方 SDK 或 ROS 驱动(如 `rslidar_sdk`)实时获取点云,格式为 `sensor_msgs/PointCloud2`。 - **IMU 数据**:通过串口或 ROS 节点读取角速度、加速度及时间戳- **数据传输频率** - 雷达通常为 10-20 Hz,IMU 为 100-1000 Hz,需通过算法异步处理多速率数据。 --- #### **3. 传感器标定** - **内参标定** - **IMU 内参**:标定零偏、噪声参数(使用 Allan 方差法或工具如 Kalibr)。 - **雷达内参**:校准点云畸变(如温度漂移补偿)。 - **外参标定** 标定雷达与 IMU 的相对位姿(旋转矩阵 $R$ 和平移向量 $t$),常用方法: - **手动标定**:基于已知靶标(如棋盘格)。 - **自动标定**:使用 LIO 算法本身在线优化外参(如 FAST-LIO2 的 `LI_Init` 模块)。 --- #### **4. 算法集成与参数配置** - **Faster-LIO 的核心优化** - **高效数据结构**:采用 **ikd-Tree** 管理增量式地图,支持动态插入/删除点云,复杂度降至 $O(\log n)$。 - **紧耦合融合**:通过误差状态卡尔曼滤波(ESKF)融合雷达观测与 IMU 预测,状态方程为: $$ \hat{x}_{k+1} = f(\hat{x}_k, u_k) + w_k $$ 其中 $u_k$ 为 IMU 输入,$w_k$ 为噪声。 - **适配速腾雷达的参数调整** - `lidar_type`:设置为速腾雷达型号(如 RS16)。 - `point_filter_num`:降采样率,适应雷达的高点云密度(如 1/2 采样)。 - `max_iteration`:迭代次数,影响收敛速度与精度。 --- #### **5. 实时处理与建图优化** - **运动补偿** 针对雷达扫描周期内的自身运动,利用 IMU 数据去畸变(Deskew),校正点云坐标。 公式: $$ p_{corrected} = R_{imu}^{t} \cdot p_{raw} + t_{imu}^{t} $$ 其中 $R_{imu}^{t}$ 和 $t_{imu}^{t}$ 为时间 $t$ 时刻的 IMU 位姿。 - **地图更新** 通过 ikd-Tree 快速检索最近邻点,匹配当前帧与地图,更新估计位姿。 --- #### **6. 性能调优与测试** - **资源分配** 调整线程数(如 `NUM_MATCHING_THREADS`)以适应 CPU 性能。 - **抗动态干扰** 启用 `remove_dynamic_objects` 滤除动态物体点云。 - **精度评估** 使用基准数据集(如 KITTI)或实地 SLAM 轨迹对比真值(如 RTK-GPS),计算绝对位姿误差(ATE)。 --- ### **关键挑战与解决方案** - **挑战1:时间同步偏差** **方案**:使用硬件同步或软件插值(如 B-spline 拟合 IMU 数据)。 - **挑战2:大规模点云实时处理** **方案**:启用 GPU 加速(如 CUDA)或进一步降采样。 - **挑战3:动态环境建图** **方案**:结合语义分割(如 RangeNet++)区分静态/动态点云。 --- ### **示例代码片段(ROS 节点)** ```cpp // 初始化 Faster-LIO 参数 std::shared_ptr<FAST_LIO::FastLio> lio_obj; lio_obj.reset(new FAST_LIO::FastLio()); lio_obj->set_ros_param(nh); // 读取 ROS 参数 lio_obj->init(imu_sub, cloud_sub); // 绑定 IMU 和雷达订阅 // 主要处理循环 while (ros::ok()) { lio_obj->run(); // 执行 ESKF 预测-更新 publish_odometry(); // 发布里程计 publish_map(); // 发布 ikd-Tree 地图 } ``` --- 通过以上步骤,速腾雷达可高效集成到 Faster-LIO 系统中,适用于自动驾驶、机器人导航等实时场景。实际部署时需根据硬件特性细致调参,并验证系统在复杂环境下的鲁棒性。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值