导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    lio_sam和ndt导航精度差别的原因

    激光雷达
    liosam ndt
    2
    2
    736
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • weijiz
      weijiz 最后由 编辑

      实际跑bag时发现,同样的地图同样的数据,参数调整好之后ndt导航的精度要比lio_sam的高。在机器人静止时,lio_sam大概有最大2厘米左右的定位波动。但是ndt可以做到2个毫米的定位波动。误差来自于雷达匹配误差上。

      由于lio_sam是scan 到 map的匹配,而map本身可能存在误差,地图的真实点在地图点云上表现可能是一个点云分布。lio_sam匹配时按照最近点去找很有可能找到不是真实值。由于寻找匹配的随机性这样就定位就存在波动。比如实际是一个平整的墙面,但是建图后的点云很可能是有一定厚度的点云分布,这样匹配就存在这个厚度的误差。

      ndt就不存在这个问题,它按照最大概率去匹配。很好的去掉了这个误差带来的随机影响。

      小助理 1 条回复 最后回复 回复 引用 0
      • 小助理
        小助理 @weijiz 最后由 编辑

        你提到的现象确实存在,并且分析得非常透彻。下面我将详细解释这两种算法的工作原理及其导致精度差异的原因,同时给出一些优化建议。

        1. LIO-SAM (Lidar-Inertial Odometry - Simultaneous Localization and Mapping)

        工作原理:

        • 融合传感器数据:LIO-SAM结合了激光雷达(LiDAR)和惯性测量单元(IMU)的数据,通过非线性优化来估计机器人的位姿。
        • Scan-to-Map匹配:它使用点云配准方法将当前扫描结果与全局地图进行对齐。具体来说,它会寻找最近的对应点或特征来进行匹配。

        精度影响因素:

        • 地图误差:正如你所指出的,地图中的点云分布可能不完全准确,特别是在重建平面结构时可能会出现厚度问题。
        • 匹配随机性:由于点云数据的离散性和噪声,每次匹配的结果可能存在细微差异,导致定位波动。
        • IMU误差累积:虽然IMU提供了高频率的姿态信息,但长时间运行后仍会有一定的漂移。

        2. NDT (Normal Distributions Transform)

        工作原理:

        • 概率密度函数表示:NDT将点云划分为多个局部区域,并用正态分布(Gaussian distributions)来近似这些区域内的点云密度。
        • 最大似然估计:在定位过程中,NDT通过计算两个分布之间的相似度(如Bhattacharyya距离),找到使两者最相似的变换矩阵,从而确定机器人位置。

        精度优势:

        • 减少匹配不确定性:相比于直接寻找最近点,NDT基于统计模型的方法能够更好地处理点云中的噪声和不规则性,减少了因匹配误差带来的波动。
        • 平滑性更好:NDT生成的概率密度场相对连续和平滑,这有助于提高定位的一致性和稳定性。

        3. 优化建议

        为了改善LIO-SAM的定位精度,可以考虑以下措施:

        1. 提高地图质量:

          • 使用更精细的地图构建参数,例如增加分辨率、减少建图过程中的滤波强度等。
          • 对已有地图进行后处理,去除冗余点云并修正明显的几何偏差。
        2. 改进匹配策略:

          • 引入更多的约束条件,如平面约束、边缘约束等,以增强匹配准确性。
          • 尝试不同的ICP变种算法,如GICP(Generalized ICP),它们通常具有更好的鲁棒性和收敛速度。
        3. 调整传感器配置:

          • 校准LiDAR和IMU的时间同步和外参标定,确保两者之间的转换关系尽可能精确。
          • 如果条件允许,添加其他辅助传感器(如视觉摄像头),利用多模态融合进一步提升定位精度。
        4. 软件层面优化:

          • 调整LIO-SAM内部的关键参数,如keyframe_interval、imu_preintegration等,根据实际应用场景进行微调。
          • 关注社区反馈和技术文档,及时更新至最新版本,享受开发者们不断改进后的性能增益。
        # 示例代码:调整LIO-SAM部分关键参数
        import rospy
        from dynamic_reconfigure.client import Client
        
        def tune_lio_sam():
            client = Client('/lio_sam')
            
            # 设置关键帧间隔
            client.update_configuration({'keyframe_interval': 0.5})
            
            # 调整IMU预积分相关参数
            client.update_configuration({
                'imu_preintegration_noise_acc_bias': 0.01,
                'imu_preintegration_noise_gyr_bias': 0.01
            })
            
            print("LIO-SAM parameters tuned.")
        
        if __name__ == '__main__':
            rospy.init_node('tune_lio_sam_node')
            tune_lio_sam()
        

        希望以上内容能帮助你理解两种算法的区别,并为解决实际问题提供参考。如果你还有其他疑问或者需要更多帮助,请随时告诉我!

        我是论坛智能小助理,回答的问题可能是错误的。对于一些可能影响设备的关键问题,请谨慎参考我的回答

        1 条回复 最后回复 回复 引用 0
        • 1 / 1
        • First post
          Last post
        Copyright © 2015-2023 BlueWhale community