ROSは、はじめに:サービスを

クライアントに戻る結果、サーバーの追加の実装

クライアントは、二つの数を計算し、サービスに発行されるようになります。

1.カスタムサービスデータ

AddTwoInts.srv:SRVファイルを作成します

int64型
Int64のB
 --- 
Int64の合計

上記データ要求で、以下は---によって分離されたレスポンスデータであります

package.xmlのファイルを開き、追加

<build_depend> message_generation </ build_depend> 
<build_export_depend> message_generation </ build_export_depend> 
<exec_depend> message_runtime </ exec_depend>

CMakeLists.txtにファイルを開きます。

find_package(尾状花必要なコンポーネント
  message_generationの
  roscpp 

add_service_files(FILES 
  AddTwoInts.srv 

 

2.サーバコード

#include " ROS / ros.h " 
の#include " learning_server / AddTwoInts.h " 
// サービス回调函数输入RESはREQの输出
BOOL追加(learning_server :: AddTwoInts ::リクエスト&reqは、
         learning_server :: AddTwoInts ::レスポンスRES)
{ 
    res.sum = req.a + req.b。
    返す ;             
} 

int型のmain(int型 ARGC、チャー ** ARGV)
{ 
    // ROS节点初始化 
    ROS :: INIT(ARGC、ARGV、" add_server " )。

    //ノードハンドル作成
    ROS :: NodeHandle N-を; 

    // サーバーの名前add_two、登録されたコールバック関数の追加()を作成 
    ROS :: ServiceServerサービス= n.advertiseService(add_two 、[追加]を); 

    // に似たコールバック関数、待ちますポーリング方式
    ROS ::スピン(); 

    戻り 0 ; 

}

3.クライアントコード

#include <cstdlib> 
の#include " ROS / ros.h " 
の#include " learning_server / AddTwoInts.h " 

INTメイン(int型 ARGC、CHAR * ARGV [])
{ 
    // ROSノード初期化 
    ROS :: INIT(ARGC、ARGV、" add_client " ); 

    IF(ARGC =!3。 
    { 
        リターン 1 ; 
    } 
    // ノードハンドルの作成
    、ROS :: N-NodeHandle 

    // 、要求サービス・クライアントを作成し 
    、ROSを:: ServiceClientクライアント= n.serviceClient <learning_server :: AddTwoIntsを>("add_two " ); 

    //は、サービスの種類のSRVカスタム作成
    learning_server :: AddTwoIntsのSRVを、
    srv.request.a =環礁(ARGV [ 1 ]); 
    srv.request.b =環礁(ARGV [ 2 ]); 

    // リリースサービス要求、プロセスの遮断が発生する可能性が
    IF (Client.call(SRV))
    { 
        ROS_INFO(" SUM:%のLD "ロング INT )srv.response.sum); 
    } 
    
    { 
        ROS_ERROR(" Faile " );
         リターン 1。; 
    } 

    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/penuel/p/11344258.html
おすすめ