move_base corrupt linked list
I have the navigation stack working, but the move_base node is consistently crashing. The behavior is very consistent; eventually it crashes with the same error every time. The amount of time it takes to crash does vary. I'm going to post this same question on the
Here's the exact error, each time corresponding to the following warning:
[ WARN] [1466704185.100935930]: InflationLayer::updateCosts(): seen_ array size is wrong
and the error:
*** Error in `/opt/ros/indigo/lib/move_base/move_base': corrupted double-linked list: 0x00000000029ad9b0 ***
[move_base-1] process has died [pid 8680, exit code -6, cmd /opt/ros/indigo/lib/move_base/move_base cmd_vel:=/mobility_base/cmd_vel odom:=/odometry/filtered map:=/rtabmap/proj_map __name:=move_base __log:=/home/mb/.ros/log/4d826ab2-396a-11e6-ad82-b8aeed747f2b/move_base-1.log].
log file: /home/mb/.ros/log/4d826ab2-396a-11e6-ad82-b8aeed747f2b/move_base-1*.log
all processes on machine have died, roslaunch will exit
Unfortunately, the log file isn't actually written, so I haven't been able to get any useful information from there. I've done some googling and the only thing I can turn up is line 192 of the source of costmap_2d's inflation_layer.cpp ( http://docs.ros.org/jade/api/costmap_... ). So it seems deleting the seen_ array of costmap_2d's inflation layer is causing a corruption of a linked list somewhere else. What's odd is the warning doesn't always cause the error. I'm thinking it might be cause by how rtabmap is updating proj_map, but I'm somewhat shooting in the dark. Any insight would be helpful.
Here's my basic robot setup. A kinectv1 mounted on the robot with rtabmap_ros for odometry and mapping. The move_base package uses the following:
base_local_planner_params.yaml
TrajectoryPlannerROS:
acc_lim_x: 1.0
acc_lim_y: 1.0
acc_lim_theta: 2.0
max_vel_x: 0.4
min_vel_x: 0.05
escape_vel: -0.05
max_vel_theta: 0.5
min_vel_theta: -0.5
min_in_place_vel_theta: 0.01
holonomic_robot: true
y_vels: [-0.3, -0.05, 0.05, 0.3]
xy_goal_tolerance: 0.03
yaw_goal_tolerance: 0.05
latch_xy_goal_tolerance: true
# make sure that the minimum velocity multiplied by the sim_period is less than twice the tolerance on a goal. Otherwise, the robot will prefer to rotate in place just outside of range of its target position rather than moving towards the goal.
sim_time: 1.5 # set between 1 and 2. The higher he value, the smoother the path (though more samples would be required).
sim_granularity: 0.025
angular_sim_granularity: 0.025
vx_samples: 12
vtheta_samples: 20
meter_scoring: true
pdist_scale: 0.7 # The higher will follow more the global path.
gdist_scale: 0.8
occdist_scale: 0.03
publish_cost_grid_pc: false
# move_base controller_frequency
controller_frequency: 5.0
# global planner
NavfnROS:
allow_unknown: true
visualize_potential: false
costmap_common_params.yaml
footprint: [[0.42, -0.43], [0.42, 0.43], [-0.42, 0.43], [-0.42, -0.43]]
footprint_padding: 0.02
inflation_layer:
inflation_radius: 0.02
transform_tolerance: 2
obstacle_layer:
obstacle_range: 3.0
raytrace_range: 3.5
track_unknown_space: false
observation_sources: point_cloud_sensor
point_cloud_sensor: {
sensor_frame: /camera_link,
data_type: PointCloud2,
topic: /rtabmap/cloud_map,
expected_update_rate: 1.0,
max_obstacle_height: 3.0,
min_obstacle_height: 0.1,
marking: true,
clearing: true
}
global_costmap_params.yaml
global_costmap:
global_frame: /map
robot_base_frame: base_footprint
update_frequency: 0.5
publish_frequency ...