move_base
navigation的系统组成如下,move_base的地位很重要。
MoveBase的构造函数中,使用了不同的NodeHandle
,如上图看到订阅的是move_base_simaple/goal
是使用simaple_nh
之后分辨节点名称之下的topic
。订阅和发布的消息:
ros::NodeHandle nh;
vel_pub_ = nh.advertise<geometry_msgs::Twist>("cmd_vel", 1);
current_goal_pub_ = private_nh.advertise<geometry_msgs::PoseStamped>("current_goal", 0 );
ros::NodeHandle action_nh("move_base");
action_goal_pub_ = action_nh.advertise<move_base_msgs::MoveBaseActionGoal>("goal", 1);
ros::NodeHandle simple_nh("move_base_simple");
goal_sub_ = simple_nh.subscribe<geometry_msgs::PoseStamped>("goal", 1, boost::bind(&MoveBase::goalCB, this, _1));
系统状态根据两个变量表示:{state_, recovery_trigger_}
enum MoveBaseState{PLANNING, CONTROLLING, CLEARING};
enum RecoveryTrigger{PLANNING_R, CONTROLLING_R,OSCILLATION_R};
初始化了用来存储全局规划的路径序列,最终会把全局规划得到的最新路径latest_plan_
赋值给controller_plan_
传递给局部规划器。
//set up plan triple buffer
planner_p