鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    【机器人实操】Cartographer做SLAM来创造地图时,地图莫名其妙旋转问题求助【急急急急急】

    已定时 已固定 已锁定 已移动
    移动机器人制作
    cartographer建图 ros2 humble
    4
    5
    590
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 1
      1143271883
      最后由 编辑

      我在实验室的机器人平台上使用Cartographer 做SLAM来创造地图时,当我旋转机器人的时候地图没有固定不动,而是发生了奇怪的偏转,我需要做什么来保持的地图的稳定?

      背景:

      实验室的一个具体的机器人项目,需要在实际场景中使用机器人,第一步是构建地图,我们使用Cartographer框架来构建2d地图

      问题描述:

      使用Catographer时初始化无问题,使用前后两个“RPLIDAR S2”光电测距传感器来融合机器人前端和后端的距离信息,在使用cartographer算法进行建图时红色线为前向180度扫描信息,黄色线为后向180度扫描信息,融合后输入cartographer构建地图,当机器人沿直线移动时,光电测距传感器传感器返回的边界信息和地图一致,当机器人旋转后,地图出现了偏移,光电测距传感器的边界红色线和黄色线与地图出现了夹角。

      具体细节:

      硬件平台:ScoutV2
      系统版本 :Ubuntu 20.04
      ros版本: humble

      tf输出如下:

      08fb01cf-3796-499e-a436-8abe820b250c-image.png

      rviz2 画面如下:

      初始化时如下图:

      红色线为前向180度扫描信息,黄色线为后向180度扫描信息,融合后输入cartographer构建地图,当机器人沿直线移动时,光电测距传感器传感器返回的边界信息和地图一致

      Screenshot 2024-10-01 at 12.51.19.png

      正常前后行驶如下图:

      可见此时地图构建的边界和光电测距传感器的边界一致
      1332b42e-d0c9-4bcc-b3d0-41f20f888115-image.png

      机器人逆时针旋转90度后:

      可见机器人旋转后,构建的地图没有移动,但现实的光电传感器边界和地图出现了偏移,且夹角小于90度,此时红色线与黄色线 方向不再稳定
      Screenshot 2024-10-01 at 12.52.31.png

      机器人180度旋转后,直行:

      重新构建地图时,按照传感器边界构建,红色线在前黄色线在后,但此时构建的地图沿着传感器继续进行就出现了偏移,不再是实际的环境,而是偏移后沿着红色线和黄色线的输出。
      Screenshot 2024-10-01 at 13.16.25 2.png

      Cartographer的 lua文件Config
      include "map_builder.lua"
      include "trajectory_builder.lua"
      
      options = {
        map_builder = MAP_BUILDER,
        trajectory_builder = TRAJECTORY_BUILDER,
        map_frame = "map",
        tracking_frame = "imu_link",
        published_frame = "odom",
        odom_frame = "odom",
        provide_odom_frame = false,
        publish_frame_projected_to_2d = false,
        use_odometry = false,
        use_nav_sat = false,
        use_landmarks = false,
        num_laser_scans = 1,
        num_multi_echo_laser_scans = 0,
        num_subdivisions_per_laser_scan = 1,
        num_point_clouds = 0,
        lookup_transform_timeout_sec = 0.2,
        submap_publish_period_sec = 0.3,
        pose_publish_period_sec = 5e-3,
        trajectory_publish_period_sec = 30e-3,
        rangefinder_sampling_ratio = 1.,
        odometry_sampling_ratio = 1.,
        fixed_frame_pose_sampling_ratio = 1.,
        imu_sampling_ratio = 1.,
        landmarks_sampling_ratio = 1.,
      }
      MAP_BUILDER.use_trajectory_builder_2d = true
      
      TRAJECTORY_BUILDER_2D.min_range = 0.1
      TRAJECTORY_BUILDER_2D.max_range = 3.5
      TRAJECTORY_BUILDER_2D.missing_data_ray_length = 3.
      TRAJECTORY_BUILDER_2D.use_imu_data = false 
      TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
      TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.1)
      
      POSE_GRAPH.constraint_builder.min_score = 0.65
      POSE_GRAPH.constraint_builder.global_localization_min_score = 0.7
      
      return options
      
      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        针对您在使用Cartographer进行SLAM建图时遇到的地图旋转问题,这里有几个可能的解决方案和检查点:

        1. 确认TF(坐标变换)树的一致性

        确保您的TF树在机器人旋转时保持正确。检查imu_link(或其他用作tracking_frame的帧)是否相对于机器人基座的旋转是正确的。您可以使用rosrun tf2_viewer tf2_viewer.py来可视化TF树,并观察在机器人旋转时各个帧之间的关系是否如预期那样变化。

        2. 检查传感器配置

        确认您的激光雷达(RPLIDAR S2)的配置和安装是否正确。特别是检查两个激光雷达的安装角度和位置,确保它们的扫描平面与机器人的移动方向一致,并且两个雷达之间的相对位置固定不变。

        3. 修正IMU(如果有的话)

        虽然您的配置中use_imu_data = false,但如果将来考虑使用IMU,请确保IMU的校准和配置正确。IMU的偏差和噪声可能会对旋转估计产生显著影响。

        4. 调整Cartographer参数

        • 运动滤波:您已经设置了TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.1),这个值限制了连续两次位姿估计之间允许的最大角度变化。您可以尝试增加这个值,看看是否有助于减少旋转时的误差。
        • 扫描匹配:调整TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching相关的参数,可能有助于改善扫描与地图的匹配质量。

        5. 验证传感器数据

        在机器人旋转时,观察激光雷达数据是否准确反映了环境。您可以在RVIZ中查看原始激光雷达数据,确保在旋转时数据的连续性和准确性。

        6. 检查地图构建和位姿估计的实时性

        如果处理速度不够快,可能会导致在机器人快速移动或旋转时,地图更新滞后,从而产生误差。确保您的系统资源(CPU、内存)足够,且ROS和Cartographer的配置能够高效地处理数据。

        7. 记录和回放数据

        使用rosbag记录旋转时的所有数据(包括激光雷达数据、TF变换等),然后尝试在另一台计算机或同一台计算机的不同时间回放这些数据。这有助于隔离问题是否由实时性引起。

        8. 查阅文档和社区

        查阅Cartographer的官方文档和GitHub仓库,看看是否有其他人遇到并解决了类似的问题。此外,ROS社区和相关的论坛也是获取帮助的好地方。

        通过上述步骤,您应该能够更接近问题的根源,并找到解决地图旋转问题的方法。如果问题仍然存在,可能需要更深入地分析传感器数据和Cartographer的内部工作原理。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 条回复 最后回复 回复 引用 0
        • 1
          1143271883
          最后由 编辑

          手动@小鱼 大佬,求助!!!感激不尽!!!!

          24384131712 小鱼小 2 条回复 最后回复 回复 引用 0
          • 24384131712
            我不和二极管说话 @1143271883
            最后由 编辑

            @1143271883 您好,请问您解决了这个问题吗,我最近也有遇到类似的问题,可以交流下吗

            1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @1143271883
              最后由 编辑

              @1143271883 大概率是tf外参不对

              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

              1 条回复 最后回复 回复 引用 0
              • 第一个帖子
                最后一个帖子
              皖ICP备16016415号-7
              Powered by NodeBB | 鱼香ROS