zoukankan      html  css  js  c++  java
  • 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
    博文主要是总结自己的学习,因此有很多知识点没有提到,仅仅提了个人比较容易遗忘的或者非常重要的知识点。很多资料来源于网络和对一些课程的整理,侵权删。格式没花精力调整,望谅解。
  • 相关阅读:
    git track
    npm 升级到最新版本
    三行代码实现垂直居中和cube
    布局之定位
    MongoDB的安装问题
    正则表达式
    javascript表单验证
    Oracle中创建表,行级触发器,序列
    查找某个字符在字符串中出现的次数
    oracle表中有一列id她是自动增长的,插入一条数据时怎么取得id的值
  • 原文地址:https://www.cnblogs.com/JuiceCat/p/12394200.html
Copyright © 2011-2022 走看看