本文主要是介绍ROS naviagtion analysis: move_base,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这是navigation的第一篇文章,主要通过分析ROS代码级实现,了解navigation。本文从move_base入手。
机器人导航主要框架如图:
Navigation Stack主要组成部分:move_base:
用户调用movebase是通过传入带tf参数的构造函数:
move_base::MoveBase move_base( tf );
以下分析move_base的构造函数:
MoveBase::MoveBase(tf::TransformListener& tf):tf_(tf),as_(NULL),planner_costmap_ros_(NULL), controller_costmap_ros_(NULL),bgp_loader_("nav_core", "nav_core::BaseGlobalPlanner"),blp_loader_("nav_core", "nav_core::BaseLocalPlanner"), recovery_loader_("nav_core", "nav_core::RecoveryBehavior"),planner_plan_(NULL), latest_plan_(NULL), controller_plan_(NULL),runPlanner_(false), setup_(false), p_freq_change_(false), c_freq_change_(false), new_global_plan_(false) `
这部分是构造函数的初始化列表,可以看到几个重要的参数:
planner_costmap_ros_(NULL), controller_costmap_ros_(NULL),bgp_loader_("nav_core", "nav_core::BaseGlobalPlanner"),blp_loader_("nav_core", "nav_core::BaseLocalPlanner"), recovery_loader_("nav_core", "nav_core::RecoveryBehavior")
planner_costmap_ros_是用于全局导航的地图,controller_costmap_ros_ 是局部导航用的地图,地图类型为经过ROS封装的costmap_2d::Costmap2DROS* 。关于地图类型的分析会在接下来的文章中进行。
bgp_loader_ 是global planner, blp_loader_ 是local planner。二者的声明为:
pluginlib::ClassLoader<nav_core::BaseGlobalPlanner> bgp_loader_;
pluginlib::ClassLoader<nav_core::BaseLocalPlanner> blp_loader_;
是属于一个模板类ClassLoader,实例化为BaseGlobalPlanner或者BaseLocalPlanner。关于pluginlib的分析也有在接下来的文章中进行。
bgp_loader_ 和 blp_loader_ 的作用是为以下类成员提供实例化:
boost::shared_ptr<nav_core::BaseLocalPlanner> tc_;boost::shared_ptr<n
这篇关于ROS naviagtion analysis: move_base的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!