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

    8.2.4Nav2中位置初始化失败

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    nav2 map
    2
    3
    218
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • T
      Tapioca ROS2开发者
      最后由 编辑

      主要问题

      在运行$ ros2 launch fishbot_description gazebo_sim.launch.py与$ ros2 launch fishbot_navigation2 navigation2.launch.py 后,在Nav2中使用2D Pose Estimate进行位置初始化却没有反应.

      代码使用书中源码

      cb65fa16-b9ac-4a2a-8df8-1b44633b92bb-image.png

      具体信息

      报错内容:

      [rviz2-2] [INFO] [1741239804.218106393] [rviz2]: Message Filter dropping message: frame 'odom' at time 1448.795 for reason 'discarding message because the queue is full'
      [component_container_isolated-1] [INFO] [1741239804.270139737] [global_costmap.global_costmap]: Timed out waiting for transform from base_link to map to become available, tf error: Invalid frame ID "map" passed to canTransform argument target_frame - frame does not exist
      [rviz2-2] [INFO] [1741239804.442806621] [rviz2]: Message Filter dropping message: frame 'odom' at time 1448.995 for reason 'discarding message because the queue is full'
      [rviz2-2] [INFO] [1741239804.647028227] [rviz2]: Setting estimate pose: Frame:map, Position(-0.00625003, 0.015625, 0), Orientation(0, 0, -0.0073542, 0.999973) = Angle: -0.0147085
      [component_container_isolated-1] [INFO] [1741239804.647405258] [amcl]: initialPoseReceived
      [component_container_isolated-1] [INFO] [1741239804.647525437] [amcl]: Setting pose (1451.138000): -0.006 0.016 -0.015
      [component_container_isolated-1] [INFO] [1741239804.770150840] [global_costmap.global_costmap]: Timed out waiting for transform from base_link to map to become available, tf error: Invalid frame ID "map" passed to canTransform argument target_frame - frame does not exist
      [rviz2-2] [INFO] [1741239804.826190716] [rviz2]: Message Filter dropping message: frame 'odom' at time 1449.395 for reason 'discarding message because the queue is full'
      

      节点列表

      
      $ ros2 node list
      /amcl
      /behavior_server
      /bt_navigator
      /bt_navigator_navigate_through_poses_rclcpp_node
      /bt_navigator_navigate_to_pose_rclcpp_node
      /controller_manager
      /controller_server
      /depth_camera
      /fishbot_diff_drive_controller
      /fishbot_joint_state_broadcaster
      /gazebo
      /gazebo_ros2_control
      /global_costmap/global_costmap
      /imu_plugin
      /laserscan
      /launch_ros_49116
      /lifecycle_manager_localization
      /lifecycle_manager_navigation
      /local_costmap/local_costmap
      /map_server
      /nav2_container
      /planner_server
      /robot_state_publisher
      /rviz2
      /rviz_navigation_dialog_action_client
      /smoother_server
      /transform_listener_impl_5f458c66f6a0
      /transform_listener_impl_7b36ac001e70
      /transform_listener_impl_7b36b8001e70
      /transform_listener_impl_7b36c8001e70
      /transform_listener_impl_7b36d4001e90
      /transform_listener_impl_7b370c0024a0
      /velocity_smoother
      /waypoint_follower
      

      tf_tree:
      49c5b977-1283-4ca1-bcfc-8adc36923d17-image.png

      尝试运行$ ros2 run tf2_ros tf2_echo map odom的结果:

      [INFO] [1741241283.638348664] [tf2_echo]: Waiting for transform map ->  odom: Invalid frame ID "map" passed to canTransform argument target_frame - frame does not exist
      [INFO] [1741241285.627289037] [tf2_echo]: Waiting for transform map ->  odom: Invalid frame ID "map" passed to canTransform argument target_frame - frame does not exist
      
      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        从你提供的日志和错误信息来看,主要问题在于Nav2(导航2)系统中缺少必要的坐标变换(tf变换),尤其是从base_link到map的变换,以及map到odom的变换。这些问题通常是由于以下几个原因造成的:

        1. 地图服务器(map_server)未正确发布map坐标系:

          • 确保map_server节点正在运行,并且已经加载了正确的地图文件。
          • 检查map_server的启动参数,确保它发布了map坐标系。
        2. 里程计(Odometry)信息未正确发布:

          • 确保你的机器人正在发布里程计信息,通常这是通过robot_state_publisher和相关的控制器(如fishbot_diff_drive_controller)完成的。
          • 检查是否有其他节点(如gazebo或amcl)也依赖于里程计信息,并确保它们能够接收到。
        3. tf变换缺失:

          • 从错误信息来看,map到odom的变换不存在。这通常意味着amcl(自适应蒙特卡洛定位)或类似的定位节点没有正确运行或配置。
          • 使用tf2_ros tf2_echo命令检查其他相关的tf变换,如从base_link到odom。
        4. Rviz配置问题:

          • 确保在Rviz中正确设置了固定帧(Fixed Frame),通常这应该设置为map。
          • 检查Rviz中的TF显示,确保所有必要的变换都在更新。
        5. 启动文件配置:

          • 检查gazebo_sim.launch.py和navigation2.launch.py启动文件,确保所有必要的节点都被正确启动,并且参数配置正确。

        解决步骤:

        1. 验证地图服务器:

          • 确保map_server节点正在运行,并且已经加载了地图。
        2. 检查里程计信息:

          • 使用ros2 topic echo /odom(或相应的里程计话题)来检查里程计数据是否正在被发布。
        3. 检查tf变换:

          • 使用ros2 run tf2_ros tf2_echo /base_link /odom和ros2 run tf2_ros tf2_echo /map /odom来检查这些变换是否存在。
        4. 重新启动和调试:

          • 重新启动所有相关的节点,并密切关注控制台输出,看是否有任何错误或警告信息。
          • 如果问题依旧存在,尝试简化配置,逐步添加组件以确定是哪个部分出现了问题。
        5. 查阅文档和社区资源:

          • 查阅ROS 2和Nav2的官方文档,以及相关的社区论坛和问答网站,看看是否有其他人遇到了类似的问题。

        通过这些步骤,你应该能够诊断并解决Nav2中位置初始化失败的问题。


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

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

        1 条回复 最后回复 回复 引用 0
        • T
          Tapioca ROS2开发者
          最后由 编辑

          已解决,报错原因:没有及时更新第七章的代码,修改gazebo_sensor_plugin.xacro文件
          😥

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