zoukankan      html  css  js  c++  java
  • ros navigation stack 各个包的作用

    nav_core

    该包定义了整个导航系统关键包的接口函数,包括base_global_planner, base_local_planner以及recovery_behavior的接口。
    里面的函数全是虚函数,所以该包只是起到规范接口的作用,真正功能的
    实现在相应的包当中。

    global_planner和navfn

    这两个包干的事情是一样的,都是为实现目标点与当前点之间的全局路径规划,内部都有Dijkstra算法和A*导航算法的实现,
    ROS系统默认采用的是navfn。

    base_local_planner

    完成局部窗口内的路径规划任务,机器人行动速度的具体生成在此包当中完成。目前有两种局部路径规划算法实现,
    一是航迹推算法(TrajectoryROS),一是动态窗口法(DWA),
    该包内部的默认实现是航迹推算法,但是留出了DWA的定义接口,DWA的实现在dwa_local_planner中。

    map_server

    主要功能是读取pgm和yaml配套的地图文件,并将之转换到/map话题发送出来(比如rviz中显示的地图就是订阅了该话题), 
    另外还提供地图保存等增值服务 。

    costmap_2d

    以层的概念来组织图层,用户可以根据需要自己配置,默认的层有static_layer(通过订阅map_server的/map主题)来生成, 
    obstacle_layer根据传感器获得的反馈来生成障碍物图层, inflation_layer则是将前两个图层的信息综合进行缓冲区扩展。
    该包可进行动态窗口的生成(比如base_local_planner中使用的就是动态的局部窗口地图)也可以生成静态地图
    (比如global_planner中使用的就是全局静态地图)。(有待验证的疑问,是否静态地图中obstacle_layer不起作用,而动态地图中static_layer不起作用)。
    此外,该包还在实时发送自己的地图信息,通过nav_msgs::OccupancyGrid发送消息给rviz。所以可以仿照该写法来发送自己想要的数据到rviz中去。

    rotate_recovery和clear_costmap_recovery

    这两个包都继承自nav_core中定义的recovery_behavior类, 具体实现的是当导航发现无路可走的时候,
    机器人在原地打转转并清理(更新更恰当些)周围障碍物信息看是否有动态障碍物运动开,
    能找到路继续走。在move_base当中,默认使用的recovery_behavior是这样的,先进行一次旋转,然后进行一次小半径的障碍物更新,然后再进行一次旋转,
    再进行一次大范围的障碍物更新,每进行一次recovery_behavior,都会重新尝试进行一次局部寻路,如果没找到,
    才会再执行下一个recovery_behavior。这两个包的代码非常简单,不看也不会影响理解偏差,
    所以可以不用浪费时间看,当然因为简单要看也是分分钟的事。

    move_base

    这个是整个navigation stack当中进行宏观调控的看得见的手。
    它主要干的事情是这样的: 维护一张全局地图(基本上是不会更新的,一般是静态costmap类型),维护一张局部地图(实时更新,costmap类型),
    维护一个全局路径规划器global_planner完成全局路径规划的任务, 维护一个局部路径规划器base_local_planner完成局部路径规划的任务。
    然后提供一个对外的服务,负责监听nav_msgs::goal类型的消息,然后调动全局规划器规划全局路径,再将全局路径送进局部规划器,
    局部规划器结合周围障碍信息(从其维护的costmap中查询),全局路径信息,目标点信息采样速度并评分获得最高得分的轨迹(即是采样的最佳速度),
    然后返回速度值,由move_base发送Twist类型的cmd_vel消息上,从而控制机器人移动。完成导航任务。

  • 相关阅读:
    after change the pltask.cfg
    C++ map的基本操作和用法
    const char * char * const 以及char const *
    遇到segmentation fault 错误
    编译和链接通过生成可执行文件,但运行时找不到动态库
    Invalid Issuer
    数据库的相关操作
    Go项目实战:打造高并发日志采集系统(六)
    Go项目实战:打造高并发日志采集系统(五)
    Go项目实战:打造高并发日志采集系统(四)
  • 原文地址:https://www.cnblogs.com/lvchaoshun/p/7634916.html
Copyright © 2011-2022 走看看