<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 4.4 Action ## 4.4.1 簡介 Actionlib是ROS中一個很重要的庫,類似service通信機制,actionlib也是一種請求響應機制的通信方式,actionlib主要彌補了service通信的一個不足,就是當機器人執行一個長時間的任務時,假如利用service通信方式,那么publisher會很長時間接受不到反饋的reply,致使通信受阻。當service通信不能很好的完成任務時候,actionlib則可以比較適合實現長時間的通信過程,actionlib通信過程可以隨時被查看過程進度,也可以終止請求,這樣的一個特性,使得它在一些特別的機制中擁有很高的效率。 ## 4.4.2 通信原理 > Action的工作原理是client-server模式,也是一個雙向的通信模式。通信雙方在ROS Action Protocol下通過消息進行數據的交流通信。client和server為用戶提供一個簡單的API來請求目標(在客戶端)或通過函數調用和回調來執行目標(在服務器端)。 工作模式的結構示意圖如下: ![](https://img.kancloud.cn/e9/d7/e9d76507ebb6d7f35ff22128e8dae2d1_1010x353.png) 通信雙方在ROS Action Protocal下進行交流通信是通過接口來實現,如下圖: ![](https://img.kancloud.cn/91/f4/91f4748207c3a75df31db84654d1270b_415x170.png) 我們可以看到,客戶端會向服務器發送目標指令和取消動作指令,而服務器則可以給客戶端發送實時的狀態信息,結果信息,反饋信息等等,從而完成了service沒法做到的部分. ## 4.4.3 Action 規范 利用動作庫進行請求響應,動作的內容格式應包含三個部分,目標、反饋、結果。 * 目標 機器人執行一個動作,應該有明確的移動目標信息,包括一些參數的設定,方向、角度、速度等等。從而使機器人完成動作任務。 * 反饋 在動作進行的過程中,應該有實時的狀態信息反饋給服務器的實施者,告訴實施者動作完成的狀態,可以使實施者作出準確的判斷去修正命令。 * 結果 當運動完成時,動作服務器把本次運動的結果數據發送給客戶端,使客戶端得到本次動作的全部信息,例如可能包含機器人的運動時長,最終姿勢等等。 ## 4.4.4 Action規范文件格式 Action規范文件的后綴名是.action,它的內容格式如下: # Define the goal uint32 dishwasher_id # Specify which dishwasher we want to use --- # Define the result uint32 total_dishes_cleaned --- # Define a feedback message float32 percent_complete ## 4.4.5 Action實例詳解 Actionlib是一個用來實現action的一個功能包集。我們在demo中設置一個場景,執行一個搬運的action,搬運過程中客戶端會不斷的發回反饋信息,最終完成整個搬運過程. 本小節的演示源碼在課程的演示代碼包里,[此處為鏈接](https://github.com/sychaichangkun/ROS-Academy-for-Beginners). 首先寫handling.action文件,類比如上的格式.包括三個部分,目標,結果,反饋.如下: # Define the goal uint32 handling_id --- # Define the result uint32 Handling_completed --- # Define a feedback message float32 percent_complete 寫完之后修改文件夾里CmakeLists.txt如下內容: 1. find_package(catkin REQUIRED genmsg actionlib_msgs actionlib) 2. add_action_files(DIRECTORY action FILES DoDishes.action) generate_messages(DEPENDENCIES actionlib_msgs) 3. add_action_files(DIRECTORY action FILES Handling.action) 4. generate_messages( DEPENDENCIES actionlib_msgs) 修改package.xml,添加所需要的依賴如下: 1. `<build_depend>actionlib </build_depend> ` 2. `<build_depend>actionlib_msgs</build_depend>` 3. `<run_depend>actionlib</run_depend> ` 4. `<run_depend>actionlib_msgs</run_depend>` 然后回到工作空間 `catkin_ws`進行編譯. 本例中設置的的action,定義了一個搬運的例子,首先寫客戶端,實現功能發送action請求,包括進行目標活動,或者目標活動.之后寫服務器,實驗返回客戶端活動當前狀態信息,結果信息,和反饋信息.從而實現action.本例測試結果截圖如下: ![](https://img.kancloud.cn/96/64/9664064787b06a97c45d9d08c0253b7a_765x95.png) ![](https://img.kancloud.cn/dd/6c/dd6cd1049d180c71c85d05e4a2412002_653x58.png) ![](https://img.kancloud.cn/25/c8/25c8ac446a32717fc045b2d30a51e107_797x314.png) ![](https://img.kancloud.cn/6e/25/6e257427da4b6d57fb6f32aedf3c82a5_613x60.png) ## 小結 至此,ROS通信架構的四種通信方式就介紹結束,我們可以對比學習這四種通信方式,去思考每一種通信的優缺點和適用條件,在正確的地方用正確的通信方式,這樣整個ROS的通信會更加高效,機器人也將更加的靈活和智能。機器人學會了通信,也就相當于有了“靈魂”。
                  <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>

                              哎呀哎呀视频在线观看