stuck robot problem
Hi, I'm running navigation stack with a rosbot, my problem is that when my robot is close to the obstacles, it stops. This is normal, but the recovery behaviours doesn't start, this is not normal. If I go to the robot, it detects me, the local costmap updates, and it comes move again.
TrajectoryPlannerROS:
acc_lim_x: 1.0
acc_lim_y: 1.0
acc_lim_theta: 0.6
max_vel_x: 0.35
max_vel_theta: 0.5
min_in_place_vel_theta: 0.3
escape_vel: -0.3
xy_goal_tolerance: 0.10
yaw_goal_tolerance: 0.25
path_distance_bias: 40.0
stop_time_buffer: 0.5
holonomic_robot: false
meter_scoring: true
sim_time: 2.0
global_frame_id: map
controller_patience: 5.0
planner_frequency: 2.0
Common params.yaml
obstacle_range: 2.5
raytrace_range: 3.0
footprint: [[0.10,0.12],[0.10,-0.12],[-0.10,-0.12],[-0.10,0.12]]
inflation_radius: 0.4
resolution: 0.1
use_dijkstra: false
observation_sources: laser_scan_sensor
laser_scan_sensor: {sensor_frame: laser_frame, data_type: LaserScan, topic: scan, clearing: true, marking: true}
local_costmap:
update_frequency: 5.0
publish_frequency: 1.0
static_map: false
rolling_window: true
height: 5.0
width: 5.0
resolution: 0.1
global_frame: odom
robot_base_frame: base_link
publish_cost_grid: true
Sometimes, after a long time stopped, it comes move again.
Have you set the recovery_behaviour parameters to true in move_base.launch? They are enabled by default I think but you should double check that
Yes, when I go to the robot, the costmap marks me and then the recovery behaviour starts. It seems like the robot doesn't know when it is stuck until the cost arround it are too high.
I now find that the move_base is sending 0.0 speeds to the robot when it seems stuck, 0.0 speed is a valid speed command, this prevent the controller enter in the recovery behaviours because it's receiving valid commands. Is this correct?
move_base
will invoke the recovery behaviors on three conditions: An oscillation was discovered, no global plan was received for some amount of time, or the local planner failed to find a valid velocity command for some amount of time. Are you experiencing any of these cases?Yes and no at the same time. The last case, "the local planner failed to find a valid velocity command for some amount of time" doesn't break because the velocity command (0.0 0.0 0.0) is valid, but it makes the robot stopped at infinite time.
The strange thing is when I go to the robot and it detects me like an obstacle, it moves again.
Maybe the 0 velocities somehow count as oscillation. Did you try setting the oscillation_timeout to some value?
Also the oscillation_distance must not be 0 since it will reset the oscillation_timeout. Try with timeout of 2-3 secs and distance of 0.5 m
OK, thanks, I will try this.