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

    nav2导航失败,自由导航一移动雷达数据就对不上了

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    odom ekf ros2 humble nav2 cartographer
    3
    3
    277
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • M
      microzyme
      最后由 编辑

      背景(可选):

      更改小车电机驱动和雷达后(原硬件配置没有问题),重新发布/odom数据,建图可行,RVIZ上进行自由导航就出问题。(没有IMU数据,在传感器融合节点屏蔽了IMU)。环境:(ROS2 humble cartographer nav2 robot_localization_ekf)

      问题描述:

      建图完成后,在RVIZ2上进行重定位后,通过Nav2 Goal发布点位进行自由导航,小车一移动雷达就出现偏移,也就是小车实际前进了,雷达数据也改变了
      ,但是雷达在RVIZ上显示的位置没变,RVIZ中Display栏的TF下odom的position没变,移动时通过ros2 topic echo /odom查看数据是有在正确变换。
      自由导航移动时雷达数据在RVIZ上显示情况:问题图片

      具体细节和上下文:

      屏蔽IMU我是直接将robot_localization功能包中的ekf.yaml的imu配置项注释掉,目前是没有发布/imu数据的不知导航失败是否和这有关,这边查看tf树是没啥问题的,map->odom->base_footprint->base_link->scan等静态。

      尝试过的解决方法:

      看样子是导航问题,尝试过修改nav2导航的配置参数,照用原来能成功的小车配置也不行,还有车模型变了,urdf文件大致修改了一点。更换驱动后在/odom话题中发布的频率也改变了,不知是否有影响。雷达也换了个,不知道雷达的扫描频率变了有无影响,导航的配置大致如下

      amcl:
        ros__parameters:
          use_sim_time: False
          alpha1: 0.2
          alpha2: 0.2
          alpha3: 0.8
          alpha4: 0.2
          alpha5: 0.1
          base_frame_id: "base_footprint"
          beam_skip_distance: 0.5
          beam_skip_error_threshold: 0.9
          beam_skip_threshold: 0.3
          do_beamskip: false
          global_frame_id: "map"
          lambda_short: 0.1
          laser_likelihood_max_dist: 2.0
          laser_max_range: 100.0
          laser_min_range: -1.0
          laser_model_type: "likelihood_field"
          max_beams: 60
          max_particles: 3000
          min_particles: 100
          odom_frame_id: "odom"
          odom_model_type: "diff"
          pf_err: 0.05
          pf_z: 0.99
          recovery_alpha_fast: 0.0
          recovery_alpha_slow: 0.0
          resample_interval: 1
          robot_model_type: "nav2_amcl::DifferentialMotionModel"
          save_pose_rate: 0.5
          sigma_hit: 0.2
          tf_broadcast: true
          transform_tolerance: 1.0
          update_min_a: 0.2
          update_min_d: 0.25
          z_hit: 0.5
          z_max: 0.05
          z_rand: 0.5
          z_short: 0.05
          scan_topic: scan
      
      bt_navigator:
        ros__parameters:
          use_sim_time: True
          global_frame: map
          robot_base_frame: base_link
          odom_topic: /odometry/filtered
          #odom_topic: /odom
          bt_loop_duration: 10
          default_server_timeout: 20
          # 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
          # nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
          # nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
          # They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
          plugin_lib_names:
      local_costmap:
        local_costmap:
          ros__parameters:
            update_frequency: 5.0
            publish_frequency: 2.0
            global_frame: odom
            robot_base_frame: base_link
            use_sim_time: True
            rolling_window: true
            width: 3
            height: 3
            resolution: 0.05
            robot_radius: 0.22
            plugins: ["voxel_layer", "inflation_layer"]
            inflation_layer:
              plugin: "nav2_costmap_2d::InflationLayer"
              cost_scaling_factor: 3.0
              inflation_radius: 0.3
            voxel_layer:
              plugin: "nav2_costmap_2d::VoxelLayer"
              enabled: True
              publish_voxel_map: True
              origin_z: 0.0
              z_resolution: 0.05
              z_voxels: 16
              max_obstacle_height: 2.0
              mark_threshold: 0
              observation_sources: scan
              scan:
                topic: /scan
                max_obstacle_height: 2.0
                clearing: True
                marking: True
                data_type: "LaserScan"
                raytrace_max_range: 3.0
                raytrace_min_range: 0.0
                obstacle_max_range: 2.5
                obstacle_min_range: 0.0
            static_layer:
              plugin: "nav2_costmap_2d::StaticLayer"
              map_subscribe_transient_local: True
            always_send_full_costmap: True
      
      global_costmap:
        global_costmap:
          ros__parameters:
            update_frequency: 1.0
            publish_frequency: 1.0
            global_frame: map
            robot_base_frame: base_link
            use_sim_time: True
            robot_radius: 0.22
            resolution: 0.05
            track_unknown_space: true
            plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
            obstacle_layer:
              plugin: "nav2_costmap_2d::ObstacleLayer"
              enabled: True
              observation_sources: scan
              scan:
                topic: /scan
                max_obstacle_height: 2.0
                clearing: True
                marking: True
                data_type: "LaserScan"
                raytrace_max_range: 3.0
                raytrace_min_range: 0.0
                obstacle_max_range: 2.5
                obstacle_min_range: 0.0
            static_layer:
              plugin: "nav2_costmap_2d::StaticLayer"
              map_subscribe_transient_local: True
            inflation_layer:
              plugin: "nav2_costmap_2d::InflationLayer"
              cost_scaling_factor: 3.0
              inflation_radius: 0.3
            always_send_full_costmap: True
      
      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        针对您描述的问题,有几个关键点需要检查和调整,这些问题可能与您更换电机驱动和雷达后出现的导航问题有关。以下是一些可能的解决步骤和检查点:

        1. 验证TF变换

        首先,确保所有的TF变换都是正确的。尽管您说TF树看起来没问题,但还需要确保/odom到base_footprint以及base_footprint到base_link的变换是实时且准确的。可以使用ros2 tf2_echo命令来查看TF变换的输出,例如:

        ros2 tf2_echo odom base_footprint
        ros2 tf2_echo base_footprint base_link
        

        2. 检查Odometry数据

        您提到/odom话题中的数据在移动时是正确变换的,但请确保这些数据的质量(如协方差矩阵)也是合理的。如果协方差过大,可能会影响定位的准确性。您可以通过订阅/odom话题来检查这些数据。

        3. 雷达频率和性能

        更换雷达后,雷达的扫描频率和性能可能会有所不同。请确保雷达的配置(如扫描范围、角度分辨率等)与您的导航配置相匹配。如果雷达扫描频率变化很大,可能需要调整AMCL或本地成本地图的参数。

        4. AMCL配置

        • alpha 参数:这些参数影响粒子滤波器的性能。如果小车和环境的动态性较高,可能需要调整这些参数。
        • odom_model_type:确保diff(差分模型)适用于您的小车。
        • scan_topic:确保扫描话题名称正确,并且雷达数据被正确接收。

        5. 本地和全局成本地图

        • 分辨率和大小:根据您的应用场景,可能需要调整成本地图的分辨率和大小。
        • 障碍物和膨胀层:确保障碍物层和膨胀层的参数适合您的小车和环境。

        6. 导航状态

        在RVIZ中查看导航状态(如路径规划、避障等)是否如预期工作。检查是否有任何错误或警告消息在导航节点中输出。

        7. IMU数据

        虽然您已经屏蔽了IMU数据,但IMU在提供方向和角速度信息方面非常有用,特别是在动态环境中。如果可能的话,考虑重新集成IMU数据,或者使用其他传感器来增强定位性能。

        8. 日志和调试

        查看ROS2的日志文件,查找可能的错误或警告。增加日志记录的详细程度可能有助于诊断问题。

        9. 硬件和软件兼容性

        确保新硬件与ROS2和Nav2的兼容性。有时,新硬件可能需要特定的驱动程序或配置。

        10. 重新构建和测试

        在更改任何配置或代码后,确保重新构建并彻底测试系统。

        通过上述步骤,您应该能够诊断并解决导航中的问题。如果问题仍然存在,您可能需要更深入地分析具体的数据和配置,或者考虑寻求社区的帮助。


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

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

        1 条回复 最后回复 回复 引用 0
        • 传
          传说鲈鱼狸
          最后由 编辑

          确认下新雷达ros_frame_id和urdf里laser link name是否一致

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