在gazebo仿真nav2导航 。遇到大转弯时车会卡住不动
-
这个是我的配置文件:
amcl:
ros__parameters:
use_sim_time: True
alpha1: 0.2
alpha2: 0.2
alpha3: 0.2
alpha4: 0.2
alpha5: 0.2
base_frame_id: "base_link"
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: scanamcl_map_client:
ros__parameters:
use_sim_time: Trueamcl_rclcpp_node:
ros__parameters:
use_sim_time: Truebt_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
# '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_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_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_drive_on_heading_cancel_bt_nodebt_navigator_rclcpp_node:
ros__parameters:
use_sim_time: Truecontroller_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.12 min_vel_y: 0.0 max_vel_x: 0.15 max_vel_y: 0.0 max_vel_theta: 0.30 # 修改最大角速度 min_speed_xy: 0.0 max_speed_xy: 0.22 min_speed_theta: 0.0 acc_lim_x: 1.0 acc_lim_y: 0.0 acc_lim_theta: 1.0 # 修改角速度加速度限制 decel_lim_x: -2.5 decel_lim_y: 0.0 decel_lim_theta: -1.6 # 修改角速度减速度限制 vx_samples: 30 # 增加线速度样本数量 vy_samples: 5 vtheta_samples: 20 sim_time: 3.0 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.01 # 减小与障碍物距离的权重 PathAlign.scale: 48.0 # 增加与路径对齐的权重 PathAlign.forward_point_distance: 0.1 GoalAlign.scale: 36.0 # 增加与目标对齐的权重 GoalAlign.forward_point_distance: 0.1 PathDist.scale: 48.0 # 增加路径距离的权重 GoalDist.scale: 36.0 # 增加目标距离的权重 RotateToGoal.scale: 32.0 RotateToGoal.slowing_factor: 5.0 RotateToGoal.lookahead_time: -1.0
controller_server_rclcpp_node:
ros__parameters:
use_sim_time: Truelocal_costmap:
local_costmap:
ros__parameters:
update_frequency: 15.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.12
plugins: ["static_layer", "obstacle_layer", "voxel_layer", "inflation_layer"]
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer"
cost_scaling_factor: 3.0
inflation_radius: 0.25
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
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
local_costmap_client:
ros__parameters:
use_sim_time: True
local_costmap_rclcpp_node:
ros__parameters:
use_sim_time: Trueglobal_costmap:
global_costmap:
ros__parameters:
update_frequency: 10.0
publish_frequency: 10.0
global_frame: map
robot_base_frame: base_link
use_sim_time: True
robot_radius: 0.10
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: Truemap_server:
ros__parameters:
use_sim_time: True
yaml_filename: "turtlebot3_world.yaml"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: Trueplanner_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: trueplanner_server_rclcpp_node:
ros__parameters:
use_sim_time: Truesmoother_server:
ros__parameters:
use_sim_time: True
smoother_plugins: ["simple_smoother"]
simple_smoother:
plugin: "nav2_smoother::SimpleSmoother"
tolerance: 1.0e-10
max_its: 1000
do_refinement: Truebehavior_server:
ros__parameters:
costmap_topic: local_costmap/costmap_raw
footprint_topic: local_costmap/published_footprint
cycle_frequency: 10.0
behavior_plugins: ["spin", "backup", "drive_on_heading", "wait"]
spin:
plugin: "nav2_behaviors/Spin"
backup:
plugin: "nav2_behaviors/BackUp"
drive_on_heading:
plugin: "nav2_behaviors/DriveOnHeading"
wait:
plugin: "nav2_behaviors/Wait"
global_frame: odom
robot_base_frame: base_link
transform_tolerance: 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.2robot_state_publisher:
ros__parameters:
use_sim_time: Truewaypoint_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 -
在Gazebo中使用Nav2进行导航时遇到大转弯时车辆卡住的问题,通常与多个因素有关,包括路径规划、局部规划器的参数设置、机器人的动力学模型、以及仿真环境的具体设置等。以下是一些可能的解决步骤和调整建议:
-
检查路径规划器参数:
- 确保
GridBased
规划器(或其他你使用的规划器)的参数适合你的环境和机器人。特别是tolerance
参数,它决定了规划器在计算路径时的精度。 - 检查是否启用了
allow_unknown
,这允许规划器在未知空间内规划路径,但可能会引入风险。
- 确保
-
调整局部规划器(DWB)参数:
- 角速度和加速度限制:你已经设置了这些参数,但可能需要进一步调整以适应大转弯。增加
max_vel_theta
、acc_lim_theta
和decel_lim_theta
可能有助于改善转弯性能。 - 批评者(Critics)的权重:你已经设置了不同批评者的权重,但可能需要进一步调整这些权重来优化在转弯时的行为。特别是
RotateToGoal
、GoalAlign
和PathAlign
的权重可能需要调整。 - 轨迹评估:确保
short_circuit_trajectory_evaluation
设置为True
,这有助于避免生成无效的轨迹。
- 角速度和加速度限制:你已经设置了这些参数,但可能需要进一步调整以适应大转弯。增加
-
检查成本地图设置:
- 确保局部和全局成本地图的分辨率、大小和其他参数适合你的机器人和环境。
- 检查
inflation_layer
的inflation_radius
是否设置得过大,这可能会导致在转弯时成本地图中的障碍物看起来更远,从而影响路径选择。
-
机器人动力学模型:
- 确保你的机器人动力学模型(在仿真中)与实际情况相符。特别是在转弯时,摩擦力和转向能力可能对性能有显著影响。
-
仿真环境:
- 检查仿真环境中的障碍物和地图是否准确反映了真实环境。
- 尝试在仿真中调整环境设置,例如减少障碍物或改变地图的布局,以观察是否对转弯性能有影响。
-
调试和日志:
- 启用详细的日志记录,以便更好地了解机器人在转弯时发生了什么。检查是否有任何错误消息或警告。
- 使用RViz等工具可视化成本地图、规划路径和机器人状态,以便更直观地了解问题所在。
-
尝试不同的局部规划器:
- 如果DWB不满足你的需求,尝试使用其他局部规划器,如
voxel_grid_planner
或timed_elastic_band_planner
,看看是否有所改善。
- 如果DWB不满足你的需求,尝试使用其他局部规划器,如
-
社区和文档:
- 查阅Nav2的官方文档和社区论坛,看看是否有其他人遇到了类似的问题,并找到了解决方案。
通过上述步骤,你应该能够诊断并解决在Gazebo中使用Nav2进行大转弯时车辆卡住的问题。如果问题仍然存在,可能需要更深入地分析具体的机器人模型和仿真环境设置。
以上为生成回答,仅供参考~
-
-
-
大佬 有解决方案吗 我也遇到了相同的问题