ROS Navigation global_planner框架解析
规划的路径都是建立在costmap之上的,所以先讲一下必须知道的costmap的知识,实际代价地图存储在这里unsigned char* costmap_;每个字符八位0~255即cost值。把实际地图根据分辨率映射成栅格地图,依次给栅格编号,如下图所示
维护工作是通过以下几个函数进行:
voidmapToWorld(unsigned int mx, unsigned int my, double& wx, double& wy)将map上的坐标(mx,my)转化成world上的坐标(wx,wy)
boolworldToMap(double wx, double wy, unsigned int& mx, unsigned int& my)const; 将world上的坐标(wx,wy)转化成map上的坐标(mx,my)
inline unsignedint getIndex(unsigned int mx, unsigned int my) const根据map上的坐标得到栅格编号index。
源码解读这篇文章讲的比较好http://blog.****.net/u013158492/article/details/50504963大家可以参考,我就不再重复,主要讲一下我看源码总结的框架,如果大家跟着这个框架看源码的话可能会看的比较快。其中use_dijkstra,use_quadratic ,use_grid_path是global_planner的关键配置参数。A*与DijKstra算法的讲解http://blog.****.net/kongbu0622/article/details/1871520
A*这个函数很重要,我写了注释,大家可以看看
如有错误请指出