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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM