Navigation(二)nav_core源码详解
一、写的不错的博客
这篇文章简单梳理了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
博文主要是总结自己的学习,因此有很多知识点没有提到,仅仅提了个人比较容易遗忘的或者非常重要的知识点。很多资料来源于网络和对一些课程的整理,侵权删。格式没花精力调整,望谅解。