导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    为ROS navigation功能包添加自定义的全局路径规划器(Global Path Planner)

    技术交流
    ros navigation 路径规划
    4
    10
    12028
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • frank
      frank 最后由 frank 编辑

      ROS 的navigation官方功能包提供了三种全局路径规划器:carrot_planner、global_planner、navfn。我们通常使用的是navfn,如果机器人执行一些特殊任务而navfn不支持的话就需要自己写一个全局路径规划区并注册到ROS系统。
      ROS的全局路径规划器是以lib插件形式(pluginlib)存在的,通过配置move_base 中base_global_planner参数指定实际路径规划执行时采用的全局路径规划器,这种设计大大提高了navigation包的可扩展性。
      ROS官网wiki有详细的教程指导大家如何为ROS添加自定义的全局路径规划器,操作步骤挺繁琐的,在了解原理之后我们其实可以用下文的偷懒方法实现自己的全局路径规划器。主要思路是:直接拷贝一份现成的全局路径规划器代码包,将软件包中的相关名字修改成想要的,最后实现下自己的makeplan方法即可。

      1.从navigation包中拷贝carrot_planner文件夹下的所有内容到ROS源码工作目录。
      以小强ROS机器人为例:
      cd Documents/ros/src/               进入ROS源码工作目录
      cp -a  navigation/carrot_planner test_planner  拷贝一份carrot_planner代码到test_planner文件夹下,test可以改成自己想要的任何名字,这个名字即为下文咱们自定义的全局规划器
      

      2.开始修改名字,将拷贝的文件夹(test_planner)内的所有文件中的carrot字符换成test,包括文件名中的字符

      需要修改内容的文件有:
      test_planner/include/carrot_planner/carrot_planner.h
      test_planner/src/carrot_planner.cpp
      test_planner/bgp_plugin.xml
      test_planner/CMakeLists.txt
      test_planner/package.xml
      需要修改名字的文件有:
      test_planner/include/carrot_planner/carrot_planner.h
      test_planner/src/carrot_planner.cpp
      需要修改名字的文件夹有:
      include下的carrot_planner文件夹
      

      3.尝试编译

      以小强ROS机器人为例:
      cd Documents/ros/
      catkin_make  
      

      4.检查test_planner是否成功注册进ROS系统

      rospack plugins --attrib=plugin nav_core
      正常的话会返回如下内容,可以查看到test_planner
      rotate_recovery /home/xiaoqiang/Documents/ros/src/navigation/rotate_recovery/rotate_plugin.xml
      base_local_planner /home/xiaoqiang/Documents/ros/src/navigation/base_local_planner/blp_plugin.xml
      global_planner /home/xiaoqiang/Documents/ros/src/navigation/global_planner/bgp_plugin.xml
      navfn /home/xiaoqiang/Documents/ros/src/navigation/navfn/bgp_plugin.xml
      move_slow_and_clear /home/xiaoqiang/Documents/ros/src/navigation/move_slow_and_clear/recovery_plugin.xml
      dwa_local_planner /home/xiaoqiang/Documents/ros/src/navigation/dwa_local_planner/blp_plugin.xml
      clear_costmap_recovery /home/xiaoqiang/Documents/ros/src/navigation/clear_costmap_recovery/ccr_plugin.xml
      carrot_planner /home/xiaoqiang/Documents/ros/src/test_planner/bgp_plugin.xml
      test_planner /home/xiaoqiang/Documents/ros/src/ test_planner/bgp_plugin.xml
      
      5.根据自己的算法重写test_planner/src/test_planner.cpp中的makeplan方法,然后重新用catkin_make编译,至此咱们的全局路径规划器就打完收工了可以在move_base中使用了
      6.在move_base节点中使用新建立的test_planner路径规划器
      在move_base的启动launch文件节点中加入如下代码即可
      <param name="base_global_planner" value="test_planner/testPlanner"/>
      
      久安 1 条回复 最后回复 回复 引用 0
      • 久安
        久安 @frank 最后由 编辑

        @frank 局部路径规划器的编写也类似吗,想写一个人工势场的局部路径规划器麻烦吗?另外想咨询一下您知道有什么好的局部路径规划算法吗?谢谢大神,期待您的回复。

        frank 1 条回复 最后回复 回复 引用 0
        • frank
          frank @久安 最后由 编辑

          @久安 类似,很多同学在用teb规划器

          1 条回复 最后回复 回复 引用 0
          • Lee1004
            Lee1004 最后由 编辑

            大神好!请问“从navigation包中拷贝carrot_planner文件夹下的所有内容到ROS源码工作目录。”这里的navigation指的是哪里啊?我在ros系统安装目录下没有找到符合的文件内容呢

            xiaoqiang 1 条回复 最后回复 回复 引用 0
            • xiaoqiang
              xiaoqiang @Lee1004 最后由 编辑

              @Lee1004 源码在这里https://github.com/ros-planning/navigation.git

              Lee1004 2 条回复 最后回复 回复 引用 0
              • Lee1004
                Lee1004 @xiaoqiang 最后由 编辑

                @xiaoqiang 谢大神!

                1 条回复 最后回复 回复 引用 0
                • Lee1004
                  Lee1004 @xiaoqiang 最后由 编辑

                  @xiaoqiang 大神,我实现了上述方法之后,还有一个问题,就是我发现调用test_planner的时候,在rviz里面move_base只发布了局部规划器的path话题,global_planner的path话题找不到。但我通过在test_planner的.cpp文件中的makeplan()中添加debug输出标志,发现test_planner确实调用成功了。所以请教为什么会出现我所述的原因呢?

                  xiaoqiang 1 条回复 最后回复 回复 引用 0
                  • xiaoqiang
                    xiaoqiang @Lee1004 最后由 xiaoqiang 编辑

                    @Lee1004 这个全局规划器可能太简单了,没有发布global plan的代码,只是实现了makeplan的service.用rqt_graph分析一下节点话题数据流

                    Lee1004 1 条回复 最后回复 回复 引用 0
                    • Lee1004
                      Lee1004 @xiaoqiang 最后由 编辑

                      @xiaoqiang 我也觉得应该是这个算法里面没有发布movebase/GlobalPlanner/plan,但是movebase/DWAPlannerROS/global_plan是可以找到的,我个人通过其他算法的仿真试验发现其实这两话题的内容其实是一样的,前者的结果实际就传递给后者作为全局参考了,不知道对不对

                      xiaoqiang 1 条回复 最后回复 回复 引用 0
                      • xiaoqiang
                        xiaoqiang @Lee1004 最后由 xiaoqiang 编辑

                        @Lee1004 dwa是通过makeplan这个service由move_base传给它的,正因为如此,所以这个发布就可有可无,只是一个显示用途

                        1 条回复 最后回复 回复 引用 0
                        • 1 / 1
                        • First post
                          Last post
                        Copyright © 2015-2023 BlueWhale community