unexpected robot behaviour with navigationstack
Hello everybody,
i have some problems again and hope someone can help me. Following scenario:
- I have a robot platform, diff-drive with laser scanner mounted pointing forward
- i have already recorded a map with slam (g-mapping i guess was the one i used in the end)
- i have set up the navigation-stack with move_base like described here
- i can see everything in rviz (map, cost map, base, laser scans)
- i can set a goal in rviz and (most of the time) get a nice looking path
I'm pretty sure the move_base package is quiet powerful, but now comes the weird thing: the robot doesn't follow the path at all. It seems like it is ignoring the path at all and trying to find a way to the goal of it's own with horrible results. Something like:
- turning 180deg and driving in the opposite direction. Or,
- instead of just passing straight through some obstacles in front of it, turn 270deg and than heading directly towards one of them. Or
- ignoring the curve in the plan at the very beginning and just drive the first 1.5meters straight, than make the 90deg turn that has summed up in order to follow the rest of the path
One idea i had is that this might be the escape sequences that the move_base-node provides. So i tried to switch them off. The base is still doing point turns and also driving backwards.
So, before i start programming my own node that takes the path (list of stamped points) and calculate the velocity commands for x/theta, is anybody here experienced enough for being able to make a guess based on the "files" above what might cause this behavior?
Thanks for everybody taking the time for reading this.
Lets start with the shortened .launch file:
<launch>
<include file ... " /> <!-- joystick, motordriver, odometrie, inverse kinematik -->
<node pkg="map_server" ... /> <!-- load saved map -->
<node pkg="amcl" ... /> <!-- correct odom errors -->
<node pkg="move_base" type="move_base" name="move_base" respawn="false" output="screen">
<rosparam file="$(find nav_config)/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find nav_config)/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find nav_config)/local_costmap_params.yaml" command="load" />
<rosparam file="$(find nav_config)/global_costmap_params.yaml" command="load" />
<rosparam file="$(find nav_config)/base_local_planner_params.yaml" command="load" />
<rosparam file="$(find nav_config)/move_base_params.yaml" command="load" />
</node>
<param name="robot_description" ... />
<node name="robot_state_publisher" ... />
</launch>
And here are the .yaml files - unfortunately they are all separate in the tutorial and i don't know if i can mix them all together in one big file (especially since two of them are loaded with a name space tag):
[costmap_common_params.yaml]
map_type: costmap
observation_sources: laser_scan
transform_tolerance: 0.25
obstacle_range: 5.0
raytrace_range: 5.0
inflation_radius: 0.25
xy_goal_tolerance: 0.05
yaw_goal_tolerance: 0.25
footprint: [
[0.50, 0.35],
[-0.30, 0.35],
[-0.30, -0.35],
[0.50, -0.35]
]
laser_scan: {
sensor_frame: laser_link,
data_type: LaserScan,
topic: /mp470/laser_scan,
marking: true,
clearing: true
}
[local_costmap_params.yaml]
local_costmap:
global_frame: odom
robot_base_frame: base_link
update_frequency: 5.0
publish_frequency ...
Alot of things don't make alot of sense here. Your max, min velocity and acc are same. you width or height defined for global map, lookup what all these params do and change them accordingly, and if it still shows weird behaviour then update the question.
min/max are set to the same value by purpose. By that i want to make sure that i always know, how fast the robot is. It's simply just allowed to drive with 0.1m/s . Since the max vel is so slow the acc is set to the same value (higher wouldn't have made sense in my mind).