<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 10.2 move_base ## 10.2.1 move_base與插件 move_base算得上是Navigation中的核心節點,之所以稱之為核心,是因為它在導航的任務中處于支配地位,其他的一些package都是它的**插件**。 來看這張圖 ![slam_gmapping](https://img.kancloud.cn/b9/a7/b9a74c7ae72f898a1f682c40214f7274_1495x774.jpg) move_base要運行起來,需要選擇好插件,包括三種插件:`base_local_planner`、`base_global_planner`和`recovery_behavior`,這三種插件都得指定,否則系統會指定默認值。 Navigation為我們提供了不少候選的插件,可以在配置move_base時選擇。 ### base_local_planner插件: * base_local_planner: 實現了Trajectory Rollout和DWA兩種局部規劃算法 * dwa_local_planner: 實現了DWA局部規劃算法,可以看作是base_local_planner的改進版本 ### base_global_planner插件: * parrot_planner: 實現了較簡單的全局規劃算法 * navfn: 實現了Dijkstra和A*全局規劃算法 * global_planner: 重新實現了Dijkstra和A*全局規劃算法,可以看作navfn的改進版 ### recovery_behavior插件: * clear_costmap_recovery: 實現了清除代價地圖的恢復行為 * rotate_recovery: 實現了旋轉的恢復行為 * move_slow_and_clear: 實現了緩慢移動的恢復行為 除了以上三個需要指定的插件外,還有一個costmap插件,該插件默認已經選擇好,無法更改。 以上所有的插件都是繼承于`nav_core`里的接口,`nav_core`屬于一個接口package,它只定義了三種插件的規范,也可以說定義了三種接口類,然后分別由以上的插件來繼承和實現這些接口。因此如果你要研究路徑規劃算法,不妨研究一下`nav_core`定義的路徑規劃工作流程,然后仿照`dwa_local_planner`或其他插件來實現。 除了以上三個需要指定的插件外,還有一個**costmap**插件,該插件默認已經選擇好,默認即為**costmap_2d**,不可更改,但costmap_2d提供了不同的Layer可以供我們設置,在9.3節我們會進行介紹。 在這里**插件**的概念并不是我們抽象的描述,而是在ROS里catkin編譯系統能夠認出的,并且與其他節點能夠耦合的**C++庫**,插件是可以動態加載的類,也就是說插件不需要提前鏈接到ROS的程序上,只需在運行時加載插件就可以調用其中的功能。 具體關于插件的介紹,有興趣請看http://wiki.ros.org/pluginlib,本書不做過多介紹。 ## 10.2.2 插件選擇(參數) 既然我們知道了move_base具體的一些插件,那如何來選擇呢?其實非常簡單。在move_base的參數設置里可以選擇插件。 move_base的參數包括以下內容: | 參數 | 默認值 | 功能 | | :---: | :---: | :---: | | ~base_global_planner | navfn/NavfnROS | 設置全局規劃器 | | ~base_local_planner | base_local_planner/TrajectoryPlannerROS| 設置局部規劃器 | | ~recovery_behaviors | [{name: conservative_reset, type: clear_costmap_recovery/ClearCostmapRecovery}, {name: rotate_recovery, type: rotate_recovery/RotateRecovery}, {name: aggressive_reset, type: clear_costmap_recovery/ClearCostmapRecovery}] | 設置恢復行為| |... | ... | ... | 除了這三個選擇插件的參數,還有控制頻率、誤差等等參數。 具體請看http://wiki.ros.org/move_base介紹。 在ROS-Academy-for-Beginners的代碼中的`navigation_sim_demo`例子中,由于要配置的參數太多,通常會將配置寫在一個yaml文件中,我們用`param/move_base_params.yaml`來保存以上參數。而關于一些具體插件,比如`dwa_local_planner`則也會創建一個文件`param/dwa_local_planner.yaml`來保存它的設置。 ## 10.2.3 Topic與Service move_base輸入輸出的Topic在9.1節已經做了介紹,這里不再贅述。 move_base包含的Service包括: * make_plan: nav_msgs/GetPlan類型,請求為一個目標點,響應為規劃的軌跡,但不執行該軌跡。 * clear_unknown_space: std_srvs/Empty類型,允許用戶清除未知區域地圖。 * clear_costmaps: std_srvs/Empty類型,允許用戶清楚代價地圖上的障礙物。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看