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

    nav2导航时不会转弯

    已定时 已固定 已锁定 已移动
    Nav2
    nav2 ros2 dwb
    1
    1
    316
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 31782613053
      ᯤ⁹⁹ᴳ⁺
      最后由 编辑

      在进行实体机器人进行nav2导航时,在rviz2中设定目标点时,机器人只能朝前方前进,如果前进过程中(保持正常速度)走偏了,在目标点附近会以最低速进行,不会转弯;如果设置的目标点在机器人朝向相反的方向或者在侧面,机器人直接以最低速向前走尽管方向相反。

      navigation2的配置文件如下:

      amcl:
        ros__parameters:
          use_sim_time: False  #使用仿真时间
          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"  #由amcl发布的坐标框架的名称。
          lambda_short: 0.1  #模型中 z_short 部分的指数衰减参数
          laser_likelihood_max_dist: 2.0  #地图上进行障碍物膨胀的最大距离,用于 likelihood_field 模型
          laser_max_range: 100.0  #要考虑的最大扫描范围,-1.0将导致使用激光报告的最大范围
          laser_min_range: -1.0   #要考虑的最小扫描范围,-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   #快速平均权重滤波器的指数衰减率,用于决定何时通过添加随机姿势进行恢复, 一个好的值可能是 0.1
          recovery_alpha_slow: 0.0   #慢速平均权重滤波器的指数衰减率,用于决定何时通过添加随机姿势进行恢复, 一个好的值可能是 0.001
          resample_interval: 1    #重新取样前所需的滤波器更新次数
          robot_model_type: "nav2_amcl::DifferentialMotionModel"  #插件类的完全限定类型
          save_pose_rate: 0.5   #以每秒存储上次估计的姿态和协方差到参数服务器的最大速率
          sigma_hit: 0.2    #用于模型中z_hit部分的高斯模型的标准偏差
          tf_broadcast: true   #将其设置为false可防止amcl发布全局坐标系和里程计坐标系之间的变换
          transform_tolerance: 1.0  #发布变换时用于后期日期的时间,以表明该变换在未来是有效的
          update_min_a: 0.2   #在执行滤波器更新之前需要的旋转运动
          update_min_d: 0.25   #在执行滤波器更新之前需要的平移运动
          z_hit: 0.5   #模型中z_hit部分的混合权重,所有使用的z权重之和必须为1。 Beam使用全部4个,似然模型使用z_hit和z_rand
          z_max: 0.05
          z_rand: 0.5
          z_short: 0.05
          scan_topic: scan
          map_topic: map
          set_initial_pose: false  #使AMCL从initial_pose*参数设置初始姿态,而不是等待initial_pose消息
          always_reset_initial_pose: false  #要求在重置时,通过话题或initial_pose*参数(设置参数set_initial_pose为true)向AMCL提供初始姿态。
          first_map_only: false  #允许AMCL在map_topic上接受多个地图
          initial_pose:   #机器人基座标系在全局坐标系中的初始姿态的X、Y、Z和偏航角坐标(以米和弧度表示)
            x: 0.0
            y: 0.0
            z: 0.0
            yaw: 0.0
      
      bt_navigator:
        ros__parameters:
          use_sim_time: False
          global_frame: map   #参考坐标系
          robot_base_frame: base_footprint  #机器人基准坐标系
          odom_topic: /odom  #发布里程计数据的话题
          bt_loop_duration: 10  #BT执行的每次迭代的持续时间(以毫秒为单位)
          default_server_timeout: 20  #BT操作节点等待动作服务器确认的默认超时时间(毫秒)。如果提供了输入端口“server_timeout”,则此值将被覆盖为BT节点的超时时间。
          # '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_smooth_path_action_bt_node
            - nav2_follow_path_action_bt_node
            - nav2_spin_action_bt_node
            - nav2_wait_action_bt_node
            - nav2_assisted_teleop_action_bt_node
            - nav2_back_up_action_bt_node
            - nav2_drive_on_heading_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_globally_updated_goal_condition_bt_node
            - nav2_is_path_valid_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_truncate_path_local_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_path_expiring_timer_condition
            - nav2_distance_traveled_condition_bt_node
            - nav2_single_trigger_bt_node
            - nav2_goal_updated_controller_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
            - nav2_controller_cancel_bt_node
            - nav2_path_longer_on_approach_bt_node
            - nav2_wait_cancel_bt_node
            - nav2_spin_cancel_bt_node
            - nav2_back_up_cancel_bt_node
            - nav2_assisted_teleop_cancel_bt_node
            - nav2_drive_on_heading_cancel_bt_node
            - nav2_is_battery_charging_condition_bt_node
      
      bt_navigator_navigate_through_poses_rclcpp_node:
        ros__parameters:
          use_sim_time: False
      
      bt_navigator_navigate_to_pose_rclcpp_node:
        ros__parameters:
          use_sim_time: False
      
      controller_server:
        ros__parameters:
          use_sim_time: False
          controller_frequency: 20.0  #控制器运行的频率(Hz)
          min_x_velocity_threshold: 0.001   #控制器服务器在将接收到的里程计消息发送给控制器插件之前会过滤速度部分。低于此阈值(以 m/s 为单位)的里程计值将被设置为 0.0
          min_y_velocity_threshold: 0.5  #控制器服务器在将接收到的里程计消息发送给控制器插件之前会过滤速度部分。低于此阈值(以 m/s 为单位)的里程计值将被设置为 0.0
          min_theta_velocity_threshold: 0.001  #控制器服务器在将接收到的里程计消息发送给控制器插件之前会过滤速度部分。低于此阈值(以 rad/s 为单位)的里程计值将被设置为 0.0
          failure_tolerance: 0.3   #被调用的控制器插件在失败之前的最大持续时间(即插件的 computeVelocityCommands 函数抛出异常)允许的时间(以秒为单位),否则 nav2_msgs::action::FollowPath 动作将失败。将其设置为特殊值 -1.0 可以使其无限制,设置为 0 则禁用,设置为正值可设定适当的超时时间
          progress_checker_plugin: "progress_checker"    #检查机器人进度的进度检查插件的映射名称
          goal_checker_plugins: ["general_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.2   #设置x和y方向上到达目标的位置阈值
            yaw_goal_tolerance: 1.57    #设置到达目标时允许的最大转向角度阈值,1/4的圆
          # DWB parameters
          FollowPath:
            plugin: "dwb_core::DWBLocalPlanner"   #使用的本地规划器DWB
            debug_trajectory_details: True   #开启轨迹细节的调试模式
            min_vel_x: 0.1  #最小速度X (m/s)
            max_vel_x: 0.5
            min_vel_y: 0.0   #最小速度Y (m/s)
            max_vel_y: 0.0   #最大角速度(弧度/秒)
            min_speed_xy: 0.1   #最小平移速度(米/秒)
            max_speed_xy: 0.5
            min_speed_theta: -0.5  #最小角速度 (rad/s)
            max_speed_theta: 0.5  #最大角速度 (rad/s)
            # Add high threshold velocity for turtlebot 3 issue.
            # https:#github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
            acc_lim_x: 2.0  #X轴最大加速度(m/s^2)
            acc_lim_y: 0.0   #Y轴最大加速度(m/s^2)
            acc_lim_theta: 1.0 #旋转最大加速度(rad/s^2)
            decel_lim_x: -2.0  #X轴最大减速度(m/s^2)
            decel_lim_y: 0.0  #Y轴最大减速度(m/s^2)
            decel_lim_theta: -1.0  #旋转最大减速度(rad/s^2)
            vx_samples: 20   #X 轴速度方向的速度样本数
            vy_samples: 5   #Y 轴速度方向的速度样本数
            vtheta_samples: 20   #角向速度采样数量
            sim_time: 1.0  #用于设置向前仿真的时间(单位为秒)
            linear_granularity: 0.05   #用于设置线性粒度,即向前投射的线性距离
            angular_granularity: 0.025   #用于设置角度粒度,即向前投射的角度距离
            transform_tolerance: 0.2    #TF 变换容差(秒)
            xy_goal_tolerance: 0.2   #用于设置满足目标完成标准的容差(单位为m
            trans_stopped_velocity: 0.1   #用于设置停止速度(单位为弧度/秒),当机器人速度低于该速度时会被认为满足容差而处于停止状态
            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:只有当机器人足够接近目标位置时,才允许机器人旋转到目标方向
            RotateToGoal.slowing_factor: 10.0  #用于设置旋转到目标位姿时减慢机器人运动的因子
            RotateToGoal.lookahead_time: -1.0  #如果>0,则为等待碰撞的时间量,用于计算转向目标误差
      
      local_costmap:
        local_costmap:
          ros__parameters:
            update_frequency: 20.0   #局部代价地图的更新频率
            publish_frequency: 10.0   #局部代价地图的发布频率
            global_frame: odom  #在局部代价地图中的全局坐标系,一般需要设置为odom_frame,如果没有这个坐标系,用/map来代替了;
            robot_base_frame: base_footprint   #机器人本体的基坐标系
            use_sim_time: False
            rolling_window: true  #使用滚动窗口,始终保持机器人在当前局部地图的中心位置
            width: 3   #滚动窗口的宽度,单位是米
            height: 3   #滚动窗口的高度,单位是米
            resolution: 0.05   #地图的分辨率,该分辨率可以从加载的地图相对应的配置文件中获取到
            robot_radius: 0.15  #机器人半径
            plugins: ["voxel_layer", "inflation_layer"]
            inflation_layer:  #膨胀层
              plugin: "nav2_costmap_2d::InflationLayer"
              cost_scaling_factor: 3.0  #成本缩放因子
              inflation_radius: 0.25  #膨胀半径
            voxel_layer:  #体素层,体素(3D像素)来表示障碍物
              plugin: "nav2_costmap_2d::VoxelLayer"
              enabled: True
              publish_voxel_map: True  #是否发布体素地图
              origin_z: 0.0  #体素地图的Z轴原点
              z_resolution: 0.05  #Z轴上的分辨率
              z_voxels: 16  #Z轴上体素的数量
              max_obstacle_height: 2.0  #障碍物的最大高度
              mark_threshold: 0  #用于标记障碍物的阈值,但在这里设置为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   #这个设置不是特定于任何层的,但它是costmap_2d的全局参数。如果设置为True,则会始终发送完整的costmap,而不是仅当costmap发生更改时才发送
      
      global_costmap:
        global_costmap:
          ros__parameters:
            update_frequency: 1.0   #全局代价地图更新频率,一般全局代价地图更新频率设置的比较小
            publish_frequency: 1.0
            global_frame: map
            robot_base_frame: base_footprint   #在全局代价地图中机器人本体的基坐标系,就是机器人上的根坐标系。通过global_frame和robot_base_frame就可以计算两个坐标系之间的变换,得知机器人在全局坐标系中的坐标了
            use_sim_time: False
            robot_radius: 0.15   #机器人半径
            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.25  #膨胀半径
            always_send_full_costmap: True  #发送完整地图
      
      map_server:
        ros__parameters:
          use_sim_time: False
          # Overridden in launch by the "map" launch configuration or provided default value.
          # To use in yaml, remove the default "map" value in the tb3_simulation_launch.py file & provide full path to map below.
          yaml_filename: ""
      
      map_saver:
        ros__parameters:
          use_sim_time: False
          save_map_timeout: 5.0  #这个参数设置了保存地图的超时时间(以秒为单位),如果在这个时间内没有新的地图数据被接收到,map_saver节点将保存当前的地图
          free_thresh_default: 0.25  #当某个区域的占据概率低于这个阈值时,它将被视为空闲(即没有障碍物)
          occupied_thresh_default: 0.65  #当某个区域的占据概率高于这个阈值时,它将被视为被占据(即有障碍物)
          map_subscribe_transient_local: True  #订阅的地图将是瞬态的并且仅在本地(即不跨节点持久化)
      
      planner_server:  #路径规划
        ros__parameters:
          expected_planner_frequency: 20.0   #planner_server节点期望的规划器频率(以Hz为单位)
          use_sim_time: False
          planner_plugins: ["GridBased"]
          GridBased:
            plugin: "nav2_navfn_planner/NavfnPlanner"
            tolerance: 0.5  #规划器在寻找路径时的容忍度(以米为单位)。它表示规划器在评估路径时,对机器人位置和障碍物位置的精度要求。较小的值可能导致更精确的路径,但也可能增加计算时间
            use_astar: false  #是否应该使用A算法来寻找路径,这里用Dijkstra算法。A算法通常比Dijkstra算法更快
            allow_unknown: true  #规划器是否允许在包含未知空间(即未被传感器探测到的区域)的地图上规划路径
      
      smoother_server:   #路径平滑化
        ros__parameters:
          use_sim_time: False
          smoother_plugins: ["simple_smoother"]
          simple_smoother:
            plugin: "nav2_smoother::SimpleSmoother"
            tolerance: 1.0e-10   #平滑化算法在迭代过程中收敛的容忍度。当路径的进一步优化小于这个容忍度时,算法将停止迭代
            max_its: 1000  #参数设置了平滑化算法的最大迭代次数
            do_refinement: True   #是否应该进行平滑化后的细化(refinement)步骤
      
      behavior_server:   #行为服务器
        ros__parameters:
          costmap_topic: local_costmap/costmap_raw   #用于导航的局部代价地图(costmap)的ROS话题
          footprint_topic: local_costmap/published_footprint   #包含机器人足迹信息的ROS话题,足迹用于在代价地图中标记机器人可能占据的空间
          cycle_frequency: 10.0   #行为服务器的循环频率
          behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
          spin:   #旋转
            plugin: "nav2_behaviors/Spin" 
          backup:  #备份
            plugin: "nav2_behaviors/BackUp"  
          drive_on_heading:  #航向驾驶
            plugin: "nav2_behaviors/DriveOnHeading"
          wait:   #等待
            plugin: "nav2_behaviors/Wait"
          assisted_teleop:   #辅助遥控器
            plugin: "nav2_behaviors/AssistedTeleop"
          global_frame: odom  #用于导航的全局坐标系框架(frame)
          robot_base_frame: base_footprint   #机器人基础(即机器人的质心或中心点)的坐标系框架
          transform_tolerance: 0.1   #检查不同坐标系之间的变换时,此参数定义了容忍的最大误差(以米为单位)
          use_sim_time: False
          simulate_ahead_time: 2.0    #了机器人应该向前模拟的时间(以秒为单位)
          max_rotational_vel: 0.5   #机器人可以达到的最大旋转速度(以弧度/秒为单位)
          min_rotational_vel: -0.5   #机器人可以执行的最小旋转速度
          rotational_acc_lim: 1.0   #机器人的旋转加速度限制(以弧度/秒²为单位)。这有助于防止机器人过快地改变方向。
      
      
      robot_state_publisher:
        ros__parameters:
          use_sim_time: False
      
      waypoint_follower:
        ros__parameters:
          use_sim_time: False
          loop_rate: 20    #检查当前导航任务结果的频率
          stop_on_failure: false   #单个路径点失败,是否使动作任务失败。如果为 false,则继续到下一个路径点
          waypoint_task_executor_plugin: "wait_at_waypoint"
          wait_at_waypoint:   #在机器人到达路径点时定义要执行的任务
            plugin: "nav2_waypoint_follower::WaitAtWaypoint"
            enabled: True
            waypoint_pause_duration: 200   #当机器人到达一个航路点时应该暂停的持续时间(以毫秒为单位)
      
      velocity_smoother:   #速度平滑器
        ros__parameters:
          use_sim_time: False
          smoothing_frequency: 20.0   #使用最后接收到的速度命令按照速度、加速度和死区约束进行平滑的频率(Hz)
          scale_velocities: False    #是否按比例调整速度的其他分量,以根据加速度限制的变化来进行调整
          feedback: "OPEN_LOOP"    #用于机器人速度当前状态的反馈类型,在“OPEN_LOOP”模式下,它将使用上一次命令的速度作为下一次迭代的当前速度。当适当设置加速度限制时,这是一个很好的假设。在“CLOSED_LOOP”模式下,它将使用“odom”话题的里程计来估算机器人的当前速度
          max_velocity: [0.5, 0.0, 0.0]   #机器人在x、y、z轴上的最大允许速度(单位可能根据应用而异,但通常是m/s)。在这里,x轴最大速度为0.26 m/s,y轴最大速度为0(可能表示不允许侧向运动),z轴最大速度为1.0 m/s(可能表示垂直方向的速度限制)
          min_velocity: [-0.5, 0.0, 0.0]    #机器人在x、y、z轴上的最小允许速度。这通常用于处理反向运动或防止过低的运动速度
          max_accel: [2.0, 0.0, 0.0]   #机器人在x、y、z轴上的最大加速度限制(单位可能是m/s²)。这些限制用于确保机器人的运动不会过快加速
          max_decel: [-2.0, 0.0, 0.0]    #机器人在x、y、z轴上的最大减速度限制。这些限制用于确保机器人的运动不会过快减速
          odom_topic: "odom"   #平滑器可能使用这个信息来估计机器人的当前位置和速度
          odom_duration: 0.1   #从odom话题获取里程计信息的超时时间(秒)
          deadband_velocity: [0.0, 0.0, 0.0]   #定义一个“死区”(deadband),即在这个范围内的速度变化将被视为零或可忽略
          velocity_timeout: 1.0   #定义速度命令的超时时间(秒)
      
      

      不知道为什么会出现这种情况。

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