一、寫的不錯的博客
這篇文章簡單梳理了nav_core和move_base的關系,https://blog.csdn.net/u013834525/article/details/85545321
二、base_global_planner.h
1 #ifndef NAV_CORE_BASE_GLOBAL_PLANNER_H 2 #define NAV_CORE_BASE_GLOBAL_PLANNER_H 3 4 #include <geometry_msgs/PoseStamped.h> 5 #include <costmap_2d/costmap_2d_ros.h> 6 7 namespace nav_core { 8 //全局規划器的接口 9 class BaseGlobalPlanner{ 10 public: 11 /** 12 * @brief 給個目標點,規划個路徑 13 * @param start 起始點 14 * @param goal 目標點 15 * @param plan 路徑 16 * @return 路徑被找到返回true 17 */ 18 virtual bool makePlan(const geometry_msgs::PoseStamped& start, 19 const geometry_msgs::PoseStamped& goal, std::vector<geometry_msgs::PoseStamped>& plan) = 0; 20 21 /** 22 * @brief 給個目標點,規划個路徑 23 * @param start 起始點 24 * @param goal 目標點 25 * @param plan 路徑 26 * @param cost 路徑計算出的代價 27 * @return 路徑被找到就返回true 28 */ 29 virtual bool makePlan(const geometry_msgs::PoseStamped& start, 30 const geometry_msgs::PoseStamped& goal, std::vector<geometry_msgs::PoseStamped>& plan, 31 double& cost) 32 { 33 cost = 0; 34 return makePlan(start, goal, plan); 35 } 36 37 /** 38 * @brief 全局規划器的初始化函數 39 * @param name 規划器的名字 40 * @param costmap_ros 指向規划所使用的指向costmap的指針 41 */ 42 virtual void initialize(std::string name, costmap_2d::Costmap2DROS* costmap_ros) = 0; 43 44 //虛析構函數 45 virtual ~BaseGlobalPlanner(){} 46 47 protected: 48 BaseGlobalPlanner(){} 49 }; 50 }; // namespace nav_core 51 52 #endif // NAV_CORE_BASE_GLOBAL_PLANNER_H
三、base_local_planner.h
1 #ifndef NAV_CORE_BASE_LOCAL_PLANNER_H 2 #define NAV_CORE_BASE_LOCAL_PLANNER_H 3 4 #include <geometry_msgs/PoseStamped.h> 5 #include <geometry_msgs/Twist.h> 6 #include <costmap_2d/costmap_2d_ros.h> 7 #include <tf2_ros/buffer.h> 8 9 namespace nav_core { 10 /** 11 * @class BaseLocalPlanner 12 * @brief 局部規划接口 13 */ 14 class BaseLocalPlanner{ 15 public: 16 /** 17 * @brief 被傳入機器人當前位置、方向和速度,計算相對於base坐標系的速度 18 * @param cmd_vel 機器人的速度 19 * @return 有速度指令,則為true 20 */ 21 virtual bool computeVelocityCommands(geometry_msgs::Twist& cmd_vel) = 0; 22 23 /** 24 * @brief 檢查局部規划器的目標位姿是否到達 25 * @return 如果到達了返回true 26 */ 27 virtual bool isGoalReached() = 0; 28 29 /** 30 * @brief 設置局部規划器正在執行的路徑 31 * @param plan 即將被傳遞給局部規划器的路徑 32 * @return 路徑被成功標記則返回true 33 */ 34 virtual bool setPlan(const std::vector<geometry_msgs::PoseStamped>& plan) = 0; 35 36 /** 37 * @brief 構建局部規划器 38 * @param name 局部規划器的名稱 39 * @param tf tf的指針 40 * @param costmap_ros 局部規划器的costmap 41 */ 42 virtual void initialize(std::string name, tf2_ros::Buffer* tf, costmap_2d::Costmap2DROS* costmap_ros) = 0; 43 44 //虛析構函數 45 virtual ~BaseLocalPlanner(){} 46 47 protected: 48 BaseLocalPlanner(){} 49 }; 50 }; // namespace nav_core 51 52 #endif // NAV_CORE_BASE_LOCAL_PLANNER_H
四、parameter_magic.h
1 #ifndef NAV_CORE_PARAMETER_MAGIC_H 2 #define NAV_CORE_PARAMETER_MAGIC_H 3 4 namespace nav_core 5 { 6 7 /** 8 * @brief 加載參數服務器 9 * @param nh 加載參數服務器的句柄 10 * @param current_name 當前參數名 11 * @param old_name 已經棄用的參數名 12 * @param default_value 如果參數都不存在,則返回此值 13 * @return 參數值或者默認值 14 */ 15 template<class param_t> 16 param_t loadParameterWithDeprecation(const ros::NodeHandle& nh, const std::string current_name, 17 const std::string old_name, const param_t& default_value) 18 { 19 param_t value; 20 if (nh.hasParam(current_name)) 21 { 22 nh.getParam(current_name, value); 23 return value; 24 } 25 if (nh.hasParam(old_name)) 26 { 27 ROS_WARN("Parameter %s is deprecated. Please use the name %s instead.", old_name.c_str(), current_name.c_str()); 28 nh.getParam(old_name, value); 29 return value; 30 } 31 return default_value; 32 } 33 34 //如果參數以不支持的名稱出現則警告。參數服務器將專門加載不能真正使用loadParamWithDeprecation的動態配置 35 void warnRenamedParameter(const ros::NodeHandle& nh, const std::string current_name, const std::string old_name) 36 { 37 if (nh.hasParam(old_name)) 38 { 39 ROS_WARN("Parameter %s is deprecated (and will not load properly). Use %s instead.", old_name.c_str(), current_name.c_str()); 40 } 41 } 42 43 } // namespace nav_core 44 45 #endif // NAV_CORE_PARAMETER_MAGIC_H
五、recovery_behavior.h
1 #ifndef NAV_CORE_RECOVERY_BEHAVIOR_H 2 #define NAV_CORE_RECOVERY_BEHAVIOR_H 3 4 #include <costmap_2d/costmap_2d_ros.h> 5 #include <tf2_ros/buffer.h> 6 7 namespace nav_core { 8 //為導航的Recovery指令提供接口,必須遵循 9 class RecoveryBehavior{ 10 public: 11 /** 12 * @brief 初始化函數 13 * @param tf 指向tf監聽者的指針 14 * @param global_costmap 指向全局costmap的指針 15 * @param local_costmap 指向局部costmap的指針 16 */ 17 virtual void initialize(std::string name, tf2_ros::Buffer* tf, costmap_2d::Costmap2DROS* global_costmap, costmap_2d::Costmap2DROS* local_costmap) = 0; 18 19 //運行Recovery指令 20 virtual void runBehavior() = 0; 21 22 //虛析構函數 23 virtual ~RecoveryBehavior(){} 24 25 protected: 26 RecoveryBehavior(){} 27 }; 28 }; // namespace nav_core 29 30 #endif // NAV_CORE_RECOVERY_BEHAVIOR_H