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

    导航实物部署

    已定时 已固定 已锁定 已移动
    Nav2
    ros2 nav2
    2
    5
    769
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 35684851433
      一二一三八
      最后由 编辑

      在实物机器人上面进行导航部署,已完成建图操作。实物机器人能提供里程计信息。传感器为镭神m10_p激光雷达。但在进行导航实践时出现错误:
      [amcl-8] [INFO] [1693798122.384041701] [amcl_rclcpp_node]: Message Filter dropping message: frame 'laser_link' at time 1693798121.550 for reason 'discarding message because the queue is full'
      [rviz2-16] [INFO] [1693798122.398805178] [rviz2]: Message Filter dropping message: frame 'laser_link' at time 1693798121.550 for reason 'discarding message because the queue is full'

      部署在orin nx板子上面,ubuntu系统为20.04,ros2版本为galactic。

      launch文件nav2.launch.py如下:
      import os
      from launch_ros.substitutions import FindPackageShare
      from ament_index_python.packages import get_package_share_directory
      from launch import LaunchDescription
      from launch.actions import DeclareLaunchArgument
      from launch.actions import IncludeLaunchDescription,ExecuteProcess
      from launch.launch_description_sources import PythonLaunchDescriptionSource
      from launch.substitutions import LaunchConfiguration
      from launch_ros.actions import Node

      def generate_launch_description():

      nav2_bringup_dir = get_package_share_directory('nav2_bringup')
      launch_dir = get_package_share_directory('nav2')
      pkg_share_laser = get_package_share_directory('lslidar_driver')
      
      
      
      rviz_config_dir = os.path.join(nav2_bringup_dir,'rviz','nav2_default_view.rviz')
      urdf_model_path = os.path.join(launch_dir, f'urdf/{"fishbot_gazebo.urdf"}')
      
      #是否使用仿真时间,我们用gazebo,这里设置成true
      use_sim_time = LaunchConfiguration('use_sim_time', default='false')
      map_yaml_path = LaunchConfiguration('map',default= os.path.join(launch_dir,'map','map4.yaml'))
      nav2_param_path = LaunchConfiguration('params_file',default=os.path.join(launch_dir,'param','nav.yaml'))
      # 地图的分辨率
      # 地图的发布周期    
      
      
      return LaunchDescription([
          DeclareLaunchArgument('use_sim_time',default_value=use_sim_time,description='Use simulation (Gazebo) clock if true'),
          DeclareLaunchArgument('map',default_value=map_yaml_path,description='Full path to map file to load'),
          DeclareLaunchArgument('params_file',default_value=nav2_param_path,description='Full path to param file to load'),
      
          IncludeLaunchDescription(
              PythonLaunchDescriptionSource([pkg_share_laser,'/launch','/lsm10p_net_launch.py'])),
          
          
          ExecuteProcess(
              cmd=['sleep', '10'],
              output='screen'),
      
      
          Node(
              package='robot_state_publisher',
              executable='robot_state_publisher',
              name='robot_state_publisher',
              arguments=[urdf_model_path]),
      
          Node(
              package='bringup',
              executable='odom',
              name='odom_node',
              output='screen'),
      
          Node(
              package='joint_state_publisher_gui',
              executable='joint_state_publisher_gui',
              name='joint_state_publisher_gui',
              arguments=[urdf_model_path]),
          
          
          Node(
              package='robot_localization',
              executable='ekf_node',
              name='ekf_filter_node',
              output='screen',
              parameters=[os.path.join(launch_dir, 'conf/ekf.yaml'),
                          {'use_sim_time': use_sim_time}]),
      
      
          IncludeLaunchDescription(
              PythonLaunchDescriptionSource([nav2_bringup_dir,'/launch','/bringup_launch.py']),
              launch_arguments={
                  'map': map_yaml_path,
                  'use_sim_time': use_sim_time,
                  'params_file': nav2_param_path}.items(),),
      
          Node(
                package='rviz2',
                executable='rviz2',
                name='rviz2',
                arguments=['-d', rviz_config_dir],
                parameters=[{'use_sim_time': use_sim_time}],
                output='screen'),])
      

      其中odom_node是自己写的串口通信模块,用于发布里程计信息和订阅cmd_vel信息。

      nav的配置文件nav.yaml如下:
      amcl:
      ros__parameters:
      alpha1: 0.2
      alpha2: 0.2
      alpha3: 0.2
      alpha4: 0.2
      alpha5: 0.2
      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: 2000
      min_particles: 500
      odom_frame_id: "odom"
      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
      map_topic: map
      set_initial_pose: false
      always_reset_initial_pose: false
      initial_pose:
      x: 0.0
      y: 0.0
      z: 0.0
      yaw: 0.0

      amcl_map_client:
      ros__parameters:
      use_sim_time: True

      amcl_rclcpp_node:
      ros__parameters:
      use_sim_time: True

      bt_navigator:
      ros__parameters:
      use_sim_time: True
      global_frame: map
      robot_base_frame: base_link
      odom_topic: /odom
      bt_loop_duration: 10
      default_server_timeout: 20
      enable_groot_monitoring: True
      groot_zmq_publisher_port: 1666
      groot_zmq_server_port: 1667
      # '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:
      - nav2_compute_path_to_pose_action_bt_node
      - nav2_compute_path_through_poses_action_bt_node
      - nav2_follow_path_action_bt_node
      - nav2_back_up_action_bt_node
      - nav2_spin_action_bt_node
      - nav2_wait_action_bt_node
      - nav2_clear_costmap_service_bt_node
      - nav2_is_stuck_condition_bt_node
      - nav2_goal_reached_condition_bt_node
      - nav2_goal_updated_condition_bt_node
      - nav2_initial_pose_received_condition_bt_node
      - nav2_reinitialize_global_localization_service_bt_node
      - nav2_rate_controller_bt_node
      - nav2_distance_controller_bt_node
      - nav2_speed_controller_bt_node
      - nav2_truncate_path_action_bt_node
      - nav2_goal_updater_node_bt_node
      - nav2_recovery_node_bt_node
      - nav2_pipeline_sequence_bt_node
      - nav2_round_robin_node_bt_node
      - nav2_transform_available_condition_bt_node
      - nav2_time_expired_condition_bt_node
      - nav2_distance_traveled_condition_bt_node
      - nav2_single_trigger_bt_node
      - nav2_is_battery_low_condition_bt_node
      - nav2_navigate_through_poses_action_bt_node
      - nav2_navigate_to_pose_action_bt_node
      - nav2_remove_passed_goals_action_bt_node
      - nav2_planner_selector_bt_node
      - nav2_controller_selector_bt_node
      - nav2_goal_checker_selector_bt_node

      bt_navigator_rclcpp_node:
      ros__parameters:
      use_sim_time: True

      controller_server:
      ros__parameters:
      use_sim_time: True
      controller_frequency: 20.0
      min_x_velocity_threshold: 0.001
      min_y_velocity_threshold: 0.5
      min_theta_velocity_threshold: 0.001
      failure_tolerance: 0.3
      progress_checker_plugin: "progress_checker"
      goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
      controller_plugins: ["FollowPath"]

      # Progress checker parameters
      progress_checker:
        plugin: "nav2_controller::SimpleProgressChecker"
        required_movement_radius: 0.5
        movement_time_allowance: 10.0
      # Goal checker parameters
      #precise_goal_checker:
      #  plugin: "nav2_controller::SimpleGoalChecker"
      #  xy_goal_tolerance: 0.25
      #  yaw_goal_tolerance: 0.25
      #  stateful: True
      general_goal_checker:
        stateful: True
        plugin: "nav2_controller::SimpleGoalChecker"
        xy_goal_tolerance: 0.25
        yaw_goal_tolerance: 0.25
      # DWB parameters
      FollowPath:
        plugin: "dwb_core::DWBLocalPlanner"
        debug_trajectory_details: True
        min_vel_x: 0.0
        min_vel_y: 0.0
        max_vel_x: 0.26
        max_vel_y: 0.0
        max_vel_theta: 1.0
        min_speed_xy: 0.0
        max_speed_xy: 0.26
        min_speed_theta: 0.0
        # Add high threshold velocity for turtlebot 3 issue.
        # https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
        acc_lim_x: 2.5
        acc_lim_y: 0.0
        acc_lim_theta: 3.2
        decel_lim_x: -2.5
        decel_lim_y: 0.0
        decel_lim_theta: -3.2
        vx_samples: 20
        vy_samples: 5
        vtheta_samples: 20
        sim_time: 1.7
        linear_granularity: 0.05
        angular_granularity: 0.025
        transform_tolerance: 0.2
        xy_goal_tolerance: 0.25
        trans_stopped_velocity: 0.25
        short_circuit_trajectory_evaluation: True
        stateful: True
        critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist"]
        BaseObstacle.scale: 0.02
        PathAlign.scale: 32.0
        PathAlign.forward_point_distance: 0.1
        GoalAlign.scale: 24.0
        GoalAlign.forward_point_distance: 0.1
        PathDist.scale: 32.0
        GoalDist.scale: 24.0
        RotateToGoal.scale: 32.0
        RotateToGoal.slowing_factor: 5.0
        RotateToGoal.lookahead_time: -1.0
      

      controller_server_rclcpp_node:
      ros__parameters:
      use_sim_time: True

      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.40
      plugins: ["voxel_layer", "inflation_layer"]
      inflation_layer:
      plugin: "nav2_costmap_2d::InflationLayer"
      cost_scaling_factor: 3.0
      inflation_radius: 0.55
      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:
      map_subscribe_transient_local: True
      always_send_full_costmap: True
      local_costmap_client:
      ros__parameters:
      use_sim_time: True
      local_costmap_rclcpp_node:
      ros__parameters:
      use_sim_time: 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.40
      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.55
      always_send_full_costmap: True
      global_costmap_client:
      ros__parameters:
      use_sim_time: True
      global_costmap_rclcpp_node:
      ros__parameters:
      use_sim_time: True

      map_server:
      ros__parameters:
      use_sim_time: True
      yaml_filename: "map4.yaml"
      topic_name: "map"
      frame_id: "map"

      map_saver:
      ros__parameters:
      use_sim_time: True
      save_map_timeout: 5.0
      free_thresh_default: 0.25
      occupied_thresh_default: 0.65
      map_subscribe_transient_local: True

      planner_server:
      ros__parameters:
      expected_planner_frequency: 20.0
      use_sim_time: True
      planner_plugins: ["GridBased"]
      GridBased:
      plugin: "nav2_navfn_planner/NavfnPlanner"
      tolerance: 0.5
      use_astar: false
      allow_unknown: true

      planner_server_rclcpp_node:
      ros__parameters:
      use_sim_time: True

      recoveries_server:
      ros__parameters:
      costmap_topic: local_costmap/costmap_raw
      footprint_topic: local_costmap/published_footprint
      cycle_frequency: 10.0
      recovery_plugins: ["spin", "backup", "wait"]
      spin:
      plugin: "nav2_recoveries/Spin"
      backup:
      plugin: "nav2_recoveries/BackUp"
      wait:
      plugin: "nav2_recoveries/Wait"
      global_frame: odom
      robot_base_frame: base_link
      transform_timeout: 0.1
      use_sim_time: true
      simulate_ahead_time: 2.0
      max_rotational_vel: 1.0
      min_rotational_vel: 0.4
      rotational_acc_lim: 3.2

      robot_state_publisher:
      ros__parameters:
      use_sim_time: True

      waypoint_follower:
      ros__parameters:
      loop_rate: 20
      stop_on_failure: false
      waypoint_task_executor_plugin: "wait_at_waypoint"
      wait_at_waypoint:
      plugin: "nav2_waypoint_follower::WaitAtWaypoint"
      enabled: True
      waypoint_pause_duration: 200

      运行ros2 launch nav2 nav2.launch.py,终端显示错误:
      [amcl-8] [INFO] [1693802494.007698765] [amcl_rclcpp_node]: Message Filter dropping message: frame 'laser_link' at time 1693802493.174 for reason 'discarding message because the queue is full'
      [rviz2-16] [INFO] [1693802494.019894090] [rviz2]: Message Filter dropping message: frame 'laser_link' at time 1693802493.174 for reason 'discarding message because the queue is full'

      求助大佬们怎么解决。感激不尽!!!

      毛哥成山轮胎机油保养毛 1 条回复 最后回复 回复 引用 0
      • 毛哥成山轮胎机油保养毛
        毛哥成山轮胎机油保养 活跃VIP @3568485143
        最后由 毛哥成山轮胎机油保养 编辑

        @3568485143 我这段时间也一直在研究实体机器人导航这一块,你的机器人开启imu了吗,如果没有开启先不用Node(
        package='robot_localization',
        executable='ekf_node',
        这个节点,这个节点是融合里程计和imu的,跑通了在把这个节点加上,先用最简单的模型跑通导航,你可以参考一下我的学习记录
        链接文本,
        我也遇到了很多问题,我们可以一起探讨

        35684851433 2 条回复 最后回复 回复 引用 0
        • 35684851433
          一二一三八 @毛哥成山轮胎机油保养
          最后由 编辑

          @毛哥成山轮胎机油保养 没有使用imu,但是我查过资料,融合定位可以使用单独的里程计进行定位,这个应该不是问题的原因,谢谢您🙏

          1 条回复 最后回复 回复 引用 0
          • 35684851433
            一二一三八 @毛哥成山轮胎机油保养
            最后由 编辑

            @毛哥成山轮胎机油保养 我初步判定可能是我的里程计消息的问题。我写的里程计节点可能不完善,正在尝试修改。再次感谢您的回复,希望能多多交流,一起学习。

            毛哥成山轮胎机油保养毛 1 条回复 最后回复 回复 引用 0
            • 毛哥成山轮胎机油保养毛
              毛哥成山轮胎机油保养 活跃VIP @3568485143
              最后由 编辑

              @3568485143 如果没有imu 最好先不要用融合定位,融合的话底盘发出的/odom需要修改,假设修改成/odom_diff, 融合生成的话题也需要映射
              remappings=[('/odometry/filtered','odom'),],
              还要配置ekf.yaml文件,难度会增大很多,导致你很难判断哪里有问题

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