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
博文主要是总结自己的学习,因此有很多知识点没有提到,仅仅提了个人比较容易遗忘的或者非常重要的知识点。很多资料来源于网络和对一些课程的整理,侵权删。格式没花精力调整,望谅解。
原文地址:https://www.cnblogs.com/JuiceCat/p/12394200.html