DWA Local Planner这部分是属于Local planner,在Navigation中有两个包:
dwa_local_planner
和base_local_planner
查看了dwa_local_planner
,发现其实际是调用的base_local_planner
中的函数,而base_local_planner
中包含了两种planner :DWA
或者Trajectory Rollout approach
。所以结论就是,只需要搞清楚base_local_planner
的执行就OK。
base_local_planner
package 实际是继承于BaseLocalPlanner
:
class TrajectoryPlannerROS : public nav_core::BaseLocalPlanner
对于基类接口定义:
namespace nav_core {
class BaseLocalPlanner{
public:
virtual bool computeVelocityCommands(geometry_msgs::Twist& cmd_vel) = 0;
virtual bool isGoalReached() = 0;
virtual bool setPlan(const std::vector<geometry_msgs::PoseStamped>& plan) = 0;
virtual void initialize(std::string name, tf::TransformListener* tf, costmap_2d::Costmap2DROS* costmap_ros) = 0;
virtual ~BaseLocalPlanner(){}
protected:
BaseLocalPlanner(){}
};
};
因此,派生类必须实现基类的接口。类TrajectoryPlannerROS
的方法:
在成员变量中,重要的几个变量如下:
WorldModel* world_model_; ///< @brief The world model that the controller will use
TrajectoryPlanner* tc_; ///< @brief The trajectory controller
costmap_2d::Costmap2DROS* costmap_ros_;